Skip to content

[Bug] 知识库解析:select_parser 与 chunker 白名单不一致,mdx/mkd/html/csv/rtf 等格式无路由或路由矛盾 #9903

Description

@xiaoyuyu6420

问题描述

KB 解析器路由(select_parser)与分块器(chunker)的格式白名单不一致,且部分常见格式完全无路由。

  • astrbot/core/knowledge_base/parsers/util.pyselect_parser 只支持:.md/.txt/.markdown(TextParser)、.rst/.adoc/.xlsx/.docx/.xls(MarkitdownParser)、.epub.pdf,其余一律抛「暂时不支持的文件格式」
  • astrbot/core/knowledge_base/kb_helper.py(约 336-337 行)的 Markdown 分块白名单还包含 .mdx.mkd——这两个扩展名在 select_parser 中没有对应解析器,上传会在解析阶段直接失败,该分支实际是死代码,两侧自相矛盾
  • .html/.htm.csv.rtf 完全没有路由,但 MarkitdownParser(markitdown-no-magika)本身能解析 html/rtf/csv,能力被浪费

另外,上传链路只依赖文件名末尾扩展名(astrbot/dashboard/services/knowledge_base_service.py 约 577-579 行),没有任何 magic bytes 内容嗅探;astrbot/core/computer/file_read_utils.py 中针对 zip 头/mimetype 的嗅探逻辑在 KB 上传路径没有复用。

建议修复

  • 对齐 select_parser 与 chunker 白名单(为 .mdx/.mkd 增加 TextParser 路由,或移除 chunker 侧死分支)
  • 考虑将 .html/.htm/.csv/.rtf 路由到 MarkitdownParser,无 markitdown 依赖时优雅降级
  • (可选)上传时用内容嗅探校验扩展名与真实格式一致

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions