在昨天的博文中,我们通过 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<ChatOutput, ChatTokenUsage> 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<Program>()
.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

借助 .NET 开源库 Sdcb.DashScope 调用阿里云灵积通义千问 API的更多相关文章

  1. 阿里版ChatGPT:通义千问pk文心一言

    随着 ChatGPT 热潮卷起来,百度发布了文心一言.Google 发布了 Bard,「阿里云」官方终于也宣布了,旗下的 AI 大模型"通义千问"正式开启测试! 申请地址:http ...

  2. 开源PaaS工具CloudFoundry落地阿里云

    原文:https://yq.aliyun.com/articles/292815?utm_content=m_37457 云计算技术的不断成熟和完善,尤其是IaaS平台的不断发展,使得越来越多的企业和 ...

  3. C#调用阿里云CDN API刷新缓存

    使用CDN必须要解决CDN缓存的问题,要么在每次更新文件时生成不同的URL,要么在每次更新文件时刷新CDN缓存.我们在一个实际应用场景中用到了后者,所以需要调用阿里云CDN的API进行缓存刷新的操作. ...

  4. 使用Node.js调用阿里云短信的发送以及接收

    为了使用Node.js调用阿里云短信服务,我自己写了个npm包, 目前实现了: 使用Node.js调用阿里云短信服务,发送短信: 使用Node.js调用阿里云短信服务以及MNS服务,接收用户上行短信 ...

  5. 通过AccessKey调用阿里云CDN接口刷新CDN资源案例

    通过AccessKey远程调用阿里云CDN接口,快速实现自动化集成部署. CdnService.java package com.nfky.cdn; import com.aliyuncs.Defau ...

  6. Python 调用阿里云 API 收集 ECS 数据

    #!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2. ...

  7. python3调用阿里云语音服务

    步骤 1 创建阿里云账号,包括语音服务里的企业实名 为了访问语音服务,您需要有一个阿里云账号.如果没有,可首先按照如下步骤创建阿里云账号: 访问阿里云 官方网站,单击页面上的 免费注册 按钮. 按照屏 ...

  8. 用ajax与fetch调用阿里云免费接口

    最近学习态度比较积极,打算用react做一个小个人应用网站...所以从阿里云上买了些免费的接口,什么QQ音乐排行查询接口.IP地址查询.天气预报等等.调用时,发现身份校验可以通过简单修改头部信息的方式 ...

  9. Java调用阿里云短信通道服务【千锋】

    这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...

  10. 零基础大数据入门教程:Java调用阿里云短信通道服务

    这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...

随机推荐

  1. shell脚本(9)-流程控制for

    一.循环介绍 for循环叫做条件循环,或者for i in,可以通过for实现流程控制 二.for语法 1.for语法一:for in for var in value1 value2 ...... ...

  2. 比Nginx更好用的Gateway!

    比Nginx更好用的Gateway! Token新开源Gateway,使用yarp实现的一个反向代理,支持界面操作动态添加集群添加路由绑定,并且支持动态添加域名绑定https证书,超强yarp+Fre ...

  3. 国庆学go,完成了博客基本功能,迫不及待的发布上线了

    大家好,我是沙漠尽头的狼. 国庆7天,利用带娃之余的空闲时间学习了go,并做了一个不是很完善的博客前台网站. 网站发布地址:https://go.dotnet9.com 源码 边做边上传Github, ...

  4. 两个List< string>比较是否相同的N种方法,你用过哪种?

    今天在一技术群看一群大佬讨论: 有没有优雅的写法,比较两个List集合中的元素是不是完全一致... 站长最近也无聊,通过群里的聊天记录和给出的参考链接,简单做做总结,万一后面大家能用上呢? 我们做简单 ...

  5. 例2.8 已知带头结点单链表L,设计算法实现:以表中第一元素作为标准,将表中所有值小于第一个元素的结点均放在第一结点之前,所有值大于第一元素的结点均放在第一元素结点之后。

    1.题目 例2.8已知带头结点单链表L,设计算法实现:以表中第一元素作为标准,将表中所有值小于第一个元素的结点均放在第一结点之前,所有值大于第一元素的结点均放在第一元素结点之后. 2.算法分析 3.代 ...

  6. SpringBoot - 阿里云OSS - 上传和删除

    1,首先在 pom.xml 中加入maven依赖 <!-- 阿里云oss --> <dependency> <groupId>com.aliyun.oss</ ...

  7. shell-命令行位置参数-$n

  8. [转帖]Kafka 性能优化与问题深究

    Kafka 性能优化与问题深究 一.Kafka深入探究 1.1 kafka整体介绍 1. 1.1 Kafka 如何做到高吞吐.低延迟的呢? Kafka是一个分布式高吞吐量的消息系统,这里提下 Kafk ...

  9. [转帖]Linux磁盘I/O(二):使用vm.dirty_ratio和vm.dirty_background_ratio优化磁盘性能

    文件缓存是一项重要的性能改进,在大多数情况下,读缓存在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据).写缓存比较复杂,Linux内核将磁盘写入缓存,过段时间再异步将它们刷新到磁盘.这对加 ...

  10. pycharm alt+f7(查找)显示动态用法的结果过多(dynamic usages)

    在脚本语言中查找引用时,如果有同名函数,在动态用法那一栏会出现大量的结果,,如何缩小或者动态用法(dynamic usages)的结果呢? 在官网上也有提出了这个问题,但官方没有给出答案issue:P ...