当前位置: 首页 > article >正文

立创开发板入门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 - 全球开发者的开源社区,开源代码托管平台

http://www.kler.cn/a/518105.html

相关文章:

  • 基于 AWS SageMaker 对 DeepSeek-R1-Distilled-Llama-8B 模型的精调与实践
  • 【数据结构】动态内存管理函数
  • Python Matplotlib库:从入门到精通
  • AWTK 骨骼动画控件用法
  • C++:多继承习题3
  • 新年祝词(原创)
  • Redis高阶3-缓存双写一致性
  • 【8】思科IOS AP升级操作
  • 【Flutter】旋转元素(Transform、RotatedBox )
  • 【EI会议推荐】人工智能、电子信息、智能制造、机器人、自动化、控制科学、机械制造等计算机领域多主题可选!
  • STM32 调试小问题记录
  • qsort和std::sort比较函数返回值的说明
  • 《CPython Internals》阅读笔记:p353-p355
  • 正点原子Linux 移植USB Wifi模块MT7601U驱动(上)
  • Android-UI自动化测试环境配置
  • 【C语言算法刷题】第2题 图论 dijkastra
  • PBFT算法
  • ESG报告流程参考
  • 【深度学习】搭建PyTorch神经网络进行气温预测
  • Qt 5.14.2 学习记录 —— 십구 事件
  • 豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”
  • Effective C++读书笔记——item23(用非成员,非友元函数取代成员函数)
  • Redis实现,分布式Session共享
  • S4 HANA Tax相关的定价过程
  • c#使用log4Net配置日志文件
  • idea maven本地有jar包,但还要从远程下载