立创开发板入门ESP32C3第八课 修改AI大模型接口为deepseek3接口

#原代码用的AI模型是minimax的API接口,现在试着改成最热门的deepseek3接口。#

首先按理解所得,在main文件夹下,有minimax.c和minimax.h, 它们是这个API接口的头文件和实现文件,然后在main.c中被调用。所以我们一步步更改。

申请deepseek的API请问deepseek之类的人工智能,谢谢!!

先从minimax.h开始:

char *AI_chat(const char *text); //AI_chat

就这么简单的开了个头。顺带文件名改成ai_chat.h

接下来改minimax.c:

搜索minimax.h,改头文件。

搜索MINIMAX,第一个是包含文件,#include “minimax.h”,改成#include “ai_chat.h”。顺手同步改一下main.c里的#include "ai_chat.h"。

#include "ai_chat.h"

搜索minimax_chat,改成AI_chat

日志标签,将MINIMAX_CHAT,改成AI_CHAT用的是全大写。

static const char *TAG = "AI_CHAT"; 

第二个是minimax_chat(const char *text) 改成AI_chat(const char *text) 

char *AI_chat(const char *text)  // 这里替换成自己的minimax_chat函数名为AI-chat 

搜索minimax_key, 修改密钥相关接口。 

extern const char * minimax_key;

extern const char * AIchat_key; 
esp_http_client_set_header(client, "Authorization", AIchat_key);

更改POST_DATA

#define POST_DATA "{\
\"model\":\"deepseek-chat\",\
\"messages\":[\
{\"role\":\"system\",\"content\":\"You are a helpful assistant.\"},\
{\"role\":\"user\",\"content\":\"%s\"}\
],\
\"stream\":false\
}"

#define MAX_CHAT_BUFFER (2048)

更改minimax_content为AIchat_content

char AIchat_content[2048] = {0};
strncpy(AIchat_content, content->valuestring, MAX_CHAT_BUFFER - 1);
AIchat_content[MAX_CHAT_BUFFER - 1] = '\0'; // 确保字符串终止
response_text = AIchat_content;

 更改.url = "",修改成deepseek3的API接口网址:它与minimax不同,不需要GroupId用户名。

.url = "https://api.deepseek.com/chat/completions", // 替换为 DeepSeek 的 API URL

解释CJSON和信息提取

// 解析响应 JSON
    cJSON *root = cJSON_Parse(data_buf);
    if (root == NULL)
    {
        ESP_LOGE(TAG, "解析 JSON 响应失败");
        goto cleanup;
    }

    // 提取生成的回复
    cJSON *choices = cJSON_GetObjectItem(root, "choices");
    if (choices != NULL && cJSON_IsArray(choices))
    {
        cJSON *first_choice = cJSON_GetArrayItem(choices, 0);
        if (first_choice != NULL)
        {
            cJSON *message = cJSON_GetObjectItem(first_choice, "message");
            if (message != NULL)
            {
                cJSON *content = cJSON_GetObjectItem(message, "content");
                if (content != NULL && cJSON_IsString(content))
                {
                    strncpy(AIchat_content, content->valuestring, MAX_CHAT_BUFFER - 1);
                    AIchat_content[MAX_CHAT_BUFFER - 1] = '\0'; // 确保字符串终止
                    response_text = AIchat_content;
                    ESP_LOGI(TAG, "生成的回复: %s", response_text);
                }
            }
        }
    }

更改exit_translate为cleanup

        goto cleanup;
cleanup:
    // 使用 SAFE_FREE 宏释放资源
    SAFE_FREE(post_buffer);
    SAFE_FREE(data_buf);
    esp_http_client_cleanup(client);

    return response_text;

 在引入头文件下面加个宏

// 定义 SAFE_FREE 宏
#define SAFE_FREE(ptr)   \
    do                   \
    {                    \
        if (ptr != NULL) \
        {                \
            free(ptr);   \
            ptr = NULL;  \
        }                \
    } while (0)

接下来改main.c:

搜索minimax.h,改头文件。如上面例子。

#include "ai_chat.h"

 搜索minimax_chat,改成AI_chat

            char *answer = AI_chat(original_text);

搜索minimax_key, 修改密钥相关接口。 

const char * AIchat_key = "Bearer deepseek的API密钥";

更改minimax_content为AIchat_content

extern char AIchat_content[2048]; // 定义一个全局变量,用于接收字符串
GitCode, 有完整的源码。GitCode - 全球开发者的开源社区,开源代码托管平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959501.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

InceptionV1_V2

目录 不同大小的感受野去提取特征 经典 Inception 网络的设计思路与运行流程 背景任务:图像分类(以 CIFAR-10 数据集为例) Inception 网络的设计思路 Inception 网络的运行流程 打个比方 多个损失函数的理解 1. 为什么需要多个损失函数&#…

汽车OEMs一般出于什么目的来自定义Autosar CP一些内容

汽车OEMs在使用AUTOSAR CP(Classic Platform)协议时,可能会根据自身的特定需求对标准协议进行修改,形成自己的企业标准(企标)。这种修改通常是为了满足特定的硬件平台、功能需求、安全要求或优化性能。以下是一些常见的修改场景和例子: 1. 硬件平台适配 企业可能会根据…

centos操作系统上以service形式运行blackbox_exporter监控网页端口

文章目录 前言一、blackbox_exporter是什么二、使用步骤1.获取二进制文件2.准备部署脚本3.执行命令,进行部署4.prometheus中增加需要监控页面的job信息 三、查看部署结果四、配置到grafana中总结 前言 记录一下centos操作系统上以简单的service形式运行blackbox_ex…

XML实体注入漏洞攻与防

JAVA中的XXE攻防 回显型 无回显型 cve-2014-3574

解决vsocde ssh远程连接同一ip,不同端口情况下,无法区分的问题

一般服务器会通过镜像分身或者容器的方式,一个ip分出多个端口给多人使用,但如果碰到需要连接同一user,同一个ip,不同端口的情况,vscode就无法识别,如下图所示,vscode无法区分该ip下不同端口的连接&#xff…

dl学习笔记:(7)完整神经网络流程

完整神经网络流程 反向传播链式求导 代码实现反向传播动量法Momentum开始迭代为什么选择小批量TensorDataset与DataLoader 反向传播 由于本节的公式比较多,所以如果哪里写错了漏写了,还请帮忙指出以便进行改正,谢谢。 在前面的章节已经介绍过…

【esp32-uniapp】uniapp小程序篇02——引入组件库

一、引入组件库(可自行选择其他组件库) 接下来介绍colorUI、uview plus的安装,其他的安装可自行查找教程 1.colorUI weilanwl/coloruicss: 鲜亮的高饱和色彩,专注视觉的小程序组件库 下载之后解压,将\coloruicss-ma…

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据) 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

算法中的移动窗帘——C++滑动窗口算法详解

1. 滑动窗口简介 滑动窗口是一种在算法中常用的技巧,主要用来处理具有连续性的子数组或子序列问题。通过滑动窗口,可以在一维数组或字符串上维护一个固定或可变长度的窗口,逐步移动窗口,避免重复计算,从而提升效率。常…

MFC结构体数据文件读写实例

程序功能将结构体内数组数据写入文件和读出 2Dlg.h中代码: typedef struct Student {int nNum[1000];float fScore;CString sss;}stu; class CMy2Dlg : public CDialog { // Construction public:CMy2Dlg(CWnd* pParent NULL); // standard constructorstu stu1; ... } 2Dl…

数据结构:二叉树—面试题(一)

目录 1、相同的树 2、另一棵树的子树 3、翻转二叉树 4、平衡二叉树 5、对称二叉树 6、二叉树遍历 7、二叉树的分层遍历 1、相同的树 习题链接https://leetcode.cn/problems/same-tree/description/ 描述: 给你两棵二叉树的根节点 p 和 q ,编写一…

绘制决策树尝试2 内含添加环境变量步骤

目录 step1 ai码 ai改 step2 下面就是环境配置问题 “ExecutableNotFound: failed to execute WindowsPath(‘dot’), make sure the Graphviz executables are on your systems’ PATH” dot -v愣是没有​编辑 graphviz安装指导 对于Windows用户: 对于Lin…

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测

完整源码项目包获取→点击文章末尾名片! 番石榴病害数据集 背景描述 番石榴 (Psidium guajava) 是南亚的主要作物,尤其是在孟加拉国。它富含维生素 C 和纤维,支持区域经济和营养。不幸的是,番石榴生产受到降…

C++17 命名空间的新特性:简化与优化的典范

文章目录 1. 简化的嵌套命名空间1.1 背景与问题1.2 C17的解决方案1.3 实际应用场景1.4 注意事项 2. 声明多个名称的using声明2.1 背景与问题2.2 C17的解决方案2.3 实际应用场景2.4 注意事项 3. 属性命名空间的简化3.1 背景与问题3.2 C17的解决方案3.3 实际应用场景3.4 注意事项…

【JavaEE】-- 计算机是如何工作的

文章目录 1. 冯诺依曼体系(VonNeumann Architecture)2. CPU 基本工作流程2.1 寄存器(Register)和 内存(RAM)2.2 控制单元 CU(ControlUnit)2.3 指令(Instruction) 3. 操作系统(OperatingSystem)3.1 操作系统的定位3.2 什么是进程/任务(Process…

消融效果

消融效果是模拟物体逐渐从屏幕上消失或溶解的过程,它通常利用噪声纹理实现,使物体按照某种规则逐渐透明或完全不可见。这种效果常用于: 角色死亡、传送场景、 魔法消失,比如燃烧、消失等 1、基本原理 通过对比噪声纹理值与消融进…

java后端之事务管理

Transactional注解:作用于业务层的方法、类、接口上,将当前方法交给spring进行事务管理,执行前开启事务,成功执行则提交事务,执行异常回滚事务 spring事务管理日志: 默认情况下,只有出现Runti…

【Paper Tips】随记2-word版快速删除某字符

写paper时随心记录一些对自己有用的skills与tips。 文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 CtrlH一键全文替换2.2.2 录制宏 三、疑问四、总结 一、待解决问题 1.1 问题描述 word中粘贴部分文字时,格式不对时…

vite环境变量处理

环境变量: 会根据当前代码环境产生值的变化的变量就叫做环境变量 代码环境: 开发环境测试环境预发布环境灰度环境生产环境 举例: 百度地图 SDK,小程序的SDK APP_KEY: 测试环境和生产环境还有开发环境是不一样的key 开发环境: 110 生产环境:111 测试环境: 112 我们去请求第三…

使用JavaScript实现猜数字小功能

引言: 在学习编程的过程中,通过实际的小项目来巩固知识是非常有效的方法。今天,我们将使用 JavaScript 来实现一个简单的猜数字游戏。这个游戏不仅能让我们熟悉 JavaScript 的基本语法,还能锻炼我们的逻辑思维能力。 游戏规则 …