「Yet Another End Bot」是 Yet Another「Yet Another Tree Context Chat Bot」,虽然这听起来像绕口令,但毫无疑问,yaeb 是吸取了 yatccb 大量实践教训的重构版本。
yatccb 存在什么问题?
隐私模式上下文受限
yatccb 选择了工作在隐私模式1下,这听起来很不错,但也导致了 yatccb 只能接受到有限的信息。
在群聊中,人们总是会倾向于将长文本拆成多条消息发送,这导致了 yatccb 从回复一条消息开始对话变成不可用,而后 yatccb 只能沿着「对话」树保持上下文关系,虽然能保证多用户多线程的交互,但是树的末端节点变得琐碎,用户难以分辨上下文关系。
此外,群聊内已展开的话题,yatccb 也难以参与,无法获取当前上下文,用户也无法通过简单地方式将上下文带给 yatccb。
多媒体信息功能缺失
群聊内文本、图片、视频、超链接等等共同构成完整的消息记录,yatccb 作为早期试验产品,也缺少对多媒体信息处理的设计。
为什么选择重构?
因为不存在除了彻底重构以外的解决方式。yatccb 选择了使用隐私模式,后期开发处理的逻辑都是建立在这个基础上的,而 yaeb 选择了关闭隐私模式,自然不存在除了推倒重来以外的方法。
yaeb 做出了哪些改变?
完全上下文支持
关闭隐私模式最大的功能是 yaeb 不再局限于受限的上下文,可以自由获取几乎所有信息,虽然受制于成本以及 LLM 上下文窗口的考量不可能做到无限的上下文。
当前,yaeb 能够获取 5 分钟内的聊天记录,这使得 yaeb 可以很容易的参与群聊内的话题。
支持多媒体消息
当前,yaeb 已支持图像识别、超链接读取。
其他多媒体消息是否支持仍在调研,并且评估其是否符合二八定律2。
放弃流式输出
telegram 本身不提供流式输出的 API,yatccb 为了追求较快的首字节响应,通过反复编辑同一消息模拟流式效果。
实际使用后发现,群聊 bot 往往不需要输出很长的内容,而得益于 Gemini 2.0 flash 较快的 token 吞吐量,绝大部分回复在 2 s 内完成;同时,模拟流式效果,代码复杂度却大大提升;反复编辑会产生大量对 telegram 的 API 调用,容易触发 429。
综上,流式输出不符合二八定律2,因此 yaeb 放弃了该功能。
取消多模型支持
yatccb 作为早期试验产品并不有模型的倾向,选择支持多模型切换。
实际使用后,大多会固定为一个模型而不再进行切换,考虑到多模型对视觉、函数调用支持度不一,因此 yaeb 采用单一模型。