这两天准备做两个给学员答疑用的「课代表」智能体,想着扣子API挺完善准备把它们搭在扣子上。
折腾一天,现在非常庆幸没提前付费,哪怕 9.9/月那个版本。
坑一:按层级分段
我尝试的第一个场景很简单:把课程视频使用通义听悟提炼出包括当节课程概要、关键问题、PPT摘录等内容的“逐字稿”传到扣子知识库里做个智能体。
当学员有问题时,这个「课代表」智能体可以简单回答,然后告诉学员这个知识点在哪节课有详细讲。
导出的md文档长这样:

可以说相当完美了:
-
1. 非常标准的 Markdown 层级关系,可以直接按层级来分段 -
2. 一共 3 级,正好符合扣子最大分段层级数
把资料导进知识库,选了层级分段、也勾选了检索切片保留层级信息,最终结果直接不可用。
如果我对「检索切片保留层级信息」的理解没错的话,它应该是把文档的所有第 3 层(五级标题+正文)切片作为分段,当检索到当前切片时,应该返回当前片段+上层标题+上上层标题。
但,实际上并不是这样的。
它实际的切片逻辑是:把你选择的层级数以下的内容作为分段,比如我上面文档包含一级标题、二级标题、五级标题和正文一共四级,如果我选择了 3 层,它会把所有五级标题(不含)以下的正文层级作为片段存在知识库中。
某个片段被检索命中后,召回的是当前片段和上面的五级标题,再之前的二级标题和一级标题不返回。
下图是检索结果,你会看到知识库输出的 output 里包含一段内容+最后一个单独的段落文本。

希望官方把文档写明白,懒得写可以直接用我上面的介绍。
给其他开发者闭坑。
这个还好,写个脚本自己处理一下也就好了。
分享最终的解决方案:
因为我需要智能体最终给出问题讲解课程所在的章节(也就是一级标题),所以直接使用 Python 写了脚本,最终处理后的文档长这样:
(自带分隔符、每个分段包含所有上层标题)

坑二:标签不能用
直接说坑:如果你的资料里包含<xml>标签,传到扣子知识库会被直接被「吃掉」,并且导致你自定义的分段分隔符失效。
看截图:我整理的<xml>标签直接被吃掉,选择的自定义分隔符$$也直接不起作用了,整个分段直接不可用。

在分段预览里<xml>不显示可以理解是被前端给解析掉了,但是自定义分段标识符、以及标签内的文本也都不见了就很迷。
下面是 dify 处理的结果,虽然也有一个bug(分段后会吃掉第一个<标签),但信息一个也没落下,预览只是“吃掉”了标签,信息没缺失。

就这 BUG,真的是越专业越没法弄……
这次使用<xml>标签来预处理资料,单纯是让 AI 写 Python 脚本时临时起意,不使用 XML 也完全可以实现。
偶然发现这么一个 BUG 也好,希望还没动工的开发者能提前闭坑。
当然更希望官方优化一下,或者至少在文档里加粗标注提示一下。


