首页 > 其他分享 >基于Microsoft SemanticKernel和GPT4实现一个智能翻译服务

基于Microsoft SemanticKernel和GPT4实现一个智能翻译服务

时间:2024-02-17 16:37:01浏览次数:21  
标签:GPT4 Microsoft Kernel de SemanticKernel carregamento Charging

今年.NET Conf China 2023技术大会,我给大家分享了 .NET应用国际化-AIGC智能翻译+代码生成的议题

.NET Conf China 2023分享-.NET应用国际化-AIGC智能翻译+代码生成

今天将详细的代码实现和大家分享一下。

一、前提准备

1. 新建一个Console类的Project

2. 引用SK的Nuget包,SK的最新Nuget包

dotnet add package Microsoft.SemanticKernel --version 1.4.0
<ItemGroup>
    <PackageReference Include="Microsoft.SemanticKernel" Version="1.4.0" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
  </ItemGroup>

3. 在Azure OpenAI Service中创建一个GPT4的服务,这个可能大家没有账号,那就先看代码如何实现吧

部署好GPT4模型后,可以拿到以下三个重要的值

Azure OpenAI Deployment Name Azure OpenAI Endpoint Azure OpenAI Key 二、编写翻译使用的Prompt
 {{$input}}
请将上面的输入翻译为英文,不要返回任何解释说明,
请扮演一个美国电动汽车充电服务运营商(精通中文和英文),用户的输入数据是JSON格式,例如{"1":"充电站", "2":"充电桩"}, 
如果不是JSON格式,请返回无效的输入。
请使用以下专业术语进行翻译
 {
    "充电站":"Charging station",
    "电站":"Charging station",
    "场站":"Charging station",
    "充电桩":"Charging point",
    "充电终端":"Charging point",
    "终端":"Charging point",
    "电动汽车":"Electric Vehicle",
    "直流快充":"DC Fast Charger",
    "超级充电站":"Supercharger",
    "智能充电":"Smart Charging",
    "交流慢充":"AC Slow Charging"
}
翻译结果请以JSON格式返回,例如 {"1":"Charging station", "2":"Charging point"}

类似的还有葡萄牙下的翻译Prompt

{{$input}}
请将上面的输入翻译为葡萄牙语,不要返回任何解释说明,请扮演一个巴西的电动汽车充电服务运营商(精通葡萄牙语、中文和英文)
用户的输入数据是JSON格式,例如{"1":"充电站", "2":"充电桩"}, 如果不是JSON格式,请返回无效的输入
请使用以下专业术语进行翻译
 {
  "充电站": "Estação de carregamento",
  "电站": "Estação de carregamento",
  "场站": "Estação de carregamento",
  "充电桩": "Ponto de carregamento",
  "充电终端": "Ponto de carregamento",
  "终端": "Ponto de carregamento",
  "电动汽车": "Veículo Elétrico",
  "直流快充": "Carregador Rápido DC",
  "超级充电站": "Supercharger",
  "智能充电": "Carregamento Inteligente",
  "交流慢充": "Carregamento AC Lento"
}
请以JSON格式返回,例如 {"1":"Estação de carregamento", "2":"Ponto de carregamento"}

在项目工程下新建Plugins目录和TranslatePlugin子目录,同时新建Translator_en和Translator_pt等多个子目录

 config.json文件下的内容如下:

{
    "schema": 1,
    "type": "completion",
    "description": "Translate.",
    "completion": {
         "max_tokens": 2000,
         "temperature": 0.5,
         "top_p": 0.0,
         "presence_penalty": 0.0,
         "frequency_penalty": 0.0
    },
    "input": {
         "parameters": [
              {
                   "name": "input",
                   "description": "The user's input.",
                   "defaultValue": ""
              }
         ]
    }
}

三、Translator翻译类,实现文本多语言翻译

这个类主要实现将用户输入的文本(系统处理为JSON格式),翻译为指定的语言

using System.Runtime.InteropServices; using Microsoft.SemanticKernel; using Newtonsoft.Json;
namespace LLM_SK; public class Translator {     Kernel kernel;     public Translator(Kernel kernel)     {         this.kernel = kernel;     }
    public IDictionary<int, string> Translate(IDictionary<int, string> textList, string language)     {         var pluginDirectory = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Plugins/TranslatePlugin");         var plugin = kernel.CreatePluginFromPromptDirectory(pluginDirectory, "Translator_" + language + "");        
        var json = JsonConvert.SerializeObject(textList);      
        if (!string.IsNullOrEmpty(json))         {             var output = kernel.InvokeAsync(plugin["Translator_" + language + ""], new() { ["input"] = json }).Result.ToString();             if (!string.IsNullOrWhiteSpace(output))             {                 Console.WriteLine(output);                 return JsonConvert.DeserializeObject<Dictionary<int, string>>(output);             }         }
        return new Dictionary<int, string>();     } }

这个类中构造函数中接收传入的Kernel对象,这个Kernel对象是指

Microsoft.SemanticKernel.Kernel  
//
// Summary:
//     Provides state for use throughout a Semantic Kernel workload.
//
// Remarks:
//     An instance of Microsoft.SemanticKernel.Kernel is passed through to every function
//     invocation and service call throughout the system, providing to each the ability
//     to access shared state and services.
public sealed class Kernel

暂且理解为调用各类大模型的Kernel核心类,基于这个Kernel实例对象完成大模型的调用和交互

另外,上述代码中有个Prompt模板文件读取的操作。

        var pluginDirectory = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Plugins/TranslatePlugin");         var plugin = kernel.CreatePluginFromPromptDirectory(pluginDirectory, "Translator_" + language + "");    

 从Plugins/TranslatePlugin目录下读取指定的KernelPlugin,例如Translator_en英语翻译插件和Translator_pt 葡萄牙翻译插件

 var output = kernel.InvokeAsync(plugin["Translator_" + language + ""], new() { ["input"] = json }).Result.ToString();

 调用KernelFunction方式实现GPT4大模型调用

 //
    // Summary:
    //     Invokes the Microsoft.SemanticKernel.KernelFunction.
    //
    // Parameters:
    //   function:
    //     The Microsoft.SemanticKernel.KernelFunction to invoke.
    //
    //   arguments:
    //     The arguments to pass to the function's invocation, including any Microsoft.SemanticKernel.PromptExecutionSettings.
    //
    //
    //   cancellationToken:
    //     The System.Threading.CancellationToken to monitor for cancellation requests.
    //     The default is System.Threading.CancellationToken.None.
    //
    // Returns:
    //     The result of the function's execution.
    //
    // Exceptions:
    //   T:System.ArgumentNullException:
    //     function is null.
    //
    //   T:Microsoft.SemanticKernel.KernelFunctionCanceledException:
    //     The Microsoft.SemanticKernel.KernelFunction's invocation was canceled.
    //
    // Remarks:
    //     This behaves identically to invoking the specified function with this Microsoft.SemanticKernel.Kernel
    //     as its Microsoft.SemanticKernel.Kernel argument.
    public Task<FunctionResult> InvokeAsync(KernelFunction function, KernelArguments? arguments = null, CancellationToken cancellationToken = default(CancellationToken))
    {
        Verify.NotNull(function, "function");
        return function.InvokeAsync(this, arguments, cancellationToken);
    }

 继续封装GPT4TranslateService,构造Microsoft.SemanticKernel.Kernel 类实例。

using System.Globalization;
using Microsoft.SemanticKernel;

namespace LLM_SK;
public class GPT4TranslateService
{    
    public IDictionary<int,string> Translate(IDictionary<int, string> texts, CultureInfo cultureInfo)
    {
        var kernel = BuildKernel();
        var translator = new Translator(kernel);
        return translator.Translate(texts, cultureInfo.TwoLetterISOLanguageName );
    }

    //私有方法,构造IKernel
    private Kernel BuildKernel()
    {
        var builder = Kernel.CreateBuilder();
        builder.AddAzureOpenAIChatCompletion(
                 "xxxxgpt4",                  // Azure OpenAI Deployment Name
                 "https://****.openai.azure.com/", // Azure OpenAI Endpoint
                 "***************");      // Azure OpenAI Key

        return  builder.Build();
   }
}

四、测试调用

这里我们设计了2种语言,英语和葡萄牙的文本翻译

var culture = new CultureInfo("en-US");
var translator = new GPT4TranslateService();
translator.Translate(new Dictionary<int, string>(){{ 1,"电站"}, {2,"终端不可用"},{3,"充电桩不可用"} ,
{4,"场站"},{5,"充电站暂未运营" }},culture);

culture = new CultureInfo("pt-BR");
translator.Translate(new Dictionary<int, string>(){{ 1,"电站"}, {2,"终端不可用"},{3,"充电桩不可用"} ,
{4,"场站"},{5,"充电站暂未运营" }},culture);

输出的结果

{"1":"Charging station","2":"Charging point unavailable","3":"Charging station unavailable","4":"Charging station","5":"Charging station not in operation yet"}
{"1":"Estação de carregamento","2":"Ponto de carregamento não está disponível","3":"Ponto de carregamento não está disponível","4":"Estação de carregamento","5":"A estação de carregamento ainda não está em operação"}

五、总结

以上是基于SemanticKernel和GPT4实现一个智能翻译服务的Demo和框架,大家可以基于这个示例继续完善,增加更多动态的数据和API调用,例如将JSON数据写入数据库

同时还可以记录翻译不稳定的异常,手工处理或者继续完善Prompt。

 

周国庆

2024/2/17

标签:GPT4,Microsoft,Kernel,de,SemanticKernel,carregamento,Charging
From: https://www.cnblogs.com/tianqing/p/18018050

相关文章

  • SharePoint Add-In retirement in Microsoft 365
    前言最近一个偶然发现,SharePointAdd-In要退休停用了,一个很意外但又情理之中的事情,大家有需要的可以看看微软的官方文档,简单翻译了一下,英文不好凑合看看。正文在这个专注于数字化转型的新发展世界中,微软努力通过现代化、优化、安全的解决方案为我们的客户提供......
  • 性能最接近 GPT4,开源AI模型 “泄露”
    近期开源AI社区发生了一场大事件,一位用户在HuggingFace平台上传了一系列文件,包含一个看似新的开源大型语言模型“miqu-1-70b”。这一模型被认为是最接近OpenAI的GPT-4,引发了广泛关注和猜测。不少用户则在社交平台X(原名Twitter)上分享了测试比较,miqu和Mixtral模型的能力......
  • 干事没个计划?Microsoft To Do值得你一试
    很多人每天的工作排的满满当当,但是总是怕忘记,拿一个小本本记一记,拿电脑记事本写一写,这些都是办法,只能说,这些可能不是最好的办法,最好的办法是:使用可以同步的TODO软件,市面上的TODO软件有很多,今天给大家推荐一款TODO软件:MicrosoftToDo。MicrosoftToDo是微软的ToDo软件,虽然不支......
  • Microsoft 365 无法进入网页版outlook--循环重定向问题
    最近有个Microsoft365客户遇到管理员账户无法进入网页版outlook的问题,在登录Microsoft365网页版outlook时,输入完用户名和密码之后,网页不断的重复跳转,无法进入到网页版邮箱。多次跳转之后报错如下图经检查发现导致该问题的原因是该账户被分配了过多的角色。如果为用户分配了过多的......
  • 校验ChatGPT 4真实性的三个经典问题:提供免费测试网站快速区分 GPT3.5 与 GPT4
    现在已经有很多ChatGPT的套壳网站,以下分享验明GPT-4真身的三个经典问题,帮助你快速区分套壳网站背后到底用的是GPT-3.5还是GPT-4。大家可以在这个网站测试:https://ai.hxkj.vip,免登录可以问三条,登录之后无限制。咱们使用免登录的额度测试就已经够用了测试问题1:Whatist......
  • Microsoft 365 开发:Office 365 Multi-Geo说明以及如何查询是否启用了Multi-Geo功能
    51CTOBlog地址:https://blog.51cto.com/u_13969817很多国内出海企业,为了满足各个Region的法律法规要求,其数据驻留要求和利用云进行数字化转型方面面临挑战。Microsoft365的Multi-Geo可以实现使单个Office365租户能够跨越多个地区和/或国家/地区来解决这些挑战,并使客户能够灵活选......
  • Microsoft WindowsWindows Server远程代码执行漏洞
    MicrosoftWindowsWindowsServer远程代码执行漏洞发布时间:2021-11-16浏览次数:285次MicrosoftWindows和MicrosoftWindowsServer都是美国微软(Microsoft)公司的产品。MicrosoftWindows是一套个人设备使用的操作系统。MicrosoftWindowsServer是一套服务器操作系统。一、漏洞......
  • fail: Microsoft.Extensions.Hosting.Internal.Host[11] Hosting failed to sta
    docker发布.net8项目#使用.NET运行时镜像作为最终镜像FROMmcr.microsoft.com/dotnet/runtime:8.0#设置工作目录WORKDIR/app#复制项目文件到工作目录COPY./appENVASPNETCORE_URLS="http://*:8003"ENVASPNETCORE_HTTP_PORTS=""#设置入口点ENTRYPOINT["dotn......
  • Microsoft 365 开发:开发者如何使用Delegated Access通过PowerShell调用Graph API
    51CTOBlog地址:https://blog.51cto.com/u_13969817MicrosoftGraphAPI是一种RESTfulwebAPI,它整合了对各种Microsoft365服务的访问,允许开发人员创建跨多个平台与数据交互的应用程序,包括AzureActiveDirectory、SharePoint、OneDrive、Outlook等。MicrosoftGraphPowerShell适......
  • Microsoft 365 开发:开发者如何使用App ID连接Graph API的方法汇总
    51CTOBlog地址:https://blog.51cto.com/u_13969817在上文中我们介绍了如何在AzureAD中注册Application并授权相关GraphAPI,本文将给大家介绍开发者如何使用AppID和Certificate(Secret)通过PowerShell连接GraphAPI?采用AppID和Certificate通过PowerShell连接GraphAPI的命令如下所......