docs(deploy): 添加 GitHub Actions 工作流以自动部署 VitePress 站点

This commit is contained in:
Wenjie Zhang 2025-10-09 14:43:27 +08:00
parent c71f079929
commit 8c39d7e6e0
6 changed files with 2072 additions and 171 deletions

66
.github/workflows/deploy.yml vendored Normal file
View File

@ -0,0 +1,66 @@
# 构建 VitePress 站点并将其部署到 GitHub Pages 的示例工作流程
#
name: Deploy VitePress site to Pages
on:
# 在针对 `main` 分支的推送上运行。如果你
# 使用 `master` 分支作为默认分支,请将其更改为 `master`
push:
branches: [main]
# 允许你从 Actions 选项卡手动运行此工作流程
workflow_dispatch:
# 设置 GITHUB_TOKEN 的权限,以允许部署到 GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# 只允许同时进行一次部署,跳过正在运行和最新队列之间的运行队列
# 但是,不要取消正在进行的运行,因为我们希望允许这些生产部署完成
concurrency:
group: pages
cancel-in-progress: false
jobs:
# 构建工作
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # 如果未启用 lastUpdated则不需要
# - uses: pnpm/action-setup@v3 # 如果使用 pnpm请取消此区域注释
# with:
# version: 9
# - uses: oven-sh/setup-bun@v1 # 如果使用 Bun请取消注释
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm # 或 pnpm / yarn
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Install dependencies
run: npm ci # 或 pnpm install / yarn install / bun install
- name: Build with VitePress
run: npm run docs:build # 或 pnpm docs:build / yarn docs:build / bun run docs:build
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs/.vitepress/dist
# 部署工作
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
needs: build
runs-on: ubuntu-latest
name: Deploy
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

View File

@ -1,9 +1,17 @@
import { defineConfig } from 'vitepress'
import markdownItTaskCheckbox from 'markdown-it-task-checkbox'
// https://vitepress.dev/reference/site-config
export default defineConfig({
lang: 'zh-CN',
title: "Yuxi-Know Docs",
description: "文档中心",
markdown: {
config: (md) => {
md.use(markdownItTaskCheckbox)
}
},
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
@ -30,5 +38,5 @@ export default defineConfig({
socialLinks: [
{ icon: 'github', link: 'https://github.com/xerrors/Yuxi-Know' }
]
}
},
})

View File

@ -1,4 +1,4 @@
目前已有的开发计划包括:
# 开发计划
📝 0.3 version
@ -14,7 +14,6 @@
---
💭 **Features Todo**
- [ ] 使用其他的聊天记录管理方法,解决两个问题,一个是上下文长度过长,一个是上下文的类型变得更加丰富,比如多模态等等。(现在是基于 LangGraph 的 Memory 实现的v0.2.3 版本实现),暂定使用 [mem0](github.com/mem0ai/mem0) 来实现。但是目前了解下来,还不是我想要的那种方案。可能会基于这个实现一个 ThreadConvManager 这个类。
- [ ] 添加对于上传文件的支持这里的复杂的地方就在于如何和历史记录结合在一起v0.2.3 版本实现,放在记忆管理后面)
- [ ] 知识图谱的上传和可视化,支持属性,标签的展示
- [ ] 集成智能体评估,首先使用命令行来实现,然后考虑放在 UI 里面展示

View File

@ -1,23 +1,33 @@
# 快速开始
# 快速开始指南
## 📖 简介
## 项目简介
语析是一个功能强大的智能问答平台,融合了 RAG 知识库与知识图谱技术,基于 LangGraph + Vue.js + FastAPI + LightRAG 架构构建
Yuxi-Know语析是一个基于知识图谱和向量数据库的智能知识库系统融合了 RAG检索增强生成技术与知识图谱技术为用户提供智能问答和知识管理服务
### ✨ 核心特性
### 技术架构
- 🤖 **模型与智能体** - 支持主流大模型及 vLLM、Ollama 等,支持自定义智能体开发,兼容 LangGraph 部署
- 📚 **灵活知识库** - 支持 LightRAG、Milvus、Chroma 等存储形式,配置 MinerU、PP-Structure-V3 文档解析引擎
- 🕸️ **知识图谱** - 支持 LightRAG 自动图谱构建,以及自定义图谱问答,可接入现有知识图谱
- 👥 **权限安全** - 支持超级管理员、管理员、普通用户三级权限体系,并配置内容审查以及守卫模型
- **后端服务**: FastAPI + Python 3.12+
- **前端界面**: Vue.js 3 + TypeScript
- **知识存储**: Milvus向量数据库+ Neo4j图数据库
- **智能体框架**: LangGraph
- **文档解析**: LightRAG + MinerU + PP-Structure-V3
- **容器编排**: Docker Compose
### 核心功能
- **智能问答**: 支持多种大语言模型,提供智能对话和问答服务
- **知识库管理**: 支持多种存储形式Chroma、Milvus、LightRAG
- **知识图谱**: 自动构建和可视化知识图谱,支持图查询
- **文档解析**: 支持 PDF、Word、图片等多种格式的智能解析
- **权限管理**: 三级权限体系(超级管理员、管理员、普通用户)
- **内容安全**: 内置内容审查机制,保障服务合规性
## 演示视频
<div align="center">
<!-- 视频缩略图 -->
<a href="https://www.bilibili.com/video/BV1ETedzREgY/?share_source=copy_web&vd_source=37b0bdbf95b72ea38b2dc959cfadc4d8" target="_blank">
<img width="3651" height="1933" alt="视频演示缩略图" src="https://github.com/user-attachments/assets/eac4fa89-2176-46ae-a649-45a125cb6ed1" />
</a>
<!-- 视频链接文字 -->
<p style="margin-top: 12px;">
<a href="https://www.bilibili.com/video/BV1ETedzREgY/?share_source=copy_web&vd_source=37b0bdbf95b72ea38b2dc959cfadc4d8" target="_blank" style="text-decoration: none; color: #23ade5; font-weight: 500;">
📽️ 点击查看视频演示 <i class="fa fa-external-link" style="margin-left: 4px;"></i>
@ -25,128 +35,205 @@
</p>
</div>
## 🚀 快速开始
## 快速开始
### 系统要求
项目本身不需要显卡支持,可以运行在任何设备上。对于模型推理或者文档解析服务都可以和项目本身解耦,通过环境变量配置对应的服务即可。同时项目也提供了本地部署基于 vllm 的脚本。
#### 硬件要求
- **CPU**: 2 核心以上
- **内存**: 4GB 以上(推荐 8GB
- **存储**: 10GB 以上可用空间
- **网络**: 稳定的互联网连接(用于下载模型和依赖)
### 一键启动
#### 软件要求
- **Docker**: 20.10+ 版本
- **Docker Compose**: 2.0+ 版本
- **操作系统**: Linux、macOS 或 Windows支持 WSL2
1. **克隆项目**
```bash
git clone -b 0.2.1 https://github.com/xerrors/Yuxi-Know.git
cd Yuxi-Know
```
如果想要使用之前的稳定版(与现版本不兼容),可以使用 `stable` 分支,`main` 分支是最新的开发版本。
#### 可选配置
- **GPU**: NVIDIA GPU用于 OCR 服务和本地模型推理)
- **CUDA**: 11.8+ 或 12.6+(根据服务选择)
2. **配置 API 密钥**
::: tip 提示
项目采用微服务架构,核心服务无需 GPU 支持。GPU 仅用于可选的 OCR 服务和本地模型推理,可通过环境变量配置外部服务。
:::
复制环境变量模板并编辑:
```bash
cp src/.env.template src/.env
```
### 安装步骤
**必需配置**(推荐使用硅基流动免费服务):
```env
SILICONFLOW_API_KEY=sk-270ea********8bfa97.e3XOMd****Q1Sk
```
> 💡 [免费获取 SiliconFlow API Key](https://cloud.siliconflow.cn/i/Eo5yTHGJ)(注册即送 14 元额度)
#### 1. 获取项目代码
3. **启动服务**
```bash
docker compose up --build
```
```bash
# 克隆稳定版本
git clone -b 0.2.1 https://github.com/xerrors/Yuxi-Know.git
cd Yuxi-Know
```
添加 `-d` 参数可后台运行。启动完成后访问:[http://localhost:5173](http://localhost:5173)
::: warning 版本说明
- `0.2.1`: 当前稳定版本(推荐)
- `stable`: 旧版本稳定分支(与现版本不兼容)
- `main`: 最新开发版本(可能不稳定)
:::
4. **停止服务**
```bash
docker compose down
```
#### 2. 配置环境变量
复制环境变量模板并编辑:
```bash
cp src/.env.template src/.env
```
编辑 `src/.env` 文件,配置必需的 API 密钥:
```env
# 必需配置 - 推荐使用硅基流动免费服务
SILICONFLOW_API_KEY=sk-270ea********8bfa97.e3XOMd****Q1Sk
```
::: tip 免费获取 API Key
[硅基流动](https://cloud.siliconflow.cn/i/Eo5yTHGJ) 注册即送 14 元额度,支持多种开源模型。
:::
#### 3. 启动服务
```bash
# 构建并启动所有服务
docker compose up --build
# 后台运行(推荐)
docker compose up --build -d
```
#### 4. 访问系统
服务启动完成后,访问以下地址:
- **Web 界面**: http://localhost:5173
- **API 文档**: http://localhost:5050/docs
#### 5. 停止服务
```bash
docker compose down
```
### 故障排除
如果 docker 已经正常启动,则使用 `docker logs api-dev -f` 查看后端日志。
#### 查看服务状态
```bash
# 查看所有容器状态
docker ps
# 查看后端服务日志
docker logs api-dev -f
# 查看前端服务日志
docker logs web-dev -f
```
#### 常见问题
<details>
<summary>Docker 镜像拉取失败</summary>
<summary><strong>Docker 镜像拉取失败</strong></summary>
如果拉取镜像失败,可以尝试手动拉取:
```bash
bash docker/pull_image.sh python:3.11-slim # 替换后面的 repo_name 即可
bash docker/pull_image.sh python:3.11-slim
```
**如果**依然存在镜像拉取问题,可以先在另一个可访问 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 文件到开发设备
**离线部署方案**
```bash
# 在有网络的环境保存镜像
bash docker/save_docker_images.sh # Linux/macOS
powershell -ExecutionPolicy Bypass -File docker/save_docker_images.ps1 # Windows
# 传输到目标设备
scp docker_images_xxx.tar <user>@<dev_host>:<path_to_save>
# 在开发设备上执行
# 在目标设备加载镜像
docker load -i docker_images_xxx.tar
```
</details>
<details>
<summary>镜像拉取完成,但是构建失败</summary>
如果拉取镜像完成,但是构建失败,基本都是因为依赖的镜像问题,可以在环境变量中配置如下。如果是已经配置了代理,但是构建失败,也可以尝试移除代理后重试。
</details>
<details>
<summary><strong>构建失败</strong></summary>
如果构建失败,通常是网络问题,可以配置代理:
```bash
export HTTP_PROXY=http://IP:PORT
export HTTPS_PROXY=http://IP:PORT
```
如果已配置代理但构建失败,尝试移除代理后重试。
</details>
<details>
<summary>Milvus 启动失败,执行 `docker compose up milvus -d && docker restart api-dev`</summary>
<summary><strong>Milvus 启动失败</strong></summary>
```bash
# 重启 Milvus 服务
docker compose up milvus -d
docker restart api-dev
```
</details>
## 🤖 模型配置
## 模型配置
### 对话模型
支持多种 API 服务商,配置对应的 `API_KEY` 即可使用:
| 服务商 | 环境变量 | 备注 |
系统支持多种大语言模型服务商,通过配置对应的 API 密钥即可使用:
| 服务商 | 环境变量 | 特点 |
|--------|----------|------|
| 硅基流动 | `SILICONFLOW_API_KEY` | 🆓 免费,默认 |
| OpenAI | `OPENAI_API_KEY` | |
| DeepSeek | `DEEPSEEK_API_KEY` | |
| OpenRouter | `OPENROUTER_API_KEY` | |
| 智谱清言 | `ZHIPUAI_API_KEY` | |
| 阿里云百炼 | `DASHSCOPE_API_KEY` | |
| 硅基流动 | `SILICONFLOW_API_KEY` | 🆓 免费额度,默认推荐 |
| OpenAI | `OPENAI_API_KEY` | GPT 系列模型 |
| DeepSeek | `DEEPSEEK_API_KEY` | 国产大模型 |
| OpenRouter | `OPENROUTER_API_KEY` | 多模型聚合平台 |
| 智谱清言 | `ZHIPUAI_API_KEY` | GLM 系列模型 |
| 阿里云百炼 | `DASHSCOPE_API_KEY` | 通义千问系列 |
<details>
<summary>自定义模型供应商</summary>
#### 自定义模型供应商
在 [src/config/static/models.yaml](src/config/static/models.yaml) 中添加新的模型配置,然后在 `.env` 文件中添加对应的环境变量,最后重新部署项目即可。
如需添加新的模型供应商,请按以下步骤操作:
**示例**
1. 编辑 `src/config/static/models.yaml` 文件
2. 在 `.env` 文件中添加对应的环境变量
3. 重新部署项目
**配置示例**
```yaml
custom-provider-name-here:
name: custom-provider-name-here
default: custom-model-name-here
custom-provider-name:
name: custom-provider-name
default: custom-model-name
base_url: "https://api.your-provider.com/v1"
env:
- CUSTOM_API_KEY_ENV_NAME # e.g. OPENAI_API_KEY
- CUSTOM_API_KEY_ENV_NAME
models:
- supported-model-name-here
- supported-model-name
```
</details>
### 自定义嵌入模型和重排序模型
### 嵌入模型和重排序模型
需要注意的是,从 v0.2 版本开始,项目将模型部署和项目本身做了完全解耦,因此无论是 Embedding 还是 Reranker如果需要使用本地模型都需要使用 vllm /ollama 转换为 api 服务后,在 src/config/static/models.yaml 或者 src/config/static/models.private.yaml (优先)中 添加类似下面的信息:
::: warning 重要说明
从 v0.2 版本开始,项目采用微服务架构,模型部署与项目本身完全解耦。如需使用本地模型,需要先通过 vLLM 或 Ollama 部署为 API 服务。
:::
#### 本地模型部署
**1. 配置模型信息**
`src/config/static/models.yaml``src/config/static/models.private.yaml` 中添加配置:
```yaml
EMBED_MODEL_INFO:
# 其余的
vllm/Qwen/Qwen3-Embedding-0.6B:
name: Qwen/Qwen3-Embedding-0.6B
dimension: 1024
@ -160,38 +247,46 @@ RERANKER_LIST:
api_key: no_api_key
```
<details>
<summary>启动脚本示例</summary>
**2. 启动模型服务**
```bash
# 启动 Qwen Embedding 模型
# 启动嵌入模型
vllm serve Qwen/Qwen3-Embedding-0.6B \
--task embed \
--dtype auto \
--port 8000
# 启动 BAAI reranker 模型
# 启动重排序模型
vllm serve BAAI/bge-reranker-v2-m3 \
--task score \
--dtype fp16 \
--port 8000
```
</details>
### OpenAI 兼容模型
项目理论上兼容任何 OpenAI 兼容的模型,包括但不限于 vLLM、Ollama 或者其他 API 中转或者代理服务。在 Web 界面的"设置"中添加本地模型地址。
系统理论上兼容任何 OpenAI 兼容的模型服务,包括:
- **vLLM**: 高性能推理服务
- **Ollama**: 本地模型管理
- **API 中转服务**: 各种代理和聚合服务
在 Web 界面的"设置"页面中可以添加本地模型地址。
## 📚 功能详解
## 功能详解
### 知识库管理
现在支持的知识库类型包括 `Chroma`、`Milvus`、`LightRAG`。[LightRAG](https://github.com/HKUDS/LightRAG) 是轻量级 GraphRAG 方法。
系统支持多种知识库存储形式,满足不同场景需求:
| 存储类型 | 特点 | 适用场景 |
|----------|------|----------|
| **Chroma** | 轻量级向量数据库 | 小型项目、快速原型 |
| **Milvus** | 高性能向量数据库 | 大规模生产环境 |
| **LightRAG** | 图增强检索 | 复杂知识关系 |
#### 知识库可视化
<table>
<tbody>
@ -204,9 +299,32 @@ vllm serve BAAI/bge-reranker-v2-m3 \
### 知识图谱
在 v0.2 版本中,项目支持了基于 [LightRAG](https://github.com/HKUDS/LightRAG) 的知识图谱构建方法。需要在知识库中创建一个基于 LightRAG 的知识库,然后上传文档。构建的知识图谱会自动导入到 Neo4j 中,并使用不同的 label 做区分。需要说明的是,基于 LightRAG 的知识库可以在知识库详情中可视化,但是不能在侧边栏的图谱中检索,知识图谱检索工具也不支持基于 LightRAG 的知识库进行检索。基于 LightRAG 方法构建的图谱查询,需要使用对应的知识库作为查询工具。
#### LightRAG 自动构建
默认使用的图谱构建模型是 `siliconflow``Qwen/Qwen3-30B-A3B-Instruct-2507`,可以使用 `LIGHTRAG_LLM_PROVIDER``LIGHTRAG_LLM_NAME` 覆盖。
系统支持基于 [LightRAG](https://github.com/HKUDS/LightRAG) 的知识图谱自动构建:
1. **创建 LightRAG 知识库**: 在知识库管理中选择 LightRAG 类型
2. **上传文档**: 系统自动解析文档并构建知识图谱
3. **图谱导入**: 构建的图谱自动导入 Neo4j 数据库
4. **标签区分**: 使用不同标签区分不同来源的图谱数据
::: warning 使用限制
- LightRAG 知识库可在知识库详情中可视化
- 不支持在侧边栏图谱中直接检索
- 图谱检索工具不支持 LightRAG 知识库
- 查询需要使用对应的知识库作为工具
:::
#### 图谱构建模型
默认使用 `siliconflow``Qwen/Qwen3-30B-A3B-Instruct-2507` 模型,可通过环境变量自定义:
```env
LIGHTRAG_LLM_PROVIDER=siliconflow
LIGHTRAG_LLM_NAME=Qwen/Qwen3-30B-A3B-Instruct-2507
```
#### 图谱可视化
<table>
<thead>
@ -220,77 +338,151 @@ vllm serve BAAI/bge-reranker-v2-m3 \
<tr>
<td><img src="https://github.com/user-attachments/assets/87b1dc91-65f4-4529-84b3-1b2a561c580d" alt="知识图谱可视化" height="210"></td>
<td><img src="https://github.com/user-attachments/assets/452b8228-a59f-4f28-80ce-7d93e9497ccc" alt="知识库可视化" height="210"></td>
<td><img src="./docs/images/neo4j_browser.png" alt="Neo4J管理端" height="210"></td>
</tr>
</tbody>
</table>
除此之外,也支持将已有的知识图谱按照下面的格式导入 Neo4j 中,上传后,节点会自动添加 `Upload`、`Entity` 标签,关系会自动添加 `Relation` 标签。可以通过 `name` 属性访问实体的名称,使用 `type` 属性访问边的名称。默认账户密码是 `neo4j` / `0123456789`
#### 外部图谱导入
系统支持导入已有的知识图谱数据到 Neo4j 中:
**数据格式**:支持 JSONL 格式导入,可以先尝试 [test/data/A_Dream_of_Red_Mansions_tiny.jsonl](test/data/A_Dream_of_Red_Mansions_tiny.jsonl) 文件。
**数据格式**: JSONL 格式,每行一个三元组
```jsonl
{"h": "北京", "t": "中国", "r": "首都"}
{"h": "上海", "t": "中国", "r": "直辖市"}
```
此外,也可以通过修改 `docker-compose.yml` 中的 `NEO4J_URI` 配置来接入已有的 Neo4j 实例,**但是**最好确保每个节点都有 `Entity` 标签,每个关系都有 `RELATION` 类型,否则会影响到图的检索与构建。
**导入规则**:
- 节点自动添加 `Upload`、`Entity` 标签
- 关系自动添加 `Relation` 标签
- 通过 `name` 属性访问实体名称
- 通过 `type` 属性访问关系名称
注:在“图谱”页面,只能看到上传的节点和边,基于 LightRAG 构建的图谱不会展示在里面,完整的图谱可以去 Neo4j 管理页面查看。
**Neo4j 访问信息**:
- 默认账户: `neo4j`
- 默认密码: `0123456789`
- 管理界面: http://localhost:7474
## 🔧 高级配置
::: tip 测试数据
可以使用 `test/data/A_Dream_of_Red_Mansions_tiny.jsonl` 文件进行测试导入。
:::
### OCR 服务(可选)
#### 外部 Neo4j 接入
对于**基础的 OCR 服务**RapidOCR ONNX 版本),可以使用 SWHL/RapidOCR 的 ONNX 版本,但是需要提前将模型下载到 `$MODEL_DIR` 目录下(默认 `src/.env.template` 中为 `models`)。在容器内实际路径为 `/models`(由 `MODEL_DIR_IN_DOCKER` 指向)。
如需接入已有的 Neo4j 实例,可修改 `docker-compose.yml` 中的 `NEO4J_URI` 配置。
::: warning 注意事项
确保每个节点都有 `Entity` 标签,每个关系都有 `RELATION` 类型,否则会影响图的检索与构建功能。
:::
## 高级配置
### OCR 服务
系统提供多种 OCR 服务选项,满足不同精度和性能需求:
#### 基础 OCR 服务
使用 RapidOCR ONNX 版本,无需 GPU 支持:
**1. 下载模型**
```bash
huggingface-cli download SWHL/RapidOCR --local-dir ${MODEL_DIR:-./models}/SWHL/RapidOCR
```
- 模型完整性要求:需要存在 `PP-OCRv4/ch_PP-OCRv4_det_infer.onnx``PP-OCRv4/ch_PP-OCRv4_rec_infer.onnx`
- 如果提示 `[Errno 13] Permission denied` 则需要使用 sudo 修改权限之后再执行
**2. 模型要求**
提升 PDF 解析准确性,可以选择使用 MinerU 或 PP-Structure-V3 服务(需要 NVIDIA GPU
确保以下文件存在:
- `PP-OCRv4/ch_PP-OCRv4_det_infer.onnx`
- `PP-OCRv4/ch_PP-OCRv4_rec_infer.onnx`
启用**MinerU**服务:
::: warning 权限问题
如果提示 `[Errno 13] Permission denied`,需要使用 sudo 修改权限后执行。
:::
#### 高级 OCR 服务
为提升 PDF 解析准确性,可选择以下 GPU 加速服务:
**MinerU 服务**(推荐)
```bash
# MinerU需要 CUDA 12.6+ 的 sglang 镜像)
# 需要 CUDA 12.6+ 环境
docker compose up mineru --build
```
启用**PP-Structure-V3**服务,配置文件可在 [docker/PP-StructureV3.yaml](docker/PP-StructureV3.yaml) 中修改。
**PP-Structure-V3 服务**
```bash
# PP-Structure-V3需要 CUDA 11.8+
# 需要 CUDA 11.8+ 环境
docker compose up paddlex --build
```
### 自定义智能体应用开发
配置文件位置: `docker/PP-StructureV3.yaml`
目前该项目默认集成了三个 Demo 智能体包含基础智能体、ReAct、DeepResearch 三个案例 Demo均使用 [LangGraph](https://github.com/langchain-ai/langgraph) 开发。代码位于 [src/agents](src/agents) 目录。在 [src/agents/react/graph.py](src/agents/react/graph.py) 中定义了 `ReActAgent` 示例。
### 智能体开发
如果需要自定义智能体应用,需要实现一个继承于 `BaseAgent` 的类,并实现 `get_graph` 方法返回一个 graph 实例。智能体的 `context_schema` 定义了配置参数
系统基于 [LangGraph](https://github.com/langchain-ai/langgraph) 框架,支持自定义智能体应用开发
注册智能体的方式请参考已有实现:[src/agents/__init__.py](src/agents/__init__.py)。例如:
#### 内置智能体
系统默认集成三个示例智能体:
| 智能体 | 功能 | 位置 |
|--------|------|------|
| **基础智能体** | 简单对话功能 | `src/agents/chatbot/` |
| **ReAct 智能体** | 推理与行动循环 | `src/agents/react/` |
| **DeepResearch 智能体** | 深度研究分析 | `src/agents/deepresearch/` |
#### 开发自定义智能体
**1. 创建智能体类**
继承 `BaseAgent` 并实现 `get_graph` 方法:
```python
from .chatbot import ChatbotAgent
from .base import BaseAgent
class CustomAgent(BaseAgent):
def get_graph(self):
# 返回 LangGraph 实例
return graph_instance
@property
def context_schema(self):
# 定义配置参数
return schema
```
**2. 注册智能体**
`src/agents/__init__.py` 中注册:
```python
from .custom_agent import CustomAgent
agent_manager = AgentManager()
agent_manager.register_agent(ChatbotAgent)
agent_manager.register_agent(CustomAgent)
agent_manager.init_all_agents()
```
### MySQL 数据库查询集成Beta
**3. 参考示例**
项目目前已经支持智能体查询 MySQL 数据库,如果想要接入数据库,则可以在环境变量中配置如下信息:
查看 `src/agents/react/graph.py` 中的 `ReActAgent` 实现示例。
```sh
# 基础配置示例
### MySQL 数据库集成
系统支持智能体查询 MySQL 数据库,为数据分析提供强大支持。
#### 配置数据库连接
在环境变量中配置数据库信息:
```env
# MySQL 数据库配置
MYSQL_HOST=192.168.1.100
MYSQL_USER=username
MYSQL_PASSWORD=your_secure_password
@ -299,29 +491,43 @@ MYSQL_PORT=3306
MYSQL_CHARSET=utf8mb4
```
然后在智能体配置的工具中,勾选上 `mysql` 开头的几个工具即可。
#### 可用工具
- **mysql_list_tables**: 获取数据库中的所有表名
- **mysql_describe_table**: 获取指定表的详细结构信息
- **mysql_query**: 执行只读的 SQL 查询语句
在智能体配置中启用以下 MySQL 工具:
**安全特性**
| 工具名称 | 功能描述 |
|----------|----------|
| `mysql_list_tables` | 获取数据库中的所有表名 |
| `mysql_describe_table` | 获取指定表的详细结构信息 |
| `mysql_query` | 执行只读的 SQL 查询语句 |
- ✅ 只允许 SELECT、SHOW、DESCRIBE、EXPLAIN 操作
- ✅ 表名参数验证,严格的 SQL 注入防护
- ✅ 查询超时控制默认10秒最大60秒
- ✅ 结果大小、行数限制默认10000字符100行最大1000行
#### 安全特性
**注意事项**
- ✅ **只读操作**: 仅允许 SELECT、SHOW、DESCRIBE、EXPLAIN 操作
- ✅ **SQL 注入防护**: 严格的表名参数验证
- ✅ **超时控制**: 默认 10 秒,最大 60 秒
- ✅ **结果限制**: 默认 10000 字符100 行,最大 1000 行
1. 确保数据库用户只有只读权限
2. 大表查询建议使用 LIMIT 子句
3. 复杂查询可能需要调整超时时间
4. 查询结果过大会被自动截断并提示
#### 使用建议
### 图表可视化绘制 - MCPBeta
1. **权限设置**: 确保数据库用户只有只读权限
2. **大表查询**: 建议使用 LIMIT 子句限制结果
3. **复杂查询**: 可能需要调整超时时间
4. **结果处理**: 查询结果过大会被自动截断并提示
这是基于 @antvis 团队开发的 [可视化图表-MCP-Server](https://www.modelscope.cn/mcp/servers/@antvis/mcp-server-chart),可以在魔搭社区中配置 Host 资源后,在 src/agents/common/mcp.py 的 `MCP_SERVERS` 中添加 mcp-server需要注意的是记得将 `type` 字段修改为 `transport`
### 图表可视化 - MCP
系统支持基于 MCPModel Context Protocol的图表可视化功能。
#### 功能特点
- 基于 @antvis 团队开发的 [可视化图表-MCP-Server](https://www.modelscope.cn/mcp/servers/@antvis/mcp-server-chart)
- 支持多种图表类型和数据可视化
- 通过魔搭社区配置 Host 资源
#### 配置方法
`src/agents/common/mcp.py``MCP_SERVERS` 中添加配置:
```python
# MCP Server configurations
@ -330,7 +536,6 @@ MCP_SERVERS = {
"url": "https://remote.mcpservers.org/sequentialthinking/mcp",
"transport": "streamable_http",
},
"mcp-server-chart": {
"url": "https://mcp.api-inference.modelscope.net/9993ae42524c4c/mcp",
"transport": "streamable_http",
@ -338,40 +543,115 @@ MCP_SERVERS = {
}
```
### 服务安全
::: warning 配置注意
记得将 `type` 字段修改为 `transport`
:::
为了保障服务内容的合规性,系统内置了一套内容审查机制。对用户的输入和模型生成的输出进行关键词过滤,防止不当内容的传播。
### 内容安全
管理员可以在 `设置` -> `基本设置` 页面一键启用或禁用内容审查功能。**敏感词词库**位于 `src/config/static/bad_keywords.txt` 文件,可以根据需要自行修改,每行一个关键词。
系统内置内容审查机制,保障服务内容的合规性。
#### 功能特点
- **输入过滤**: 对用户输入进行关键词检测
- **输出审查**: 对模型生成内容进行安全审查
- **实时拦截**: 防止不当内容传播
#### 配置方法
管理员可在 `设置``基本设置` 页面中:
- ✅ 一键启用/禁用内容审查功能
- ✅ 自定义敏感词词库
- ✅ 调整审查策略
#### 敏感词管理
敏感词词库位于 `src/config/static/bad_keywords.txt` 文件:
- 每行一个关键词
- 支持自定义修改
- 实时生效,无需重启服务
### 服务端口说明
### 服务端口
| 端口 | 服务 | 说明 |
|------|------|------|
| 5173 | Web 前端 | 用户界面容器名web-dev |
| 5050 | API 后端 | 核心服务容器名api-dev |
| 7474/7687 | Neo4j | 图数据库容器名graph |
| 9000/9001 | MinIO | 对象存储容器名milvus-minio |
| 19530/9091 | Milvus | 向量数据库容器名milvus |
| 30000 | MinerU | PDF 解析容器名mineru可选|
| 8080 | PaddleX | OCR 服务容器名paddlex-ocr可选|
| 8081 | vLLM | 本地推理可选scripts/vllm/run.sh 默认端口)|
系统使用多个端口提供不同服务,以下是完整的端口映射:
| 端口 | 服务 | 容器名称 | 说明 |
|------|------|----------|------|
| **5173** | Web 前端 | web-dev | 用户界面 |
| **5050** | API 后端 | api-dev | 核心服务 |
| **7474/7687** | Neo4j | graph | 图数据库 |
| **9000/9001** | MinIO | milvus-minio | 对象存储 |
| **19530/9091** | Milvus | milvus | 向量数据库 |
| **30000** | MinerU | mineru | PDF 解析(可选)|
| **8080** | PaddleX | paddlex-ocr | OCR 服务(可选)|
| **8081** | vLLM | - | 本地推理(可选)|
::: tip 端口访问
- Web 界面: http://localhost:5173
- API 文档: http://localhost:5050/docs
- Neo4j 管理: http://localhost:7474
:::
### 品牌信息配置
### 品牌定制
在主页和登录页面的很多信息,比如 Logo、组织名称、版权信息等都可以复制 [src/config/static/info.template.yaml](src/config/static/info.template.yaml),并新建一个 `src/config/static/info.local.yaml`(或者在 .env 文件中配置 `YUXI_BRAND_FILE_PATH` 指向这个文件),在这个文件中配置。在项目启动时,会加载这个文件,然后根据文件中的配置渲染到前端页面中。如果 `src/config/static/info.local.yaml` 不存在,会默认使用 [src/config/static/info.template.yaml](src/config/static/info.template.yaml) 中的配置。
系统支持完整的品牌信息自定义,包括 Logo、组织名称、版权信息等
系统的配色方面,主要保存在 [web/src/assets/css/base.css](web/src/assets/css/base.css) 中。只要替换其中的 `--main-*` 相关变量,就可以改变系统的配色。
#### 配置方法
### 预设脚本
**文件上传脚本**,使用 `scripts/batch_upload.py` 脚本上传文件到知识库中,调用示例如下,会将 `path/to/your/data` 目录下所有 `*.docx` 文件上传到 `your_kb_id` 知识库中。
**1. 复制模板文件**
```bash
# 上传知识库文件
cp src/config/static/info.template.yaml src/config/static/info.local.yaml
```
**2. 编辑品牌信息**
`src/config/static/info.local.yaml` 中配置:
```yaml
# 组织信息
organization_name: "您的组织名称"
logo_url: "/path/to/your/logo.png"
# 版权信息
copyright: "© 2024 您的组织名称"
```
**3. 环境变量配置**
或在 `.env` 文件中指定配置文件路径:
```env
YUXI_BRAND_FILE_PATH=src/config/static/info.local.yaml
```
#### 样式定制
系统配色主要保存在 `web/src/assets/css/base.css` 中:
- 替换 `--main-*` 相关变量即可改变配色
- 支持主题色、辅助色等完整定制
- 实时预览,无需重启服务
::: tip 配置优先级
`info.local.yaml` > `info.template.yaml`(默认)
:::
### 批量处理脚本
系统提供便捷的批量处理脚本,支持文件上传和解析操作。
#### 文件上传脚本
使用 `scripts/batch_upload.py upload` 批量上传文件到知识库:
```bash
# 批量上传文档
uv run scripts/batch_upload.py upload \
--db-id your_kb_id \
--directory path/to/your/data \
@ -384,10 +664,20 @@ uv run scripts/batch_upload.py upload \
--record-file scripts/tmp/batch_processed_files.txt
```
**文件解析脚本**,还可以使用 `scripts/batch_upload.py trans` 脚本将文件解析成 markdown 文件,调用示例如下,会将 `path/to/your/data` 目录下所有 `*.docx` 文件解析成 markdown 文件,输出到 `path/to/output_markdown` 目录中。
**参数说明**:
- `--db-id`: 目标知识库 ID
- `--directory`: 文件目录路径
- `--pattern`: 文件匹配模式
- `--concurrency`: 并发处理数量
- `--recursive`: 递归处理子目录
- `--record-file`: 处理记录文件路径
#### 文件解析脚本
使用 `scripts/batch_upload.py trans` 将文件解析为 Markdown
```bash
# 文件解析成 markdown
# 批量解析文档
uv run scripts/batch_upload.py trans \
--db-id your_kb_id \
--directory path/to/your/data \
@ -400,13 +690,59 @@ uv run scripts/batch_upload.py trans \
--recursive
```
## ❓ 常见问题
**输出结果**: 解析后的 Markdown 文件将保存到指定输出目录。
- 如何查看后端日志?运行 `docker logs api-dev -f`
- RapidOCR 模型未找到怎么办?确认 `MODEL_DIR` 指向的目录存在 `SWHL/RapidOCR`,且包含 `PP-OCRv4` 下的 det/rec onnx 文件。
- MinerU/PaddleX 健康检查失败?分别检查 `http://localhost:30000/health``http://localhost:8080/` 是否 200确认 GPU/驱动与 CUDA 版本匹配。
## 常见问题
## 🤝 参与贡献
### 服务管理
**Q: 如何查看后端服务日志?**
```bash
# 查看后端日志
docker logs api-dev -f
# 查看前端日志
docker logs web-dev -f
# 查看所有服务状态
docker ps
```
### OCR 服务
**Q: RapidOCR 模型未找到怎么办?**
确认以下文件存在:
- `MODEL_DIR` 指向的目录存在 `SWHL/RapidOCR`
- 包含 `PP-OCRv4` 下的 `det_infer.onnx``rec_infer.onnx` 文件
**Q: MinerU/PaddleX 健康检查失败?**
分别检查服务状态:
- MinerU: http://localhost:30000/health
- PaddleX: http://localhost:8080/
确认 GPU/驱动与 CUDA 版本匹配。
### 数据库连接
**Q: Milvus 启动失败?**
```bash
# 重启 Milvus 服务
docker compose up milvus -d
docker restart api-dev
```
**Q: Neo4j 连接问题?**
检查默认账户信息:
- 用户名: `neo4j`
- 密码: `0123456789`
- 管理界面: http://localhost:7474
## 参与贡献
感谢所有贡献者的支持!
@ -416,17 +752,26 @@ uv run scripts/batch_upload.py trans \
### 如何贡献
1. Fork 本项目
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建 Pull Request
1. **Fork 项目**: 在 GitHub 上 Fork 本项目
2. **创建分支**: `git checkout -b feature/amazing-feature`
3. **提交更改**: `git commit -m 'Add some amazing feature'`
4. **推送分支**: `git push origin feature/amazing-feature`
5. **创建 PR**: 在 GitHub 上创建 Pull Request
## 📊 Star History
### 开发指南
- 遵循项目代码规范
- 添加必要的测试用例
- 更新相关文档
- 确保所有测试通过
## 项目信息
### Star History
[![Star History Chart](https://api.star-history.com/svg?repos=xerrors/Yuxi-Know)](https://star-history.com/#xerrors/Yuxi-Know)
## 📄 许可证
### 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。

1484
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,7 @@
"docs:preview": "vitepress preview docs"
},
"dependencies": {
"markdown-it-task-checkbox": "^1.0.6",
"vitepress": "^1.6.4"
}
}