v0.2.0
📦 v0.2.0 - RAG 知识库模块完整实现
🎯 版本概述
v0.2.0 版本完成了 第 2 阶段:RAG 知识库模块(向量库 + Retrievers + RAG Agent) 的全部开发,实现了一个功能完整、生产可用的 RAG(Retrieval-Augmented Generation)系统。
✨ 核心特性
1. 📄 多格式文档加载系统
- 支持 5 种文档格式:PDF、Markdown、TXT、HTML、JSON
- 单文件加载和目录批量加载
- 自动格式检测和元数据提取
- 完善的错误处理机制
2. ✂️ 智能文本分块
- 4 种分块策略:
- RecursiveCharacterTextSplitter(递归字符分块,推荐)
- CharacterTextSplitter(简单字符分块)
- MarkdownTextSplitter(Markdown 专用)
- TokenTextSplitter(Token 分块)
- 可配置的分块参数(chunk_size、chunk_overlap)
- 分块统计和分析功能
3. 🔢 向量化与向量存储
- OpenAI Embeddings 封装(text-embedding-3-small/large)
- FAISS 高性能向量库支持
- InMemoryVectorStore 支持
- 向量库的创建、保存、加载、更新
- 成本估算功能
4. 🗂️ 索引管理系统
- 统一的索引管理接口(IndexManager)
- 索引的 CRUD 操作
- JSON 格式的元数据管理
- 索引列表和统计信息
- 智能增量更新:自动跟踪已索引文件,仅处理新文档
5. 🔍 多策略检索器
- 3 种检索策略:
- Similarity(相似度检索)
- MMR(最大边际相关性)
- Similarity Score Threshold(阈值过滤)
- 检索器封装为 LangChain Tool
- 检索结果测试和验证
6. 🤖 RAG Agent 智能问答
- 基于 LangChain 1.0.3 最新 API(
create_agent) - 集成 retriever tool 实现知识库问答
- 支持流式和非流式输出
- 自动引用来源文档
- 对话历史支持
- 专用的 RAG 提示词优化
7. 🌐 HTTP API 接口
- 完整的 RESTful API(FastAPI)
- 8 个核心端点:
POST /rag/index- 创建索引GET /rag/index/list- 列出索引GET /rag/index/{name}- 获取索引信息DELETE /rag/index/{name}- 删除索引POST /rag/query- RAG 查询POST /rag/query/stream- 流式查询POST /rag/search- 纯检索GET /rag/health- 健康检查
- Pydantic 模型验证
- SSE 流式响应支持
- 自动生成 Swagger UI 文档
8. 💻 CLI 命令行工具
- 基于 Click 框架的友好命令行界面
- Rich 库美化输出(表格、进度条、彩色文本)
- 完整的命令集:
index create/list/info/delete- 索引管理query- RAG 查询search- 纯检索interactive- 交互式问答模式
- 详细的帮助信息和错误提示
9. 🔄 智能索引更新工具
update_index.py脚本实现智能增量更新- 自动跟踪已索引文件(
tracked_files.json) - 仅处理新增文档,避免重复索引
- 支持
--rebuild选项强制重建索引 - 详细的更新日志和统计信息
🛠️ 技术实现
LangChain 1.0.3 兼容性
- ✅ 使用最新的
create_agentAPI 替代已弃用的create_tool_calling_agent - ✅ 正确的导入路径:
langchain_core.tools.retriever - ✅ Agent 输入格式适配:
{"messages": [...]} - ✅ 流式输出处理优化
模块化架构
backend/rag/
├── loaders.py # 文档加载器(~350 行)
├── splitters.py # 文本分块器(~350 行)
├── embeddings.py # Embeddings 封装(~250 行)
├── vector_stores.py # 向量存储(~350 行)
├── index_manager.py # 索引管理器(~400 行)
├── retrievers.py # 检索器(~350 行)
└── rag_agent.py # RAG Agent(~350 行)
代码质量
- 详细的中文注释(每个函数、类都有完整文档字符串)
- 遵循 PEP 8 代码规范
- 完整的类型提示
- 多层次的异常处理
- 详细的日志记录(loguru)
📦 新增依赖
langchain-text-splitters>=0.3.5
faiss-cpu>=1.9.0
pypdf>=5.1.0
unstructured>=0.16.14
markdown>=3.7
beautifulsoup4>=4.12.3
lxml>=5.3.0
python-multipart>=0.0.20
aiofiles>=24.1.0
click>=8.1.8
rich>=13.9.4
📖 文档更新
新增文档
docs/stage_02/STAGE2_PLAN.md- 详细的开发计划docs/stage_02/README.md- 完整的使用指南(517 行)docs/stage_02/LEARNING_SUMMARY.md- 学习总结和知识点docs/stage_02/STAGE2_COMPLETION.md- 完成报告(490 行)docs/stage_02/LANGCHAIN_1.0.3_FIXES.md- API 兼容性修复说明docs/stage_02/QUICK_FIX.md- 快速修复指南docs/stage_02/INDEX_UPDATE_GUIDE.md- 索引更新详细指南(731 行)docs/stage_02/FINAL_FIX_SUMMARY.md- 最终修复总结
测试文档
data/documents/test/machine_learning.md- 机器学习基础(~3000 字)data/documents/test/deep_learning.md- 深度学习入门(~4000 字)data/documents/test/python_basics.txt- Python 编程基础(~3000 字)data/documents/test/neural_networks.md- 神经网络介绍
🚀 快速开始
# 1. 安装依赖
cd backend
pip install -r requirements.txt
# 2. 配置环境变量
echo "OPENAI_API_KEY=your_key_here" > .env
# 3. 创建索引
python scripts/rag_cli.py index create test_index data/documents/test
# 4. 查询
python scripts/rag_cli.py query test_index "什么是机器学习?"
# 5. 交互模式
python scripts/rag_cli.py interactive test_index
# 6. 启动 API 服务器
python api/http_server.py🧪 测试验证
- ✅ 文档加载正常(PDF、Markdown、TXT、HTML、JSON)
- ✅ 文本分块正常(4 种策略)
- ✅ Embeddings 创建成功
- ✅ 向量库创建、保存、加载成功
- ✅ 索引管理功能完整
- ✅ 检索功能准确
- ✅ RAG Agent 回答准确并引用来源
- ✅ API 接口正常(包括流式输出)
- ✅ CLI 工具功能完整
- ✅ 智能增量更新正常
🎓 学习要点
LangChain 核心概念
- Document Loaders - 文档加载和元数据管理
- Text Splitters - 文本分块策略和参数调优
- Embeddings - 向量化模型的选择和使用
- Vector Stores - 向量数据库的操作和持久化
- Retrievers - 检索策略和优化
- RAG Pattern - RAG 模式的实现和最佳实践
- Tool Integration - 将 Retriever 集成到 Agent
RAG 最佳实践
- 文本分块策略选择(chunk_size: 1000, overlap: 200)
- Embedding 模型选择(small vs large)
- 检索优化(相似度搜索 vs MMR vs 阈值过滤)
- 上下文管理(控制检索到的文档数量)
- 来源引用(在回答中引用来源文档)
- 性能优化(批处理、FAISS 索引)
🐛 已知问题修复
-
LangChain 1.0.3 API 兼容性
- 修复
create_tool_calling_agent已弃用问题 - 修复
langchain.tools.retriever导入路径问题 - 修复 Agent 输入格式问题
- 修复
-
依赖管理
- 修复
unstructured模块导入问题 - 修复
faiss-cpu安装问题 - 修复
rich和click缺失问题
- 修复
-
Pydantic 类型错误
- 修复
IndexInfo模型中any类型定义错误
- 修复
📊 代码统计
- 新增代码:约 3,500 行(不含注释和空行)
- 文档:约 2,500 行
- 测试数据:4 个文档,约 13,000 字
- 新增文件:20+ 个
🔗 相关链接
🙏 致谢
感谢 LangChain 社区提供的优秀框架和文档!
完整变更日志: v0.1.0...v0.2.0