大语言模型能写诗、写代码、通过律师考试,却会在一个简单问题上栽跟头:你们公司CEO是谁?

没有内部数据支撑,GPT-4也会一本正经地胡说八道。这就是生成式AI的致命软肋——幻觉。RAG(检索增强生成)的出现,正是为了解决这个痛点。它不是让模型死记硬背更多知识,而是在回答问题前,先去查资料。

打开网易新闻 查看精彩图片

流程变了:用户提问→检索相关文档→把资料塞进上下文→让模型基于事实作答。结果是答案更准确、可追溯、适合企业部署。本文将用LangChain+Milvus+Azure OpenAI,搭建一套完整的生产级RAG流水线。

一、文档处理:从PDF到结构化数据

LangChain用Document对象统一存储文档,包含两个字段:page_content放正文,metadata放来源信息。后者在企业场景至关重要——用户追问"这个结论出自哪份文件第几页"时,metadata里的文件名、作者、页码就是答案。

代码示例:

from langchain_core.documents import Document

doc = Document(
page_content="生成式AI是人工智能的一个子集,专注于内容创作。",
metadata={"source": "genai.pdf", "author": "Sridhar", "pages": 10}
)

二、完整架构:九步流水线

企业级RAG不是简单的"向量搜索+大模型",而是一套精密分工的系统:

1. 文档加载(PDF/DOCX/TXT)
2. 分块(Chunking)
3. 嵌入(Embeddings)
4. 向量数据库(Milvus)
5. 相似度搜索
6. 重排序(Reranking)
7. 上下文构建
8. 大模型生成
9. 监控与评估

重排序是关键优化点。初检可能召回100个片段,重排序模型再挑出最相关的5个给LLM,既省token又提质量。

三、环境配置与依赖

核心依赖清单:

pip install langchain langchain-community langchain-core langchain-openai
pip install langchain-text-splitters langchain-nvidia-ai-endpoints
pip install pymilvus pymupdf pypdf
pip install langfuse python-dotenv

NVIDIA提供重排序端点,Milvus负责向量存储,Langfuse做全流程监控。API密钥统一放.env文件,禁止硬编码。

项目结构建议:

project/
├── data/pdf/ & data/text/
├── .env(密钥配置)
├── rag_pipeline.py
└── requirements.txt

四、为什么这套方案能落地

开源方案常卡在三个环节:文档格式混乱、检索精度不够、无法追溯来源。LangChain的标准化Document解决了格式问题;Milvus+重排序解决精度问题;metadata机制解决溯源问题。配合Azure OpenAI的企业级SLA,这套组合已经能支撑生产环境的客服、知识库、合规审查等场景。

下一步:加载真实PDF,切分策略调优,以及用Langfuse追踪每次检索-生成的完整链路。