ForcePilot/docs/intro/knowledge-base.md
Wenjie Zhang e3c5f41c7c refactor: 知识库重新设计
- 默认的知识库类型新增图谱抽取能力
- 移除 LightRAG 以及原有的知识图谱支持
- 移除所有兼容性的代码
2026-05-26 17:39:12 +08:00

110 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 知识库与知识图谱
Yuxi 提供文档知识库、向量检索和知识图谱构建能力。当前支持 Milvus 知识库、Milvus 知识库内的图谱构建/展示/检索,以及 Dify Dataset 只读检索。
## 为什么需要知识库
在大模型应用场景中,仅依靠模型的内部知识往往不够准确和全面。通过构建知识库,我们可以:
- **注入私有知识**:让模型能够回答基于私有文档的问题
- **降低幻觉**:回答内容可追溯到原始文档
- **知识复用**:一次上传,多轮对话中重复使用
## 知识库类型
| 类型 | 特点 | 适用场景 |
|------|------|----------|
| **Milvus** | 高性能向量检索,支持文档入库、检索测试、评估和知识图谱构建 | 自建文档知识库与生产检索 |
| **Dify** | 连接 Dify Dataset 检索 API只读使用 | 复用已有 Dify 数据集 |
历史 LightRAG 类型不再作为受支持类型展示或创建。
## 创建知识库
访问 Web 界面的「知识库」页面,点击「新建知识库」:
1. 填写知识库名称和描述
2. 选择 Milvus 或 Dify
3. Milvus 配置嵌入模型和分块策略Dify 配置 API URL、Token 和 Dataset ID
4. 配置访问权限
5. 保存
::: tip 提示
知识库的名称和描述会被智能体用来判断何时应该使用这个知识库进行检索,所以请尽量详细地描述。
:::
## 文件处理流程
Milvus 文件从上传到可检索,经历三个阶段:
### 1. 上传阶段
将本地文件上传到服务器。文件保持原始格式存储。
### 2. 解析阶段
系统将文件转换为 Markdown 格式:
- 提取文本内容
- 图片上传到 MinIO并在 Markdown 中用 URL 引用
- 表格、公式等尽量保持结构化
### 3. 入库阶段
系统对 Markdown 内容进行分块,将 chunk 元数据保存到 PostgreSQL并将向量写入 Milvus。
在前端界面中,默认会自动完成前两个阶段。如果需要自动入库,勾选「上传后自动入库」选项;否则需要手动点击入库按钮。
## 知识库权限控制
每个知识库可以配置独立的访问权限:
- **全局共享**:所有用户可访问
- **部门授权**:仅指定部门可访问
- **私有**:仅创建者和管理员可访问
权限规则:
- 超级管理员可访问所有知识库
- 管理员可访问共享知识库和本部门的知识库
- 普通用户只能访问已授权的知识库
## 知识图谱
Milvus 知识库详情页提供「知识图谱」Tab。图谱构建流程会从已入库 chunks 中抽取实体和关系,并写入 Neo4j 作为图存储。
主要能力:
- 配置 LLM 或 spaCy 抽取器
- 构建待索引 chunks 的图谱实体与关系
- 查看构建状态、标签和统计信息
- 在知识库详情页搜索和展示子图
- 重置图谱配置与已构建数据
Neo4j 仍作为 Milvus 图谱存储服务保留,但不再提供独立 `/graph` 前端页面,也不再支持上传 JSONL 三元组到默认全局图谱。
### Neo4j 配置
Neo4j 连接信息可以在 `.env` 中配置:
- 默认账户:`neo4j`
- 默认密码:`0123456789`
- 管理界面http://localhost:7474
- 连接地址bolt://localhost:7687
## API 使用
如果需要通过程序批量处理文件,可以使用以下接口:
```bash
# 1. 上传文件
POST /api/knowledge/files/upload?db_id=<知识库ID>
# 返回 file_path 和 content_hash
# 2. 解析并入库
POST /api/knowledge/databases/{db_id}/documents
# 返回 status=queued 和 task_id
```
系统会自动去重:基于内容哈希判断是否已存在相同文件。