AI之旅:Microsoft.Extensions.AI 送惊喜,Cnblogs.DashScope.AI 表支持
https://www.cnblogs.com/cmt/p/18577574

2024年10月8日,微软 .NET 官方博客发布了一篇博文 Introducing Microsoft.Extensions.AI Preview – Unified AI Building Blocks for .NET,给 .NET 开发者带来了一个小惊喜,.NET 类库将增加一个统一的调用 AI 服务的抽象接口层。
Microsoft.Extensions.AI is a set of core .NET libraries developed in collaboration with developers across the .NET ecosystem, including Semantic Kernel. These libraries provide a unified layer of C# abstractions for interacting with AI services, such as small and large language models (SLMs and LLMs), embeddings, and middleware.
这个小惊喜对我们的 AI 之旅是场及时雨。
今年3月,我们准备尝试基于 Semantic Kernel 使用通义千问大模型开发 AI 应用。当时由于阿里云模型服务灵积 DashScope (后来阿里云百炼取代了灵积)没有提供 .NET SDK,我们自己实现了 DashScope SDK for .NET,详见之前的博文。
在实现 DashScope .NET SDK 之后,由于 Microsoft.Extensions.AI 还没出生,为了能在 Semantic Kernel 中使用 DashScope SDK,我们还实现了 SemanticKernel.DashScope 与 KernelMemory.DashScope,详见之前的博文。
- SemanticKernel.DashScope 实现了3个接口:IChatCompletionService 与 ITextGenerationService 以及 ITextEmbeddingGenerationService
- KernelMemory.DashScope 实现了2个接口:ITextEmbeddingGenerator 与 ITextEmbeddingGenerator
实现这5个接口本身不是什么问题,问题是我们在实现与 Semantic Kernel 毫无关系的 DashScope SDK 时却要对 Semantic Kernel 与 Kernel Memory 产生依赖,这种纠缠以后将成为一种苦难。
现在救星出现了,有了 Microsoft.Extensions.AI,DashScope SDK 只需实现 Microsoft.Extensions.AI 的接口,从此与 Semantic Kernel 身处各自的世界,不再有任何牵连。
那如何让两个不同世界的 DashScope 与 Semantic Kernel 一起工作呢?第三者登场了,两情相悦的二人世界不需要第三者,但互不依赖的两个代码组件需要第三者——调用它们的应用开发者,但开发者要打通这两个世界需要有个前提,Semantic Kernel 要通过 Microsoft.Extensions.AI 的抽象接口调用 AI 服务,所以在同一天,微软 Semantic Kernel 官方博客也发布了一篇博文 Microsoft.Extensions.AI: Simplifying AI Integration for .NET Partners ,Semantic Kernel 支持 Microsoft.Extensions.AI 已是板上钉钉。
When Microsoft.Extensions.AI moves from preview to general availability (GA), we will enable this package in Semantic Kernel .NET
为了感谢这场及时雨,我们抢在 Semantic Kernel 之前,在 Microsoft.Extensions.AI 还处于预览版之际,在 DashScope SDK 中实现了对 Microsoft.Extensions.AI 的支持,实现了 IChatClient 与 IEmbeddingGenerator 接口,并且在11月27日发布了 nuget 包 Cnblogs.DashScope.AI
具体实现代码见 github 上的 PR https://github.com/cnblogs/dashscope-sdk/pull/51
接下来通过示例代码简单体验一下通过 Microsoft.Extensions.AI 的接口与通义千问大模型对话。
准备 .NET 控制台项目
dotnet new console
dotnet add package Cnblogs.DashScope.AI --prerelease
在下面的 C# 代码中调用 Microsoft.Extensions.AI 中 IChatClient 接口的 CompleteAsync 方法与通义千问大模型 qwen-coder-turbo 对话
using Cnblogs.DashScope.Core;
using Microsoft.Extensions.AI;
var apiKey = "sk-xxxxxx";
var modelId = "qwen-coder-turbo";
IChatClient client = new DashScopeClient(apiKey).AsChatClient(modelId);
var response = await client.CompleteAsync("请用一两句话谈谈你对博客园AI之旅的看法");
Console.WriteLine(response.Message);
运行结果如下:
博客园的AI之旅是一次令人兴奋的技术探索,它展示了人工智能如何在内容创作、个性化推荐和用户互动等方面提升用户体验。这次旅程不仅推动了技术的进步,也为内容创作者和读者带来了新的可能性和便利。
由于目前 Semantic Kernel 还不支持 Microsoft.Extensions.AI,只能这样直接调用 IChatClient 接口简单体验一下。
等 Semantic Kernel 支持 Microsoft.Extensions.AI,就不再需要我们之前实现的 SemanticKernel.DashScope 与 KernelMemory.DashScope。
今天就简单写到这,感谢您关注园子的 AI 之旅。
AI之旅:Microsoft.Extensions.AI 送惊喜,Cnblogs.DashScope.AI 表支持的更多相关文章
- AI之旅(2):初识线性回归
前置知识 矩阵.求导 知识地图 学习一个新事物之前,先问两个问题,我在哪里?我要去哪里?这两个问题可以避免我们迷失在知识的海洋里,所以在开始之前先看看地图. 此前我们已经为了解线性回归做了 ...
- Microsoft.Extensions.Options支持什么样的配置类?
在.Net core中,微软放弃了笨重基于XML的.Config配置文件(好吧,像我这种咸鱼早都忘了如何自己写一个Section了). 现在主推新的高度可扩展的配置文件(参见此处) 对于新的配置系统, ...
- asp.net core 2.0 Microsoft.Extensions.Logging 文本文件日志扩展
asp.net core微软官方为日志提供了原生支持,有如下实现 Console Debug EventLog AzureAppServices TraceSource EventSource 并且在 ...
- DotNetCore跨平台~一起聊聊Microsoft.Extensions.DependencyInjection
写这篇文章的心情:激动 Microsoft.Extensions.DependencyInjection在github上同样是开源的,它在dotnetcore里被广泛的使用,比起之前的autofac, ...
- Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例
本文目录 1. Net下日志记录 2. NLog的使用 2.1 添加nuget引用NLog.Web.AspNetCore 2.2 配置文件设置 2.3 依赖配置及调用 ...
- 谷歌AI涉足艺术、太空、外科手术,再强调AI七原则
谷歌AI涉足艺术.太空.外科手术,再强调AI七原则 https://mp.weixin.qq.com/s/MJG_SvKCEBKRvL3IWpL0bA 9月18日上午,Google在上海的2018世界 ...
- Microsoft.Extensions.DependencyInjection不同版本导致EF出现内存泄露。
我的代码里将IServiceProvider放入ServiceLocator中遇到的问题. 注:以下所有例子都是Console里的结论,AspNetCore里不管怎么玩都没有问题,有其他帖子测试出在A ...
- 检测到包降级: Microsoft.Extensions.Configuration.Abstractions 从 2.1.1 降 2.1.0
解决方法:工具-nuget管理包-程序管理控制台-选择 项目- 执行 -Install-Package Microsoft.Extensions.Configuration.Abstractions ...
- 微软日志工厂 Microsoft.Extensions.Logging 中增加 log4net 的日志输出
前提: 需要nuget Microsoft.Extensions.Logging.Log4Net.AspNetCore 2.2.6: 描述:解决 .net core 微软日志工厂 Micros ...
- 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由wataloo发表在专栏wataloo的试验田 1 设计概要 1.1 设计原则和目的 英雄AI的目的主要有: 1.新手过渡局,让玩家刚 ...
随机推荐
- 图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指 ...
- AI接口实现:简单实现Viper配置管理
简介 前面实现的一个简易suno-api.是使用cookie来获取suno-token发起请求的.当时并没有通过配置的方式来获取cookie,而是直接在代码中写死了cookie的值,这种做法并不好,所 ...
- 深入理解 Taier:MR on Yarn 的实现原理
我们今天常说的大数据技术,它的理论基础来自于2003年 Google 发表的三篇论文,<The Google File System>.<MapReduce: Simplified ...
- 我是一名数学专业的应届博士,我该如何选择offer?
这是IC男奋斗史的第5篇原创 关注公众号[IC男奋斗史],让我们一起撸起袖子加油干! 本文1396字,预计阅读4分钟. 本文来自私信咨询问答.杰哥已征得对方同意把内容展示在公众平台. 感谢对杰哥的信任 ...
- DotTrace系列:7. 诊断 托管和非托管 内存暴涨
一:背景 1. 讲故事 分析托管和非托管内存暴涨,很多人潜意识里都会想到抓dump上windbg分析,但我说可以用dottrace同样分析出来,是不是听起来有点让人惊讶,哈哈,其实很正常,它是另辟蹊径 ...
- .NET中全新的MongoDb ORM框架 - SqlSugar
.NET中好用的MongoDb ORM很少,选择也很少,所以我打造了一款适合SQL习惯的MongoDb ORM,让用户多一个选择. 1. MongoDB ORM教程 1.1 NUGET 安装 SqlS ...
- 大模型基础补全计划(三)---RNN实例与测试
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 无 前言 本文是这个系列第三篇,它们是: & ...
- Layui 更新Table 表格内容的值
$.ajax({ //请求方式 type: "POST", //请求地址 url: "/", //数据,json字符串 data: { }, //请求成功 su ...
- java Filehandler
简介 最近的好像都没有手敲,只是看了一下.这个是文件管理的 code /* * @Author: your name * @Date: 2020-11-08 15:30:36 * @LastEditT ...
- SciTech-Mathematics-Probability+Statistics-Matlab(Mathworks Inc.): MATLAB官方文档就是非常好的教材
SciTech-Mathematics-Probability+Statistics Probability Distributions: https://ww2.mathworks.cn/help/ ...