在飞书里跟 AI Agent 说话,你发完一条消息,等半天,回来看到一段灰色文字。它怎么得出这个结论的?中间调用了什么工具?是不是卡在哪一步了?——什么都不知道。
这个感觉就像你让一个程序员去修 bug,他最后甩给你一行"修好了",但中间翻了多少代码、试了多少方案,你一概不知。
最近看到一个小众但有意义的开源项目,叫 Hermes Feishu Streaming Card,专门解决这个"黑盒"问题。它给飞书里的 Hermes Agent 装了一个"透明仪表盘"——AI 的思考过程、工具调用、最终回答,全部收在一张不断更新的飞书卡片里,而不是被拆成一条条灰色消息刷屏。
一张卡片,看完整思考过程
这个插件的核心体验是这样的:你在飞书里给 Hermes Agent(一个开源的 AI Agent 框架)发了一条指令。Agent 开始工作,飞书里立刻出现一张卡片。
卡片的标题区显示 "思考中……",下面开始滚动显示模型正在推理什么。当模型调用工具(比如查天气 API、搜索网页、执行脚本)的时候,卡片上会显示工具名称和状态。最后答案生成,卡片的正文区域更新为最终回复,底部 footer 显示耗时、用了什么模型、消耗了多少 token。
整个过程,你只用盯着同一张卡片看它从"思考中"变成"已完成"——不需要翻聊天记录、不需要猜它在干嘛。
飞书卡片上的实时天气查询:思考过程、工具调用、最终结果全部在同一张卡片内
按按钮就行,不用打字回复
另一个让我觉得"设计到点子上了"的功能是卡片内的交互按钮。
Hermes Agent 在运行中有时会需要用户授权执行某个操作,或者让用户在几个选项里选一个。之前你需要在聊天框里手动输入"选第2个"或者"允许执行"——在手机上打字本来就烦,还得记住选项对应哪个编号。
有了这个插件,approval(授权请求)和 clarify(选项选择)直接在卡片里渲染成按钮。点一下按钮,选择就生效了,Agent 继续往下跑。整个交互没有离开当前卡片上下文。
如果你的 sidecar 跑在 localhost(本地)或者内网,默认会自动降级为卡片内的编号文本选项,交互交还给 Hermes 原生流程。配置了公开的飞书回调地址才能用真实按钮。——这是设计上的诚实取舍。
长内容不崩,表格和代码不会乱
飞书的卡片渲染有一个老毛病:长表格和长代码块经常会显示成 raw markdown 文本——就是那种带着 ``` 标记的原始格式,看起来像没渲染过的半成品。
这个插件在服务器端做了结构化切分:长 Markdown 表格超过字符阈值后,分块时重复表头,保证每块仍是合法表格。长 fenced code block 拆成多个完整代码围栏,不会出现"代码被截半段"的尴尬。
此外,飞书卡片有 5 个富文本表格的限制,超限时插件会自动截断并提示,不会让渲染端报错。
插件架构:Hermes hook → sidecar → Feishu CardKit,fail-open 设计
架构精巧:独立运行,故障不蔓延
这个插件的架构我也很欣赏:它不是直接侵入 Hermes 的核心代码,而是以一个 独立 sidecar 服务 的方式运行。
Hermes Gateway 里只装了一个极小的 hook,负责把事件转发给 sidecar。sidecar 持有完整的状态机、卡片渲染、飞书 API 调用、重试逻辑和健康检查。
这意味着:如果 sidecar 挂了或者你升级了 Hermes,hook 是 fail-open 的——Hermes 会退回普通文本消息,不会因为你装了插件就用不了 Agent。
这种加个旁路,不影响主流程的设计思路,比直接改核心代码要成熟得多。
多机器人多账号,一个 sidecar 全管
如果你运营多个飞书机器人(比如销售机器人和客服机器人),或者用了多个 Hermes profile,每个 profile 对应不同的 API key 和角色设定,之前的做法是各跑各的 sidecar。
这个插件原生支持多 profile / 多 bot:一个 sidecar 进程可以服务多个 Hermes profile,使用 profile_id:message_id 作为 session key 隔离。而且支持 bindings.chats 把特定群聊绑定到特定机器人上。
它还提供了 status、/health.routing 等诊断端点,让你能快速确认"哪个 profile 的请求走到了哪个 bot"。
哪些场景不太行
说点诚实的话。
第一,卡片需要 sidecar 独立运行,如果 sidecar 没有正确启动或者配置了错误的飞书凭据,卡片会停在"思考中"状态,最终回退到原生文本。这个时候你需要跑 doctor 诊断。
第二,local sidecar(没有公网回调地址的情况)不能使用真实的飞书按钮交互,会降级为文本编号选项,需要你手动打字回复。如果你想要真正的按钮体验,需要配置公开的飞书卡片回调 URL。
第三,安装流程稍微有点繁琐——虽然有一行安装脚本,但是需要配置飞书 App ID / Secret、选择正确的 Hermes 版本对应的 hook strategy,并且升级 Hermes 后需要重新安装 hook。
⭐ 点赞、转发、关注和推荐一键三连 ⭐
夜雨聆风