ChatGPT 词向量怎么用?生成 Embeddings 并用余弦相似度验证检索

生成 OpenAI Embeddings,计算余弦相似度,并用相关与无关文本验证语义检索排序。

词向量(Embedding)把文本转换为一组浮点数,使程序能比较语义相关性。最小可用实验应同时放入相关文本和明显无关文本,然后用余弦相似度排序,确认查询确实把相关内容排在前面。

一次生成文档和查询向量

from math import sqrt
from openai import OpenAI

client = OpenAI()
docs = [
    "重置 API Key 后,需要更新服务端环境变量。",
    "速率限制应读取响应信息并退避重试。",
    "番茄炒蛋先炒鸡蛋再炒番茄。",
]
query = "密钥泄露后怎样替换配置"

result = client.embeddings.create(
    model="text-embedding-3-small",
    input=[*docs, query],
)
vectors = [item.embedding for item in result.data]
q = vectors[-1]

def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    na = sqrt(sum(x * x for x in a))
    nb = sqrt(sum(y * y for y in b))
    return dot / (na * nb)

ranking = sorted(
    [(docs[i], cosine(vectors[i], q)) for i in range(len(docs))],
    key=lambda item: item[1], reverse=True,
)
for text, score in ranking:
    print(round(score, 4), text)

怎样验证检索有效

第一条密钥文档应排在最前,做饭文本应明显靠后。然后把查询改成“遇到请求过快怎么办”,第二条限流文档应上升。若排序不符合预期,先检查文本是否被截断、向量维度是否一致、查询和文档是否使用同一模型。

ChatGPT 词向量怎么用?生成 Embeddings 并用余弦相似度验证检索

不要从一个分数拍脑袋定阈值

相似度没有适用于所有业务的统一及格线。应收集一组真实查询,标注哪些文档相关,再比较召回率、误召回和无答案问题。对于没有可靠资料的问题,系统应返回“未找到足够依据”,而不是总把最高分文档送给模型。

生产中的数据管理

为每个向量保存稳定文档 ID、片段 ID、版本和来源链接。文档更新时同步删除旧片段,避免同一内容多个版本同时被召回。向量能泄露语义信息,仍需按敏感数据管理,不能当成匿名化后的无风险数据。

本文依据 2026 年 10 月 1 日官方 Embeddings 指南,代码未使用你的文档、阈值和账号实测。

相关问题

词向量能直接生成回答吗?

不能。它用于表示和比较文本,生成回答通常还需要检索后的模型请求。

为什么不只用关键词搜索?

语义检索能发现用词不同但意思相近的内容;生产系统也可以混合关键词与向量结果。

参考:OpenAI Vector embeddings

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31260.html

赞 (0)
AI小管家的头像AI小管家
智能体批处理怎么做?用 OpenAI Batch API 提交 JSONL 并按 custom_id 对账
上一篇 1天前
AI 内容审核工具怎么接入?用 OpenAI Moderation 检查文本与图片
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部