Skip to content
GitCode

知识库

概述

知识库模块用于构建企业私有知识库,支持多种文档格式上传、自动内容提取、智能分块、向量化存储与检索。

配置说明

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. 创建知识库

进入 资源库 → 知识库,点击「新增」:

  1. 填写知识库名称和描述
  2. 选择 Embedding 模型(需先在模型管理中配置)
  3. 设置分块大小和重叠大小(可选,有默认值)
  4. 点击「确定」

2. 上传文档

在知识库详情页点击「上传文档」:

  1. 选择本地文件
  2. 系统自动上传并异步处理(提取内容 → 分块 → 向量化)
  3. 在文档列表中查看处理进度和状态

支持的文档格式:

  • PDF
  • Word(doc、docx)
  • Markdown(md)
  • 纯文本(txt)
  • PowerPoint(ppt、pptx)
  • Excel(xls、xlsx)
  • CSV
  • HTML

3. 查看分块

在文档列表中点击「分块」按钮,查看该文档的所有分块:

  • 可手动编辑分块内容
  • 可启用/禁用分块(禁用后不会被检索)
  • 可删除分块

4. 检索测试

需要到流程设计的知识库节点中试运行测试

处理流程

文档摄取流程

  1. 用户上传文件 → 文件存储到 OSS 或本地
  2. 创建 AiKnowledgeDocument 记录,状态为 PENDING
  3. 异步任务 KnowledgeIngestExecutor 执行:
    • 状态更新为 PROCESSING
    • DocumentContentExtractor 提取文本内容
    • TextChunker 按 chunkSize 分块
    • 批量创建 AiKnowledgeChunk 记录
    • EmbeddingModelFactory 创建 Embedding 模型
    • KnowledgeStoreService 向量化并存入 Redis 向量库
    • 状态更新为 SUCCESS,记录 chunkCount
  4. 异常时状态更新为 FAILED,记录错误信息

超时重试

定时任务 KnowledgeDocScheduled 每分钟检查一次:

  • 状态为 PROCESSING 且超过 process-timeout-seconds 的文档
  • 重新入队处理

数据库实体

AiKnowledgeBase(知识库)

知识库是文档的集合,每个知识库关联一个 Embedding 模型,向量独立存储。

字段类型说明
idLong编号
nameString知识库名称
descriptionString知识库描述
iconString知识库图标
collectionNameString向量库集合名称
embeddingModelIdLong嵌入模型ID
chunkSizeInteger分块大小
chunkOverlapInteger分块重叠大小
statusInteger启用状态:0-禁用,1-启用
createByLong创建人ID
createTimeLocalDateTime记录创建时间
updateByLong最后更新人ID
updateTimeLocalDateTime记录最后更新时间
deleteFlagBoolean删除标记:0-正常,1-已删除
orgIdInteger所属组织ID

AiKnowledgeDocument(文档)

上传到知识库的文件,记录处理状态。

字段类型说明
idLong编号
knowledgeBaseIdLong知识库ID
nameString文档名称
docTypeString文档类型
docUrlString文档URL/路径
summaryString文档内容摘要
statusInteger文档状态:0-待处理,1-处理中,2-已完成,3-失败
errorMessageString处理失败原因
chunkCountInteger分块数量
createByLong创建人ID
createTimeLocalDateTime记录创建时间
updateByLong最后更新人ID
updateTimeLocalDateTime记录最后更新时间
deleteFlagBoolean删除标记:0-正常,1-已删除
orgIdInteger所属组织ID

AiKnowledgeChunk(分块)

文档被分割后的文本片段,用于向量存储和检索。

字段类型说明
idLong编号
knowledgeBaseIdLong知识库ID
documentIdLong文档ID
vectorIdString向量库中的ID
contentString分块内容
sortOrderInteger分块序号
statusInteger分块状态:0-停用,1-启用
metadataString元数据JSON
createByLong创建人ID
createTimeLocalDateTime记录创建时间
updateByLong最后更新人ID
updateTimeLocalDateTime记录最后更新时间
deleteFlagBoolean删除标记:0-正常,1-已删除
orgIdInteger所属组织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。