一个功能强大的 AI 智能助手,支持知识库管理、多模型对话、混合检索和联网搜索。
- 🤖 多模型支持:支持 OpenAI、Azure OpenAI、硅基流动、阿里百炼、DeepSeek 等多种 LLM
- 📚 知识库管理:支持上传 PDF、DOCX、TXT 文档,自动分块并生成向量索引
- 🔍 混合检索:结合向量检索和 BM25 关键词检索,提高检索准确率
- 🌐 联网搜索:集成 Tavily 搜索,获取最新实时信息,支持对话页开关控制
- 🎯 查询扩展:自动生成查询变体,提高召回率
- 🎨 Streamlit 界面:简洁美观的 Web 界面,支持对话和知识库管理
- 🐳 Docker 部署:使用 Docker Compose 快速部署 Milvus 向量数据库
ademo/
├── backend/
│ ├── main.py # FastAPI 后端服务
│ ├── uploads/ # 上传文件存储目录
│ ├── documents.json # 文档元数据
│ └── bm25_index.json # BM25 索引文件
├── frontend/
│ ├── app.py # Streamlit 主应用
│ ├── chat.py # AI 对话页面
│ ├── knowledge_management.py # 知识库管理页面
│ ├── model_config_page.py # 模型配置页面(LLM/向量)
│ ├── model_config_utils.py # LLM 配置工具
│ ├── embedding_config_utils.py # 向量配置工具
│ ├── model_config.json # 模型配置
│ └── embedding_config.json # 嵌入模型配置
├── .env # 环境变量(不提交)
├── .env.example # 环境变量模板
├── .gitignore # Git 忽略文件
├── requirements.txt # Python 依赖
├── milvus.yml # Docker Compose 配置
└── README.md # 项目说明
- 后端框架:FastAPI
- 前端框架:Streamlit
- 向量数据库:Milvus
- LLM 框架:LangChain
- 关键词检索:BM25 + Jieba 分词
- 联网搜索:Tavily
- Python 3.11+
- Docker & Docker Compose(用于 Milvus)
git clone https://github.com/your-username/ademo.git
cd ademopip install -r requirements.txt复制 .env.example 为 .env 并填写配置:
copy .env.example .env编辑 .env 文件,至少配置以下项:
# 选择一个 LLM 提供商并配置
OPENAI_API_KEY=your_api_key
OPENAI_BASE_URL=https://api.openai.com/v1
# 或使用 Azure OpenAI
AZURE_OPENAI_API_KEY=your_api_key
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_API_VERSION=2024-08-01-preview
AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4o
AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=text-embedding-3-small
# Tavily 联网搜索(可选)
TAVILY_API_KEY=your_tavily_api_key
# Milvus 配置
MILVUS_HOST=localhost
MILVUS_PORT=19530
# 后端地址
API_URL=http://localhost:8000docker-compose -f milvus.yml up -d等待 Milvus 启动完成(约 1-2 分钟)。
cd backend
python main.py后端将在 http://localhost:8000 运行
cd frontend
streamlit run app.py前端将在 http://localhost:8501 运行
- 在左侧选择 "💬 AI对话" 页面
- 在“🤖 模型配置”页面配置模型提供商和模型名称
- 输入问题开始对话
- 可在对话页开启或关闭“联网搜索”
- 如果知识库中有相关内容,会自动引用
- 在左侧选择 "📚 知识库管理" 页面
- 在“🤖 模型配置”页面配置向量/嵌入模型
- 点击 "上传文档" 选择文件(支持 PDF、DOCX、TXT)
- 设置分块大小和重叠大小
- 等待文档处理完成
- 可以查看已上传的文档列表
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | / |
服务状态 |
| GET | /health |
健康检查 |
| GET | /documents |
获取文档列表 |
| POST | /upload |
上传文档 |
| POST | /chat |
AI 对话 |
| DELETE | /documents/{doc_id} |
删除文档 |
{
"messages": [
{"role": "user", "content": "你好"}
],
"system_prompt": "You are a helpful assistant.",
"top_k": 5,
"use_hybrid": true,
"use_query_expansion": true,
"web_search_enabled": true
}{
"response": "你好!有什么我可以帮助你的吗?",
"search_results": [],
"knowledge_sources": [],
"used_knowledge": false
}- OpenAI:GPT-4、GPT-3.5 等模型
- Azure OpenAI:Azure 托管的 OpenAI 模型
- 硅基流动:DeepSeek、Qwen 等开源模型
- 阿里百炼:通义千问系列模型
- DeepSeek:DeepSeek 系列模型
本项目使用 RRF (Reciprocal Rank Fusion) 算法融合向量检索和 BM25 检索结果:
- 向量检索:使用嵌入向量进行语义相似度检索
- BM25 检索:使用关键词匹配进行精确检索
- RRF 融合:将两种检索结果按排名进行加权融合
确保 Docker 容器正在运行:
docker-compose ps检查文件格式是否支持(PDF、DOCX、TXT),并确保文件不是图片型 PDF。
检查 .env 文件中的 API Key 和 Base URL 是否正确配置。
MIT License
欢迎提交 Issue 和 Pull Request!