1. 腾讯混元大模型

ESP32接入国产大模型之腾讯混元

首先声明没有恰饭广告,源代码已经匿名处理,制作细节非常完善,方便大家复刻才会提供快捷的相关链接跳转!!!😘😘😘

在这里插入图片描述

混元新一代视觉语言旗舰大模型,采用全新的混合专家模型(MoE)结构,在图文理解相关的基础识别、内容创作、知识问答、分析推理等能力上相比前一代模型全面提升。本文将重点介绍如何通过ESP32S3接入国产大模型之混元 api。
【ESP32接入国产大模型之腾讯混元】
上一篇博客已经分享了:
【ESP32接入国产大模型之腾讯混元】
【ESP32接入国产大模型之豆包】
【ESP32接入国产大模型之星火】
【ESP32接入国产大模型之MiniMax】
【ESP32接入语言大模型之智谱清言】
【ESP32接入国产大模型之文心一言】
【ESP32接入语言大模型之通义千问】
【ESP32接入国产大模型之kimi】
【ESP32接入国产大模型之Deepseek】
【ESP32接入国产大模型之阿里Deepseek】
【ESP32接入国产大模型之豆包升级版】

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

模型 响应时间 内容质量 免费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 2s 9分 50万 https://platform.moonshot.cn/docs/guide/start-using-kimi-api
混元 6s 8分 50万 https://cloud.tencent.com/document/product/1729/105701
Deepseek 12s 9分 50万 https://api-docs.deepseek.com/
阿里Deepseek 10s 9分 50万 https://help.aliyun.com/zh/model-studio/developer-reference/deepseek?spm=a2c4g.11186623.help-menu-search-2400256.d_1#2048aa1f92x46

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

1.1 了解混元 api

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

在这里插入图片描述

点击开通服务
在这里插入图片描述

1.2 Http接口鉴权

混元 API 兼容了 OpenAI 的接口规范,这意味着您可以直接使用 OpenAI 官方提供的 SDK 来调用混元大模型。您仅需要将 base_url 和 api_key 替换成混元的相关配置,不需要对应用做额外修改,即可无缝将您的应用切换到混元大模型。详见鉴权认证方式

  1. apikey
    进入 [API Key 管理]https://console.cloud.tencent.com/hunyuan/start)页面,在您有权限的项目下点击新建 API Key,即可生成长效 API Key。进入兼容OpenAI API KEY的创建页面,点击新建即可生成API KEY。
    在这里插入图片描述

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

Authorization: Bearer $ARK_API_KEY

1.3. 接口参数说明

1.3.1 请求体(request)参数

curl https://api.hunyuan.cloud.tencent.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $MOONSHOT_API_KEY" \
  -d '{
    "model": "hunyuan-pro",
    "messages": [
      {
        "role": "system",
        "content": "混元助手"
      },
      {
        "role": "user",
        "content": "你好,我叫李雷,1+1等于多少?"
      }
    ],
    "stream": true
  }'

注意

model选默认就好
在这里插入图片描述

1.3.2 返回(response)参数

data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
 
data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]}
 
...
 
data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"content":"。"},"finish_reason":null}]}
 
data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{},"finish_reason":"stop","usage":{"prompt_tokens":19,"completion_tokens":13,"total_tokens":32}}]}
 
data: [DONE]

1.3.3 错误响应

以下是一组错误返回的例子:

{
    "error": {
        "type": "content_filter",
        "message": "The request was rejected because it was considered high risk"
    }
}

在这里插入图片描述

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不行(可能板子坏了)

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

在这里插入图片描述

3. 核心代码

3.1 源码分享

esp32S3 Arduino代码如下

#include <Arduino.h>
#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* apiKey = "sk-eyC53ZoiijSgqjm5cgKMS7MCIcV0z8O";

// Send request to OpenAI API
String inputText = "你好,混元!";
String apiUrl = "https://api.hunyuan.cloud.tencent.com/v1/chat/completions";

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\":\"hunyuan-pro\",\"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 response
    JsonDocument jsonDoc;
    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('\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生成的回答。

3.2 源码解析

以下是详细的解释:

  1. 导入必要的库:
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

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

4. 上传验证

下面给出下载配置,请严格配置
platformio.ini

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:seeed_xiao_esp32s3]
platform = espressif32
board = seeed_xiao_esp32s3
framework = arduino
lib_deps = 
	; mobizt/Firebase Arduino Client Library for ESP8266 and ESP32@^4.4.14
	bblanchon/ArduinoJson@^7.2.0
upload_port = COM5

4.1 对话测试

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

个人感觉混元比其他国内大模型响应有点快啦,大约6s返回,太爽啦!😘😘😘
在这里插入图片描述

4.2 报错

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

在这里插入图片描述

5. 总结

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

如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐