Semantic Kernel进阶:多模型的支持

news2024/11/17 21:50:41

     大家可能已经知道,Semantic Kernel默认主要支持两款模型:OpenAIAzureOpenAI。对于开发者来说,这显然是不够的,尤其是当我们希望对接国内的一些强大模型,比如百度的文心一言、阿里的通义千问、搜狗的百川、智谱ChatGLM、科大讯飞的星火等。那么,我们应该怎么做呢?

答案就是利用一个叫做"one-api"的开源项目。

项目地址:https://github.com/songquanpeng/one-api

核心功能

  • 支持多种大模型,覆盖国内外主流AI模型服务。

  • 配置简单,镜像、代理一应俱全。

  • 负载均衡访问多个渠道,保证服务的稳定性和高可用性。

  • 支持stream模式,可实现更为自然的交互体验。

  • 多机部署支持,拓展性强。

  • 安全的令牌管理和兑换码管理功能。

  • 方便的通道管理以及用户分组管理。

  • 支持模型映射和自动重试功能。

  • 支持绘图接口,拓宽模型应用范围。

  • 通过Cloudflare AI Gateway,简化网络配置。

关于部署

        one-api支持Docker部署,操作简便,维护成本低。支持使用SQLite或MySQL数据库,具体命令如下:

# 使用 SQLite 的部署命令:
docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api
# 使用 MySQL 的部署命令,在上面的基础上添加 `-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"`,请自行修改数据库连接参数,不清楚如何修改请参见下面环境变量一节。
# 例如:
docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api

        其中,-p 3000:3000 中的第一个 3000 是宿主机的端口,可以根据需要进行修改。

        数据和日志将会保存在宿主机的 /home/ubuntu/data/one-api 目录,请确保该目录存在且具有写入权限,或者更改为合适的目录。

      部署起来后,就可以使用one-api将其他模型转换为openai的格式了,并且one-api支持对模型的负载均衡,以及鉴权等操作。这个时候SK就可以对接了。

      然后SK默认又没有提供openai的Endpoint接口,那我们该怎么办呢?

新建一个 OpenAIHttpClientHandler 类:

    public class OpenAIHttpClientHandler : HttpClientHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (request.RequestUri.LocalPath == "/v1/chat/completions")
            {
                UriBuilder uriBuilder = new UriBuilder(request.RequestUri)
                {
                    // 这里是你要修改的 URL
                    Scheme = "",
                    Host = "",
                    Path = "oneapi/v1/chat/completions",
                };
                request.RequestUri = uriBuilder.Uri;
            }

            // 接着,调用基类的 SendAsync 方法将你的修改后的请求发出去
            HttpResponseMessage response = await base.SendAsync(request, cancellationToken);

            return response;
        }
    }

        然后我们依赖注入的地方也需要修改一下:

            var handler = new OpenAIHttpClientHandler();
            services.AddTransient<IKernel>((serviceProvider) =>
            {
                var kernel = Kernel.Builder
                  .WithLoggerFactory(LoggerFactory.Create(builder =>
                  {
                      builder.SetMinimumLevel(LogLevel.Information);
                      builder.AddConsole();
                  }))
                 .WithOpenAIChatCompletionService(
                  modelId: OpenAIOptions.Model,
                  apiKey: OpenAIOptions.Key,
                  httpClient: new HttpClient(handler))
                  .Build();
                return kernel;
            });

        上面的代码展示了如何通过自定义HttpClientHandler将Semantic Kernel的请求重定向到one-api。

        这个时候,我们就可以使用OpenAIHttpClientHandler,去对openai的接口进行拦截替换成自己oneapi的代理了

        one-api是个非常不错的模型连接器项目,不仅SK,其余开源组件也可以基于这个项目来对接各种模型。

        总结来说,通过one-api的多模型支撑和灵活的部署配置,我们可以更好地利用不同的AI语言模型,为用户提供更加丰富和个性化的服务。开源项目的力量,让开发者的路更为宽广。希望这篇博文对同行们有所帮助,也欢迎交流探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kickstart自动安装脚本制作详解

一、kickstart自动安装脚本制作 此实验中&#xff0c;使用Rhel7.9&#xff0c;并开启图形化系统 1.设置实验环境 1.使用Rhel7.9 2.需要打开图形化系统 [rootpxe ~]# hostnamectl # 查看当前系统是否为图形化Static hostname: pxeIcon name: com…

数字赋能下的艺术蝶变:沃可趣如何重塑乐园演艺人才培训?

全球知名主题乐园在2023年共接待游客超过1300万人次。 这意味着&#xff0c;在童话世界里创造快乐的演职人员们&#xff0c;平均每天要与三、四万人见面&#xff0c;以精湛的演技服务好每一个人&#xff0c;其工作难度和强度不言而喻。 减轻员工负担&#xff0c;帮助员工成长…

江协科技STM32学习- P4 新建工程

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

大语言模型超参数调整指南:入门调参的实用手册

在人工智能的广阔天地中&#xff0c;大语言模型&#xff08;LLM&#xff09;正以其强大的能力&#xff0c;不断刷新我们对机器理解语言的认知。然而&#xff0c;要使这些模型在特定应用场景下发挥最大效能&#xff0c;关键在于如何巧妙地调整其超参数。本文将带你深入探索 LLM …

4. 数组与集合

数据结构是管理和组织数据的基础&#xff0c;它直接影响到程序的性能和效率。在本章中&#xff0c;我们将深入探讨与数组和集合相关的知识。这些数据结构在Java编程中至关重要&#xff0c;无论是处理简单的线性数据还是复杂的多维数据&#xff0c;合理使用这些结构都能大大提高…

100个智能体实战技巧 | 如何让工作流也能处理图片

相信不少朋友都遇到过想要在工作流中处理图片但是却无从下手的情况 举个例子&#xff0c;扣子中有个插件叫OCR&#xff0c;是可以用来识别图中的文字的 然而作为一个插件&#xff0c;它只能在工作流中被调用&#xff0c;如下图 工作流 vs. 图像流 这就意味着&#xff0c;要使用…

Modal中的跳转用<Link>组件会报错?

在做链接跳转时&#xff0c;一般是用a标签或者link标签。但是当团队规范使用标签时&#xff0c;在modal&#xff08;antd的版本4&#xff09;中使用可能就有问题了。 报错内容是&#xff0c;发现link在使用时找不到路由上下文。因此报错。 原因&#xff1a;Link 组件在 return …

Vue3-响应式原理解析

vue3 与 vue2 主要差异之一无疑是响应式实现上的改变。本文主要阐述响应式原理的实现方式解析以及核心源码阅读的注释理解。 本文主要对响应式实现原理进行逻辑梳理,舍弃枯燥无味的代码,只用图解/文字进行功能描述,具体实现请自行阅读。保重!!! 如果问题,虚心求教,还请…

xxl_job任务调度简单使用

一、概念 任务调度是为了自动完成特定任务&#xff0c;在约定的特定时刻去执行任务的过程 如以下应用场景&#xff1a; 某电商平台需要每天上午10点&#xff0c;下午3点&#xff0c;晚上8点发放一批优惠券 某银行系统需要在信用卡到期还款日的前三天进行短信提醒 某财务系统…

UEditor百度富文本后端上传文件接口

UEditor百度富文本后端上传文件接口 直接上代码 接口&#xff1a; RequestMapping("/UEditorConfig")public String list(HttpServletRequest request, HttpServletResponse response) throws IOException {String config environment.getProperty("ueditor.c…

60%公司推行精益管理失败都源于同一原因,这个原因是...

精益管理在许多公司中已经成为提高运营效率、减少浪费、和提升客户满意度的重要方法。或者你觉得惊讶&#xff0c;根据我们的经验&#xff0c;超过60%的公司在实施精益管理失败&#xff0c;我们发现他们都有一个共同的原因&#xff0c;这个原因就是公司没有跟踪正确的指标&…

【图文并茂】ant design pro 如何优雅奇妙地把 crud 的 api 单独抽出来共用

我们写后台项目&#xff0c;经常要写增删改查的接口。 比如 角色 权限 我们不可能都写一个 api 比如 getRoles, getPermissions 这些请求列表的&#xff0c;都是一样的&#xff0c;只是路径不同 那么我们应该抽出来&#xff0c;放到一起&#xff0c;直接去调&#xff0c;只…

双向电表是什么电表?为什么光伏发电储能要求安装双向电能表!

双向电表是什么电表? 双向电表就在用电的时候假如是正转&#xff0c;那么向外送电的时候就是反转&#xff0c;也就是读数越来越小。反总是指反向总有功&#xff0c;反无是指反向总无功。 双向电表&#xff0c;也称为双向计量电能表&#xff0c;是一种能够计量用电和发电的电…

第三节:Nodify 添加连接关系

引言 Nodify有三层结构&#xff0c;编辑器Editor&#xff0c;节点Node和连接组件Connection&#xff0c;上节介绍了节点和编辑器&#xff0c;本节介绍连接组件。连接组件用于保存节点中连接端子的连接关系&#xff0c;并随节点的拖动改变。 1、连接组件 连接组件存储一个连接关…

海外媒体软文发稿【越南通讯社vnanet】官方媒体发布新闻稿

海外媒体软文发稿【越南通讯社vnanet】官方媒体发布新闻稿 越南通讯社(越南语&#xff1a;Thng tấn x Việt Nam&#xff1b;英语&#xff1a;Vietnam News Agency&#xff0c;简称VNA)&#xff0c;简称“越通社”是越南国家通讯社&#xff0c;始建于1945年9月2日。越通社是越…

JVM的内存模型和垃圾回收

JVM内存区域 内存模型图&#xff1a; 堆 线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。 它的目的是存放对象实例。同时它也是GC所管理的主要区域&#xff0c;因此常被称为GC堆&#xff0c;又由于现在收集器常使用分代算法&#xff0c;Java堆中还…

纷享销客AI能力在线索精细化管理中的应用与实践

1、智能评分提高线索转换效率 企业可以经过后台模型配置&#xff0c;和对近1-2年内线索的相关属性进行整理分析&#xff0c;纷享销客AI可以总结出历史相似线索的转换概率&#xff0c;使销售人员可以集中精力在更容易转换的线索上&#xff0c;提高转化效率。 纷享销客AI的智能…

pdf如何转换为jpg图片?这几种转换方法简单又实用!

pdf如何转换为jpg图片&#xff1f;PDF&#xff0c;这一广泛应用于文档传输与存储的格式&#xff0c;虽极大地促进了信息的电子化流通&#xff0c;但在日常办公实践中&#xff0c;也逐渐显露出其局限性&#xff0c;尤其是在文件管理与网络分享方面&#xff0c;PDF的庞大体积常导…

fastadmin 时间选择器可选择具体的时分秒

预期要达到的样式,时间区间可以直接选择具体的时分秒 找到这个文件require-form.js 在pulic/assets/js 下面 找到datetimepicker 属性 设置为true var options {timePicker: true,autoUpdateInput: false,timePickerSeconds: true,timePicker24Hour: true,autoApply: true,lo…

Llama 3.1 70B与Mistral Large 2 128B深度对比

在人工智能的浩瀚宇宙中&#xff0c;两颗新星正在引发行业内的轰动。Meta 的 Llama-3.1-70B 和Mistral Large-2-128B&#xff0c;这两大 AI 巨头以其前所未有的计算能力和复杂性&#xff0c;正引领着智能算法的新浪潮。它们不仅仅是技术的集大成者&#xff0c;更是未来可能性的…