OpenAI Embeddings 入门:向量检索最小可行流程
说明 embeddings 是什么、和聊天 API 的区别,以及语义搜索 / RAG 的最小流程、适用场景与常见误区。
- 作者
- ChatGPT博客编辑部
- 发布时间
- 阅读时长
- 约 3 分钟阅读
这篇解决什么: 如何用 Embeddings 做语义相似与简易检索,而不是再写一个聊天机器人。
适合谁: 要做知识库问答、相似推荐、去重的开发者。
一句话: Embeddings ≠ chatbot——它把文本变成向量,方便「算相近」,本身不负责多轮闲聊。
上次核对:模型名与维度以 platform.openai.com 当前 Embedding 模型列表为准(2026-09-18)。
它在系统里站哪一层
文档切片 → Embedding API → 向量存储
用户问题 → Embedding API → 近邻检索 → (可选)再交给 Chat/Responses 生成回答
对话补全见 API 入门 或 Responses。本页只覆盖「向量这一跳」。
最小可行流程
1. 选任务,而不是先选数据库
| 任务 | Embeddings 是否值得 |
|---|---|
| 「这段和那份文档像不像」 | 值得 |
| 知识库问答(先找片段再生成) | 通常值得 |
| 只要翻译/改写一封邮件 | 不需要 embeddings |
| 精确关键字过滤(订单号、SKU) | 先用普通检索/SQL |
2. 切片(Chunk)
- 按标题/段落切,避免把整本手册塞进一个向量。
- 记录
source_id、标题、偏移,方便引用回原文。 - 切片过大:检索噪声;过小:丢失上下文——用你的语料试 200–800 字量级起步(经验起点,不是官方定数)。
3. 调用 Embedding(示意)
import OpenAI from 'openai';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function embed(text: string) {
const res = await client.embeddings.create({
model: 'text-embedding-3-small', // 以平台当前模型名为准
input: text,
});
return res.data[0]?.embedding;
}
把返回的 number[] 与元数据一并写入向量库或先用内存/ SQLite 做 PoC。
4. 相似度与检索
- 常用余弦相似度(cosine)。
- 查询时:问题 → embedding → Top-K 近邻 → 把片段交给生成模型(可选)。
- 生成模型仍会编造:检索只降低胡说概率,不取消人工核对。
RAG 里它负责什么、不负责什么
| 负责 | 不负责 |
|---|---|
| 语义召回相关片段 | 保证答案事实正确 |
| 降低「全书塞进 prompt」的成本 | 替代权限与审计 |
| 支持去重、聚类、推荐 | 替代结构化过滤(日期、作者) |
完整 Agent 编排见 Agents;流式与账单见 成本文。
常见误区
- 用聊天模型「假装」检索——长上下文硬塞 ≠ embeddings。
- 不切分就 embed 整库——贵且差。
- 召回了就信——必须带来源;关键数字二次核对。
- 把 embedding 当长期记忆产品功能——产品 Memory 见 ChatGPT Memory,那是另一条意图。
实施检查清单
- 明确「只检索」还是「检索 + 生成」
- 切片策略与元数据字段写进文档
- Key 仅服务端;语料无密钥/身份证
- 评测集:10 个真实问题,看 Top-K 是否命中正确段
- 监控 embedding 调用量与存储体积
相关阅读
使用入口
相关阅读
评论
评论功能即将上线,欢迎先通过关于页联系我们反馈意见。