AI使用开发之路-预备:建议第2个开源小项目 SemanticKernel.DashScope
上星期咱们发布了与AI运用开发相关的第1个开源小项目 —— DashScope SDK for .NET,今日咱们再发布一个开源小项目 —— SemanticKernel.DashScope,今日这个项目才是主角,由于咱们想依据 Semantic Kernel 开发大模型运用。
首要共享几个与 Semantic Kernel 与 DashScope 相关的音讯:
- Java 1.0 Release Candidate for Semantic Kernel 发布了,SK 不只是 .NET 版的 AI 运用开发结构,土豪的微软正在一同开发三个技能渠道的版别 —— .NET, Java, Python ,为了AI,微软也是够拼。
- DashScope 开端支撑 function calling,2月22日咱们提交工单咨询阿里云 DashScope 是否支撑 function calling,阿里云回复说不支撑,这周发现开端支撑了,阿里云的动作够快。
- 限时免费的通义千问系列大模型18号要开端收费了,咱们现在运用的 qwen-max 就归于限时免费款。
【阿里云】灵积大模型服务渠道通义千问系列大模型将于2024年3月18日调整计费。请您检查最新定价计费阐明。检查地址:https://t.aliyun.com/U/4ij1a1 。感谢您的运用
下面简略介绍一下今日的主角,github 库房地址 https://github.com/cnblogs/semantic-kernel-dashscope
这个开源项目不只完成了支撑 Semantic Kernel 的 DashScope Connector,还完成了支撑 Kernel Memory 的 DashScope Extension,所以分成了2个子项目:
- SemanticKernel.DashScope:完成了3个接口
IChatCompletionService
与ITextGenerationService
以及ITextEmbeddingGenerationService
,对应的 nuget 包是 Cnblogs.SemanticKernel.Connectors.DashScope - KernelMemory.DashScope:完成了2个接口
ITextEmbeddingGenerator
与ITextEmbeddingGenerator
, 对应的 nuget 包是 Cnblogs.KernelMemory.AI.DashScope
下面经过简略的示例代码快速体会一下。
先体会 Cnblogs.SemanticKernel.Connectors.DashScope
装置 nuget 包
dotnet add package Cnblogs.SemanticKernel.Connectors.DashScope
写一个简略的控制台程序与通义千问 qwn-max 大模型进行对话
var builder = Kernel.CreateBuilder();
builder.Services.AddDashScopeChatCompletion(apiKey, "qwen-max");
var kernel = builder.Build();
var prompt = "博客园是什么样网站,用简练的言语答复";
var result = await kernel.InvokePromptAsync(prompt);
Console.WriteLine(result);
运转程序,通义千问的答复如下:
博客园是一个面向软件开发和技能爱好者的中文技能博客渠道,用户能够在该网站上创立、共享和沟通编程常识、技能文章、行业动态等内容。它致力于为程序员及互联网相关人员供给一个高质量的内容创造与共享社区,促进技能信息的传达与沟通。
接着体会 Cnblogs.KernelMemory.AI.DashScope
装置 nuget 包
dotnet add package Microsoft.KernelMemory.Core
dotnet add package Cnblogs.KernelMemory.AI.DashScope
写一个简略的控制台程序,运用园子的第一款粗陋鼠标垫,是否是您值得具有的周边这篇博文进行 RAG(Retrieval Augmented Generation) 与通义千问大模型进行对话
var memory = new KernelMemoryBuilder()
.WithDashScopeDefaults(apiKey)
.Build<MemoryServerless>();
await memory.ImportWebPageAsync("https://www.cnblogs.com/cmt/p/17974346");
var question = "博客园鼠标垫在哪买";
var answer = await memory.AskAsync(question);
Console.WriteLine($"{answer.Result}");
上面的代码很简略,但背面比较复杂,Kernel Memory 做了许多工作,比方 memory.ImportWebPageAsync
办法执行时完成了博文内容的抓取、内容切割(partition)、调用 DashScope api 生成 embedding 向量并保存至向量数据库,从下面的日志能够看出来
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
Queueing upload of 1 files for further processing [request f3626f2e67ad451a959d056b4a9e3fbd202403130328152696707]
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
File uploaded: content.url, 38 bytes
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
Handler 'extract' processed pipeline 'default/f3626f2e67ad451a959d056b4a9e3fbd202403130328152696707' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
Handler 'partition' processed pipeline 'default/f3626f2e67ad451a959d056b4a9e3fbd202403130328152696707' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
Handler 'gen_embeddings' processed pipeline 'default/f3626f2e67ad451a959d056b4a9e3fbd202403130328152696707' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
Handler 'save_records' processed pipeline 'default/f3626f2e67ad451a959d056b4a9e3fbd202403130328152696707' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
Pipeline 'default/f3626f2e67ad451a959d056b4a9e3fbd202403130328152696707' complete
在经过 memory.AskAsync
办法发送提示词时,不只包含用户输入的提示词,而且会依据用户输入的提示词调用 DashScope api 生成提示词的 embedding 向量,而且用这个向量在向量数据库中进行语义查找,将查找到的结果与用户输入的提示词一同发送给大模型(这便是RAG)。
通义千问 qwen-max 大模型练习时并没有关于博客园鼠标垫的数据,所以假如不进行 RAG,通义千问不会给出想要的答案。
有了 Kernel Memory,运用 RAG 变得很简略,看看下面选用 RAG 的答复作用
博客园鼠标垫能够在淘宝上购买,详细购买方法有两种:
1. 淘宝查找“博客园”,找到相关店肆和产品链接进行购买。
2. 直接经过供给的淘宝店购买链接购买:https://item.taobao.com/item.htm?id=761724714914
别的,假如不想在淘宝店购买,还能够挑选增加园子的企业微信进行购买。
比照一下,不选用 RAG,直接问通义千问
很抱愧,我无法供给最新、实时的购物信息,包含博客园是否售卖鼠标垫以及购买途径。博客园(Cnblogs)是一个面向软件开发者的IT技能博客渠道,并非产品销售网站,一般不会直接售卖鼠标垫等什物产品。
假如您想购买鼠标垫,能够测验在各大电商渠道如淘宝、京东、苏宁易购等查找相关产品进行选购。
RAG的作用很明显。
欢迎咱们重视这个开源项目,欢迎反应,欢迎提交 PR https://github.com/cnblogs/semantic-kernel-dashscope
接下来咱们会测验完成对 function calling 的支撑。
19:34 更新:DashScope SDK for .NET 现已支撑 function calling