Skip to content

Conversation

@lxfight
Copy link
Contributor

@lxfight lxfight commented Oct 25, 2025

Motivation / 动机

为了增强 AstrBot 的智能问答能力和知识管理功能,本次变更引入了全新的知识库模块。该功能允许用户创建、管理和应用知识库,使 AstrBot 能够基于特定领域的知识进行精准问答,解决了原先模型仅依赖通用知识导致回答不够专业和定制化的问题。

将知识库功能并入 AstrBot 主线项目,也便于社区进行后续的持续迭代和优化。

Modifications / 改动点

本次更新围绕知识库功能,对前后端代码进行了系统性添加和修改,核心改动如下:

后端 (Backend):

  • astrbot/core/knowledge_base 目录下新增了知识库核心逻辑,实现了知识库及文档的 CRUD (创建、读取、更新、删除) 操作,以及文档切分、向量化和检索的完整流程。
  • astrbot/dashboard/utils.py 文件中,添加了将知识库检索内容嵌入对话上下文的逻辑,为问答提供背景知识。
  • 新增 astrbot/dashboard/routes/knowledge_base.py 文件,用于注册知识库相关的 API 路由。

前端 (Frontend):

  • dashboard/src/views/knowledge-base 目录下,添加了知识库管理的完整前端界面,包括:
    • 知识库列表、创建、编辑和删除功能。
    • 知识库详情页,包含文档管理(上传、删除、查看处理状态)和知识检索测试功能。
  • dashboard/src/views/SessionManagementPage.vue 文件中,为每个会话添加了知识库配置选项,允许用户为不同对话场景绑定和切换知识库。

其他 (Others):

  • 更新了 requirements.txtpyproject.toml 以包含知识库功能所需的新依赖库。
  • 更多详细变更请参见 Git commit 记录。

Verification Steps / 验证步骤

  1. 访问知识库管理页面

    • 启动 AstrBot 后,访问 Dashboard。
    • 在侧边栏导航中找到并点击“知识库”菜单。
    • 页面应成功加载并显示知识库列表,如 “知识库界面” 截图所示。
  2. 创建和管理知识库

    • 点击“新建知识库”,填写信息并创建。
    • 进入新建的知识库,应能看到如 “知识库详情页” 所示的界面。
    • 在“文档管理”标签页中,上传文档(如 TXT, PDF, Markdown 等),并观察其处理状态,如 “文档管理页” 截图所示。
  3. 测试知识检索

    • 在知识库详情页中,切换到“知识检索”标签页。
    • 输入与上传文档相关的问题,点击测试。
    • 系统应能返回相关的知识片段,证明检索功能正常,如 “知识检索测试页” 截图所示。
  4. 在会话中应用知识库

    • 进入“会话管理”页面。
    • 选择或创建一个会话,在会话设置中找到知识库配置项。
    • 为该会话绑定刚刚创建的知识库,如 “会话管理中的知识库配置” 截图所示。
  5. 进行问答测试

    • 回到对话界面,使用绑定了知识库的会话进行提问。
    • 提出与知识库文档相关的问题。
    • AstrBot 的回答应能准确利用知识库中的内容,如 “问答测试” 截图所示。

Screenshots or Test Results / 运行截图或测试结果

知识库界面
image

知识库详情页
image

文档管理页
image

image image

知识检索测试页
image

会话管理中的知识库配置
image
image
image

问答测试
image

Compatibility & Breaking Changes / 兼容性与破坏性变更

  • 这是一个破坏性变更 (Breaking Change)。/ This is a breaking change.
  • 这不是一个破坏性变更。/ This is NOT a breaking change.

Checklist / 检查清单

  • 😊 如果 PR 中有新加入的功能,已经通过 Issue / 邮件等方式和作者讨论过。/ If there are new features added in the PR, I have discussed it with the authors through issues/emails, etc.
  • 👀 我的更改经过了良好的测试,并已在上方提供了“验证步骤”和“运行截图”。/ My changes have been well-tested, and "Verification Steps" and "Screenshots" have been provided above.
  • 🤓 我确保没有引入新依赖库,或者引入了新依赖库的同时将其添加到了 requirements.txtpyproject.toml 文件相应位置。/ I have ensured that no new dependencies are introduced, OR if new dependencies are introduced, they have been added to the appropriate locations in requirements.txt and pyproject.toml.
  • 😮 我的更改没有引入恶意代码。/ My changes do not introduce malicious code.

lxfight and others added 30 commits October 19, 2025 18:39
- 添加 pypdf、aiofiles、rank-bm25 依赖包支持文档解析和检索
- 在 default.py 中添加知识库完整配置项
- 配置包括嵌入模型、重排序、存储路径、分块策略、检索参数等
- 默认禁用知识库功能,需用户主动启用
- 实现完整的知识库数据模型(知识库、文档、文档块、会话配置)
- 实现基于 SQLite 的向量数据库存储和检索
- 实现文档解析器(PDF、TXT)和固定大小分块器
- 实现混合检索系统(密集向量检索 + BM25 稀疏检索 + RRF 融合)
- 实现知识库生命周期管理和消息注入器
- 支持会话级别的知识库配置和关联
- 在 AstrBotCoreLifecycle 中初始化知识库管理器
- 将知识库注入器添加到消息处理上下文
- 在消息流水线中添加 KBEnhanceStage(知识库增强阶段)
- 实现会话删除时的知识库配置级联清理机制
- 添加会话管理器的回调注册机制,支持零侵入扩展
- 实现知识库管理 API(创建、删除、列表、更新)
- 实现文档管理 API(上传、删除、列表、分块信息)
- 实现知识库检索测试 API(支持调试和验证)
- 实现会话配置 API(绑定/解绑知识库、配置检索参数)
- 实现全局配置 API(启用/禁用、模型选择、检索参数)
- 在 Dashboard 服务器中注册知识库路由
- 添加知识库 V2 完整中文翻译文件
- 包括:主页、文档管理、检索测试、全局设置、会话配置
- 在 Alkaid 导航中添加"原生知识库"入口
- 区分"原生知识库"和"知识库(插件)"两个入口
- 添加知识库 V2 完整英文翻译文件
- 包括:主页、文档管理、检索测试、全局设置、会话配置
- 在 Alkaid 导航中添加 "Native Knowledge Base" 入口
- 区分 "Native Knowledge Base" 和 "Knowledge Base (Plugin)"
- 实现知识库 V2 主页面和 4 个子面板组件
- 文档管理面板:支持上传、删除、查看文档分块
- 检索测试面板:支持测试知识库检索效果
- 全局设置面板:配置嵌入模型、重排序、检索参数
- 会话配置面板:管理会话与知识库的绑定关系
- 重构 Alkaid 路由为嵌套结构,添加知识库 V2 路由
- 在翻译系统中注册知识库 V2 多语言支持
- 默认进入 Alkaid 时跳转到原生知识库页面
Soulter and others added 16 commits October 24, 2025 17:13
Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @lxfight, your pull request is larger than the review limit of 150000 diff characters

@Soulter Soulter closed this Oct 25, 2025
@Soulter Soulter reopened this Oct 25, 2025
@Soulter Soulter merged commit 6cfed9a into AstrBotDevs:master Oct 25, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants