【ESP32接入国产大模型之MiniMax】

1. MiniMax

讲解视频:

ESP32接入语言大模型之MiniMax

MM智能助理是一款由MiniMax自研的,没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。

随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。MiniMax作为千亿参数对话模型,支持多轮对话,具备内容创作、信息归纳总结等能力。可以快速注册体验中国版语言大模型,与GLM大模型进行对话。本文将重点介绍如何通过ESP32接入国产大模型之MiniMax api。
MiniMax官网地址:https://www.minimaxi.com/
上一篇博客已经分享了
【ESP32接入国产大模型之MiniMax】
【ESP32接入语言大模型之智谱清言】
【ESP32接入国产大模型之文心一言】
【ESP32接入语言大模型之通义千问】

下面是不标准测评,参考而已

模型响应时间内容质量免费token次数地址
MiniMax3s8分50万https://www.minimaxi.com/
智谱清言7s8分300万https://open.bigmodel.cn/
文心一言10s9分500万https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu
通义千问8s8分800万https://tongyi.aliyun.com/qianwen/

这一次还是采用Arduino编程就会轻松许多开发。这样就可以把大模型装进口袋啦🤣🤣🤣

在这里插入图片描述

1.1 了解MiniMax api

为方便用户使用,我们提供了 原生 HTTP 来实现模型 API 的调用。
api简介

在这里插入图片描述

1.1.2 HTTP 调用

同时支持标准的 HTTP 调用

POST https://open.bigmodel.cn/api/paas/v3/model-api/{model}/{invoke_method}

请求头
Content-Type : application/json

Authorization : 鉴权token,见如下 接口鉴权说明

路径参数
model : 具体的模型编码

invoke_method : 调用方式,取值为 invoke : 同步调用,async-invoke : 异步调用,sse-invoke : SSE 调用

1.2 Http接口鉴权

  1. API
https://api.minimax.chat/v1/text/chatcompletion_v2
  1. 支持token数
    在这里插入图片描述

  2. 接口参数说明

3.1 请求体(request)参数
在这里插入图片描述

api_key="请填写您的api_key"curl --location "https://api.minimax.chat/v1/text/chatcompletion_v2" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${api_key}" \
--data '{"model": "abab5.5-chat","messages": [{"role": "system","content": "MM智能助理是一款由MiniMax自研的,没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。"},{"role": "user","content": "你会按照以下要求回复我的内容:“根据我给出的多段信息分别判断信息文本内容表达了哪类情绪,并给出判断的理由,判断理由务必精简、准确。”我的内容是:“1、学习三星堆正确拍照姿势,留下难忘回忆!2、太可爱啦!换了个小猫图标!3、当代社畜分类图鉴,你是哪种?”"}],"tool_choice": "none","stream": true,"max_tokens": 16384,"temperature": 0.1,"top_p": 0.9}'

3.2 返回(response)参数
在这里插入图片描述

ata: {"id":"0230e4e325f59584349bcfe854f845ca","choices":[{"index":0,"delta":{"content":"1","role":"assistant"}}],"created":1709289956,"model":"abab6-chat","object":"chat.completion.chunk"}data: {"id":"0230e4e325f59584349bcfe854f845ca","choices":[{"index":0,"delta":{"content":". 积极情绪:文本表达了学习和探索新事物的兴奋和愉悦。\n2. 积极情绪:文本表达了对可爱事物的喜爱和欣赏。\n3. 中性情绪:文本提出了一个关于社会现象的观察,带有","role":"assistant"}}],"created":1709289957,"model":"abab6-chat","object":"chat.completion.chunk"}
data: {"id":"0230e4e325f59584349bcfe854f845ca","choices":[{"finish_reason":"stop","index":0,"delta":{"content":"一定的幽默和讽刺意味。","role":"assistant"}}],"created":1709289957,"model":"abab6-chat","object":"chat.completion.chunk"}data: {"id":"0230e4e325f59584349bcfe854f845ca","choices":[{"finish_reason":"stop","index":0,"message":{"content":"1. 积极情绪:文本表达了学习和探索新事物的兴奋和愉悦。\n2. 积极情绪:文本表达了对可爱事物的喜爱和欣赏。\n3. 中性情绪:文本提出了一个关于社会现象的观察,带有一定的幽默和讽刺意味。","role":"assistant"}}],"created":1709289957,"model":"abab6-chat","object":"chat.completion","usage":{"total_tokens":199},"base_resp":{"status_code":0,"status_msg":""}}

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)
    在这里插入图片描述
    推荐合宙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 = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbWUiOiIyMzQ1dm9yIiwiVXNlck5hbWUiOiIyMzQ1dm9yIiwiQWNjb3VudCI6IiIsIlN1YmplY3RJRCI6IjE3NTk0ODIxODAxMDAxNzAyMDgiLCJQaG9uZSI6IjE1MDcyNjQxNTYxIiwiR3JvdXBJRCI6IjE3NTk0ODIxODAwOTU5NzU5MDQiLCJQYWdlTmFtZSI6IiIsIk1haWwiOiIiLCJDcmVhdGVUaW1lIjoiMjAyNC0wMy0xNiAxMzoyNDoxOCIsImlzcyI6Im1pbmltYXgifQ.-Y8BOW0WZq2ImaN7Rof7YNtYnYnvPNDyGx23_xRqq5co9P5UkC3ciYEcIch2SUZ5QPkXR-sMUPzhdowSYvfdu1N25kdKJ8GE_63NfCnsdDVt8mv0wQSSweJK0yf_C8a8ADdB1uF4vg_WKMDjHlvzERsoNZgX6FYtr-bee85rIyu4U-OrbUvEpR1FLPXa7lTlx65QvhVIYGbIKde7ERIT_7QLOQoVFvPz0gX-H6V7UlmSRgRy4LK_R9mvV5TqCy3v90WK_AFuwEhPXcg";// Send request to OpenAI API
String inputText = "你好,minimax!";
String apiUrl = "https://api.minimax.chat/v1/text/chatcompletion_v2";String answer;
String getGPTAnswer(String inputText) {HTTPClient http;http.setTimeout(10000);http.begin(apiUrl);http.addHeader("Content-Type", "application/json");String token_key = String("Bearer ") + apiKey;http.addHeader("Authorization", token_key);String payload = "{\"model\":\"abab5.5s-chat\",\"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["choices"][0]["message"]["content"];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 = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbWUiOiIyMzQ1dm9yIiwiVXNlck5hbWUiOiIyMzQ1dm9yIiwiQWNjb3VudCI6IiIsIlN1YmplY3RJRCI6IjE3NTk0ODIxODAxMDAxNzAyMDgiLCJQaG9uZSI6IjE1MDcyNjQxNTYxIiwiR3JvdXBJRCI6IjE3NTk0ODIxODAwOTU5NzU5MDQiLCJQYWdlTmFtZSI6IiIsIk1haWwiOiIiLCJDcmVhdGVUaW1lIjoiMjAyNC0wMy0xNiAxMzoyNDoxOCIsImlzcyI6Im1pbmltYXgifQ.-Y8BOW0WZq2ImaN7Rof7YNtYnYnvPNDyGx23_xRqq5co9P5UkC3ciYEcIch2SUZ5QPkXR-sMUPzhdowSYvfdu1N25kdKJ8GE_63NfCnsdDVt8mv0wQSSweJK0yf_C8a8ADdB1uF4vg_WKMDjHlvzERsoNZgX6FYtr-bee85rIyu4U-OrbUvEpR1FLPXa7lTlx65QvhVIYGbIKde7ERIT_7QLOQoVFvPz0gX-H6V7UlmSRgRy4LK_R9mvV5TqCy3v90WK_AFuwEhPXcg";
  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. 上传验证

如果提示Compilation error: ArduinoJson.h: No such file or directory
在这里插入图片描述
直接在库管理安装Arduinojson
在这里插入图片描述

打开串口监视器,注意右下角选择换行符,选择115200波特率,输入你想问的问题,他就可以回答你

4.1 对话测试

在这里插入图片描述
个人感觉MiniMax比其他国内大模型响应要快速许多,大约1s返回,其他平台有时需要10s,太可恶啦!😘😘😘

4.2 报错

如果返回error ,大家对照列表查询错误代码,结合提示排查解决
在这里插入图片描述

5. 总结

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

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

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

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

相关文章

十四、GPT

在GPT-1之前&#xff0c;传统的 NLP 模型往往使用大量的数据对有监督的模型进行任务相关的模型训练&#xff0c;但是这种有监督学习的任务存在两个缺点&#xff1a;预训练语言模型之GPT 需要大量的标注数据&#xff0c;高质量的标注数据往往很难获得&#xff0c;因为在很多任务…

mac激活pycharm,python环境安装和包安装问题

1.PyCharm到官网下载就行 地址&#xff1a;Other Versions - PyCharm (jetbrains.com) 2.MacOS 下载python环境&#xff0c;地址&#xff1a; Python Releases for macOS | Python.org 3.PyCharm环境配置&#xff1a; 4. 如果包下载不下来可以换个源试试 pip install py…

一体成型PFA尖头镊子高纯特氟龙材质镊子适用半导体新材料

PFA镊子用于夹取小型片状、薄状、块状样品&#xff0c;广泛应用在半导体、新材料、新能源、原子能、石油化工、无线电、电力机械等行业。 具有耐高低温性&#xff08;可使用温度-200℃&#xff5e;&#xff0b;260℃&#xff09;、耐腐蚀、表面不粘性等特点&#xff0c;用于苛…

java的前缀和算法

前缀和的概念 对于一个给定的数组A&#xff0c;它的前缀和数组S中S[i]表示从第1个元素到第i个元素的总和&#xff0c;用公式表示为&#xff1a; SiA1A2A3...An 前缀和的作用 在O(1)的时间求出数组任意区间的区间和。 降低求解的复杂度 算法模板 int n10; int [] arrnew in…

python之自动化(django)

1、安装 我用的是pip install Django 在命令行中安装 然后django-admin startproject autotext&#xff08;在命令行中&#xff09; 这句话是创建一个django 项目 然后切换到你所创建项目的目录下 输入&#xff1a; python manage.py runserver 当你出现以下错误时 You…

特殊文本文件、日志技术

特殊文件 为什么要用这些特殊文件&#xff1f; 存储多个用户的&#xff1a;用户名、密码 特殊文件:Properties属性文件 特点&#xff1a; 都只能是键值对键不能重复文件后缀一般是.properties结尾的 作用&#xff1a;存储一些有关系的键值对数据 Properties 是一个Map集合(键…

详解MySql索引

目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大&#xff0c;且…

苹果Vision Pro即将在中日韩等九国开卖 | 百能云芯

苹果公司近期透露&#xff0c;首款混合实境&#xff08;MR&#xff09;头盔「Vision Pro」即将在今年晚些时候推向更多国家销售。虽然苹果尚未公布具体的销售细节&#xff0c;但根据最新的外媒报道&#xff0c;这款高科技产品可能即将在中国、日本、韩国等九个国家开卖&#xf…

Rust写一个wasm入门并在rspack和vite项目中使用(一)

rust打包wasm文档 文档地址 安装cargo-generate cargo install cargo-generate 安装过程中有问题的话手动安装cargo-generate下载地址 根据自己的系统下载压缩包&#xff0c;然后解压到用户/.cargo/bind目录下&#xff0c;将解压后的文件放到该目录下即可。 创建wasm项目 …

【Miniconda】一文了解conda虚拟环境的作用

【Miniconda】一文了解conda虚拟环境的作用 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅和支持~ &am…

VMwareWorkstation16与Ubuntu 22.04.6 LTS下载与安装

一、准备工作 VMware Workstation Pro 16官网下载&#xff1a; https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro/16_0。下载需要账号登录。 二、安装 双击exe文件稍等一会会弹出安装程序&#xff0c;如图 这…

基于Linux内核的socket编程(TCP)的C语言示例

原文地址&#xff1a;https://www.geeksforgeeks.org/socket-programming-cc/ 服务端&#xff1a; #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <unistd.h>#…