先看效果
问 ChatGPT 一个公司内部政策,它可能乱编。但用 RAG,它会说:"根据公司《员工手册》第三章第二条,年假需提前三天申请。"并附上引用。这就是 RAG 的威力——让大模型基于你的资料回答,不瞎编。
RAG 是什么?
RAG 全称 Retrieval-Augmented Generation,即检索增强生成。简单说:给大模型配一个知识库,回答前先去库里找相关文档,再基于这些文档生成答案。
传统大模型靠训练时的记忆回答,遇到没见过的内容就"幻觉"乱编。RAG 相当于开卷考试,模型可以查资料,答案有据可查。
原理:三步走
- 索引:把文档(PDF、网页、笔记等)切碎,转成向量存入数据库。
- 检索:用户提问时,把问题转成向量,到数据库里找最相似的几个片段。
- 生成:把问题和检索到的片段一起喂给大模型,让它基于这些内容回答。
关键点:向量检索让机器理解语义,不是简单关键词匹配。比如搜"怎么请假",能匹配到"年假申请流程"。
适用场景
- 企业内部知识库:员工问政策,AI 引用 HR 文档回答。
- 客服机器人:基于产品手册回答,减少错误。
- 学习助手:基于教材或笔记回答问题,不跑偏。
- 法律/医疗咨询:需要引用法条或临床指南的场景。
不适合:需要模型发挥创造力的场景(写诗、头脑风暴),因为 RAG 限制模型只能基于资料。
普通用户如何低成本搭建?
不用写代码,用开源工具 10 分钟搞定。
方案一:AnythingLLM(最推荐)
AnythingLLM 是一个桌面应用,支持 Windows/Mac/Linux,内置 RAG 功能。
- 下载安装 AnythingLLM。
- 选择本地模型(如 Ollama 上的 Llama 3)或远程 API(如 OpenAI)。
- 上传文档(PDF、TXT、Markdown 等),自动建立索引。
- 开始聊天,AI 会自动检索并引用来源。
效果:你问"我们的退款政策是什么?",它会回答"根据《退款政策》第2条,30天内可全额退款。"并显示来源文档。
方案二:Ollama + LangChain(更灵活)
适合有编程基础的朋友,用 Python 脚本。
# 安装依赖
pip install langchain chromadb ollama
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.llms import Ollama
from langchain.chains import RetrievalQA
# 加载文档
from langchain.document_loaders import TextLoader
loader = TextLoader('your_doc.txt')
documents = loader.load()
# 切分文档
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(documents)
# 创建向量库
embeddings = OllamaEmbeddings(model='llama3')
vectorstore = Chroma.from_documents(texts, embeddings)
# 创建检索问答链
llm = Ollama(model='llama3')
qa = RetrievalQA.from_chain_type(llm=llm, chain_type='stuff', retriever=vectorstore.as_retriever())
# 提问
result = qa.run('我们的退款政策是什么?')
print(result)
跑通后,你就能用自己的文档和本地模型问答了。
注意事项
- 文档质量:垃圾进垃圾出,确保文档内容准确。
- 分块大小:块太小丢失上下文,块太大检索不精确,一般 500-1000 字符。
- 模型选择:小模型(如 Llama 3 8B)也能用,但大模型(如 GPT-4)效果更好。
- 隐私:本地部署避免数据外泄,适合敏感文档。
总结
RAG 是让大模型靠谱的实用技术。它原理不复杂,工具也成熟了。现在动手,给自己搭一个专属知识库问答机器人,让 AI 只认你的资料说话。
