diff --git a/README.md b/README.md
index 3ee2aef2..e3c1e48d 100644
--- a/README.md
+++ b/README.md
@@ -17,10 +17,9 @@
### ✨ 核心特性
-- 🤖 **多模型支持** - 兼容 OpenAI、国内主流大模型平台及本地部署(vLLM、Ollama)
-- 📚 **灵活知识库** - 支持 PDF、TXT、MD、Docx 等格式,支持 URL 导入和联网搜索
-- 🤖 **智能体扩展** - 支持自定义智能体开发,兼容 LangGraph 部署
-- 🕸️ **知识图谱** - 基于 Neo4j 的图谱问答,可接入现有知识图谱
+- 🤖 **多模型支持** - 适配主流大模型平台及本地部署(vLLM、Ollama),支持自定义智能体开发,兼容 LangGraph 部署
+- 📚 **灵活知识库** - 支持 LightRAG、Milvus、Chroma 等存储形式,配置 MinerU、PP-Structure-V3的文档解析引擎
+- 🕸️ **知识图谱** - 支持LightRAG的自动图谱构建,以及自定义图谱问答,可接入现有知识图谱
- 👥 **权限控制** - 支持超级管理员、管理员、普通用户三级权限体系

@@ -34,10 +33,6 @@ https://github.com/user-attachments/assets/15f7f315-003d-4e41-a260-739c2529f824
项目本身不需要显卡支持,可以运行在任何设备上。对于模型推理或者文档解析服务都可以和项目本身解耦,通过环境变量配置对应的服务即可。同时项目也提供了本地部署基于 vllm 的脚本。
-- Docker 和 Docker Compose
-- 2GB+ 可用内存
-- (可选)CUDA 支持的 GPU(用于 OCR 服务)
-
### 一键启动
1. **克隆项目**
@@ -73,12 +68,33 @@ https://github.com/user-attachments/assets/15f7f315-003d-4e41-a260-739c2529f824
### 故障排除
-- **镜像拉取失败**:如果拉取镜像失败,可以尝试手动拉取:
- ```bash
- bash docker/pull_image.sh python:3.13-slim # 替换后面的 repo_name 即可
+如果 docker 已经正常启动,则使用 `docker logs api-dev -f` 查看后端日志。
+
+
+ Docker 镜像拉取失败
+
+如果拉取镜像失败,可以尝试手动拉取:
+
+```bash
+ bash docker/pull_image.sh python:3.11-slim # 替换后面的 repo_name 即可
```
-- **内存不足**:如果 Milvus 启动失败,执行 `docker compose up milvus -d && docker restart api-dev`
-- **查看日志**:`docker logs api-dev -f`
+ **如果**依然存在镜像拉取问题,可以现在另外一个可访问 Docker 的设备上执行拉取镜像后,使用下面的脚本保存为 tar 文件,再拷贝到开发设备使用。
+ ```bash
+ # 保存镜像,会生成 docker_images_xxx.tar
+ bash docker/save_docker_images.sh # Linux 或 macOS
+ powershell -ExecutionPolicy Bypass -File docker/save_docker_images.ps1 # Windows PowerShell
+
+ # 拷贝 docker_images_xxx.tar 文件到开发设备
+ scp docker_images_xxx.tar @:
+
+ # 在开发设备上执行
+ docker load -i docker_images_xxx.tar
+ ```
+
+
+
+ Milvus 启动失败,执行 `docker compose up milvus -d && docker restart api-dev`
+
## 🤖 模型配置
@@ -92,63 +108,68 @@ https://github.com/user-attachments/assets/15f7f315-003d-4e41-a260-739c2529f824
| 硅基流动 | `Qwen2.5-7B-Instruct` | `SILICONFLOW_API_KEY` | 🆓 免费,默认 |
| OpenAI | `gpt-4o` | `OPENAI_API_KEY` | |
| DeepSeek | `deepseek-chat` | `DEEPSEEK_API_KEY` | |
-| 豆包方舟 | `doubao-pro` | `ARK_API_KEY` | |
+| OpenRouter | `openrouter` | `OPENROUTER_API_KEY` | |
| 智谱清言 | `glm-4-flash` | `ZHIPUAI_API_KEY` | |
-| 阿里云 | `qwen-max-latest` | `DASHSCOPE_API_KEY` | |
+| 阿里云百炼 | `qwen-max-latest` | `DASHSCOPE_API_KEY` | |
-**完整配置示例:**
-```env
-# 基础配置(必需)
-SILICONFLOW_API_KEY=sk-your-key-here
+
+ 自定义模型供应商
-# 可选配置
-OPENAI_API_KEY=sk-your-openai-key
-DEEPSEEK_API_KEY=sk-your-deepseek-key
-TAVILY_API_KEY=your-tavily-key # 联网搜索功能
+在 [src/static/models.yaml](src/static/models.yaml) 中添加新的模型配置,然后在 `.env` 文件中添加对应的环境变量,最后重新部署项目即可。
+
+**示例**:
+
+```yaml
+custom-provider-name-here:
+ name: custom-provider-name-here
+ default: custom-model-name-here
+ base_url: "https://api.your-provider.com/v1"
+ env:
+ - CUSTOM_API_KEY_ENV_NAME # e.g. OPENAI_API_KEY
+ models:
+ - supported-model-name-here
```
+
### OpenAI 兼容模型
-项目理论上兼容任何 OpenAI 兼容的模型,包括但不限于:
+项目理论上兼容任何 OpenAI 兼容的模型,包括但不限于 vLLM、Ollama 或者其他 API 中转或者代理服务。在 Web 界面的"设置"中添加本地模型地址。
-- vLLM
-- Ollama
-- 其他 API 中转或者代理服务
-在 Web 界面的"设置"中添加本地模型地址。
+|模型选择|自定义模型地址|
+|--|--|
+|||
+
-
## 📚 功能详解
### 知识库管理
-- **多格式支持**:PDF、TXT、Markdown、Docx、Excel 等
-- **多种导入方式**:本地上传、URL 导入、批量导入
-- **智能分块**:自动优化文档分割策略
-- **向量检索**:基于 Milvus 的高效相似度搜索
+现在支持的知识库类型包括 `Chroma`、`Milvus`、`LightRAG`。[LightRAG](https://github.com/HKUDS/LightRAG) 是轻量级 GraphRAG方法。
+
+
### 知识图谱
-使用 Neo4j 构建知识图谱问答能力:
+在 v0.2 版本中,项目支持了基于 [LightRAG](https://github.com/HKUDS/LightRAG) 的知识图谱构建方法。需要在知识库中创建一个基于 LightRAG 的知识库,然后上传文档。构建的知识图谱会自动导入到 Neo4j 中,并使用不同的 label 做区分。
-1. **数据格式**:支持 JSONL 格式导入
- ```jsonl
- {"h": "北京", "t": "中国", "r": "首都"}
- {"h": "上海", "t": "中国", "r": "直辖市"}
- ```
+|知识库可视化|Neo4J管理端|
+|--|--|
+|||
-2. **图谱访问**:
- - Web 界面:[http://localhost:7474](http://localhost:7474)
- - 默认账户:`neo4j` / `0123456789`
-
-3. **现有图谱接入**:修改 `docker-compose.yml` 中的 `NEO4J_URI` 配置
+除此之外,也支持将已有的知识图谱按照下面的格式导入 Neo4j 中,或者通过修改 `docker-compose.yml` 中的 `NEO4J_URI` 配置来接入已有的 Neo4j 实例。默认账户密码是`neo4j` / `0123456789`。
+**数据格式**:支持 JSONL 格式导入
+```jsonl
+{"h": "北京", "t": "中国", "r": "首都"}
+{"h": "上海", "t": "中国", "r": "直辖市"}
+```
## 🔧 高级配置
### OCR 服务(可选)
-对于基础的 OCR 服务(RapidOCR onnx 版本),可以使用 SWHL/RapidOCR 的 onnx 版本,但是需要提前将模型下载到 `$MODEL_DIR` 目录下。
+对于**基础的 OCR 服务**(RapidOCR onnx 版本),可以使用 SWHL/RapidOCR 的 onnx 版本,但是需要提前将模型下载到 `$MODEL_DIR` 目录下。
```bash
huggingface-cli download SWHL/RapidOCR --local-dir ${MODEL_DIR:-./models}/SWHL/RapidOCR
@@ -156,12 +177,18 @@ huggingface-cli download SWHL/RapidOCR --local-dir ${MODEL_DIR:-./models}/SWHL/R
*如果提示 `[Errno 13] Permission denied` 则需要使用 sudo 修改权限之后再执行*
-提升 PDF 解析准确性,可以选择使用 MinerU 或 PP-Structure-V3 服务,但是需要 GPU 支持:
+提升 PDF 解析准确性,可以选择使用 MinerU 或 PP-Structure-V3 服务,但是需要 GPU 支持。
+
+启用**MinerU**服务:
```bash
# MinerU(需要 CUDA 12.4+)
docker compose up mineru --build
+```
+启用**PP-Structure-V3**服务,配置文件可以在 [docker/PP-StructureV3.yaml](docker/PP-StructureV3.yaml) 中修改。
+
+```bash
# PP-Structure-V3(需要 CUDA 11.8+)
docker compose up paddlex --build
```
@@ -179,20 +206,6 @@ docker compose up paddlex --build
| 8080 | PaddleX | OCR 服务(可选)|
| 8081 | vLLM | 本地推理(可选)|
-### 自定义模型供应商
-
-在 [src/static/models.yaml](src/static/models.yaml) 中添加新的模型配置:
-
-```yaml
-your_provider:
- name: "自定义供应商"
- default: "your-model-name"
- base_url: "https://api.your-provider.com/v1"
- env:
- - YOUR_API_KEY
- models:
- - your-model-name
-```
## ❓ 常见问题
diff --git a/docker/save_docker_images.ps1 b/docker/save_docker_images.ps1
index 82a9a3ca..fc9435b9 100644
--- a/docker/save_docker_images.ps1
+++ b/docker/save_docker_images.ps1
@@ -14,14 +14,16 @@ Write-Host "开始导出Docker镜像到 $OutputFile..." -ForegroundColor Cyan
# 从各个文件中提取的基础镜像列表
$Images = @(
- "python:3.12",
+ "python:3.11-slim",
"ghcr.io/astral-sh/uv:0.7.2",
- "node:latest",
+ "node:20-alpine",
"nginx:alpine",
"neo4j:5.26",
"quay.io/coreos/etcd:v3.5.5",
"minio/minio:RELEASE.2023-03-20T20-16-18Z",
- "milvusdb/milvus:v2.5.6"
+ "milvusdb/milvus:v2.5.6",
+ # "lmsysorg/sglang:v0.4.9.post3-cu126",
+ # "ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/paddlex:paddlex3.0.1-paddlepaddle3.0.0-gpu-cuda11.8-cudnn8.9-trt8.6"
)
# 确保所有镜像都已下载
@@ -48,4 +50,4 @@ if ($FileSizeGB -ge 1) {
}
Write-Host "`n要在另一台机器上加载这些镜像,请使用命令:" -ForegroundColor Cyan
-Write-Host "docker load -i $OutputFile" -ForegroundColor White
\ No newline at end of file
+Write-Host "docker load -i $OutputFile" -ForegroundColor White
\ No newline at end of file
diff --git a/docker/save_docker_images.sh b/docker/save_docker_images.sh
index 63f7865a..4b551f4c 100644
--- a/docker/save_docker_images.sh
+++ b/docker/save_docker_images.sh
@@ -11,14 +11,16 @@ echo "开始导出 Docker 镜像到 $OUTPUT_FILE..."
# 从各个文件中提取的基础镜像列表
IMAGES=(
- "python:3.12"
- "ghcr.io/astral-sh/uv:0.7.2"
- "node:latest"
- "nginx:alpine"
- "neo4j:5.26"
- "quay.io/coreos/etcd:v3.5.5"
- "minio/minio:RELEASE.2023-03-20T20-16-18Z"
- "milvusdb/milvus:v2.5.6"
+ "python:3.11-slim",
+ "ghcr.io/astral-sh/uv:0.7.2",
+ "node:20-alpine",
+ "nginx:alpine",
+ "neo4j:5.26",
+ "quay.io/coreos/etcd:v3.5.5",
+ "minio/minio:RELEASE.2023-03-20T20-16-18Z",
+ "milvusdb/milvus:v2.5.6",
+ # "lmsysorg/sglang:v0.4.9.post3-cu126",
+ # "ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/paddlex:paddlex3.0.1-paddlepaddle3.0.0-gpu-cuda11.8-cudnn8.9-trt8.6"
)
# 确保所有镜像都已下载
diff --git a/docs/changelog/v0.2.md b/docs/changelog/v0.2.md
index a1540b0f..3afaaf47 100644
--- a/docs/changelog/v0.2.md
+++ b/docs/changelog/v0.2.md
@@ -13,9 +13,11 @@
🐛**BUGs**
- [x] 智能体的工具切换有问题
+- [ ] 知识图谱可视化页面的效果有点问题
💯 More:
- [ ] 封装现有工具为 mcp(stdio)调用
- [ ] 支持额外 mcp 配置(代码端)
- [ ] 添加用户日志与用户反馈模块,可以在 AgentView 中查看信息(🌟🌟)
- [ ] 对话页面支持文档/图片临时上传(🌟🌟🌟🌟)
+- [ ] 在Prompt中添加对于参考文献的要求,同时要求使用链接的形式,在聊天页面点击该链接后,可以选择跳转或者弹出信息预览框(最好可以提供源文件下载的功能),这里需要将DatabaseInfoView 里面的那个文件详情的弹窗给组件化。但是同时也要能够配置,选择显示源文件还是chunk的结果,如果可以的话,最好是在一个文件里面显示所有的chunk,而不是每个chunk都单独显示。不过似乎有点难度,毕竟是有 overlap 的存在,还是分开吧。对于URL链接的这种,可以选择直接跳转就可以。
diff --git a/docs/images/add_custom_model.png b/docs/images/add_custom_model.png
new file mode 100644
index 00000000..9d62f666
Binary files /dev/null and b/docs/images/add_custom_model.png differ
diff --git a/docs/images/graph_vis.png b/docs/images/graph_vis.png
new file mode 100644
index 00000000..1974226d
Binary files /dev/null and b/docs/images/graph_vis.png differ
diff --git a/docs/images/knowledge_bases.png b/docs/images/knowledge_bases.png
new file mode 100644
index 00000000..34cd62e3
Binary files /dev/null and b/docs/images/knowledge_bases.png differ
diff --git a/docs/images/lightrag_kb.png b/docs/images/lightrag_kb.png
new file mode 100644
index 00000000..8eee4617
Binary files /dev/null and b/docs/images/lightrag_kb.png differ
diff --git a/docs/images/neo4j_browser.png b/docs/images/neo4j_browser.png
new file mode 100644
index 00000000..711266dd
Binary files /dev/null and b/docs/images/neo4j_browser.png differ
diff --git a/docs/images/select_model.png b/docs/images/select_model.png
new file mode 100644
index 00000000..a47d824c
Binary files /dev/null and b/docs/images/select_model.png differ
diff --git a/src/knowledge/lightrag_kb.py b/src/knowledge/lightrag_kb.py
index 3f09a65d..d5454808 100644
--- a/src/knowledge/lightrag_kb.py
+++ b/src/knowledge/lightrag_kb.py
@@ -119,7 +119,7 @@ class LightRagKB(KnowledgeBase):
history_messages=history_messages,
api_key=model.api_key,
base_url=model.base_url,
- extra_body={"enable_thinking": False},
+ # extra_body={"enable_thinking": False},
**kwargs,
)
return llm_model_func