1. 通义千问
讲解视频:
ESP32接入语言大模型之通义千问
随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。通义千问由阿里云开发,目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑,也可以回答各种问题,提供定义、解释和建议,或者与用户进行对话、创造内容、翻译文本等等。本文将重点介绍如何通过ESP32接入国产大模型之通义千问api。
 通义千问官网地址:https://tongyi.aliyun.com/qianwen/
 上一篇博客已经分享了【ESP32接入国产大模型之文心一言】,这一次Arduino编程就会轻松许多开发。这样就可以把大模型装进口袋啦🤣🤣🤣
 
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)

 
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.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. 上传验证
打开串口监视器,输入你想问的问题,他就可以回答你
 
5. 总结
🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之通义千问。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
如果你有任何问题,可以通过下面的二维码加入鹏鹏小分队,期待与你思维的碰撞😘😘😘



















![[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-4 拉普拉斯变换(Laplace)传递函数、微分方程](https://img-blog.csdnimg.cn/direct/505eb9c10e82445dbc91f8169ffe0ebd.png#pic_center)