Skip to main content

功能说明

FeishuChannelExtension 把飞书机器人的入站消息桥接到 VeADK Runner。
本页是把飞书作为入站消息渠道:飞书用户发来的消息会触发智能体运行。若需让智能体主动调用飞书能力,请参见飞书工具。
它监听飞书机器人的消息事件,并把飞书的会话身份映射到 VeADK:以消息发送者作为 Runner 的用户标识,以消息所在的话题作为会话标识;话题不存在时,回退到当前群聊或单聊作为会话标识。1.0.5 支持提取文本消息、互动卡片与合并转发消息中的文本内容,并兼容同步 Channel SDK 生命周期。
话题历史与引用消息默认开启。扩展会读取相关飞书消息并将内容发送给模型;应用配置了会话、长期记忆或日志时,这些内容还可能按对应策略保存。启用机器人前应确认消息读取范围、模型数据处理和保留策略符合业务要求;不需要上下文时关闭 include_thread_history 与 include_parent_message。
收到话题消息或回复消息时,扩展会自动获取话题历史或被引用的父消息,并将这些上下文拼接到用户消息前再转发给智能体,使智能体能够参考完整对话上下文。详见话题历史与引用消息。

环境变量与前提

安装:
如果只想要这一项能力,也可以单独安装:
环境变量:
  • TOOL_FEISHU_CHANNEL_APP_ID
  • TOOL_FEISHU_CHANNEL_APP_SECRET
  • TOOL_FEISHU_CHANNEL_TRANSPORT:默认 ws
  • TOOL_FEISHU_CHANNEL_STREAMING:是否开启流式输出,默认 false
  • TOOL_FEISHU_CHANNEL_REACTIONS:是否在收到消息时回复“收到”表情,默认 false
  • TOOL_FEISHU_CHANNEL_RECONNECT_INTERVAL:WebSocket 断开后重连的间隔秒数,默认 3
  • TOOL_FEISHU_CHANNEL_DRAIN_TIMEOUT:优雅关停时等待已接收消息处理完成的最大秒数,默认 300
或在 config.yaml 中配置:
config.yaml

使用方法

examples/channel/feishu_bot.py

优雅关停

FeishuChannelExtension 提供独立的生命周期方法,用于在 ASGI 应用(如 FastAPI、Starlette)的启动与关闭钩子中管理 WebSocket 连接,使滚动更新或进程退出时不会丢失正在处理的飞书消息。 关停流程分两步:先关闭 WebSocket 以停止接收新消息(飞书会将新事件重新路由到仍持有连接的其他实例),再等待已接收的消息完成回复。消息回复通过飞书 OpenAPI HTTP 客户端发送,不依赖 WebSocket,因此关停期间已接收的消息仍能正常回复。
仅使用 connect() 直接运行的长连接场景不需要调用 start() / shutdown();适用于进程退出前无需排空消息的简单脚本。在 ASGI 服务中托管时,使用 start() 与 shutdown() 才能获得优雅关停能力。

使用示例

在 ASGI 应用的启动与关闭钩子中调用 start() 与 shutdown():
examples/channel/feishu_asgi.py

方法

shutdown() 会等待在途消息处理完成。若消息处理耗时较长且超过 drain_timeout,未完成的任务将被取消。生产环境应根据智能体平均响应时间调整 TOOL_FEISHU_CHANNEL_DRAIN_TIMEOUT,避免正常回复被中断。

环境变量

参数

话题历史与引用消息

当消息来自飞书话题(thread)或是一条回复消息时,扩展会在把消息转发给智能体之前,自动获取相关上下文并拼接到用户消息文本之前:
  • 话题历史:消息属于话题时,扩展获取该话题内按时间正序排列的历史消息(最多 thread_history_limit 条,不包含当前消息),将其作为话题上下文拼接到用户消息前。
  • 引用消息:消息是一条回复但未归属话题时,扩展获取被引用的父消息;若父消息无法获取,则回退获取该回复链的根消息,将其作为引用上下文拼接到用户消息前。
话题历史优先于引用消息:当消息同时存在话题标识时,仅附加话题历史,不再单独获取父消息。获取到的消息内容会被还原为可读文本,覆盖文本消息、富文本(post)、互动卡片与合并转发消息。
获取话题历史与引用消息需要通过飞书 OpenAPI 调用消息接口,因此必须配置 app_id 与 app_secret(构造参数,或 TOOL_FEISHU_CHANNEL_APP_ID / TOOL_FEISHU_CHANNEL_APP_SECRET 环境变量,回退到 TOOL_LARK_ENDPOINT / TOOL_LARK_API_KEY)。未配置凭证时该能力会被跳过,不会报错。

使用示例

先保存并配置上方的 feishu_bot.py,再在同一目录创建以下文件:
examples/channel/feishu_bot_thread.py
关闭该能力,使扩展仅转发当前消息原文:
examples/channel/feishu_bot_plain.py

额外说明

  • 默认使用飞书的 WebSocket 长连接模式,因此只要机器人已订阅消息事件,即可直接启动连接。
  • 默认以回复原消息的形式发送,使 VeADK 的输出挂在当前飞书消息线程下。
  • 可以通过 session_id_factory 与 user_id_factory 覆盖默认的身份映射逻辑。
  • connect() 与 disconnect() 同时兼容异步客户端和提供 start() / stop() 的同步 Channel SDK。
  • 开启流式输出时,回复内容按增量片段直接拼接发送,不再因去重启发式而丢失或截断字符。
最后修改于 2026年9月19日