【ESP32接入国产大模型之星火】
1. 讯飞星火大模型
讲解视频:https://www.bilibili.com/video/BV1V1v1eYEMW
【ESP32接入国产大模型之星火】+彩蛋
首先声明没有恰饭广告,源代码已经匿名处理,制作细节非常完善,方便大家复刻才会提供快捷的相关链接跳转!!!😘😘😘
讯飞星火大模型是讯飞推出的自研大模型,以优质模型效果为企业打造丰富的业务体验。
官网地址:https://www.xfyun.cn/
随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。星火有四大特色。
- 多模理解:上传图片素材,大模型完成识别理解,返回关于图片的准确描述
- 视觉问答:围绕上传图片素材,响应用户的问题,大模型完成回答
- 多模生成:根据用户的描述,生成符合期望的合成音频和视频
- 虚拟人视频:描述期望的视频内容,整合AI虚拟人,快速生成匹配视频
本文将重点介绍如何通过ESP32S3接入国产大模型之星火 api,注意是采用http协议的,特点是短连接,关键大模型对话响应还不错😘😘😘。websocket对网络要求高,并且是长连接接入非常复杂,消耗资源非常大,后续语音大模型考虑加入。💕💕💕
豆包大模型-火山引擎 (volcengine.com)
上一篇博客已经分享了
【ESP32接入国产大模型之豆包】
【ESP32接入国产大模型之星火】
【ESP32接入国产大模型之MiniMax】
【ESP32接入语言大模型之智谱清言】
【ESP32接入国产大模型之文心一言】
【ESP32接入语言大模型之通义千问】
【ESP32接入国产大模型之kimi】
下面是不标准测评,参考而已
模型 | 响应时间 | 内容质量 | 免费token次数 | 地址 |
---|---|---|---|---|
豆包 | 2s | 9分 | 50万 | https://www.volcengine.com/product/doubao |
讯飞星火 | 4s | 8分 | 1亿 | https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html |
MiniMax | 3s | 8分 | 500万 | https://www.minimaxi.com/ |
智谱清言 | 7s | 7分 | 300万 | https://open.bigmodel.cn/ |
文心一言 | 10s | 7分 | 500万 | https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu |
通义千问 | 8s | 7分 | 800万 | https://tongyi.aliyun.com/qianwen/ |
Kimi | 10s | 7分 | 50万 | https://platform.moonshot.cn/docs/guide/start-using-kimi-api |
这一次还是采用Arduino编程就会轻松许多开发。这样就可以把大模型装进口袋啦🤣🤣🤣
1.1 了解星火 api
为方便用户使用,我们提供了 原生 HTTP 来实现模型 API 的调用。
https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html
1.2 Http接口鉴权
注意: 该接口可以正式使用。如您需要申请使用,请点击前往产品页面领取免费额度。
Tips:
- 计费包含接口的输入和输出内容;
- 1 token 约等于1.5个中文汉字 或者 0.8个英文单词;
- Spark Lite支持[搜索]内置插件;Spark Pro, Spark Max和Spark 4.0Ultra支持[搜索]、[天气]、[日期]、[诗词]、[字词]、[股票]六个内置插件;
- Spark 4.0Ultra/Max现已支持system、Function Calling,tools 功能;
- Spark 4.0Ultra版本现已支持返回检索引用信源信息。。
1.3 http调用
请到控制台获取APIKey(假使APIKey是key123456)和APISecret(假使APISecret是secret123456),则请求头如下:
控制台地址:https://console.xfyun.cn/services/bm35
Content-Type: application/json
Authorization: Bearer key123456:secret123456。
1.3.1 http请求结构体
curl -i -k -X POST 'https://spark-api-open.xf-yun.com/v1/chat/completions' \
--header 'Authorization: Bearer key123456:secret123456' \
--header 'Content-Type: application/json' \
--data '{
"model":"generalv3.5",
"messages": [
{
"role": "user",
"content": "来一个只有程序员能听懂的笑话"
}
]
}'
参数说明:
1.3.2 返回(response)参数
1.3.3 错误响应
本接口调用失败的返回结构和参数释义请参见返回结构文档。
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不行(可能板子坏了)。
目前这是我使用的ESP32S3官方硬件👍👍👍(小小的身材有大大的力量)只需要35元加摄像头麦克风79元,后期我会整理相关专栏进行Arduino系统学习😘😘😘。有需要可以购买xiao开发板💕💕💕,SeeedXIAO ESP32S3 Sense硬件购买地址:https://s.click.taobao.com/lekazrt
3. 核心代码
3.1 源码分享
esp32S3 Arduino代码如下
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
// 1. Replace with your network credentials
const char* ssid = "IQOO";
const char* password = "12345678";
// 2. Replace with your OpenAI API key
const char* spark_apiKey = "aa09fe34b2c3d8c3272224625f3f8e74";
const char* APISecret = "YzMxNGRkODJlNjVjMDUzNThmZTc5MjFh";
// Send request to OpenAI API
String inputText = "你好,星火!";
String apiUrl = "https://spark-api-open.xf-yun.com/v1/chat/completions";
String answer;
String getGPTAnswer(String inputText) {
HTTPClient http;
http.setTimeout(20000);
http.begin(apiUrl);
String token_key = String("Bearer ") + spark_apiKey + String(":") + APISecret;
http.addHeader("Authorization", token_key);
http.addHeader("Content-Type", "application/json");
String payload = "{\"model\":\"generalv3.5\",\"messages\":[{\"role\":\"system\",\"content\":\"你是我的AI助手vor,你必须用中文回答且字数不超过85个\"},{\"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["choices"][0]["message"]["content"];
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('\r');// \r表示结束符为回车符
// inputText.trim();
Serial.println("\n Input:"+inputText);
answer = getGPTAnswer(inputText);
Serial.println("Answer: " + answer);
Serial.println("Enter a prompt:");
}
// delay(2);
}
这段代码是一个基于Arduino平台的示例,它通过ESP32S3WiFi连接到指定的无线网络,并利用HTTPClient库向星火API发送POST请求以获取AI生成的回答。
3.2 源码解析
以下是详细的解释:
- 导入必要的库:
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
- 第一处修改定义Wi-Fi网络凭证:
// 1. Replace with your network credentials
const char* ssid = "IQOO";
const char* password = "12345678";
- 第二处修改定义要调用的
spark_apiKey
和APISecret
:
// 2. Replace with your OpenAI API key
const char* spark_apiKey = "aa09fe34b2c3d8c3272224625f3f8e74";
const char* APISecret = "YzMxNGRkODJlNjVjMDUzNThmZTc5MjFh";
详细参考1.3Http调用。
- 定义输入文本和函数 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. 上传验证
下面给出下载配置,请严格配置
如果提示Compilation error: ArduinoJson.h: No such file or directory
直接在库管理安装Arduinojson
库
星火模型文本输入这里,记得在右下角选择对应的carriage return
4.1 对话测试
打开串口监视器,注意右下角选择回车符,选择115200波特率,输入你想问的问题,他就可以回答你
个人感觉星火比其他国内大模型响应要快速许多,大约3s返回,其他平台有时需要10s,太可恶啦!😘😘😘
4.2 报错
如果返回error ,大家对照列表查询错误代码,结合提示排查解决
- 如果返回400就是结束符没有选回车符
- 如果返回-11读取超时,建议换好的2.4G网络
5. 总结
🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之星火。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘