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

如何在Bot Framework Composer V2.1.1中添加Translation Middleware翻译中间件

Bot Framework Composer V2.1.1 翻译中间件配置教程

适用场景:使用Bot Framework Composer V2.1.1版本,新建机器人默认语言为en-us,已添加印尼语作为第二支持语言,因LUIS不支持印尼语需通过翻译中间件实现多语言适配,操作步骤如下:

1. 安装依赖包

通过NuGet包管理器安装以下匹配版本的依赖:

  • Microsoft.Bot.Builder 推荐4.15.x系列稳定版,和Composer V2.1.1版本兼容
  • Azure.AI.Translation.Text 最新稳定版,用于调用Azure翻译服务
  • 提前准备好已创建的Azure翻译服务资源的密钥、服务区域参数

2. 自定义翻译中间件类

在项目根目录新增TranslationMiddleware.cs文件,代码实现如下:

using Microsoft.Bot.Builder;
using Microsoft.Bot.Schema;
using Azure.AI.Translation.Text;
using System.Threading;
using System.Threading.Tasks;

public class TranslationMiddleware : IMiddleware
{
    private readonly TextTranslationClient _translationClient;
    private readonly string _defaultSourceLanguage = "en-us";
    // 可根据用户上下文动态调整目标语言,此处示例固定为印尼语
    private readonly string _userTargetLanguage = "id";

    public TranslationMiddleware(TextTranslationClient translationClient)
    {
        _translationClient = translationClient;
    }

    public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default)
    {
        if (turnContext.Activity.Type == ActivityTypes.Message)
        {
            // 翻译用户输入为英文,供LUIS识别
            var userInput = turnContext.Activity.Text;
            var translationResponse = await _translationClient.TranslateAsync(new[] { _defaultSourceLanguage }, userInput, cancellationToken: cancellationToken);
            turnContext.Activity.Text = translationResponse.Value[0].Translations[0].Text;

            // 拦截回复消息,翻译为用户使用的语言
            turnContext.OnSendActivities(async (sendContext, activities, nextSend) =>
            {
                foreach (var activity in activities)
                {
                    if (activity.Type == ActivityTypes.Message && !string.IsNullOrEmpty(activity.Text))
                    {
                        var replyTranslation = await _translationClient.TranslateAsync(new[] { _userTargetLanguage }, activity.Text, cancellationToken: cancellationToken);
                        activity.Text = replyTranslation.Value[0].Translations[0].Text;
                    }
                }
                return await nextSend();
            });
        }
        await next(cancellationToken);
    }
}

3. 修改Startup.cs注册服务与中间件

V2.1.1版本生成的项目Startup结构和V1差异较大,按照以下步骤修改:

3.1 注册翻译服务与中间件

在ConfigureServices方法中添加以下代码:

// 注册Azure翻译客户端
services.AddSingleton<TextTranslationClient>(sp => 
{
    var translationKey = Configuration["Translation:Key"];
    var translationRegion = Configuration["Translation:Region"];
    return new TextTranslationClient(new Azure.AzureKeyCredential(translationKey), translationRegion);
});

// 注册自定义翻译中间件
services.AddSingleton<TranslationMiddleware>();

3.2 注入中间件到Bot适配器

找到ConfigureServices中注册适配器的代码块,添加中间件引用:

services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>((sp) =>
{
    var storage = sp.GetService<IStorage>();
    var conversationState = sp.GetService<ConversationState>();
    var userState = sp.GetService<UserState>();
    var telemetryClient = sp.GetService<IBotTelemetryClient>();
    var translationMiddleware = sp.GetService<TranslationMiddleware>();
    
    var adapter = new AdapterWithErrorHandler(configuration, customHttpClient, logger, conversationState, userState, telemetryClient);
    // 将翻译中间件加入适配器处理管道
    adapter.Use(translationMiddleware);
    return adapter;
});

如果项目使用Composer默认的AddBotRuntime注入方式,可在runtime配置的ConfigureAdapters委托中添加上述中间件注册逻辑。

4. 添加配置参数

在appsettings.json文件中新增翻译服务配置节点:

"Translation": {
  "Key": "你的Azure翻译服务密钥",
  "Region": "你的Azure翻译服务区域,例如eastasia"
}

5. 验证效果

启动机器人后,用户发送印尼语消息,中间件会自动翻译成英文传给LUIS做意图识别,LUIS返回的英文回复会被自动翻译成印尼语返回给用户,无需修改原有LUIS应用和对话逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:24:04