• 借助 .NET 开源库 Sdcb.DashScope 调用阿里云灵积通义千问 API


    在昨天的博文中,我们通过 Semantic Kernel 调用了自己部署的通义千问开源大模型,但是自己部署通义千问对服务器的配置要求很高,即使使用抢占式按量实例,每次使用时启动服务器,使用完关闭服务器,也比较麻烦,而且越高级的大模型对服务器的配置越高。所以昨天的博文中使用了很低级的 Qwen-7B-Chat 模型,结果回答问题的效果很不理想,连博客园的网站域名都弄错了。

    于是改变路线,尝试使用阿里云提供的模型服务灵积(DashScope),但是灵积没有提供兼容 OpenAI api 的 api,虽然提供了 SDK,但仅支持 Python 与 Java,望 SDK 心叹的同时准备今天试试自己写 C# 代码调用灵积提供的通义千问 api。

    在动手写代码之前,不抱任何希望地去 nuget 官网碰碰运气,搜了搜 qwen,竟然惊喜地出现了一个搜索结果

    有人在2个月之前就开始开发灵积的非官方 .NET SDK —— Sdcb.DashScope,而且1个月之前发布了1.0版,真是及时雨,给作者点赞。

    通过这 nuget 包的 Source repository 链接找到对应的 github 仓库 https://github.com/sdcb/Sdcb.DashScope ,立即签出代码,其中有单元测试代码,先跑一个测试体验一下。

    先到阿里云灵积控制台的“API-KEY管理”中创建 api key,然后在自己的电脑上通过 user-secrets 保存 api key

    dotnet user-secrets init
    dotnet user-secrets set DashScopeApiKey sk-xxxxxxxxxxx
    

    选择其中一个测试

    [Fact]
    public async Task OnlineChatTest()
    {
        using DashScopeClient c = new(_apiKey);
        ResponseWrapper result = await c.TextGeneration.Chat("qwen-turbo", [ChatMessage.FromUser("今天长沙天气如何?")], new ChatParameters
        {
            EnableSearch = true
        });
        _console.WriteLine(result.ToString());
    }
    

    跑一下

    dotnet test --filter OnlineChatTest
    

    输出结果如下

    ResponseWrapper { RequestId = 89e760f7-dc21-9461-8144-68629fa1ad00, Output = ChatOutput { Text = 今天是2024年2月11日,星期日,长沙的天气情况为晴朗。具体来说,湿度为75%,最低气温为3.0摄氏度,最高气温可达18.0摄氏度。风向以东南风为主,白天气温适宜,风力较小,仅为1级。夜间依然保持晴朗,风向转为东南风,风力同样维持在1级。建议外出时注意保暖,因为虽然白天阳光明媚,但早晚温差较大。空气质量评分为良,空气质量指数为97,相对较好。, FinishReason = stop }, Usage = ChatTokenUsage { OutputTokens = 126, InputTokens = 5 } }
    

    接着,自己写个 .NET 控制台程序体验一下

    准备控制台项目

    dotnet new console -n dashscop-sample
    cd  dashscop-sample
    dotnet add package Sdcb.DashScope
    dotnet user-secrets init
    dotnet user-secrets set DashScopeApiKey sk-xxxxxxxxxxx
    

    添加 FrameworkReference

    <ItemGroup>
      <FrameworkReference Include="Microsoft.AspNetCore.App">FrameworkReference>
    ItemGroup>
    

    在 Progam.cs 写实现代码,使用 qwen-max 通义千问千亿级别大模型回答一个简单的问题博客园是什么网站,看看效果

    using Microsoft.Extensions.Configuration;
    using Sdcb.DashScope;
    using Sdcb.DashScope.TextGeneration;
    
    IConfiguration config = new ConfigurationBuilder()
        .AddUserSecrets()
        .Build();
    
    string apiKey = config.GetValue<string>("DashScopeApiKey") ?? "";
    
    using DashScopeClient client = new(apiKey);
    
    var result = await client.TextGeneration.Chat(
        "qwen-max",
        [ChatMessage.FromUser("博客园是什么网站")]);
    
    Console.WriteLine(result.Output.Text);
    
    public partial class Program
    { }
    

    注:Sdcb.DashScope 贴心地提供了 ChatMessage.FromUser 方法

    运行代码看看千亿级通义千问的回答(运行3次)

    第1次的回答:

    博客园是一个面向软件开发者的技术写作与分享平台,成立于2004年。它主要为程序员提供一个记录和分享技术知识、经验和见解的空间,内容涵盖编程语言、软件架构、算法、数据库、操作系统等多个领域。博客园在中国开发者社区中具有较高的知名度和影响力,吸引了大量IT从业人员和技术爱好者在此交流和学习。

    第2次的回答:

    博客园(www.cnblogs.com)是一个面向软件开发者的中文技术社区网站,创建于2004年。该网站主要提供博客空间服务,用户以软件开发者、IT从业人员以及对相关技术感兴趣的人员为主,他们在这里发表、分享和交流编程技术、架构设计、软件开发心得等各种专业技术文章。博客园在中国IT技术圈内具有较高的知名度和影响力。

    第3次的回答:

    博客园是一个专注于技术分享的中文博客平台,创建于2004年。该网站主要面向软件开发人员、IT专业人士以及对技术和知识分享感兴趣的人群,提供了一个发表和阅读原创技术文章的空间。用户可以在博客园上撰写和发布有关编程、系统架构、数据库、人工智能、云计算等各种IT技术领域的文章和心得,并与其他用户进行交流和讨论。

    在博客园,许多知名的技术专家和行业大牛都有自己的博客空间,通过分享高质量的技术内容,博客园在IT技术领域内具有较高的影响力和知名度。

    qwen-max 的回答果然比 Qwen-7B-Chat 强很多。

    感谢 ZHOU Jie 给 .NET 社区带来的 Sdcb.DashScope

  • 相关阅读:
    Higg FEM的隐藏技能包:碳排放数据
    spring设置kafka超时时间没有生效的解决方法(解决rebalancing问题)
    DOM 事件模型和事件委托
    【网络编程】- 背景知识
    定时任务相关
    go语言 go-redis watch实例
    zookeeper-常用命令,集成springboot,分布式锁实现和原理 ,dock集群zookeeper搭建,
    Git忽略文件的几种方法,以及.gitignore文件的忽略规则
    【精选】构建智能木材计数系统:深度学习与OpenCV完美结合(详细教程+源码)
    大语言模型之十六-基于LongLoRA的长文本上下文微调Llama-2
  • 原文地址:https://www.cnblogs.com/dudu/p/18013240