Skip to content

[建议 / Feature] 支持飞书流式卡片(Feishu Streaming Card)提升 Bot 交互体验 #59

Description

@chanzhangds

功能描述

希望 ZCode 的飞书 Bot 支持 流式卡片(Streaming Card) 功能,通过飞书 CardKit API 实现打字机式逐字输出和结构化的卡片消息,大幅提升飞书端的使用体验。

现状与问题

目前 ZCode 的飞书 Bot 使用的是纯文本消息(messageType: text),具体表现为:

  1. 无流式效果 — 模型输出是一次性/分块返回的,用户在飞书端看不到 AI 逐字"打字"的实时效果
  2. 无法展示结构化内容 — 没有卡片布局,无法做标题头、表格、代码块高亮、分割线、按钮等
  3. 工具调用不可见 — 用户看不到 Agent 在后台使用工具(读文件、执行命令等)的过程
  4. 思考过程不可见 — 推理内容无法以折叠/进度条方式展示
  5. 格式简陋 — Markdown 渲染能力受限

对比竞品:

  • Claude Code 的 Lark-channel 插件已实现多 block 流式卡片(文本/Bash/Read/Write/Grep/WebSearch 各自独立卡片块)
  • Hermes Agent 的 feishu-streaming-card 插件实现了思考过程+工具调用+最终答案的同张卡片流式更新
  • Telegram Bot API 10.1 已原生支持 sendRichMessageDraft 流式 + RichBlock 表格/公式/代码块

技术可行性

飞书 CardKit 已提供完整的流式卡片 API:

① cardkit.v1.card.create      → 创建 streaming_mode: true 的卡片实体
② cardkit.v1.card_element.content → 递增 sequence 推送内容
③ cardkit.v1.card.update      → 关闭流式,替换最终富卡片
  • 飞书客户端 ≥ 7.20 支持打字机动画(print_step / print_frequency_ms 参数)
  • 频率限制:每卡每秒 10 次推送(足够 Token 级更新)
  • 社区有 feishu-streaming-card Python 库可直接参考

ZCode 已通过 WebSocket 与飞书打通,CardKit API 可通过 HTTP 调用,技术上无壁垒

建议方案

  1. 基础流式卡片:模型回答逐 token 或按 chunk 更新同一张卡片,带打字机动画
  2. 结构化卡片:使用卡片 header(标题)+ markdown 元素(正文)+ note 元素(Token 用量/耗时)
  3. 思考过程展示:推理内容放入可折叠区域或独立"思考"块
  4. 工具调用可见:工具执行过程以独立 block 展示(类似 Lark-channel 方案)
  5. 最终富卡片:流式结束后替换为带按钮的完整卡片(如"继续"/"重试"等)

参考项目

项目 GitHub 说明
feishu-streaming-card KaisLeungL/feishu-streaming-card Python 库,最简流式卡片封装
hermes-feishu-streaming-card baileyh8/hermes-feishu-streaming-card Hermes 网关集成,sidecar 架构
lark-channel shareAI-lab/lark-channel Claude Code 飞书插件,多 block 流式
feishu-thinking-card ccsiaa/feishu-thinking-card 思考状态流式展示

期望效果

在飞书端使用 ZCode 时,用户体验达到甚至超越:

  • ChatGPT 在 Web 端的逐字流式输出
  • Claude Code 在 Lark-channel 中的多 block 卡片展示
  • Telegram Bot 中的 Rich Messages 结构化能力

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions