OpenAI 组件 | 加速 OpenAI API 在项目中的集成

news/2024/5/20 7:41:46 标签: OpenAI, ChatGPT, 乐鑫科技

在当今这个快节奏的技术世界中,将 OpenAI 的功能集成到项目中已经成为一种趋势。OpenAI 提供了一系列强大的自然语言处理API。然而,集成这些 API 的过程复杂且耗时,通常需要大量精力和专业知识。为了简化集成过程,我们开发了 OpenAI 组件,该组件功能强大,可以简化 OpenAI API 在项目中的集成。

图 1:主题图片

本文主要介绍开发者如何借助 OpenAI 组件轻松地将 OpenAI 的功能添加至项目中,而无需关注实现细节。 

本文主要由三个部分组成。第一部分为“ESP 组件注册器 (ESP Component Registry)”,介绍如何将合适的组件添加至 ESP-IDF 项目。第二部分重点介绍“OpenAI 组件”的详细信息。最后一部分介绍“ESP-BOX ChatGPT” 例程的更新。 

ESP 组件注册器 

ESP 组件注册器是一个开源组件平台,拥有大量的开源组件,可以为您的物联网项目提供强大的推动力。您只需进行快速搜索和点击,就可以轻松获得所需组件,并快速集成至 IDF 项目中。这种高效的集成方式可以加快项目开发周期,让您专注于开发更具突破性的物联网解决方案,无需操心繁杂的设置步骤

图 2:ESP 组件注册器

步骤如下所示: 

1. 在 ESP 组件注册器找到您需要的组件。

2. 阅读文档和更新日志,确定所需的组件版本。

3. 在终端中运行以下命令,将组件集成到您现有的项目中(注意:运行命令前,请修改组件名称    和版本)。

idf.py add-dependency "espressif/Component name^verison" 

OpenAI 组件 

为了向开发者提供尽可能多的 OpenAI API 功能,我们开发了简单但强大的 ESP-IDF 组件。该组件支持多种 OpenAI 功能(文件操作和微调 (fune-tuning) 功能除外),并且 API 文档详尽,可帮助开发者快速上手。

使用示例 

第一步是实例化对象,并提供安全的“API 密钥”作为参数。OpenAPI 密钥可以通过 OPENAI 网站获得。要获得 OpenAI 服务,必须先创建一个帐户,购买令牌,获取唯一的 API 密钥。

openai = OpenAICreate(key); 

 创建 OpenAI 对象后,代码调用 chatCompletion API 来设置设置必要的参数,发送一条消息(表明这不是最后一条消息),并获取生成的响应,供下一步使用或处理。 

chatCompletion = openai->chatCreate(openai); 
chatCompletion->setModel(chatCompletion, "gpt-3.5-turbo"); 
chatCompletion->setSystem(chatCompletion, "Code geek"); 
chatCompletion->setMaxTokens(chatCompletion, CONFIG_MAX_TOKEN); 
chatCompletion->setTemperature(chatCompletion, 0.2); 
chatCompletion->setStop(chatCompletion, "\r"); 
chatCompletion->setPresencePenalty(chatCompletion, 0); 
chatCompletion->setFrequencyPenalty(chatCompletion, 0); 
chatCompletion->setUser(chatCompletion, "OpenAI-ESP32"); 
OpenAI_StringResponse_t *result = chatCompletion->message(chatCompletion, "Hello!, World", false); // 调用 chatCompletion API 
char *response = result->getData(result, 0); 

同样,创建 OpenAI 对象后,代码调用 audioTranscriptionCreate API 来设置必要的参数,如音频文件和语言,然后开始转录音频,最后获取转录结果,供下一步使用或处理。 

audioTranscription = openai->audioTranscriptionCreate(openai); 
audioTranscription->setResponseFormat(audioTranscription, OPENAI_AUDIO_RESPONSE_FORMAT_JSON); 
audioTranscription->setLanguage(audioTranscription,"en"); 
audioTranscription->setTemperature(audioTranscription, 0.2); 
char *text = audioTranscription->file(audioTranscription, (uint8_t *)audio, audio_len, OPENAI_AUDIO_INPUT_FORMAT_WAV); // 调用转录 API 

如需探索更多 API 及其功能,请参阅文档。 

ESP-BOX ChatGPT 例程 

相比于旧版本更新版的 ESP-BOX ChatGPT 示例集成了 OpenAI 组件。有关具体的开发细节,请阅读博客。请注意,在新版本中,我们使用 esp_tinyuf2 组件将 Wi-Fi 和 OpenAI 密钥存储在非易失性存储器(NVS)中,这种方法更加安全。 

在初始启动阶段,执行第一个二进制文件后,用户需输入安全凭证,如 Wi-Fi 和 OpenAI 密钥。一旦输入凭证,系统即会重新启动,然后 ChatGPT 二进制文件就会接管控制权。该文件借助在初始启动阶段中提供的安全凭证来实现 ChatGPT 的功能。大致流程请见下图。

图 3:ChatGPT_demo 例程的流程与简单的认证

此外,用户还可以使用 ESP-Launchpad 尝试新版的 ESP-BOX ChatGPT 例程,该方法不需要在本地编译项目,可以更加方便地体验例程中新增的功能。


http://www.niftyadmin.cn/n/4962174.html

相关文章

气传导蓝牙耳机哪款好?推荐几款很不错的气传导耳机

​气传导耳机在音质、舒适度和耐久性方面的表现相当出色,能够满足你的各种需求。然而面对市面上这么多气传导耳机,不知道该如何挑选时,也不用过于担心,我先来安利几款很不错的气传导耳机给大家来参考参考,看看有没有心…

TCP性能机制

延迟应答 为什么有延迟应答 发送方如果长时间没有收到ACK应答,则会触发超时重传机制,重新发送数据包。但如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小,发送方一次只能发少量数据,效率较低。 举个例子理解一…

Mybatis:xml配置和基本增删改查

目录 一、环境配置(environments) 1.事务管理器(transactionManager) 2.数据源(dataSource) 3.属性(property) 4.设置(settings) 5.类型别名&#xff0…

layui tree组件取消勾选

layui(2.8.15) tree的api中,只有 tree.setChecked(id, idArr) 方法,没有取消勾选的方法。 我的需求是:勾选后做判断,如果不符合条件则取消勾选。 实现方法: 使用 tree的oncheck事件,在回调函数中做判断&…

redis7高级篇2 redis的BigKey的处理

一 Bigkey的处理 1.1 模拟造数 1.截图 2.代码 &#xff1a;使用pipe 批量插入10w的数据量 cat /root/export/monidata.txt | redis-cli -h 127.0.0.1 -a 123456 -p 6379 --pipe [rootlocalhost export]# for((i1;i<10*10;i)); do echo "set k$i v$i" >>…

【Python原创毕设|课设】基于Python Flask 机器学习的全国+上海气象数据采集预测可视化系统-附下载链接以及详细论文报告,原创项目其他均为抄袭

基于Python Flask 机器学习的全国上海气象数据采集预测可视化系统 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 在信息科技蓬勃发展的当代&#xff0c;我们推出了一款基于Python Flask的全国上海气象数…

探索搜索算法:C语言实现线性搜索与二分搜索

探索搜索算法&#xff1a;C语言实现线性搜索与二分搜索 搜索算法在计算机科学中起着至关重要的作用&#xff0c;它们用于在数据集合中查找特定元素或满足特定条件的元素。本篇博客将深入介绍两种常见的搜索算法&#xff1a;线性搜索和二分搜索&#xff0c;以及在C语言中的实现…

多线程处理并有序整合数据方案

方案设想 多线程异步“并行”处理待处理数据【for线程池单例创实例和回收】 防止处理过程中线程数过大&#xff0c;内存溢出&#xff0c;导致处理失败&#xff0c;例如持续for中new Thread保证并行的线程处理个数【CountDownLatch】 防止线程池未全部结束就开始进行处理&#…