-
豆包大模型
视频地址:ESP32接入国产大模型之豆包_哔哩哔哩_bilibili
豆包大模型是字节跳动推出的自研大模型,以优质模型效果为企业打造丰富的业务体验。
随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。字节跳动自研LLM模型专业版,支持128K长文本,全系列可精调,具备更强的理解、生成、逻辑等综合能力,适配问答、总结、创作、分类等丰富场景。。本文将重点介绍如何通过ESP32接入国产大模型之豆包 api。 豆包大模型-火山引擎 (volcengine.com) 上一篇博客已经分享了 【ESP32接入国产大模型之MiniMax】 【ESP32接入语言大模型之智谱清言】 【ESP32接入国产大模型之文心一言】 【ESP32接入语言大模型之通义千问】
下面是不标准测评,参考而已
模型 | 响应时间 | 内容质量 | 免费token次数 | 地址 |
豆包 | 2s | 9分 | 50万 | 豆包大模型-火山引擎 |
MiniMax | 3s | 8分 | 500万 | MiniMax-与用户共创智能 |
智谱清言 | 7s | 8分 | 300万 | 智谱AI开放平台 |
文心一言 | 10s | 9分 | 500万 | API列表 - ModelBuilder |
通义千问 | 8s | 8分 | 800万 | 通义tongyi.ai_你的全能AI助手-通义千问 |
这一次还是采用Arduino编程就会轻松许多开发。这样就可以把大模型装进口袋啦🤣🤣🤣
1.1 了解豆包 api
为方便用户使用,我们提供了 原生 HTTP 来实现模型 API 的调用。 ChatCompletions--火山方舟大模型api-火山引擎 (volcengine.com)
1.1.2 HTTP 调用
同时支持标准的 HTTP 调用
POST /api/v3/chat/completions HTTP/1.1 Host: ark.cn-beijing.volces.com Content-Type: application/json Authorization: authorization string body
1.2 Http接口鉴权
本接口支持 API Key 鉴权方式,详见鉴权认证方式。
-
进入 API Key 管理页面,在您有权限的项目下点击创建 API Key,即可生成长效 API Key。API Key 的授权范围为同项目下所有模型推理接入点 API 和智能体 API。
API Key 签名鉴权方式要求在 HTTP 请求 header 中按如下方式添加 Authorization
header:
Authorization: Bearer $ARK_API_KEY
-
模型选择 在火山方舟上配置想要用的模型 火山方舟管理控制台 (volcengine.com) 通过模型推理菜单中创建推理接入点,后期代码中替换模型 "model":"ep-20240713-2fgvv"
\"model\":\"ep-20240713-2fgvv\"
1.3. 接口参数说明
1.3.1 请求体(request)参数
1.3.2 返回(response)参数
1.3.3 错误响应
本接口调用失败的返回结构和参数释义请参见返回结构文档。
-
先决条件
在继续此项目之前,请确保检查以下先决条件。
我们将使用 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
-
核心代码
esp32 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* doubao_apiKey = "ecc0e94f-afb5-e06dfd6a65"; // Send request to OpenAI API String inputText = "你好,豆包!"; String apiUrl = "https://ark.cn-beijing.volces.com/api/v3/chat/completions"; String answer; String getGPTAnswer(String inputText) { HTTPClient http; http.setTimeout(20000); http.begin(apiUrl); http.addHeader("Content-Type", "application/json"); String token_key = String("Bearer ") + doubao_apiKey; http.addHeader("Authorization", token_key); String payload = "{\"model\":\"ep-20240713-2fgvv\",\"messages\":[{\"role\":\"system\",\"content\":\"你是我的AI助手vor,你必须用中文回答且字数不超过85个\"},{\"role\":\"user\",\"content\":\"" + inputText + "\"}],\"temperature\": 0.3}"; 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平台(可能是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:
String apiUrl = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
-
定义输入文本和函数 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结构进行请求。
-
上传验证
下面给出下载配置,请严格配置
如果提示Compilation error: ArduinoJson.h: No such file or directory
直接在库管理安装Arduinojson
库
4.1 对话测试
打开串口监视器,注意右下角选择回车符,选择115200波特率,输入你想问的问题,他就可以回答你
个人感觉豆包比其他国内大模型响应要快速许多,大约2s返回,其他平台有时需要10s,太可恶啦!😘😘😘
4.2 报错
如果返回error ,大家对照列表查询错误代码,结合提示排查解决
-
总结
🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之豆包。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
资料来源:火山引擎-开发者社区