【ESP32接入国产大模型之豆包】

  1. 豆包大模型

视频地址:ESP32接入国产大模型之豆包_哔哩哔哩_bilibili

豆包大模型是字节跳动推出的自研大模型,以优质模型效果为企业打造丰富的业务体验。

随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。字节跳动自研LLM模型专业版,支持128K长文本,全系列可精调,具备更强的理解、生成、逻辑等综合能力,适配问答、总结、创作、分类等丰富场景。。本文将重点介绍如何通过ESP32接入国产大模型之豆包 api。 豆包大模型-火山引擎 (volcengine.com) 上一篇博客已经分享了 【ESP32接入国产大模型之MiniMax】 【ESP32接入语言大模型之智谱清言】 【ESP32接入国产大模型之文心一言】 【ESP32接入语言大模型之通义千问】

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

模型响应时间内容质量免费token次数地址
豆包2s9分50万豆包大模型-火山引擎
MiniMax3s8分500万MiniMax-与用户共创智能
智谱清言7s8分300万智谱AI开放平台
文心一言10s9分500万API列表 - ModelBuilder
通义千问8s8分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 鉴权方式,详见鉴权认证方式

  1. 进入 API Key 管理页面,在您有权限的项目下点击创建 API Key,即可生成长效 API Key。API Key 的授权范围为同项目下所有模型推理接入点 API 和智能体 API。

API Key 签名鉴权方式要求在 HTTP 请求 header 中按如下方式添加 Authorization header:

 

Authorization: Bearer $ARK_API_KEY

  1. 模型选择 在火山方舟上配置想要用的模型 火山方舟管理控制台 (volcengine.com) 通过模型推理菜单中创建推理接入点,后期代码中替换模型 "model":"ep-20240713-2fgvv"

 

\"model\":\"ep-20240713-2fgvv\"

1.3. 接口参数说明

1.3.1 请求体(request)参数

1.3.2 返回(response)参数

1.3.3 错误响应

本接口调用失败的返回结构和参数释义请参见返回结构文档。

  1. 先决条件

在继续此项目之前,请确保检查以下先决条件。

我们将使用 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不行(可能板子坏了)。

目前这是我使用的ESP32S3官方硬件👍👍👍(小小的身材有大大的力量)只需要35元加摄像头麦克风79元,后期我会整理相关专栏进行Arduino系统学习😘😘😘。有需要可以购买xiao开发板💕💕💕,SeeedXIAO ESP32S3 Sense硬件购买地址:https://s.click.taobao.com/lekazrt

  1. 核心代码

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生成的回答。以下是详细的解释:

  1. 导入必要的库:

 

#include <WiFi.h> #include <HTTPClient.h> #include <ArduinoJson.h>

  1. 第一处修改定义Wi-Fi网络凭证:

 

const char* ssid = "J09 502"; const char* password = "qwertyuiop111";

  1. 第二处修改定义要调用的APIkey:

 

String apiUrl = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";

  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结构进行请求。

  1. 上传验证

下面给出下载配置,请严格配置

如果提示Compilation error: ArduinoJson.h: No such file or directory

直接在库管理安装Arduinojson

4.1 对话测试

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

个人感觉豆包比其他国内大模型响应要快速许多,大约2s返回,其他平台有时需要10s,太可恶啦!😘😘😘

4.2 报错

如果返回error ,大家对照列表查询错误代码,结合提示排查解决

  1. 总结

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

资料来源:火山引擎-开发者社区

### ESP32 实现豆包聊天功能 为了实现在ESP32上运行豆包聊天功能,需先设置好开发环境。推荐使用ESP32-C3型号的开发板,因为其对于代码调用更为稳定[^1]。 #### 安装必要的软件库和支持文件 安装ESP-ADF(Audio Development Framework),这是用于音频应用开发的重要框架,能够简化许多操作流程,包括设备初始化、网络连接建立等必要步骤[^2]。 #### 配置Arduino IDE中的Flash分区方案 适当调整flash分区表以适应应用程序需求非常重要。这可以通过修改`partitions.csv`文件来完成,在其中定义不同的存储区域大小分配给固件映像和其他数据结构[^4]。 #### 编写主程序逻辑 下面是一个简单的Python风格伪代码片段展示如何启动与维持同豆包服务器之间的通信: ```python import network # 假设有一个类似的模块处理Wi-Fi连接 from db_chat import DbChatClient # 自定义类模拟与豆包交互 def setup_wifi(ssid, password): wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(ssid, password) while not wlan.isconnected(): pass print(&#39;Network connected!&#39;) def main(): ssid = &#39;your_SSID&#39; pwd = &#39;your_PASSWORD&#39; setup_wifi(ssid, pwd) client = DbChatClient() try: client.start_conversation() # 发送初始请求开始对话 while True: user_input = input("User: ") response = client.send_message(user_input).get_response() print(f"Doubao: {response}") except KeyboardInterrupt: print("\nConversation ended.") if __name__ == &#39;__main__&#39;: main() ``` 此脚本展示了基本的工作流:首先是WiFi联网过程;接着创建了一个名为`DbChatClient`的对象实例化对象负责管理和服务端消息传递;最后进入循环等待用户输入并向豆包发送查询直到收到中断信号为止[^5]。 请注意上述代码仅为概念验证性质,并未考虑实际部署时的安全性和性能优化等问题。具体实现细节可能会有所不同取决于所使用的API接口文档说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值