【ESP32接入语言大模型之通义千问】

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灵积模型服务

  1. 访问DashScope管理控制台:前往控制台。

image.png

  1. 在控制台“总览”页下,点击“去开通”。

下载.jpeg

  1. 阅读服务协议,确认无误后点击“立即开通”。

image..png

1.3 创建API-KEY

访问DashScope管理控制台API-KEY管理页面:前往API-KEY管理,然后点击“创建新的API-KEY”。

API-KEY.jpg

点击“创建新的API-KEY”后,系统会创建生成API-KEY,并在弹出的对话框中展示,此处客户可以点击复制按钮将API-KEY的内容复制保存。

查看API-KEY00.jpg

复制并在安全的地方保存API-KEY后点击“我已保存,关闭”按钮则弹窗关闭,此次创建的API-KEY可立即用于调用DashScope模型服务API,对API-KEY的后续操作均可在当前的API-KEY管理页面进行。

API-KEY.jpg

重要提示:出于安全考虑,关闭弹窗后,您可以在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调用接口

  1. 功能描述:通义千问模型同时支持 HTTP 调用来完成客户的响应,目前提供普通 HTTP 和 HTTP SSE 两种协议,您可根据自己的需求自行选择。

  2. 前提条件:已开通服务并获得API-KEY:开通DashScope并创建API-KEY。

  3. 提交接口调用:POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation

  4. 请求参数Content-Type/Authorization/model/input.prompt 是必须要的
    在这里插入图片描述

  5. 出参描述
    在这里插入图片描述

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 环境配置

  1. Arduino IDE:下载并安装 Arduino IDE;
  2. 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 responseDynamicJsonDocument 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 SerialSerial.begin(115200);// Connect to Wi-Fi networkWiFi.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 nothingif (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生成的回答。以下是详细的解释:

  1. 导入必要的库:
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
  1. 第一处修改定义Wi-Fi网络凭证:
const char* ssid = "J09 502";
const char* password = "qwertyuiop111";
  1. 第二处修改定义要调用的APIkey:
const char* apiKey = "sk-6af87778d25f43a7874aa0d9b9e9f1f1";
  1. 定义输入文本和函数 getGPTAnswer(String inputText):
  • 输入文本是固定的问候语"你好,文通义千问",在实际应用中可以根据需要修改。
  • 函数 getGPTAnswer() 负责执行以下操作:
    初始化HTTPClient对象并设置目标URL。设置Content-Type头信息,构造请求体payload,将用户输入的内容添加到JSON结构中。发送POST请求并检查HTTP响应码。如果响应码为200,则读取并解析返回的JSON数据,提取出结果字段作为回答。若非200,则返回错误字符串 “”。
  1. setup() 函数:
  • 初始化串口通信, 连接到指定的Wi-Fi网络。
  • 连接成功后,获取一个初始的回答并打印出来,然后提示用户输入新的问题。
  1. loop() 函数:
  • 检查串口是否有可用的数据输入。
  • 如果有新输入,读取一行内容,调用 getGPTAnswer() 函数获取AI回答,并将对话过程输出到串口。

注意:虽然代码中有OpenAI API相关注释,但实际上该代码是针对通义千问API编写的。如果你想要与OpenAI API交互,你需要使用OpenAI提供的API URL、access token及相应的JSON结构进行请求。

4. 上传验证

打开串口监视器,输入你想问的问题,他就可以回答你
在这里插入图片描述

5. 总结

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之通义千问。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣

如果你有任何问题,可以通过下面的二维码加入鹏鹏小分队,期待与你思维的碰撞😘😘😘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323349.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

湖南大学-数据库系统-2023期末考试【原题】

前言 早上11&#xff1a;00考完的考试&#xff0c;下午回来打了三把LOL之后&#xff0c;凭着回忆把题目重现出来了。 在复习的时候刷了15&#xff0c;16&#xff0c;17&#xff0c;18&#xff0c;19&#xff0c;21六年的卷子&#xff0c;感觉题目都差不多&#xff0c;但是难度…

如何保障开放网络边界安全?

针对开放式网络&#xff08;办事大厅、视频网络等&#xff09;&#xff0c;如何在内部网络构建起一道安全屏障&#xff0c;有效解决广大用户普遍存在的无法保证网络边界完整、边界安全、公共场所终端摄像头管理、办事大厅智能设备&#xff08;一体机等&#xff09;管理、开放场…

Intel IGCL规格指南和示例代码

Intel IGCL规格指南和示例代码 IGCL 旨在成为用于硬件&#xff08;主要是图形&#xff09;所有控制方面的高级 API 的集合。它取代了传统的英特尔 CUISDK&#xff0c;后者过去仅发布给 OEM 和选定的客户。 IGCL 允许对显示、媒体和 3D 功能进行全局控制和调整。 相关官网地址为…

软件测试金融项目经验总结,面试题都问什么?

1、APP端/客户端接口加解密介绍 加密方式&#xff08;两种&#xff09;&#xff1a; 在TCP/IP四层模型中的应用层进行加密。类似密码本&#xff0c;当前项目使用的是这种&#xff0c;可以看到所有响应内容&#xff0c;只是看不懂。 在TCP/IP四层模型中的运输层和应用层之间进行…

理解String 及 String.intern() 在实际中的应用

1. 首先String不属于8种基本数据类型&#xff0c;String是一个对象。     因为对象的默认值是null&#xff0c;所以String的默认值也是null&#xff1b;但它又是一种特殊的对象&#xff0c;有其它对象没有的一些特性。   2. new String()和new String(“”)都是申明一个…

【linux】日志管理和分析

一、概述 在Linux系统的管理和运维中&#xff0c;日志文件起到至关重要的作用。它们记录了系统运行过程中的各种事件&#xff0c;包括系统故障、性能数据和安全事件。 二、 日志的作用和分类 日志的作用 日志文件记载了系统的生命线&#xff0c;利用它们可以&#xff1a; 1…

CentOS 7 安装 PPTP

环境&#xff1a; 阿里云试用机&#xff1a; 外网IP&#xff1a;114.55.80.150 内网IP&#xff1a;172.28.11.92 一、服务器安装 PPTP 1、安装 yum install epel-release -y 2、安装pptp yum install pptpd iptables-services -y 3、修改配置 vim /etc/pptpd.conf# 最…

LTPI协议的理解——4、LTPI链路初始化以及运行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LTPI协议的理解——4、LTPI链路初始化以及运行 前言状态图Link TrainingLink DetectLink SpeedLink Training Example Link ConfigurationAdvertiseConfigure & AcceptLi…

互联网分布式应用之RabbitMQ

RabbitMQ Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. RabbitMQ介绍安装 2. Rabbi…

前端值得收藏的正则表达式知识点扫盲

很多前端新手在遇到正则表达式时都望而却步&#xff0c;我自己初学时&#xff0c;也基本上是直接跳过了正则表达式这一章&#xff0c;除了copy网上的一些常用的正则表达式做表单校验&#xff0c;其余时候几乎没有去了解过如何写一个正则表达式。 但是&#xff0c;当自己真正要…

02 Deep learning algorithm

Neural Networks target&#xff1a; inference&#xff08;prediction&#xff09;training my own modelpractical advice for building machine learning systemdecision Tress application: speech&#xff08;语音识别&#xff09; ----> images(计算机视觉)—> t…

Java反射篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、除了使用new创建对象之外,还可以用什么方法创建对象?二、Java反射创建对象效率高还是通过new创建对象的效率高?三、java反射的作用四、哪里会用到反射机制?五、反射的实现方式:前言 前些天发现了一个巨牛的人工智能学习网站,…