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

不要从一个分数拍脑袋定阈值
相似度没有适用于所有业务的统一及格线。应收集一组真实查询,标注哪些文档相关,再比较召回率、误召回和无答案问题。对于没有可靠资料的问题,系统应返回“未找到足够依据”,而不是总把最高分文档送给模型。
生产中的数据管理
为每个向量保存稳定文档 ID、片段 ID、版本和来源链接。文档更新时同步删除旧片段,避免同一内容多个版本同时被召回。向量能泄露语义信息,仍需按敏感数据管理,不能当成匿名化后的无风险数据。
本文依据 2026 年 10 月 1 日官方 Embeddings 指南,代码未使用你的文档、阈值和账号实测。
相关问题
词向量能直接生成回答吗?
不能。它用于表示和比较文本,生成回答通常还需要检索后的模型请求。
为什么不只用关键词搜索?
语义检索能发现用词不同但意思相近的内容;生产系统也可以混合关键词与向量结果。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31260.html