docs(deploy): 添加 GitHub Actions 工作流以自动部署 VitePress 站点
This commit is contained in:
parent
c71f079929
commit
8c39d7e6e0
66
.github/workflows/deploy.yml
vendored
Normal file
66
.github/workflows/deploy.yml
vendored
Normal 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
|
||||
@ -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' }
|
||||
]
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
@ -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 里面展示
|
||||
|
||||
@ -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. 查询结果过大会被自动截断并提示
|
||||
#### 使用建议
|
||||
|
||||
### 图表可视化绘制 - MCP(Beta)
|
||||
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
|
||||
|
||||
系统支持基于 MCP(Model 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
|
||||
|
||||
[](https://star-history.com/#xerrors/Yuxi-Know)
|
||||
|
||||
## 📄 许可证
|
||||
### 许可证
|
||||
|
||||
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
|
||||
|
||||
|
||||
1484
package-lock.json
generated
1484
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -5,6 +5,7 @@
|
||||
"docs:preview": "vitepress preview docs"
|
||||
},
|
||||
"dependencies": {
|
||||
"markdown-it-task-checkbox": "^1.0.6",
|
||||
"vitepress": "^1.6.4"
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user