RAG 与向量检索
检索增强生成(Retrieval-Augmented Generation,RAG)让模型基于自有知识回答问题:先将文档向量化入库,提问时检索最相关的片段作为上下文,再交给模型生成答案。这是企业知识库、客服问答等场景的标准架构。
整体流程
向量存储:以 Chroma 为例
langchaingo 的 vectorstores 包支持 Chroma、pgvector、Milvus、Redis 等多种后端,接口统一。以 Chroma 为例:
Tip
生产环境向量库选型:已有 PostgreSQL 时优先 pgvector(无需新增基础设施);需要大规模检索或混合过滤时考虑 Milvus、Qdrant;本地实验用 Chroma 最快。
文档加载与切分
真实文档通常很长,必须切分为合适大小的片段(chunk)再入库。langchaingo 提供 documentloaders 与 textsplitter:
Tip
切分参数经验值:chunkSize 取 300–800 字符,chunkOverlap 取 chunk 的 10%–15%。切分过小丢失语义,过大稀释相关性。Markdown/代码文档建议按标题或函数边界自定义切分。
检索问答链
chains.RetrievalQA 将"检索 → 填充 Prompt → 生成答案"封装为一条链:
示例需 import "os"。
完整的 RAG 服务骨架
将索引与问答拆分为两个接口,结合 HTTP 服务与并发能力:
:::warning RAG 工程要点:
- 检索质量决定答案质量:关注召回率(Top-K 是否包含相关片段)与排序效果。
- 答案应附带引用来源(利用片段 Metadata),便于用户核验。
- Embedding 模型与文档语言需匹配,中文场景选择中文友好的向量化模型。
- 索引更新与问答共享向量库时注意并发写入,参考 sync 包。 :::
小结
- RAG = 离线索引(加载 → 切分 → 向量化)+ 在线问答(检索 → 生成)。
vectorstores统一了多后端接口,vectorstores.ToRetriever将存储接入RetrievalQA链。- 切分参数与元数据溯源是 RAG 落地质量的关键工程细节。