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

如何在Bot Framework中实现Azure OpenAI的GetCompletionsStreamingAsync功能?

在Bot Framework中实现Azure OpenAI流式响应(GetCompletionsStreamingAsync)

一、自定义实现方案(无官方现成功能时的解决方案)

目前Bot Framework没有直接封装Azure OpenAI流式响应的现成功能,可结合Azure OpenAI的流式API与Bot Framework的消息更新能力,手动实现流式输出效果:

1. 核心逻辑

通过GetCompletionsStreamingAsync获取AI返回的内容片段,先发送一条初始占位消息,再通过Bot Framework的UpdateActivityAsync接口,逐步将新片段追加到已发送的消息中,模拟实时打字的流式体验。

2. 代码示例

// 初始化Azure OpenAI客户端与请求参数
var openAIClient = new OpenAIClient(new Uri("你的Azure OpenAI端点地址"), new AzureKeyCredential("你的API密钥"));
var completionsOptions = new CompletionsOptions
{
    Prompt = "用户的提问内容",
    MaxTokens = 500,
    Stream = true // 开启流式响应
};

// 先发送一条空初始消息作为基底
var initialActivity = MessageFactory.Text("");
var sentActivity = await dialogContext.Context.SendActivityAsync(initialActivity);

// 遍历流式返回的内容片段,逐步更新消息
var fullResponse = "";
await foreach (var completion in openAIClient.GetCompletionsStreamingAsync("你的模型部署名称", completionsOptions))
{
    if (!string.IsNullOrEmpty(completion.Text))
    {
        fullResponse += completion.Text;
        // 更新已发送的消息,替换为当前累计的完整内容
        var updateActivity = MessageFactory.Text(fullResponse);
        updateActivity.Id = sentActivity.Id; // 指定要更新的目标消息ID
        await dialogContext.Context.UpdateActivityAsync(updateActivity);
        
        // 可选:添加短延迟,模拟自然打字速度
        await Task.Delay(60);
    }
}

3. 关键注意事项

  • 通道兼容性:Teams完全支持UpdateActivityAsync操作,不会产生重复消息,可正常实现流式效果。
  • 格式处理:需注意内容片段的拼接逻辑,避免出现标点、空格错位等格式问题。
  • 异常捕获:需处理流式过程中的网络波动、API调用失败等异常,保障机器人稳定性。

二、官方功能状态

当前Bot Framework SDK(.NET版本)暂未提供直接集成Azure OpenAI流式响应的现成方法,官方也未公开该功能的上线时间表。若需官方支持,可关注Bot Framework的GitHub仓库或微软官方文档的更新动态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:20:00