立创开发板入门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和信息提取

// 解析响应 JSONcJSON *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 - 全球开发者的开源社区,开源代码托管平台

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.1.21——六、BUU XSS COURSE 1 XSS漏洞|XSS平台搭建

题目来源:buuctf BUU XSS COURSE 1 目录 一、打开靶机,整理信息 二、解题思路 step 1:输入框尝试一下 step 2:开始xss注入 step 3:搭建平台 step 4:利用管理员cookie访问地址 三、小结 二编&#…

操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开

报错 操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开 现象 这个exe文件无法删除 解决办法 按下WinR, 找到Electronic Team Virtual Serial Port Driver Service,右击停止. 再次尝试删除,发现这个exe文件成功删除!

单值二叉树(C语言详解版)

一、摘要 今天要讲的是leetcode单值二叉树,这里用到的C语言,主要提供的是思路,大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单…

【多表查询】

目录 一. 一对多二. 一对一 and 多对多三. 多表设计案例四. 多表查询4.1 概述4.2 内连接与外连接4.3 子查询4.4 案例 \quad 一. 一对多 \quad 删除外键 \quad 二. 一对一 and 多对多 \quad \quad 三. 多表设计案例 \quad 一个员工对应多个工作经历 \quad 四. 多表查询 \quad \q…

[Dialog屏幕开发] Table Control 列数据操作

阅读该篇文章之前,可先阅读下述资料 [Dialog屏幕开发] 屏幕绘制(Table Control控件)https://blog.csdn.net/Hudas/article/details/145314623?spm1001.2014.3001.5501https://blog.csdn.net/Hudas/article/details/145314623?spm1001.2014.3001.5501上篇文章我们…

Arduino大师练成手册 -- 读取DHT11

要在 Arduino 上控制 DHT11 温湿度传感器,你可以按照以下步骤进行: 硬件连接: 将 DHT11 的 VCC 引脚连接到 Arduino 的 5V 引脚。 将 DHT11 的 GND 引脚连接到 Arduino 的 GND 引脚。 将 DHT11 的 DATA 引脚连接到 Arduino 的数字引脚&am…

leetcode刷题记录(八十九)——35. 搜索插入位置

(一)问题描述 35. 搜索插入位置 - 力扣(LeetCode)35. 搜索插入位置 - 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位…

渐变颜色怎么调?

渐变颜色的调整是设计中非常重要的一部分,尤其是在创建具有视觉吸引力和深度感的设计作品时。以下是一些在不同设计软件中调整渐变颜色的详细步骤和技巧: 一、Adobe Photoshop 1. 创建渐变 打开渐变工具: 选择工具栏中的“渐变工具”&#x…

安装wxFormBuilder

1. 网址:GitHub - wxFormBuilder/wxFormBuilder: A wxWidgets GUI Builder 2. 安装MSYS2 MSYS2可以在GitHub的内容中找到,这个版本是32位64位的 3. 在程序中打开MINGW64 shell 4. 在MSYS2 MINGW64 shell中输入 pacman -Syu pacman -S ${MINGW_PACKAGE…

在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘

在 Windows 系统上,如果你使用的是 WSL(Windows Subsystem for Linux)并安装了 Ubuntu,你可以将 Ubuntu 从 C 盘 迁移到 D 盘。迁移过程涉及导出当前的 Ubuntu 发行版,然后将其导入到 D 盘的目标目录。以下是详细的步骤…

【知识】可视化理解git中的cherry-pick、merge、rebase

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 这三个确实非常像,以至于对于初学者来说比较难理解。 总结对比 先给出对比: 特性git mergegit rebasegit cherry-pick功能合并…

DBO优化最近邻分类预测matlab

蜣螂优化算法(Dung Beetle Optimizer,简称 DBO)作为一种新兴的群智能优化算法,于 2022 年末被提出,其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次使用的数据为 Excel 格式的分类数据集。该数据…

vulnhub靶场【kioptrix-3】靶机

前言 靶机:kioptrix-3,IP地址为192.168.1.74 攻击:kali,IP地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 文章中涉及的靶机,来源于vulnhub官网,想要下载,可自行访问官网下载&a…

高并发处理 --- 超卖问题+一人一单解决方案

在高并发场景下,超卖和一人一单是两个典型的并发问题。为了解决这两个问题,我们可以使用乐观锁(CAS)和悲观锁,这两者分别有不同的实现方式和适用场景。下面我们详细介绍如何通过 乐观锁(CAS) 和…

C++ 标准模板库 (STL, Standard Template Library)

声明:大佬们~这是Tubishu在追寻stl过程中偶然得到了“颢天”大佬的笔记,shushu感觉非常有帮助🔥又颢天佬未曾来过CSDN,索性在此传达颢天大佬的功德🧎 传送门在此➡️颢天笔记✨✨ C 标准模板库 (STL, Standard Templa…

iOS 集成ffmpeg

前言 本来打算用flutter去实现一个ffmpeg的项目的,不过仔细分析了一下,我后期需要集成OpenGL ES做视频渲染处理,OpenGL ES的使用目前在flutter上面还不是很成熟,所以最后还是选择用原生来开发 ffmpeg集成到iOS工程 iOS对于ffmp…

代码随想录算法【Day31】

Day31 56. 合并区间 class Solution { public://按照左边界&#xff0c;从小到大排序static bool cmp(const vector<int>& a, const vector<int>& b){return a[0] < b[0];} ​vector<vector<int>> merge(vector<vector<int>>…

2013年蓝桥杯第四届CC++大学B组真题及代码

目录 1A&#xff1a;高斯日记&#xff08;日期计算&#xff09; 2B&#xff1a;马虎的算式&#xff08;暴力模拟&#xff09; 3C&#xff1a;第39级台阶&#xff08;dfs或dp&#xff09; 4D&#xff1a;黄金连分数&#xff08;递推大数运算&#xff09; 5E&#xff1a;前缀…

Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 我们每天都在与各种智能设备打交道&#xff0c;从手机到电脑&#xff0c;再到各种外设&#xff0c;它们已经…

蓝桥杯3519 填充 | 分类讨论

题目传送门 很简单&#xff0c;遍历一次字符串&#xff0c;将‘?’作为0或1处理&#xff0c;发现00和11统计次数即可。 s str(input()) cnt 0 arr [00, 11, 0?, ?0, 1?, ?1, ??] i0 while i < len(s)-1:if s[i:(i2)] in arr:i 2cnt 1else:i 1 print(cnt)END✨