通用大模型再强,也不知道你公司的产品手册、客服记录、内部规范。把私有知识「喂」给它的标准做法叫 RAG(检索增强生成):先检索相关资料,再把资料塞进提示词,让模型基于资料作答。
整套流程四步,下面逐一拆。

一、文档切分:别一刀切
- 固定 500 字硬切最容易把一句话拦腰截断,召回时上下文残缺;
- 优先按标题/段落语义切,chunk 之间留 overlap(重叠区),避免边界信息丢失;
- 表格、代码块单独处理,别和普通段落混切。
二、向量化:选 embedding + 向量库
用 embedding 模型把每段文字变成向量,存进向量库(轻量用 pgvector,规模大用 Milvus / 专用向量引擎)。这一步决定「能不能找到」。
三、检索:召回 + 重排
先用向量召回 top-k 候选,再用轻量 rerank 模型对候选重排序,把最相关的顶上去。检索质量直接决定回答上限——召回错了,生成再好也白搭。
四、生成:把上下文喂给大模型
把检索到的片段拼进提示词,并明确要求「仅依据资料作答、资料没有就说未知」,用引用约束来压幻觉。最小实现:
# 最小 RAG 检索+生成(伪代码,模型调用走统一接入层)
chunks = split_document(doc, size=512, overlap=64) # 1. 切分
vectors = embed(chunks) # 2. 向量化
index.add(vectors, chunks)
query_vec = embed(user_question)
hits = index.search(query_vec, top_k=5) # 3. 检索(可加 rerank)
context = "
---
".join(h["text"] for h in hits)
prompt = f"""仅根据以下资料回答,资料中没有就答「未知」:
{context}
问题:{user_question}"""
answer = llm.call(prompt) # 4. 生成(引文约束防幻觉)
五、三个最常见的坑
- 切分粒度:太粗召回噪声大,太细语义碎,靠业务文档试出来最准;
- 检索质量:先优化检索再怪模型,多数「答非所问」其实是没召回对;
- 幻觉:靠「引文约束 + 显式未知」缓解,关键场景人工复核。
代码里那句 llm.call,背后就是模型接入层。想少管密钥、自由换模型,见 《多模型统一接入层实战》;近期模型能力对比可看 《9 月大模型混战》。
搭 RAG 不需要从零对接每家模型。在 拓瑞智能 trui88.com 一把 API Key 调通 GPT-6、Claude、DeepSeek,embedding 和生成模型一个后台统一切换,按用量计费。注册即送体验额度,先拿一份产品手册跑通再说。
发表回复