1. 通义千问
讲解视频:
ESP32接入语言大模型之通义千问
随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。通义千问由阿里云开发,目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑,也可以回答各种问题,提供定义、解释和建议,或者与用户进行对话、创造内容、翻译文本等等。本文将重点介绍如何通过ESP32接入国产大模型之通义千问api。
通义千问官网地址:https://tongyi.aliyun.com/qianwen/
上一篇博客已经分享了【ESP32接入国产大模型之文心一言】,这一次Arduino编程就会轻松许多开发。
【ESP32接入国产大模型之MiniMax】
【ESP32接入语言大模型之智谱清言】
【ESP32接入国产大模型之文心一言】
【ESP32接入语言大模型之通义千问】
下面是不标准测评,参考而已
模型 | 响应时间 | 内容质量 | 免费token次数 | 地址 |
---|---|---|---|---|
MiniMax | 3s | 8分 | 500万 | https://www.minimaxi.com/ |
智谱清言 | 7s | 8分 | 300万 | https://open.bigmodel.cn/ |
文心一言 | 10s | 9分 | 500万 | https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu |
通义千问 | 8s | 8分 | 800万 | https://tongyi.aliyun.com/qianwen/ |
这样就可以把大模型装进口袋啦🤣🤣🤣
1.1 了解通义千问api
通义千问模型支持用户以文本形式的指令(prompt)以及不定轮次的对话历史(history)作为输入,并基于这些信息生成回复作为输出。在这一过程中,文本将被转换为语言模型可以处理的token序列。Token是模型用来表示自然语言文本的基本单位,可以直观地理解为“字”或“词”。对于中文文本来说,1个token通常对应一个汉字;对于英文文本来说,1个token通常对应3至4个字母或1个单词。例如,中文文本“你好,我是通义千问”会被转换成序列[‘你’, ‘好’, ‘,’, ‘我’, ‘是’, ‘通’, ‘义’, ‘千’, ‘问’],而英文文本"Nice to meet you."则会被转换成[‘Nice’, ’ to’, ’ meet’, ’ you’, ‘.’]。
api简介
通义千问需要通过阿里云主账号或者得到主账号AliyunDashScopeFullAccess授权的子账号进行DashScope模型服务的开通及API-KEY的创建。然后就可以通过匹配的请求访问通义千问,进而得到想要的答复。
1.2 开通DashScope灵积模型服务
- 访问DashScope管理控制台:前往控制台。
- 在控制台“总览”页下,点击“去开通”。
- 阅读服务协议,确认无误后点击“立即开通”。
1.3 创建API-KEY
访问DashScope管理控制台API-KEY管理页面:前往API-KEY管理,然后点击“创建新的API-KEY”。
点击“创建新的API-KEY”后,系统会创建生成API-KEY,并在弹出的对话框中展示,此处客户可以点击复制按钮将API-KEY的内容复制保存。
复制并在安全的地方保存API-KEY后点击“我已保存,关闭”按钮则弹窗关闭,此次创建的API-KEY可立即用于调用DashScope模型服务API,对API-KEY的后续操作均可在当前的API-KEY管理页面进行。
重要提示:出于安全考虑,关闭弹窗后,您可以在API-KEY管理通过账号验证的方式再次查看API-KEY。
1.4 API 模型调用
如果您熟悉编程语言,推荐您使用SDK或API调用通义千问模型,实现灵活定制和开发。
1.4.1 模型概览
模型名称 | 模型简介 | 模型输入/输出限制 |
---|---|---|
qwen-turbo | 通义千问超大规模语言模型,支持中文、英文等不同语言输入。 | 模型支持8k tokens上下文,为了保证正常的使用和输出,API限定用户输入为6k tokens。 |
qwen-plus | 通义千问超大规模语言模型增强版,支持中文、英文等不同语言输入。 | 模型支持32k tokens上下文,为了保证正常的使用和输出,API限定用户输入为30k tokens。 |
qwen-max(限时免费开放中) | 通义千问千亿级别超大规模语言模型,支持中文、英文等不同语言输入。随着模型的升级,qwen-max将滚动更新升级,如果希望使用稳定版本,请使用qwen-max-1201。 | 模型支持8k tokens上下文,为了保证正常的使用和输出,API限定用户输入为6k tokens。 |
qwen-max-1201(限时免费开放中) | 通义千问千亿级别超大规模语言模型,支持中文、英文等不同语言输入。该模型为qwen-max的快照稳定版本,预期维护到下个快照版本发布时间(待定)后一个月。 | 模型支持8k tokens上下文,为了保证正常的使用和输出,API限定用户输入为6k tokens。 |
qwen-max-longcontext限时免费开放中) | 通义千问千亿级别超大规模语言模型,支持中文、英文等不同语言输入。 | 模型支持30k tokens上下文,为了保证正常的使用和输出,API限定用户输入为28k tokens。 |
大家根据自己的需要选择函数模型
1.4.2 HTTP调用接口
-
功能描述:通义千问模型同时支持 HTTP 调用来完成客户的响应,目前提供普通 HTTP 和 HTTP SSE 两种协议,您可根据自己的需求自行选择。
-
前提条件:已开通服务并获得API-KEY:开通DashScope并创建API-KEY。
-
提交接口调用:
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
-
请求参数
Content-Type
/Authorization
/model
/input.prompt
是必须要的
-
出参描述
1.4.3 请求案例
以下示例展示通过CURL命令来调用通义千问模型的脚本(SSE 关闭)。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer <your-dashscope-api-key>' \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen-turbo",
"input":{
"messages":[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你好,哪个公园距离我最近?"
}
]
},
"parameters": {
}
}'
响应示例(SSE关闭)
result_format参数为text的时候的输出结果
{
"output":{
"text":"如果你在中国,我推荐你去北京的颐和园 ... ... 适合散步和欣赏景色。",
"finish_reason":"stop"
},
"usage":{
"output_tokens":380,
"input_tokens":633
},
"request_id":"d89c06fb-46a1-47b6-acb9-bfb17f814969"
}
2. 先决条件
在继续此项目之前,请确保检查以下先决条件。
我们将使用 Arduino IDE 对 ESP32/ESP8266 开发板进行编程,因此在继续本教程之前,请确保已在 Arduino IDE 中安装这些开发板。
2.1 环境配置
- Arduino IDE:下载并安装 Arduino IDE;
- ESP32 开发板库:在 Arduino IDE 中添加 ESP32 支持;
参考博客:【esp32c3配置arduino IDE教程】
为安装过程留出一些时间,具体时间可能因您的互联网连接而异。
2.2 所需零件
要学习本教程,您需要1个 ESP32 开发板或者ESP32C3,建议使用后者,笔者发现同样的代码后者可以轻松调用,ESP32不行(可能板子坏了)。
- 1 x ESP32(阅读最佳 ESP32开发板)
- 1 x ESP32C3(实惠的Arduino开发板——合宙ESP32C3)
推荐硬件,请不要使用esp8266,问就是不行
简约版需要设置CDC下载,经典版直接下载
3. 核心代码
esp32 Arduino代码如下
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
// 1. Replace with your network credentials
const char* ssid = "J09 502";
const char* password = "qwertyuiop111";
// 2. Replace with your OpenAI API key
const char* apiKey = "sk-6af87778d25f43a7874aa0d9b9e9f1f1";
// Send request to OpenAI API
String inputText = "你好,通义千问!";
String apiUrl = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
String answer;
String getGPTAnswer(String inputText) {
HTTPClient http;
http.setTimeout(10000);
http.begin(apiUrl);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", String(apiKey));
String payload = "{\"model\":\"qwen-turbo\",\"input\":{\"messages\":[{\"role\": \"system\",\"content\": \"你是鹏鹏的生活助手机器人,要求下面的回答严格控制在256字符以内。\"},{\"role\": \"user\",\"content\": \"" + inputText + "\"}]}}";
int httpResponseCode = http.POST(payload);
if (httpResponseCode == 200) {
String response = http.getString();
http.end();
Serial.println(response);
// Parse JSON response
DynamicJsonDocument jsonDoc(1024);
deserializeJson(jsonDoc, response);
String outputText = jsonDoc["output"]["text"];
return outputText;
// Serial.println(outputText);
} else {
http.end();
Serial.printf("Error %i \n", httpResponseCode);
return "<error>";
}
}
void setup() {
// Initialize Serial
Serial.begin(115200);
// Connect to Wi-Fi network
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
answer = getGPTAnswer(inputText);
Serial.println("Answer: " + answer);
Serial.println("Enter a prompt:");
}
void loop() {
// do nothing
if (Serial.available()) {
inputText = Serial.readStringUntil('\n');
// inputText.trim();
Serial.println("\n Input:"+inputText);
answer = getGPTAnswer(inputText);
Serial.println("Answer: " + answer);
Serial.println("Enter a prompt:");
}
// delay(2);
}
这段代码是一个基于Arduino平台(可能是ESP32或ESP8266)的示例,它通过WiFi连接到指定的无线网络,并利用HTTPClient库向百度文心一言API发送POST请求以获取AI生成的回答。以下是详细的解释:
- 导入必要的库:
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
- 第一处修改定义Wi-Fi网络凭证:
const char* ssid = "J09 502";
const char* password = "qwertyuiop111";
- 第二处修改定义要调用的APIkey:
const char* apiKey = "sk-6af87778d25f43a7874aa0d9b9e9f1f1";
- 定义输入文本和函数 getGPTAnswer(String inputText):
- 输入文本是固定的问候语"你好,文通义千问",在实际应用中可以根据需要修改。
- 函数 getGPTAnswer() 负责执行以下操作:
初始化HTTPClient对象并设置目标URL。设置Content-Type头信息,构造请求体payload,将用户输入的内容添加到JSON结构中。发送POST请求并检查HTTP响应码。如果响应码为200,则读取并解析返回的JSON数据,提取出结果字段作为回答。若非200,则返回错误字符串 “”。
- setup() 函数:
- 初始化串口通信, 连接到指定的Wi-Fi网络。
- 连接成功后,获取一个初始的回答并打印出来,然后提示用户输入新的问题。
- loop() 函数:
- 检查串口是否有可用的数据输入。
- 如果有新输入,读取一行内容,调用 getGPTAnswer() 函数获取AI回答,并将对话过程输出到串口。
注意:虽然代码中有OpenAI API相关注释,但实际上该代码是针对通义千问API编写的。如果你想要与OpenAI API交互,你需要使用OpenAI提供的API URL、access token及相应的JSON结构进行请求。
4. 上传验证
打开串口监视器,注意右下角选择换行符,选择115200波特率,输入你想问的问题,他就可以回答你
4.1 对话测试
4.2 报错
如果返回error ,大家对照列表查询错误代码,结合提示排查解决
5. 总结
🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之通义千问。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
如果你有任何问题,可以通过下面的二维码加入鹏鹏小分队,期待与你思维的碰撞😘😘😘