1. 项目概述
这个10万文档规模的RAG(检索增强生成)实战项目,是我在过去半年里为一个金融知识库系统实施的完整解决方案。从最初的Demo验证到最终生产环境部署,踩过不少坑也积累了大量实战经验。不同于市面上那些只讲概念的教程,本文将完整呈现从零搭建到优化落地的全流程细节。
RAG技术本质上是通过向量检索从知识库中获取相关信息,再交给大模型生成回答。但在实际落地时,文档预处理、向量化策略、检索优化等每个环节都会遇到意想不到的挑战。特别是在处理10万级文档时,简单的Demo方案会完全失效——检索延迟可能从毫秒级暴增到秒级,准确率也会因为数据分布问题大幅下降。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计
2.1 技术选型考量
在架构设计阶段,我们对比了多种技术组合。最终方案的核心组件包括:
- 向量数据库:选用Milvus而非Pinecone或Weaviate。虽然部署复杂度略高,但开源可控且支持分布式扩展,实测在10万文档下P99延迟<200ms
- Embedding模型:采用bge-small-zh-v1.5中文模型,在精度和性能间取得平衡(768维向量,单个文档编码约15ms)
- 大模型:初期用ChatGLM3-6B验证流程,生产环境切换至GPT-4-32k处理长上下文
- 框架层:基于LangChain构建但做了深度定制,原生RAGPipeline在批量处理时内存管理有问题
关键决策点:生产环境必须考虑多租户隔离。我们在Milvus上通过collection分区实现,相比单纯的向量过滤有10倍以上的检索性能提升
2.2 数据处理流水线
处理10万文档不能简单用for循环,必须设计批处理流水线:
python复制def process_documents():
# 第一阶段:文档拆分
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\n", "\n", "。", "!", "?"]
)
# 第二阶段:并行编码
with ThreadPoolExecutor(8) as
