diff --git a/README.md b/README.md index 4a7991b2..701e0843 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,10 @@ ### ✨ 核心特性 -- 🤖 **多模型支持** - 适配主流大模型平台及本地部署(vLLM、Ollama),支持自定义智能体开发,兼容 LangGraph 部署 -- 📚 **灵活知识库** - 支持 LightRAG、Milvus、Chroma 等存储形式,配置 MinerU、PP-Structure-V3 的文档解析引擎 -- 🕸️ **知识图谱** - 支持 LightRAG 的自动图谱构建,以及自定义图谱问答,可接入现有知识图谱 -- 👥 **权限控制** - 支持超级管理员、管理员、普通用户三级权限体系 +- 🤖 **多模型支持** - 适配主流大模型平台及离线方案(vLLM、Ollama),支持自定义智能体开发,兼容 LangGraph 部署 +- 📚 **灵活知识库** - 支持 LightRAG、Milvus、Chroma 等存储形式,配置 MinerU、PP-Structure-V3 文档解析引擎 +- 🕸️ **知识图谱** - 支持 LightRAG 自动图谱构建,以及自定义图谱问答,可接入现有知识图谱 +- 👥 **权限安全** - 支持超级管理员、管理员、普通用户三级权限体系,并配置守卫模型
@@ -56,7 +56,7 @@ git clone -b 0.2.1 https://github.com/xerrors/Yuxi-Know.git cd Yuxi-Know ``` - 如果想要使用之前的稳定版(与现版本不兼容),可以使用分支:`stable` 分支,`main` 分支是最新的开发版本。 + 如果想要使用之前的稳定版(与现版本不兼容),可以使用 `stable` 分支,`main` 分支是最新的开发版本。 2. **配置 API 密钥** @@ -93,20 +93,20 @@ 如果拉取镜像失败,可以尝试手动拉取: ```bash - bash docker/pull_image.sh python:3.11-slim # 替换后面的 repo_name 即可 - ``` - **如果**依然存在镜像拉取问题,可以先在另一个可访问 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 +bash docker/pull_image.sh python:3.11-slim # 替换后面的 repo_name 即可 +``` +**如果**依然存在镜像拉取问题,可以先在另一个可访问 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_images_xxx.tar 文件到开发设备 +scp docker_images_xxx.tar @: - # 在开发设备上执行 - docker load -i docker_images_xxx.tar - ``` +# 在开发设备上执行 +docker load -i docker_images_xxx.tar +```
镜像拉取完成,但是构建失败 @@ -157,6 +157,47 @@ custom-provider-name-here: ```
+### 自定义嵌入模型和重排序模型 + +需要注意的是,从 v0.2 版本开始,项目将模型部署和项目本身做了完全解耦,因此无论是 Embedding 还是 Reranker,如果需要使用本地模型,都需要使用 vllm /ollama 转换为 api 服务后,在 src/static/models.yaml 或者 src/static/models.private.yaml (优先)中 添加类似下面的信息: + +```yaml +EMBED_MODEL_INFO: + # 其余的 + vllm/Qwen/Qwen3-Embedding-0.6B: + name: Qwen/Qwen3-Embedding-0.6B + dimension: 1024 + base_url: http://localhost:8000/v1/embeddings + api_key: no_api_key + +RERANKER_LIST: + vllm/BAAI/bge-reranker-v2-m3: + name: BAAI/bge-reranker-v2-m3 + base_url: http://localhost:8000/v1/rerank + api_key: no_api_key +``` + +
+启动脚本示例 + +```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 +``` + +
+ + + ### OpenAI 兼容模型 项目理论上兼容任何 OpenAI 兼容的模型,包括但不限于 vLLM、Ollama 或者其他 API 中转或者代理服务。在 Web 界面的"设置"中添加本地模型地址。 @@ -166,7 +207,7 @@ custom-provider-name-here: ### 知识库管理 -现在支持的知识库类型包括 `Chroma`、`Milvus`、`LightRAG`。[LightRAG](https://github.com/HKUDS/LightRAG) 是轻量级 GraphRAG方法。 +现在支持的知识库类型包括 `Chroma`、`Milvus`、`LightRAG`。[LightRAG](https://github.com/HKUDS/LightRAG) 是轻量级 GraphRAG 方法。 @@ -180,9 +221,9 @@ custom-provider-name-here: ### 知识图谱 -在 v0.2 版本中,项目支持了基于 [LightRAG](https://github.com/HKUDS/LightRAG) 的知识图谱构建方法。需要在知识库中创建一个基于 LightRAG 的知识库,然后上传文档。构建的知识图谱会自动导入到 Neo4j 中,并使用不同的 label 做区分。需要说明的是,基于 LightRAG 的知识库,可以在知识库详情中可视化,但是不能在侧边栏的图谱中检索,知识图谱检索工具也不支持基于 LightRAG 的知识库进行检索。基于 LightRAG 方法构建的图谱的查询,需要使用对应的知识库作为查询工具。 +在 v0.2 版本中,项目支持了基于 [LightRAG](https://github.com/HKUDS/LightRAG) 的知识图谱构建方法。需要在知识库中创建一个基于 LightRAG 的知识库,然后上传文档。构建的知识图谱会自动导入到 Neo4j 中,并使用不同的 label 做区分。需要说明的是,基于 LightRAG 的知识库可以在知识库详情中可视化,但是不能在侧边栏的图谱中检索,知识图谱检索工具也不支持基于 LightRAG 的知识库进行检索。基于 LightRAG 方法构建的图谱查询,需要使用对应的知识库作为查询工具。 -默认使用的图谱构建模式是 `siliconflow` 的 `Qwen/Qwen3-30B-A3B-Instruct-2507`,可以使用 `LIGHTRAG_LLM_PROVIDER` 和 `LIGHTRAG_LLM_NAME` 覆盖。 +默认使用的图谱构建模型是 `siliconflow` 的 `Qwen/Qwen3-30B-A3B-Instruct-2507`,可以使用 `LIGHTRAG_LLM_PROVIDER` 和 `LIGHTRAG_LLM_NAME` 覆盖。
@@ -202,7 +243,7 @@ custom-provider-name-here:
-除此之外,也支持将已有的知识图谱按照下面的格式导入 Neo4j 中,上传后,节点会自动添加 `Upload`、`Entity` 标签,关系会自动添加 `Relation` 标签。可以通过 `name` 属性访问实体的名称,使用 `type` 属性访问边的名称。默认账户密码是`neo4j` / `0123456789`。 +除此之外,也支持将已有的知识图谱按照下面的格式导入 Neo4j 中,上传后,节点会自动添加 `Upload`、`Entity` 标签,关系会自动添加 `Relation` 标签。可以通过 `name` 属性访问实体的名称,使用 `type` 属性访问边的名称。默认账户密码是 `neo4j` / `0123456789`。 **数据格式**:支持 JSONL 格式导入,可以先尝试 [test/data/A_Dream_of_Red_Mansions_tiny.jsonl](test/data/A_Dream_of_Red_Mansions_tiny.jsonl) 文件。 @@ -212,7 +253,7 @@ custom-provider-name-here: {"h": "上海", "t": "中国", "r": "直辖市"} ``` -此外,也可以通过修改 `docker-compose.yml` 中的 `NEO4J_URI` 配置来接入已有的 Neo4j 实例,**但是**最好确保每个节点都有 Entity 标签,每个关系都有 `RELATION` 类型,否则会影响到图的检索与构建。 +此外,也可以通过修改 `docker-compose.yml` 中的 `NEO4J_URI` 配置来接入已有的 Neo4j 实例,**但是**最好确保每个节点都有 `Entity` 标签,每个关系都有 `RELATION` 类型,否则会影响到图的检索与构建。 注:在“图谱”页面,只能看到上传的节点和边,基于 LightRAG 构建的图谱不会展示在里面,完整的图谱可以去 Neo4j 管理页面查看。 @@ -220,7 +261,7 @@ custom-provider-name-here: ### OCR 服务(可选) -对于**基础的 OCR 服务**(RapidOCR onnx 版本),可以使用 SWHL/RapidOCR 的 onnx 版本,但是需要提前将模型下载到 `$MODEL_DIR` 目录下(默认 `src/.env.template` 中为 `models`)。在容器内实际路径为 `/models`(由 `MODEL_DIR_IN_DOCKER` 指向)。 +对于**基础的 OCR 服务**(RapidOCR ONNX 版本),可以使用 SWHL/RapidOCR 的 ONNX 版本,但是需要提前将模型下载到 `$MODEL_DIR` 目录下(默认 `src/.env.template` 中为 `models`)。在容器内实际路径为 `/models`(由 `MODEL_DIR_IN_DOCKER` 指向)。 ```bash huggingface-cli download SWHL/RapidOCR --local-dir ${MODEL_DIR:-./models}/SWHL/RapidOCR @@ -249,7 +290,7 @@ docker compose up paddlex --build 目前该项目默认集成了三个 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` 定义了配置参数。 +如果需要自定义智能体应用,需要实现一个继承于 `BaseAgent` 的类,并实现 `get_graph` 方法返回一个 graph 实例。智能体的 `context_schema` 定义了配置参数。 注册智能体的方式请参考已有实现:[src/agents/__init__.py](src/agents/__init__.py)。例如: @@ -263,7 +304,7 @@ agent_manager.init_all_agents() ### MySQL 数据库查询集成(Beta) -项目目前已经支持智能体去查询 MySQL 数据库如果想要接入数据库,则可以在环境变量中配置如下信息: +项目目前已经支持智能体查询 MySQL 数据库,如果想要接入数据库,则可以在环境变量中配置如下信息: ```sh # 基础配置示例 @@ -297,7 +338,7 @@ MYSQL_CHARSET=utf8mb4 ### 图表可视化绘制 - MCP(Beta) -这个是基于 @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`。 +这是基于 @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`。 ```python # MCP Server configurations @@ -338,9 +379,9 @@ MCP_SERVERS = { ### 品牌信息配置 -在主页和登录页面的很多信息,比如 Logo,组织名称,版权信息等,都可以复制 [src/static/info.template.yaml](src/static/info.template.yaml),并新建一个 `src/static/info.local.yaml`(或者在 .env 文件中配置 `YUXI_BRAND_FILE_PATH` 指向这个文件),在这个文件中配置。在项目启动时,会加载这个文件,然后根据文件中的配置,渲染到前端页面中。如果 `src/static/info.local.yaml` 不存在,会默认使用 [src/static/info.template.yaml](src/static/info.template.yaml) 中的配置。 +在主页和登录页面的很多信息,比如 Logo、组织名称、版权信息等,都可以复制 [src/static/info.template.yaml](src/static/info.template.yaml),并新建一个 `src/static/info.local.yaml`(或者在 .env 文件中配置 `YUXI_BRAND_FILE_PATH` 指向这个文件),在这个文件中配置。在项目启动时,会加载这个文件,然后根据文件中的配置渲染到前端页面中。如果 `src/static/info.local.yaml` 不存在,会默认使用 [src/static/info.template.yaml](src/static/info.template.yaml) 中的配置。 -系统的配色方面,主要保存在 [web/src/assets/css/base.css](web/src/assets/css/base.css) 中。只要替换其中的 `--main-*` 相关的变量,就可以改变系统的配色。 +系统的配色方面,主要保存在 [web/src/assets/css/base.css](web/src/assets/css/base.css) 中。只要替换其中的 `--main-*` 相关变量,就可以改变系统的配色。 ### 预设脚本 diff --git a/src/static/models.yaml b/src/static/models.yaml index 29d97f25..541857c2 100644 --- a/src/static/models.yaml +++ b/src/static/models.yaml @@ -120,7 +120,7 @@ EMBED_MODEL_INFO: vllm/Qwen/Qwen3-Embedding-0.6B: name: Qwen3-Embedding-0.6B dimension: 1024 - base_url: http://localhost:8081/v1/embeddings + base_url: http://localhost:8000/v1/embeddings api_key: no_api_key ollama/nomic-embed-text: @@ -140,7 +140,7 @@ RERANKER_LIST: base_url: https://api.siliconflow.cn/v1/rerank api_key: SILICONFLOW_API_KEY - vllm/Qwen/Qwen3-Reranker-0.6B: - name: Qwen/Qwen3-Reranker-0.6B - base_url: http://localhost:8081/v1/rerank + vllm/BAAI/bge-reranker-v2-m3: + name: BAAI/bge-reranker-v2-m3 + base_url: http://localhost:8000/v1/rerank api_key: no_api_key