向量嵌入与文件检索

Embeddings / File Search

先翻你的自家文档再回答,让 AI 不至于对内部资料一问三不知、瞎编答案。

人工智能与模型出现时间 · 2022向量接口按输入 token 计费,价格远低于对话模型;文件检索按存储与调用量计费。向量嵌入RAG检索增强语义搜索
看官方文档

01 它是干嘛的

这套能力属于「检索增强生成(RAG)」:先把你的文档切成小块、翻译成一串串代表含义的数字(向量)存起来;提问时找出意思最接近的几块,连同问题一起交给模型回答。它解决的是模型「不知道自己没见过的东西」这个根本问题。

02 为什么会有它

为什么 AI 对你的公司文档一问三不知

大模型的全部知识都来自它训练时读过的公开文本,以及它一次请求能看到的那些内容。它从没见过你公司的内部制度、产品手册、客户记录。你问它「我们公司年假怎么算」,它要么老实说不知道,要么更糟——煞有介事地编一个听起来很像的答案。

有人想了个笨办法:把整本手册全部塞进问题里让它读。但模型一次能看的内容是有限的(上下文窗口),手册一厚就塞不下;就算塞得下,太长也会让它抓不住重点,而且按 token 计费,每次都把整库资料发一遍,成本高得离谱。

这就好比你去图书馆问一个问题,管理员却把整座图书馆的书推到你面前。你真正需要的是有人先帮你从成千上万本书里,翻出和问题最相关的那么几页。RAG(检索增强生成)做的就是这件事:先检索,再回答。

03 它怎么工作

核心是把「找资料」和「回答问题」分成两步:先用向量检索从海量文档里捞出最相关的几段,再把这几段连同问题一起交给模型作答。检索负责找,模型负责说。

检索增强生成(RAG):让模型先查资料再回答① 相似度检索② 取回最相关的几段用户提问「我们公司的报销标准?」问题向量化把文字变成一串数字向量检索找语义最接近的片段向量库你的文档已提前切块入库拼进提示词原文片段 + 你的问题大模型照着资料作答带出处的回答可以点开原文核对模型本身并不知道你家文档写了什么,是你在提问那一刻把相关片段塞给它看——这就是「开卷考试」。检索环节可核查的结果
整张图分上下两半:上半是「离线建索引」(切块 → 向量化 → 入库),下半是「在线问答」(提问 → 检索 → 拼提示词 → 作答)。要重点看检索这一步先把范围缩小到几块,模型只对着这几块说话,答案有依据才不会瞎编。

RAG 是怎么让模型「看到」你的资料的

  1. 1
    ① 切块

    把你的文档切成一段段大小合适的小块,太长不好精确定位,太短又会丢失上下文。

  2. 2
    ② 向量化

    给每一块算出一串数字(向量),这串数字代表它的「意思」;意思相近的内容,算出来的数字也彼此靠近。

  3. 3
    ③ 存储

    把这些「数字 + 原文」存进向量数据库,就像给每块内容建了一个按含义排序的索引。

  4. 4
    ④ 相似度检索

    用户提问时,同样把问题变成一串数字,然后去找数据库里和它最接近的若干块,这就是「按意思找」而不是「按关键词找」。

  5. 5
    ⑤ 拼进提示词并回答

    把检索到的原文和用户问题一起交给模型,并明确告诉它「只根据这些资料回答」,模型据此给出有依据的答案。

04 谁在用它

企业内部知识库

让 AI 基于公司制度、流程文档回答员工提问,答案还能附上出处。

客服与售后

接入产品手册与历史工单,回答客户问题时引用准确内容,而不是凭记忆。

法律、医疗、金融

这些需要「有据可查」的领域,先检索权威资料再作答,能显著降低瞎编风险。

文档助手

把一批合同、报告、论文做成能对话的知识库,按意思搜索而非关键词匹配。

语义搜索

用户搜「怎么退款」,能匹配到写着「申请退货流程」的文档,即使字面完全不同。

05 怎么用

需要写一点代码,但平台提供了托管式的文件检索功能,能省掉自己搭向量数据库的麻烦。

  1. 01先决定方案:用平台托管的文件检索(省事),或自己接向量模型加向量数据库(更可控)。
  2. 02把文档按语义切成小块,尽量避免把完整的一段意思切成两半。
  3. 03对每个小块调用嵌入接口得到向量,存进向量数据库,并记录对应的原文。
  4. 04用户提问时,先算出问题的向量,检索出最相近的几块。
  5. 05把检索结果和问题拼成提示词交给模型,并要求它标注依据、不确定就说不确定。
  6. 06上线后持续观察:如果老是答不好,往往是切块或检索的质量不够,而不是模型不行。
把一句话变成向量,并按含义查找最接近的片段python
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(检索增强生成)
先检索资料、再让模型据此作答的整套方法。
语义搜索
按意思而不是按关键词匹配的搜索方式,换个说法也能搜到。

07 容易混淆的对比

直接把文档塞进上下文省事,但受上下文长度限制、贵,且文档一多模型容易抓不住重点。
关键词搜索(传统全文检索)快且精确,但换个说法就搜不到,理解不了同义表达。
图软件图鉴

纯静态站点,无后端、无追踪。内容为中文原创撰写,用于帮助非技术读者理解主流软件产品。

关于本站

全部内容在构建时生成
产品名称与商标归各自公司所有

© 2026 软件图鉴Nuxt 4 · Vue 3 · Tailwind 4 · 纯静态