You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python版Microsoft Bot Framework中捕获机器人响应内容

解决方案

方法1:使用自定义中间件全局捕获所有机器人响应

该方案适合需要全量采集机器人响应的场景,不管在哪个对话模块发送的内容都可以统一拦截获取:

  • 首先自定义中间件类,重写on_turn方法,等机器人完成业务逻辑生成响应后,从上下文的出站活动队列里获取响应内容
from botbuilder.core import Middleware, TurnContext

class CaptureResponseMiddleware(Middleware):
    async def on_turn(self, turn_context: TurnContext, next):
        # 先执行后续业务逻辑,等待机器人生成所有响应内容
        await next()
        
        # 遍历本次交互所有出站活动
        for activity in turn_context.activities:
            # 过滤机器人发送的文本消息,可根据需求扩展支持卡片、附件等内容类型
            if activity.type == "message" and activity.text:
                # 此处已获取机器人响应文本,可自行实现存储、日志、审核等逻辑
                bot_response = activity.text
                print(f"机器人响应内容:{bot_response}")
  • 在Bot初始化阶段将中间件注册到Adapter即可生效
from botbuilder.core import BotFrameworkAdapter

adapter = BotFrameworkAdapter(...)
# 注册自定义响应捕获中间件
adapter.use(CaptureResponseMiddleware())

方法2:发送响应时直接捕获(轻量场景)

如果仅需要在特定对话节点获取响应内容,无需全局采集,可以在调用发送接口时直接取返回结果:

# 发送响应时直接获取返回的活动对象
response_activity = await turn_context.send_activity("需要发送给用户的内容")
# 直接提取响应文本
bot_response = response_activity.text
# 自行处理业务逻辑
print(f"当前节点发送的响应:{bot_response}")

注意事项

  • 如果机器人发送的是富文本卡片、附件等非纯文本内容,需要从activity.attachments、activity.cards等属性提取对应内容,不要仅读取text字段
  • 单次交互中如果机器人发送了多条消息,turn_context.activities会包含所有出站活动,可根据业务需求做过滤处理

内容的提问来源于stack exchange,提问作者user9855045

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:21:00