Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope

本文主要介绍如何在无需网关,无需配置 HttpClient 的情况下,使用 Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope 等 OpenAI 接口兼容的大模型服务。

1. 背景

一直以来,我们都在探索如何更好地利用大型语言模型(LLM)的能力。Semantic Kernel 作为一个微软开源的语义内核 SDK,它提供了一种高效的方式让用户可以在自己的应用程序中集成大语言模型 (LLM) 的强大功能。

同时,随着 OpenAI 的发展,其接口调用方式已被广泛采用和认可,成为了众多大型语言模型的标准接口或兼容标准。在 .Net 使用的 OpenAI 库,大家之前一直广泛使用的是 Azure.AI.OpenAI ,但是因为设计上的一些限制,我们无法直接调用本地大模型或者一些兼容 OpenAI 接口的大模型服务。因为内部审计,统一管理,成本分摊,无法直接访问或自建服务等原因,可以方便的修改服务地址,一直是大家的迫切需求。

近期 OpenAI 正式发布了第一个官方 .NET 版的测试 SDK,Azure.AI.OpenAI 的 2.x 版本,这个版本的 SDK 也将基于这个新的 SDK 进行开发。但是目前这个 SDK 还处于测试阶段。

在这里插入图片描述

在之前的文章中,我也介绍了如何在 Semantic Kernel 中使用本地大模型的临时方案。当前随着 Semantic Kernel 的不断完善,我们有了更方便的方式来调用本地大模型与阿里云灵积 DashScope 等一些兼容 OpenAI 接口的大模型服务。

2. 本地服务

相信大家都有自己的本地大模型服务,或者是一些兼容 OpenAI 接口的大模型服务。本地大模型部署的方式有很多种,也越来越简单,我们可以方便的使用 Ollama、llama-server(llama.cpp) 等开源项目,来运行 Llama 3, Phi 3, Qwen2, Mistral,Gemma 等流行的大模型。

在这里我介绍一下我近期的一个开源项目 LLamaWorker,一个基于 LLamaSharp 的 ASP.NET 项目,提供 OpenAI 兼容的接口,感兴趣的同学可以了解一下。

虽然都是开源项目,但相比较而言,Ollama 更适合普通用户。而 llama.cpp 和 LLamaWorker 更适合开发者,可以更方便的进行二次开发和项目集成。

3. 代码实现

在 Semantic Kernel 中,提供了一个实验性的功能,在 OpenAI 连接器中提供了自定义服务端点的功能。这个功能可以让我们直接调用本地大模型或者一些兼容 OpenAI 接口的大模型服务。

我们可以通过 AddOpenAIChatCompletion() 创建自定义的 OpenAI 服务。对于

var services = new ServiceCollection();
services.AddKernel();
services.AddOpenAIChatCompletion("qwen-long", new Uri("https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"), "you key");

4. 注意事项

使用 AddOpenAIChatCompletion 时,我们需要输入完整的 ChatCompletion 端点,这与之前的使用习惯并不一致。

另外,由于改功能也尚处于试验阶段,并且其依赖的 Azure.AI.OpenAI 还是 1.0 的版本,对于后面的推出的 2.x 还并没有升级适配,还是需要时刻关注该接入方式的变更。

5. 最后

Semantic Kernel 的出现为开发者提供了一个强大且灵活的工具,使得在不同的环境下调用大型语言模型变得更加简单和高效。通过直接调用本地大模型或兼容 OpenAI 接口的服务,我们可以更好地控制数据的隐私和安全,同时也能够根据自己的需要调整服务的配置和性能。

此外,随着技术的发展和社区的贡献,我们期待看到更多的开源项目和工具的出现,这将进一步降低技术门槛,让更多的开发者和企业能够轻松地利用大型语言模型的强大能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何快速搭建产业数字化生态链?

如何快速搭建产业数字化生态链?这是当下许多企业都在思索的关键问题。 首先,要明确自身的核之心优势与定位,找到在数字化生态中的独特价值。 加强与产业链上下游企业的合作与协同,打破信息壁垒,实现资源共享与互补。 注…

重生奇迹mu圣导师介绍

出生地:勇者大陆 性 别:男 擅 长:统率&宠物使用 转 职:祭师(3转) 介 绍:当玩家账号中有一个Lv250以上角色时,便可以创建职业为圣导师的新角色,圣导师每升一级获得…

最适合程序员的编程字体,漂亮、独特、优雅!(2024-06-17)

Monaco Monaco 字体是一款专为编程和代码编辑设计的等宽字体,以其简洁明了的无衬线设计风格、高可读性和清晰的字符区分度,受到开发者们的青睐,Mac 自带 Monaco 字体。 Consolas Consolas 是一款等宽无衬线字体,专为编程和代码编…

C#语言入门详解 --- 方法(含传值 输出 引用 数组)

方法 方法标准式 <Access Specifier> <Return Type> <Method Name>(Parameter List) { Method Body } 让我们逐一对每一个模块进行解释&#xff1a; Access Specifier&#xff1a;访问修饰符&#xff0c;这决定了接下来的主题的可见性&#xff0c;包含p…

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版 在开始参数配置之前,先执行以下脚本 python copy_config_example.py该脚本将会将所有config目录下的配置文件样例复制一份到config目录下,方便开发者进行配置。 接着,开发者可以根据自己的需求,对…

20个超实用的VS Code扩展(2024年版)

大家好&#xff0c;今天小程给大家带来一篇关于 VS Code 扩展的文章。VS Code 这几年做得是风生水起&#xff0c;可以算得上是微软的良心产品&#xff0c;其最大的优势就是拥有众多高质量的扩展。在本文中&#xff0c;将向大家推荐一些我认为在 2024 年对开发者来说又实用又好用…

GPT_AI高速发展中什么是Prompt提示词?

提示词&#xff08;Prompt&#xff09;是给大语言模型&#xff08;以下简称模型&#xff09;的输入文本&#xff0c;用于指定模型应该执行什么样的任务并生成什么样的输出。 提示词发挥了“提示” 模型 应该做什么的作用。设计高质量的提示词需要根据目标任务和模型能力进行精…

动态 ETL 管道:使用非结构化 IO 将 AI 与 MinIO 和 Weaviate 的 Web

在现代数据驱动的环境中&#xff0c;网络是一个无穷无尽的信息来源&#xff0c;为洞察力和创新提供了巨大的潜力。然而&#xff0c;挑战在于提取、构建和分析这片浩瀚的数据海洋&#xff0c;使其具有可操作性。这就是Unstructured-IO 的创新&#xff0c;结合MinIO的对象存储和W…

hadoop搭建本地hive库保姆级教程

安装本地hive 安装的前提是hadoop完全分布式可以正常的跑起来 第一部分&#xff1a;安装mysql8.0 1.安装wget工具 yum -y install wget2.通过wget工具下载mysql源文件 注意&#xff1a;以下版本过高&#xff0c;后面安装MySQL源会失败&#xff0c;所以建议刚开始尝试换成…

Python 五子棋游戏(人人对战人机对战)【含Python源码 MX_006期】

系统简介&#xff1a; 五子棋是一种双人对弈的策略棋类游戏&#xff0c;玩家轮流在棋盘上落子&#xff0c;目标是通过在水平、垂直或对角线上连成一条直线的方式&#xff0c;最先在棋盘上形成连续的五颗棋子。五子棋的规则相对简单&#xff0c;但是需要玩家在落子过程中进行深思…

python14 字典类型

字典类型 键值对方式&#xff0c;可变数据类型&#xff0c;所以有增删改功能 声明方式1 {} 大括号&#xff0c;示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …

数字人源码部署怎么做?如何高效搭建好用的数字人系统?

作为人工智能时代的风口项目&#xff0c;AI数字人自出现之日起便引发了大量的关注。不少创业者都有了搭建数字人系统的想法&#xff0c;但却苦于没有强大的专业背景和雄厚资金支撑&#xff0c;只能在局外徘徊&#xff0c;而这恰恰为数字人源码公司推出的数字人源码部署服务的火…

第28讲:Ceph集群使用RBD块存储与K8S Volumes集成

文章目录 1.Ceph集群使用RBD块存储与K8S集成简介2.Ceph集群RBD块存储与K8S Volume集成2.1.在Ceph集群中创建K8S集群使用的块存储2.2.创建用于K8S访问Ceph RBD块设备的认证用户2.3.将认证用户的Key存储在K8S Secret资源中2.4.在K8S集群的所有节点中安装Ceph命令2.5.创建Pod资源使…

基于粒子群优化算法的的微电网多目标优化调度----算法改进

前言&#xff1a; 当阅读过前一篇我的博客之后&#xff0c;并且认真去读懂了那篇文章末尾的代码&#xff0c;那么&#xff0c;后续的算法改进对于你来说应当是很容易的了。前文中提及过&#xff0c;粒子群在进行迭代时&#xff0c;每迭代一次&#xff0c;都会根据自己个体最优值…

JAVA小知识22:迭代器iterator与列表迭代器ListIterator

一、迭代器 在 Java 中&#xff0c;迭代器是一个设计模式&#xff0c;用于遍历集合中的元素。Java 提供了 Iterator 接口来实现这一功能。迭代器的主要作用是提供一种通用的遍历集合的方法&#xff0c;而不需要了解集合的具体实现细节。 1.1、迭代器的特点 统一接口&#xf…

MySQL中实现行列转换的示例

在 MySQL 中进行行列转换&#xff08;即&#xff0c;将某些列转换为行或将某些行转换为列&#xff09;通常涉及使用条件逻辑和聚合函数。虽然 MySQL 没有像 Oracle/SQL Server 中的 PIVOT 和 UNPIVOT 那样的直接功能&#xff0c;但你可以通过结合 CASE 语句、UNION 或 UNION AL…

Linux下Shell脚本基础知识

主要参考视频&#xff1a; 这可能是B站讲的最好的Linux Shell脚本教程&#xff0c;3h打通Linux-shell全套教程&#xff0c;从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档&#xff1a; Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…

银行数仓项目实战(一)--什么是数据仓库

文章目录 数据仓库特点目的&#xff1a;监管报送监管报送的系统主要有&#xff1f;监管报送报送的数据 OLTP和OLAP 架构 数据仓库 数据仓库是一个面向主题的&#xff0c;集成的&#xff0c;非易失的且随时间变化的数据集合&#xff0c;用来支持管理人员的决策。 数据仓库是一个…

采集罗克韦尔AB、西门子等PLC数据发布成HTTP接口

智能网关IGT-DSER集成了多种PLC的原厂协议&#xff0c;方便实现各种PLC的原厂协议转换为HTTP协议的服务端&#xff0c;通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址&#xff0c;即可接收来自客户端的GET、PUT和POST命令&#xff0c;解析和打包JSON文件(JSON文件格…

两个链表合并升序-链表题

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 非递归 class Solution { public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(list1 nullptr && list2 ! nullptr)return list2;if(list2 nullptr && list1 ! nullptr)re…