01 它是干嘛的
这套能力属于「检索增强生成(RAG)」:先把你的文档切成小块、翻译成一串串代表含义的数字(向量)存起来;提问时找出意思最接近的几块,连同问题一起交给模型回答。它解决的是模型「不知道自己没见过的东西」这个根本问题。
02 为什么会有它
为什么 AI 对你的公司文档一问三不知
大模型的全部知识都来自它训练时读过的公开文本,以及它一次请求能看到的那些内容。它从没见过你公司的内部制度、产品手册、客户记录。你问它「我们公司年假怎么算」,它要么老实说不知道,要么更糟——煞有介事地编一个听起来很像的答案。
有人想了个笨办法:把整本手册全部塞进问题里让它读。但模型一次能看的内容是有限的(上下文窗口),手册一厚就塞不下;就算塞得下,太长也会让它抓不住重点,而且按 token 计费,每次都把整库资料发一遍,成本高得离谱。
这就好比你去图书馆问一个问题,管理员却把整座图书馆的书推到你面前。你真正需要的是有人先帮你从成千上万本书里,翻出和问题最相关的那么几页。RAG(检索增强生成)做的就是这件事:先检索,再回答。
03 它怎么工作
核心是把「找资料」和「回答问题」分成两步:先用向量检索从海量文档里捞出最相关的几段,再把这几段连同问题一起交给模型作答。检索负责找,模型负责说。
RAG 是怎么让模型「看到」你的资料的
- 1① 切块
把你的文档切成一段段大小合适的小块,太长不好精确定位,太短又会丢失上下文。
- 2② 向量化
给每一块算出一串数字(向量),这串数字代表它的「意思」;意思相近的内容,算出来的数字也彼此靠近。
- 3③ 存储
把这些「数字 + 原文」存进向量数据库,就像给每块内容建了一个按含义排序的索引。
- 4④ 相似度检索
用户提问时,同样把问题变成一串数字,然后去找数据库里和它最接近的若干块,这就是「按意思找」而不是「按关键词找」。
- 5⑤ 拼进提示词并回答
把检索到的原文和用户问题一起交给模型,并明确告诉它「只根据这些资料回答」,模型据此给出有依据的答案。
04 谁在用它
让 AI 基于公司制度、流程文档回答员工提问,答案还能附上出处。
接入产品手册与历史工单,回答客户问题时引用准确内容,而不是凭记忆。
这些需要「有据可查」的领域,先检索权威资料再作答,能显著降低瞎编风险。
把一批合同、报告、论文做成能对话的知识库,按意思搜索而非关键词匹配。
用户搜「怎么退款」,能匹配到写着「申请退货流程」的文档,即使字面完全不同。
05 怎么用
需要写一点代码,但平台提供了托管式的文件检索功能,能省掉自己搭向量数据库的麻烦。
- 01先决定方案:用平台托管的文件检索(省事),或自己接向量模型加向量数据库(更可控)。
- 02把文档按语义切成小块,尽量避免把完整的一段意思切成两半。
- 03对每个小块调用嵌入接口得到向量,存进向量数据库,并记录对应的原文。
- 04用户提问时,先算出问题的向量,检索出最相近的几块。
- 05把检索结果和问题拼成提示词交给模型,并要求它标注依据、不确定就说不确定。
- 06上线后持续观察:如果老是答不好,往往是切块或检索的质量不够,而不是模型不行。
from openai import OpenAI
client = OpenAI()
# 1) 把文本变成向量(一串代表含义的数字)
def embed(text: str):
r = client.embeddings.create(model="text-embedding-3-small", input=text)
return r.data[0].embedding
# 2) 建库:把每个文档块向量化后存起来(这里用内存列表示意)
chunks = ["年假按入职年限计算", "报销需在次月十号前提交"]
store = [(c, embed(c)) for c in chunks]
# 3) 检索:把问题也变成向量,找出最接近的一块
q = embed("休假制度是怎样的")
best = max(store, key=lambda item: cosine(q, item[1])) # cosine 为余弦相似度函数
print(best[0])避坑提示
- !切块策略直接影响效果:按标题、段落切通常比按固定字数硬切更合理。
- !「按意思找」有时会漏掉字面不同但关键的内容,可以把它和关键词搜索混着用。
- !让模型「只根据资料回答,资料里没有就说不知道」,是防止它瞎编的关键一句。
- !资料更新后要重新向量化入库,否则检索到的还是旧内容。
06 关键概念
- 向量嵌入(Embedding)
- 把一段文字变成一串数字,意思越接近,数字也越接近,让计算机能「按意思比较」。
- 向量数据库
- 专门存这些数字,并支持「找出最接近的几条」的数据库。
- RAG(检索增强生成)
- 先检索资料、再让模型据此作答的整套方法。
- 语义搜索
- 按意思而不是按关键词匹配的搜索方式,换个说法也能搜到。