【ESP32接入国产大模型之文心一言】

2024-01-04

1. 怎样接入文心一言

随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。在这个领域中,文心一言作为一款强大的自然语言处理工具,具有许多重要的应用价值。本文将重点介绍如何通过ESP32接入国产大模型之文心一言api,以及其中的重点词汇或短语。
在这里插入图片描述

1.1 了解文心一言

文心一言是百度打造出来的人工智能大语言模型,具备跨模态、跨语言的深度语义理解与生成能力,文心一言有五大能力,文学创作、商业文案创作、数理逻辑推算、中文理解、多模态生成,其在搜索问答、内容创作生成、智能办公等众多领域都有更广阔的想象空间。文心一言企业服务由千帆大模型平台提供,包括推理服务及大模型微调等一系列开发和应用工具链。文心一言大模型现已升级至4.0,企业客户可通过百度智能云千帆大模型平台申请接入。

1.2 接入文心一言

API 列表
百度智能云千帆平台提供了丰富的API,保留对话Chat、续写Completions、向量Embeddings、插件应用、Prompt工程、大模型训练、管理及服务等API能力,详情请查看 API列表

  1. 大模型相关
  • 对话Chat:支持创建chat,用于发起一次对话。
  • 续写Completions:支持创建completion,用于发起一次续写请求,不支持多轮会话等。
  • 向量Embeddings:支持Embeddings,用于根据输入内容生成对应的向量表示。
  • 自定义模型导入:支持HuggingFace Transformer架构的自定义模型导入,提供自定义模型导入相关API能力。
  • 图像Images:提供图像相关API能力。
  1. 插件应用:提供域内知识搜索增强插件API相关能力。
  2. Prompt工程:提供模版相关API能力。
  3. 大模型训练:提供创建训练任务、任务运行、停止任务运行及获取任务运行详情等API能力。
  4. 大模型管理:提供获取模型、模型版本详情及将训练任务发布为模型等API能力。
  5. 大模型服务:提供创建服务、获取服务详情等API能力。

1.3 API 调用流程简介

API 的调用流程如下图所示。

image.png

  1. 创建一个千帆应用。根据实际需求创建千帆应用,创建成功后,获取AppID、API Key、Secret Key 等信息。
  2. API 授权。对应用的 AppID 进行授权。
  3. 获取接口访问凭证 access_token 。根据第1步获取的 API Key 和 Secret Key ,调用获取 access_token 接口获取 access_token ,通过 access_token 鉴权调用者身份。
  4. 调用API接口。例如调用ERNIE-Bot相关接口,详见 API列表

1.4 API 调用流程

1.4.1 步骤一. 创建千帆应用

(1)登录百度智能云千帆控制台。

请您注册并登录 百度智能云千帆控制台

在这里插入图片描述

注意:为保障服务稳定运行,账户最好不处于欠费状态。

(2)创建千帆应用

进入 控制台创建应用

在这里插入图片描述

(3)创建应用后,获取AppID、API Key、Secret Key。

在这里插入图片描述

1.4.2 步骤二. 服务授权

应用创建后,选择对应授权的公有云服务。
在这里插入图片描述

1.4.3 步骤三. 调用API接口

调用千帆提供的相关接口,如ERNIE-Bot等,详见 API列表

  1. ERNIE-Bot
    我们选择ERNIE-Bot:ERNIE-Bot是百度自行研发的大语言模型,覆盖海量中文数据,具有更强的对话问答、内容创作生成等能力。

在这里插入图片描述

  1. 在线调试
    百度智能云千帆提供了 API在线调试平台-示例代码 ,用于帮助开发者调试接口,平台集成快速检索、查看开发文档、查看在线调用的请求内容和返回结果、复制和下载示例代码等功能,简单易用,更多内容请查看API在线调试介绍。
    在这里插入图片描述

  2. 获取AccessToken

应用列表选择自己创建的《ESP32语音聊天助手》,采用C#示例代码,
在这里插入图片描述
然后点击调试,复制获取的AccessToken: 24.7cc213f615669e6191cf3f65fad26ed2.2592000.1706881758.282335-46332156
在这里插入图片描述
1处粘贴上面的AccessToken,在2处中括号中输入

“role”:“user”,“content”:“介绍一下你自己”

在这里插入图片描述
调试结果如下
在这里插入图片描述
查看C#代码需要三部分代码
在这里插入图片描述

"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=24.7cc213f615669e6191cf3f65fad26ed2.2592000.1706881758.282335-46332156"
"Content-Type", "application/json"
"{""messages"":[{""role"":""user"",""content"":""介绍一下你自己""},{""role"":""assistant"",""content"":""您好,我是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。""}],""disable_search"":false,""enable_citation"":false}"

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 开发板。

  • 1 x ESP32( 阅读最佳 ESP32开发板 )

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";

// Replace with your OpenAI API key
// const char* apiKey = "1CeoUoYgnfc6s5liNR2uoQrk";
// const char* secret_Key = "G3n9aHVerzGqr0EWsLnca0fVkiXI9BVz";
//const char* access_token = "24.01bb97173188a1a22d6a6991918f6508.2592000.1706880634.282335-46332156";
// Send request to OpenAI API
String inputText = "你好,文心一言";
// 2. Replace with your access_token
String apiUrl = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=24.23087285c9ab53cbfd7aad5c032ae371.2592000.1706878581.282335-46332156";

String answer;
String getGPTAnswer(String inputText) {
  HTTPClient http;
  http.begin(apiUrl);
  http.addHeader("Content-Type", "application/json");
  // http.addHeader("access_token", String(access_token));
  String payload = "{\"messages\":[{\"role\": \"user\",\"content\": \"" + inputText + "\"}],\"disable_search\": false,\"enable_citation\": false}";
  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["result"];
    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生成的回答。以下是详细的解释:

  1. 导入必要的库:
#include <WiFi.h>:用于处理Wi-Fi连接功能。
#include <HTTPClient.h>:用于发送HTTP请求。
#include <ArduinoJson.h>:用于解析从服务器返回的JSON格式数据。
  1. 第一处修改定义Wi-Fi网络凭证:
const char* ssid = "J09 502";:Wi-Fi网络名。
const char* password = "qwertyuiop111";:Wi-Fi网络密码。
  1. 第二处修改定义要调用的API地址:
String apiUrl = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=24.23087285c9ab53cbfd7aad5c032ae371.2592000.1706878581.282335-46332156";
  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. 上传验证

打开串口监视器,输入你想问的问题,他就可以回答你
在这里插入图片描述

5. 总结

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ESP32接入国产大模型之文心一言】 的相关文章

  • 如何返回变量?

    我正在编写一个程序 将字母翻译成摩尔斯电码 然后将它们传输到 LED 并闪烁 我无法返回值 include
  • Arduino:将数据存储在 EEPROM 中的轻量级压缩算法

    我想将大量数据存储到我的 Arduino 上ATmega168 http www atmel com devices atmega168 aspx ATmega328 http www atmel com devices atmega328
  • Arduino Python3 脚本

    我正在尝试使用 Python3 脚本来控制 Arduino Mega 这是一个简单的脚本 用于从键盘获取一行并通过 Arduino 回显它 我从一个可用的 Python 2 脚本开始http petrimaki wordpress com
  • PySerial 从 Arduino 读取线路的延迟

    我正在使用带有基本 DigitalReadSerial 设置的 arduino uno 如下所述 http arduino cc en Tutorial DigitalReadSerial http arduino cc en Tutori
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数
  • 如何将 ASCII char 转换为其 ASCII int 值?

    我想将 char 转换为它的ASCII http en wikipedia org wiki ASCIIint 值 我可以用所有可能的值填充一个数组并与其进行比较 但这对我来说似乎不正确 我想要类似的东西 char mychar k pub
  • 经典蓝牙 (2.1) 设备可实现的最小数据包延迟是多少?

    我正在使用 RN42 http www microchip com wwwproducts en RN42 http www microchip com wwwproducts en RN42 蓝牙模块以 115200 波特率 UART S
  • C++ Linux (Ubuntu) 正确写入串行(对于 Arduino)

    我想知道是否有一种标准方法可以与高效的串行设备进行通信 我应该使用标准库吗 如果有 是哪一个 现在我正在摆弄让 LED 根据输入的数字以给定的量亮起 Arduino 代码如下 只是练习一些东西 看我过于简单且低效的测试 include
  • Arduino从SD卡读取最后一行

    我对 Arduino 业务还很陌生 如何从 SD 卡读取最后一行 通过以下代码片段 我可以读取第一行 n 之前的所有字符 现在我想添加一个 向后 声明 或其他内容 到目前为止我的代码 include
  • Arduino - 高效地迭代 C 数组

    我有以下数组 PROGMEM prog uint16 t show hide info 4216 8900 4380 580 500 600 500 580 1620 580 500 600 500 580 500 600 480 600
  • C#读取Arduino

    我正在尝试制作一个从 Arduino 读取传出信号的应用程序 但我无法使其在 C 中工作Windows 窗体 http en wikipedia org wiki Windows Forms 仅在控制台中 我的 C Windows 窗体代码
  • 为什么使用 libnfc 和 PN532 SHIELD 时“找不到 NFC 设备”

    我在 ArchLinux 上安装了 libnfc 并通过我的 Adafruit PN532 arduino SHIELD 使用它 nfc list返回消息 未找到 NFC 设备 我在 etc nfc devices d pn532 conf
  • Arduino:连接字符串时崩溃和错误

    我尝试将 AES 256 加密的输出连接到一个字符串 将此字符串与从 Android 手机发送的加密字符串进行比较 基本上 连接似乎有效 但在几次运行后会出现错误 不可读的字符 字符串变得更短而不是更长 或崩溃 它是可重现的 重启后在同一点
  • 将浮点数转换为字节数组的 C 函数

    我正在尝试创建一个函数来接受浮点变量并将其转换为字节数组 我找到了一段有效的代码片段 但如果可能的话 希望在函数中重用它 我也在使用 Arduino 环境 但我知道它接受大多数 C 语言 目前工作 float variable 1 11 b
  • 如何使用GSM模块SIM800和Arduino Uno发送短信?

    我正在尝试通过 SIM800 GSM 模块从 Arduino 发送短信 消息到达给定号码 但格式不正确 它显示 消息格式不支持 我在这里添加了我的代码 非常感谢您的快速回复 include
  • 使用 Ardulink 命令 Arduino Uno

    我试图在我的 JAVA 应用程序中使用 Ardulink 库来命令我的 Arduino Uno 但没有成功 我不知道我错过了什么 这是我的代码 Link link Link getDefaultInstance boolean connec
  • 在声明对象之前在全局函数中使用类的成员函数

    我有一个事件处理函数 在该函数中调用了类的成员函数 事件处理函数在类 cpp 文件中声明 但不是类的一部分 它不是成员函数 当我编译代码时 编译器表示该函数在范围内 因为它正在调用全局事件处理函数中的成员函数 我的问题如下 有没有办法在全局
  • 编译器:如果条件始终为真/假怎么办

    我想到了条件和编译器 我正在为 Arduino 编写一个应用程序 因此我需要该应用程序尽可能快 在我的代码中我有这个 define DEBUG false if DEBUG String pinName pinName Pin pinNam
  • 当我启动程序时,Arduino IDE (Win10) 崩溃

    我的 Arduino IDE Win10 上的版本为 1 8 12 在启动时崩溃 运行arduino debug exe我收到此错误消息 C Program Files x86 Arduino gt arduino debug exe Se
  • Python串口通信

    我正在开发一个 Arduino 项目 由于内存限制 我将其与 Python 脚本连接起来 在Python方面 我有一个二维矩阵 其中包含各自的x y坐标值 并且在此列表中有26000个坐标对 因此 为了向大家澄清数据结构 pathlist

随机推荐

  • CRM软件对企业发展起着哪些作用?CRM的功能解析

    虽然不少科技成果昙花一现 但CRM管理系统作为销售和营销领域的核心技术 已经牢牢占据了不可撼动的地位 拥有一个部署得当的CRM系统能为企业带来诸多好处 它可以跟踪和管理销售人员与潜在 现有客户的所有互动和沟通 并帮助他们识别出需要重点培养或
  • 基于SpringBoot的旅游网站281

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的旅游
  • SpringIOC之support模块DefaultMessageSourceResolvable

    博主介绍 全网粉丝5W 全栈开发工程师 从事多年软件开发 在大厂呆过 持有软件中级 六级等证书 可提供微服务项目搭建与毕业项目实战 博主也曾写过优秀论文 查重率极低 在这方面有丰富的经验 博主作品 Java项目案例 主要基于SpringBo
  • SpringBoot多模块(module)项目搭建

    https www cnblogs com zfyang2429 p 10801959 html
  • JDK21新特性探秘

    欢迎关注公众号 通过文章导读关注 11来了 及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 和 编程高频电子书 文章导读地址 点击查看文
  • 5.1 中央寄存器的原理和组成

    思维导图 中央处理器 CPU 核心原理与组成 引言 中央处理器 CPU 作为计算机的 大脑 在现代计算机硬件中扮演着至关重要的角色 本文旨在深入探讨CPU的基本原理和组成部分 为读者提供一个全面的理解 CPU的基本原理 1 信息处理 CPU
  • <sa8650>sa8650 CDT-之-汽车CDT配置用户指南(上)

    sa8650 sa8650 CDT 之 汽车CDT配置用户指南 上 2 CDT概述 2 1 Platform ID值 2 2 CDT一般结构 2 3 CDT头 2 4 块元数据 2 5 CDBs 2 6 加载CDT的启动过程
  • 实现智能化运维的关键驱动力,你知道可观测性工具吗

    可观测性是指根据系统产生的数据评估内部系统状态的能力 对于IT运维团队来说 可观测性工具是非常重要的 通过这些工具 IT团队可以同时观察或深入了解IT基础架构中不同应用程序和资源的健康状况和状态 从而主动检测异常 分析问题并解决问题 可观测
  • linux centos使用rz、sz命令上传下载文件

    一般情况下 我们会使用终端软件 如 XShell SecureCRT 或 FinalShell 来连接远程服务器后 使用 rz 命令上传本地文件到远程服务器 再解压发版上线 一 安转使用 系统 Linux CentOS 7 安装 rz 和
  • Metasploit使用msfconsole命令启动时,报错‘/usr/share/metasploit-framework/......’

    当使用msfconsole命令启动时 msf无法启动 且报错 解决办法 1 更新apt程序库 apt get update 2 更新metasploit 框架 apt get install metasploit framework 3 重
  • 【C++项目】【报错】[错误] new: No such file or directory, compilation terminated【及解决方法】

    一 问题描述 C源代码文件在编译过程中报错 错误 new No such file or directory compilation terminated 代码如下 include
  • 第8章 多媒体嵌入

    学习目标 了解视频 音频嵌入技术 能够总结HTML5视频 音频嵌入技术的优点 了解常用的视频文件格式和音频文件格式 能够归纳HTML5支持的视频和音频格式 掌握HTML5中视频的嵌入方法 能够在HTML5页面中添加视频文件 掌握HTML5中
  • 服务器的丢包率高怎么办

    网络出现丢包状况了怎么办 具体情况可以从以下几点来判断 1 有可能是线路故障导致的 所以可以用光纤打光仪先判断是否是光纤的问题 2 对于设备方面来说 很多都是网络接口的光纤接触不良等 3 也可能是操作系统的问题 比如网卡问题和网络运营线路问
  • element ui弹窗在别的弹窗下方,优先级不高的问题

    在 弹窗 的标签中加入append to body即可解决该问题
  • Python基础(十六、数据容器汇总)

    文章目录 一 数据容器汇总 二 数据容器通用操作 1 遍历 2 通用统计 len 容器 max 容器 min 容器
  • 解决重定向导致的cookie丢失

    转发前加上 String s response getHeader Set Cookie s HttpOnly Secure SameSite None response setHeader Set Cookie s
  • Java编写CS架构学生管理系统

    一 环境准备 工具 eclipse navicat 环境 jdk8 数据库 mysql5 7 二 正式开始 第一步 分析需求 就是我们需要知道该干什么 登录功能 对学生信息增删改查操作 第二步 创建项目StudentManager 由于我们
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • How to collect data

    How to collect data 爬虫 Java Python 反爬虫 自动化测试工具 Selenium QMetry Automation Studio Te
  • 【ESP32接入国产大模型之文心一言】

    1 怎样接入文心一言 随着人工智能技术的不断发展 自然语言处理领域也得到了广泛的关注和应用 在这个领域中 文心一言作为一款强大的自然语言处理工具 具有许多重要的应用价值 本文将重点介绍如何通过ESP32接入国产大模型之文心一言api 以及其