知识库
概述
知识库模块用于构建企业私有知识库,支持多种文档格式上传、自动内容提取、智能分块、向量化存储与检索。
配置说明
application.yml
yaml
knowledge:
# 向量维度,需与 embedding 模型输出一致(千问 text-embedding-v3 = 1024)
dimension: 1024
# RedisEmbeddingStore 索引名前缀,实际索引名 = prefix + collectionName
index-prefix: "kb:"
# 文档处理线程池
ingest:
core-pool-size: 2
max-pool-size: 4
queue-capacity: 200
keep-alive-seconds: 60
# 单个文档处理最长时长(秒),超过则视为处理中超时,定时任务重新入队
process-timeout-seconds: 600向量库复用 spring.data.redis 连接配置。
使用说明

1. 创建知识库
进入 资源库 → 知识库,点击「新增」:
- 填写知识库名称和描述
- 选择 Embedding 模型(需先在模型管理中配置)
- 设置分块大小和重叠大小(可选,有默认值)
- 点击「确定」
2. 上传文档
在知识库详情页点击「上传文档」:
- 选择本地文件
- 系统自动上传并异步处理(提取内容 → 分块 → 向量化)
- 在文档列表中查看处理进度和状态
支持的文档格式:
- Word(doc、docx)
- Markdown(md)
- 纯文本(txt)
- PowerPoint(ppt、pptx)
- Excel(xls、xlsx)
- CSV
- HTML
3. 查看分块
在文档列表中点击「分块」按钮,查看该文档的所有分块:
- 可手动编辑分块内容
- 可启用/禁用分块(禁用后不会被检索)
- 可删除分块
4. 检索测试
需要到流程设计的知识库节点中试运行测试
处理流程
文档摄取流程
- 用户上传文件 → 文件存储到 OSS 或本地
- 创建
AiKnowledgeDocument记录,状态为PENDING - 异步任务
KnowledgeIngestExecutor执行:- 状态更新为
PROCESSING DocumentContentExtractor提取文本内容TextChunker按 chunkSize 分块- 批量创建
AiKnowledgeChunk记录 EmbeddingModelFactory创建 Embedding 模型KnowledgeStoreService向量化并存入 Redis 向量库- 状态更新为
SUCCESS,记录 chunkCount
- 状态更新为
- 异常时状态更新为
FAILED,记录错误信息
超时重试
定时任务 KnowledgeDocScheduled 每分钟检查一次:
- 状态为
PROCESSING且超过process-timeout-seconds的文档 - 重新入队处理
数据库实体
AiKnowledgeBase(知识库)
知识库是文档的集合,每个知识库关联一个 Embedding 模型,向量独立存储。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 编号 |
| name | String | 知识库名称 |
| description | String | 知识库描述 |
| icon | String | 知识库图标 |
| collectionName | String | 向量库集合名称 |
| embeddingModelId | Long | 嵌入模型ID |
| chunkSize | Integer | 分块大小 |
| chunkOverlap | Integer | 分块重叠大小 |
| status | Integer | 启用状态:0-禁用,1-启用 |
| createBy | Long | 创建人ID |
| createTime | LocalDateTime | 记录创建时间 |
| updateBy | Long | 最后更新人ID |
| updateTime | LocalDateTime | 记录最后更新时间 |
| deleteFlag | Boolean | 删除标记:0-正常,1-已删除 |
| orgId | Integer | 所属组织ID |
AiKnowledgeDocument(文档)
上传到知识库的文件,记录处理状态。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 编号 |
| knowledgeBaseId | Long | 知识库ID |
| name | String | 文档名称 |
| docType | String | 文档类型 |
| docUrl | String | 文档URL/路径 |
| summary | String | 文档内容摘要 |
| status | Integer | 文档状态:0-待处理,1-处理中,2-已完成,3-失败 |
| errorMessage | String | 处理失败原因 |
| chunkCount | Integer | 分块数量 |
| createBy | Long | 创建人ID |
| createTime | LocalDateTime | 记录创建时间 |
| updateBy | Long | 最后更新人ID |
| updateTime | LocalDateTime | 记录最后更新时间 |
| deleteFlag | Boolean | 删除标记:0-正常,1-已删除 |
| orgId | Integer | 所属组织ID |
AiKnowledgeChunk(分块)
文档被分割后的文本片段,用于向量存储和检索。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 编号 |
| knowledgeBaseId | Long | 知识库ID |
| documentId | Long | 文档ID |
| vectorId | String | 向量库中的ID |
| content | String | 分块内容 |
| sortOrder | Integer | 分块序号 |
| status | Integer | 分块状态:0-停用,1-启用 |
| metadata | String | 元数据JSON |
| createBy | Long | 创建人ID |
| createTime | LocalDateTime | 记录创建时间 |
| updateBy | Long | 最后更新人ID |
| updateTime | LocalDateTime | 记录最后更新时间 |
| deleteFlag | Boolean | 删除标记:0-正常,1-已删除 |
| orgId | Integer | 所属组织ID |
核心类
KnowledgeIngestService
文档摄取服务,处理文档上传与异步处理。
KnowledgeStoreService
向量存储服务,封装 RedisEmbeddingStore 操作。
RedisVectorStoreManager
Redis 向量库管理器,负责创建索引、添加嵌入向量、检索等操作。
DocumentContentExtractor
文档内容提取器,基于 Apache Tika 实现。
TextChunker
文本分块器,支持按 token 计数分块。
KnowledgeRetriever
知识库检索接口,主实现位于 agent-plus-plugin 模块。
向量库实现
当前使用 Redis 作为向量库(langchain4j-community-redis),可以快速开发和运行测试,后续会继续开发其它类型的向量库实现;
向量索引名规则:
{knowledge.index-prefix}{knowledgeBaseId}例如:kb:1
扩展点
如需切换到其他向量库(如 Milvus、Weaviate、PGVector),只需实现 KnowledgeRetriever 接口并替换相应的 Bean。