2308536f6613404d1bed186fe210711a22d5abb4
AIEC-RAG 智能检索增强生成系统
项目简介
AIEC-RAG 是一个基于 LangChain、LangGraph 和 HippoRAG 架构的企业级智能检索增强生成(RAG)系统。该系统专门针对企业知识库设计,提供高质量的智能问答服务,支持复杂的多跳推理和迭代检索。
核心特性
- 🚀 迭代式检索:基于 LangGraph 的智能迭代检索,自动判断信息充分性
- 🔍 多跳推理:支持复杂的知识图谱推理,处理多步骤问题
- 📊 向量+图谱融合:结合向量检索和知识图谱的混合检索架构
- 🎯 智能查询分解:自动将复杂查询分解为多个子查询并行处理
- 📈 可观测性:集成 LangSmith 提供完整的追踪和监控
- 🔧 灵活配置:支持提示词模板和参数的动态配置
- 🌐 生产就绪:提供 Docker 部署和负载均衡支持
系统架构
用户查询
↓
查询复杂度判断
↓
┌─────────────┬──────────────┐
│ 简单查询 │ 复杂查询 │
│ ↓ │ ↓ │
│ 向量检索 │ 查询分解 │
│ ↓ │ ↓ │
│ 简单回答 │ 并行检索 │
└─────────────┤ ↓ │
│ 充分性检查 │
│ ↓ ↓ │
│ 充分 不充分 │
│ ↓ ↓ │
│ 子查询 │
│ ↓ │
│ 迭代检索 │
└───────┬────────┘
↓
最终答案
快速开始
1. 环境要求
- Python 3.8+
- Elasticsearch 8.x(用于向量存储)
- 至少 8GB RAM
- 推荐 GPU(用于嵌入模型,可选)
2. 安装依赖
# 克隆项目
git clone <repository_url>
cd AIEC-RAG
# 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装依赖
pip install -r requirements-cpu-full.txt
3. 配置环境
创建 .env 文件并配置以下参数:
# API密钥(使用OneAPI或其他兼容接口)
ONEAPI_KEY=your_api_key_here
# 模型配置
ONEAPI_MODEL=qwen2-7b-instruct # 主模型
ONEAPI_MODEL_EMBED=text-embedding-v3 # 嵌入模型
# Elasticsearch配置
ELASTICSEARCH_HOST=http://localhost:9200
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=your_password
# LangSmith配置(可选)
LANGCHAIN_TRACING_V2=false
LANGCHAIN_API_KEY=your_langsmith_key
LANGCHAIN_PROJECT=aiec-rag
4. 配置提示词(可选)
编辑 rag_config_production.yaml 自定义提示词模板:
prompt_templates:
query_decomposition:
enabled: true
default_sub_queries: 2
# template: "自定义提示词..." # 可选
5. 启动服务
# 生产环境启动
python rag_api_server_production.py
# 服务将在 http://localhost:8100 启动
API 使用
基础检索
curl -X POST http://localhost:8100/retrieve \
-H "Content-Type: application/json" \
-d '{
"query": "什么是混沌工程?",
"mode": "0",
"save_output": true
}'
响应格式
{
"success": true,
"query": "什么是混沌工程?",
"answer": "混沌工程是一种...",
"supporting_facts": [
["段落1标题", "段落1内容"],
["段落2标题", "段落2内容"]
],
"supporting_events": [
["事件1", "event_id_1"],
["事件2", "event_id_2"]
],
"metadata": {
"iterations": 2,
"total_passages": 15,
"confidence": 0.85
}
}
Docker 部署
构建镜像
docker build -t aiec-rag:latest .
运行容器
docker run -d \
--name aiec-rag \
-p 8100:8100 \
-v $(pwd)/.env:/app/.env \
-v $(pwd)/rag_config_production.yaml:/app/rag_config_production.yaml \
aiec-rag:latest
Docker Compose(推荐)
version: '3.8'
services:
aiec-rag:
build: .
ports:
- "8100:8100"
env_file:
- .env
volumes:
- ./rag_config_production.yaml:/app/rag_config_production.yaml
- ./api_outputs:/app/api_outputs
restart: unless-stopped
配置说明
检索参数
| 参数 | 说明 | 默认值 |
|---|---|---|
max_iterations |
最大迭代次数 | 2 |
top_k_events |
返回的事件数量 | 10 |
top_k_passages |
返回的段落数量 | 3 |
confidence_threshold |
充分性判断阈值 | 0.7 |
提示词配置
系统支持6种核心提示词的自定义:
- query_complexity_check - 查询复杂度判断
- query_decomposition - 查询分解
- sufficiency_check - 充分性检查
- sub_query_generation - 子查询生成
- simple_answer - 简单答案生成
- final_answer - 最终答案生成
详见 rag_config_production.yaml 配置文件。
性能优化
1. 缓存策略
- 使用 Elasticsearch 的查询缓存
- LangChain 的嵌入缓存
- 提示词模板缓存
2. 并发处理
- 支持并行子查询检索
- 异步处理长时间运行的查询
- 连接池管理
3. 资源限制
# 在配置中设置资源限制
max_parallel_retrievals: 2 # 最大并行检索数
request_timeout: 120 # 请求超时(秒)
max_retries: 3 # 最大重试次数
监控和日志
LangSmith 集成
设置环境变量启用 LangSmith 追踪:
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=your_key
日志配置
日志文件位于 api_outputs/ 目录,包含:
- 查询历史
- 性能指标
- 错误日志
故障排除
常见问题
-
Elasticsearch 连接失败
- 检查 ES 服务是否运行
- 验证连接参数和认证信息
- 确认网络连通性
-
内存不足
- 减少
top_k参数值 - 使用更小的嵌入模型
- 增加系统内存
- 减少
-
响应超时
- 调整
request_timeout参数 - 检查模型响应速度
- 考虑使用更快的模型
- 调整
调试模式
启用调试模式获取详细日志:
# 在请求中设置
{
"query": "...",
"mode": "1" # 启用调试模式
}
项目结构
AIEC-RAG/
├── atlas_rag/ # HippoRAG核心实现
├── elasticsearch_vectorization/ # ES向量化模块
├── retriver/ # 检索器实现
│ ├── langgraph/ # LangGraph工作流
│ └── langsmith/ # LangSmith集成
├── rag_api_server_production.py # 生产服务入口
├── rag_config_production.yaml # 生产配置
├── prompt_loader.py # 提示词加载器
├── requirements.txt # 项目依赖
├── Dockerfile # Docker配置
├── .env.example # 环境变量示例
└── README.md # 本文档
贡献指南
欢迎贡献代码和提出建议!请遵循以下步骤:
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
联系方式
- 项目维护者:[团队名称]
- 邮箱:[contact@example.com]
- 问题反馈:GitHub Issues
致谢
最后更新:2024年9月
Description
Languages
Python
99.8%
Dockerfile
0.2%