《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
🎬 艾莉丝的简介:
文章目录
- 1 ~> 多模型接入架构与 ChatGPT 接入概述
- 1.1 抽象架构与复用逻辑
- 1.2 核心概念界定
- 2 ~> ChatGPTProvider 头文件设计
- 2.1 文件与依赖规范
- 2.2 类接口标准声明
- 3 ~> ChatGPTProvider 源文件核心实现
- 3.1 基础引入与命名空间
- 3.2 模型初始化接口
- 3.2.1 处理逻辑
- 3.2.2 实现代码
- 3.3 状态与元信息接口
- 3.3.1 可用性检测
- 3.3.2 模型名称获取
- 3.3.3 模型描述获取
- 3.4 消息发送接口说明
- 结尾
1 ~> 多模型接入架构与 ChatGPT 接入概述
1.1 抽象架构与复用逻辑
- 整体采用抽象提供者模式,定义
ILLMProvider(抽象基类,文档中也记作LLMProvider)作为统一接入接口,所有大语言模型厂商均实现该接口的标准方法。 - 已完成 DeepSeek 模型的全量接入(包含初始化、全量响应、流式响应完整逻辑),ChatGPT 与 Gemini 接入可复用约 80% 的代码。
- 代码复用方案:直接复制 DeepSeekProvider 的头文件与源文件,仅修改类名、API 根端点、请求参数、响应 JSON 解析逻辑即可,开发效率较高。
- 接入前置条件:申请对应厂商的 API Key,确保运行环境可正常访问对应 API 端点。
1.2 核心概念界定
- ChatGPT:OpenAI 推出的聊天机器人产品 / 服务,基于 GPT 系列大语言模型构建,属于上层应用,并非模型本身。
- gpt-4o-mini:OpenAI 研发的具体大语言模型,属于 GPT-4 产品线的轻量级分支,具备高性价比、低延迟的特点,是本次接入的目标模型。
2 ~> ChatGPTProvider 头文件设计
2.1 文件与依赖规范
- 头文件路径:
sdk/include/ChatGPTProvider.h - 源文件路径:
sdk/src/ChatGPTProvider.cpp - 第三方依赖:
jsoncpp(JSON 序列化与解析)、httplib(HTTP 网络请求) - 内部依赖:日志工具
myLog.h、抽象基类ILLMProvider.h、通用消息结构体定义
2.2 类接口标准声明
标准头文件定义:
#ifndefCHATGPT_PROVIDER_H#defineCHATGPT_PROVIDER_H#include"ILLMProvider.h"#include<string>#include<vector>#include<map>#include<functional>namespaceai_chat_sdk{/** * @brief OpenAI ChatGPT模型提供者 * 实现ILLMProvider抽象接口,适配gpt-4o-mini模型API */classChatGPTProvider:publicILLMProvider{public:/// 初始化模型配置/// @param model_config 配置项,支持api_key、endpoint/// @return 初始化是否成功virtualboolinitModel(conststd::map<std::string,std::string>&model_config)override;/// 检测模型是否处于可用状态/// @return 可用状态布尔值virtualboolisAvailable()constoverride;/// 获取模型官方名称/// @return 模型标识字符串virtualstd::stringgetModelName()constoverride;/// 获取模型描述信息/// @return 模型说明字符串virtualstd::stringgetModelDesc()constoverride;/// 发送消息并全量返回结果(非流式)/// @param messages 聊天消息列表/// @param requestParam 请求附加参数/// @param reason 出参,错误原因/// @return 模型完整响应内容virtualstd::stringsendMessageFull(conststd::vector<Message>&messages,conststd::map<std::string,std::string>&requestParam,std::string&reason)override;/// 发送消息并流式增量返回结果/// @param messages 聊天消息列表/// @param requestParam 请求附加参数/// @param callback 增量回调,参数1为增量数据,参数2为是否为最后一块/// @return 调用状态信息virtualstd::stringsendMessageStream(conststd::vector<Message>&messages,conststd::map<std::string,std::string>&requestParam,std::function<void(conststd::string&,bool)>callback)override;private:std::string _api_key;///< OpenAI API密钥std::string _endpoint;///< API根端点(基础URL)bool_isAvailable=false;///< 模型可用状态标记};}// namespace ai_chat_sdk#endif// CHATGPT_PROVIDER_H3 ~> ChatGPTProvider 源文件核心实现
3.1 基础引入与命名空间
#include"../include/ChatGPTProvider.h"#include"../include/util/myLog.h"#include<cstdint>#include<jsoncpp/json/json.h>#include<jsoncpp/json/reader.h>#include<httplib.h>#include<sstream>#include<string>namespaceai_chat_sdk{// 所有接口实现均封装在ai_chat_sdk命名空间下}3.2 模型初始化接口
3.2.1 处理逻辑
- 从配置表中读取
api_key字段,缺失则打印错误日志并返回失败。 - 从配置表中读取
endpoint字段,缺失则使用 OpenAI 官方默认根端点https://api.openai.com。 - 配置加载完成后,将
_isAvailable置为 true,打印初始化成功日志。
3.2.2 实现代码
boolChatGPTProvider::initModel(conststd::map<std::string,std::string>&model_config){// 加载API密钥autoit=model_config.find("api_key");if(it==model_config.end()){ERR("ChatGPTProvider initModel failed, api key not found");returnfalse;}_api_key=it->second;// 加载API根端点,缺失则使用官方默认地址it=model_config.find("endpoint");if(it==model_config.end()){_endpoint="https://api.openai.com";}else{_endpoint=it->second;}_isAvailable=true;INFO("ChatGPTProvider initModel success, apikey:{}, endpoint:{}",_api_key,_endpoint);returntrue;}3.3 状态与元信息接口
3.3.1 可用性检测
boolChatGPTProvider::isAvailable()const{return_isAvailable;}3.3.2 模型名称获取
返回具体模型标识,而非产品名 ChatGPT
std::stringChatGPTProvider::getModelName()const{return"gpt-4o-mini";}3.3.3 模型描述获取
std::stringChatGPTProvider::getModelDesc()const{return"OpenAI推出的轻量级、高性价比模型,核心能力接近GPT-4 Turbo但成本更低";}3.4 消息发送接口说明
- 全量返回接口:同步调用 OpenAI 聊天补全接口,一次性返回完整响应文本,适合低延迟要求不高的场景。
- 流式返回接口:基于 SSE(Server-Sent Events)协议实现增量响应,通过回调函数逐次推送文本片段;回调的第二个布尔参数标记当前数据是否为最后一个分片。
- 两个接口的完整实现与 DeepSeek 逻辑同源,仅需适配请求 URL 路径(
/v1/chat/completions)、请求头认证格式(Bearer API_KEY)、响应 JSON 字段结构即可。
结尾
uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
【AI大模型接入SDK】Deepseek接入编译报错分析补充:C++ enum class 编译报错与枚举类型
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა