首页 > 编程语言 >Semantic Kernel/C#:接入智谱AI的两种方式

Semantic Kernel/C#:接入智谱AI的两种方式

时间:2024-08-21 09:15:03浏览次数:11  
标签:Kernel Semantic C# RequestUri request uriBuilder host new

Semantie Kernel中对话请求默认是发送到OpenAI去的:

image-20240820135810583

其他与OpenAI对话请求接口兼任的模型平台,一般只需要修改host即可,如下所示:

 default:
     uriBuilder = new UriBuilder(request.RequestUri)
     {
         // 这里是你要修改的 URL
         Scheme = "https",
         Host = host,
         Path = "v1/chat/completions",
     };
     request.RequestUri = uriBuilder.Uri;
     break;

但是智谱AI的对话接口地址如下:

image-20240820140509016

在python中这样就可以用,但SemanticKernel中好像还没有base_url的设置。

有两种方式可以实现。

一种是想和之前其他模型用相同的方式,把智普平台作为一种特殊的方式处理。

在appsettings.json中添加一个Platform字段,请求接口完全兼容OpenAI的可以不写:

image-20240820141319013

创建Kernel是这样的:

 var builder = Kernel.CreateBuilder()
 .AddOpenAIChatCompletion(
    modelId: OpenAIOption.ChatModel,
    apiKey: OpenAIOption.Key,
    httpClient: new HttpClient(handler));
_kernel = builder.Build();

然后在OpenAIHttpClientHandler为智谱平台做一下不同的处理:

public class OpenAIHttpClientHandler : HttpClientHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        UriBuilder uriBuilder;
        string url = OpenAIOption.Endpoint;
        string platform = OpenAIOption.Platform;
        Uri uri = new Uri(url);
        string host = uri.Host;
        switch (request.RequestUri?.LocalPath)
        {
            case "/v1/chat/completions":
                switch(platform)
                {
                    case "ZhiPu":
                        uriBuilder = new UriBuilder(request.RequestUri)
                        {
                            // 这里是你要修改的 URL
                            Scheme = "https",
                            Host = host,
                            Path = "api/paas/v4/chat/completions",
                        };
                        request.RequestUri = uriBuilder.Uri;
                        break;
                    default:
                        uriBuilder = new UriBuilder(request.RequestUri)
                        {
                            // 这里是你要修改的 URL
                            Scheme = "https",
                            Host = host,
                            Path = "v1/chat/completions",
                        };
                        request.RequestUri = uriBuilder.Uri;
                        break;
                }
                break;
        }
    
        HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
      
        return response;
    }
}

尝试是否成功:

image-20240820141544371

另一种方式更加简单,只需要在appsettings.json中这样写:

image-20240820141816259

使用这种方式创建Kernel即可:

image-20240820141925142

尝试是否成功:

image-20240820142138323

在AvaloniaChat中为了和其他平台保持统一的使用方式,我选择第一种方式。

OpenAIHttpClientHandler可以在此处查看:https://github.com/Ming-jiayou/AvaloniaChat/blob/main/src/AvaloniaChat/Model/OpenAIHttpClientHandler.cs

创建Kernel的两种方式可以在此处查看:https://github.com/Ming-jiayou/AvaloniaChat/blob/main/src/AvaloniaChat/ViewModels/MainViewModel.cs

标签:Kernel,Semantic,C#,RequestUri,request,uriBuilder,host,new
From: https://www.cnblogs.com/mingupupu/p/18370917

相关文章

  • 大型语言模型基准测试(LLM Benchmarks):理解语言模型性能
    我们今天来看一下大模型的基准测试,现在很多主流大模型,比如GPT-4、Claude3和GeminiUltra等,对于大模型的测试,因其多功能性和非确定性特性,使得评估它们的性能成为一个挑战。LLM的基准测试提供了一种标准化和严谨的框架,用于衡量这些模型在核心语言处理任务上的表现。理解这些基准......
  • JetBrains PyCharm 2024.2 (macOS, Linux, Windows) - 面向专业开发者的 Python IDE
    JetBrainsPyCharm2024.2(macOS,Linux,Windows)-面向专业开发者的PythonIDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-pycharm/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsPyCharm-面向专业开发者的Pytho......
  • pytorch的 scatter词解
    概述scatter_函数的作用在PyTorch中,scatter_函数是一种用于更新张量的函数,它可以根据给定的索引和值来更新张量中的元素。scatter_函数的基本语法如下:torch.scatter_(input,dim,index,src)其中:input是要更新的张量。dim是更新的维度。index是索引张量,用于指......
  • electron 官网速通
    前言:参考Electron中文网。核心知识点:有哪些进程,进程之间的通信,electronAPI分类及怎么调用。一、快速开始1.新建一个my-electron的文件夹。2.运行npminit创建package.json文件。3.填写author和description字段,应用打包必须。4.运行npminstall--save-......
  • JetBrains Rider 2024.2 (macOS, Linux, Windows) - 快速且强大的跨平台 .NET IDE
    JetBrainsRider2024.2(macOS,Linux,Windows)-快速且强大的跨平台.NETIDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-rider/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsRider-快速且强大的跨平台.NETIDE......
  • Easysearch x 《黑神话悟空》有奖征文获奖结果公示
    随着《黑神话:悟空》游戏的正式发售,我们INFINILabs组织的Easysearch有奖征文大赛也圆满落幕。本次征文活动自启动以来,收到了众多创作者的热情投稿。在此,我们衷心感谢每一位参与活动的作者,是你们的才华和热情让这次征文活动异彩纷呈。经过专业评审团的认真评选,最终确定了以下......
  • Docker无法运行java虚拟机报错There is insufficient memory for the Java Runtime
    镜像导入到docker后无法启动容器的问题,但是上传到别的服务器上面又可以正常启动容器,报错信息如下:#ThereisinsufficientmemoryfortheJavaRuntimeEnvironmenttocontinue.#CannotcreateGCthread.Outofsystemresources.#Cannotsavelogfile,dumptoscree......
  • CF2001C Guess The Tree
    欢迎前往我的博客获得也许更好的阅读体验!题意简述这是一个交互式问题。Misuki选择了一棵有\(n\)个节点的秘密树,节点编号为\(1\)到\(n\),并要求你通过以下类型的查询来猜出这棵树:“?ab”—Misuki会告诉你哪个节点\(x\)最小化了\(|d(a,x)-d(b,x)|\),其中\(d(x,......
  • 时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN
    时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention文章目录前言时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention一、BO-CNN-BiGRU-Attention模型1.贝叶斯优......
  • Java面试题--JVM大厂篇之未来已来:为什么ZGC是大规模Java应用的终极武器?
           ......