ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【AI大模型接入SDK】ChatGPT 模型接入

【AI大模型接入SDK】ChatGPT 模型接入 个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《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 核心概念界定ChatGPTOpenAI 推出的聊天机器人产品 / 服务基于 GPT 系列大语言模型构建属于上层应用并非模型本身。gpt-4o-miniOpenAI 研发的具体大语言模型属于 GPT-4 产品线的轻量级分支具备高性价比、低延迟的特点是本次接入的目标模型。2 ~ ChatGPTProvider 头文件设计2.1 文件与依赖规范头文件路径sdk/include/ChatGPTProvider.h源文件路径sdk/src/ChatGPTProvider.cpp第三方依赖jsoncppJSON 序列化与解析、httplibHTTP 网络请求内部依赖日志工具myLog.h、抽象基类ILLMProvider.h、通用消息结构体定义2.2 类接口标准声明标准头文件定义#ifndefCHATGPT_PROVIDER_H#defineCHATGPT_PROVIDER_H#includeILLMProvider.h#includestring#includevector#includemap#includefunctionalnamespaceai_chat_sdk{/** * brief OpenAI ChatGPT模型提供者 * 实现ILLMProvider抽象接口适配gpt-4o-mini模型API */classChatGPTProvider:publicILLMProvider{public:/// 初始化模型配置/// param model_config 配置项支持api_key、endpoint/// return 初始化是否成功virtualboolinitModel(conststd::mapstd::string,std::stringmodel_config)override;/// 检测模型是否处于可用状态/// return 可用状态布尔值virtualboolisAvailable()constoverride;/// 获取模型官方名称/// return 模型标识字符串virtualstd::stringgetModelName()constoverride;/// 获取模型描述信息/// return 模型说明字符串virtualstd::stringgetModelDesc()constoverride;/// 发送消息并全量返回结果非流式/// param messages 聊天消息列表/// param requestParam 请求附加参数/// param reason 出参错误原因/// return 模型完整响应内容virtualstd::stringsendMessageFull(conststd::vectorMessagemessages,conststd::mapstd::string,std::stringrequestParam,std::stringreason)override;/// 发送消息并流式增量返回结果/// param messages 聊天消息列表/// param requestParam 请求附加参数/// param callback 增量回调参数1为增量数据参数2为是否为最后一块/// return 调用状态信息virtualstd::stringsendMessageStream(conststd::vectorMessagemessages,conststd::mapstd::string,std::stringrequestParam,std::functionvoid(conststd::string,bool)callback)override;private:std::string _api_key;/// OpenAI API密钥std::string _endpoint;/// API根端点基础URLbool_isAvailablefalse;/// 模型可用状态标记};}// namespace ai_chat_sdk#endif// CHATGPT_PROVIDER_H3 ~ ChatGPTProvider 源文件核心实现3.1 基础引入与命名空间#include../include/ChatGPTProvider.h#include../include/util/myLog.h#includecstdint#includejsoncpp/json/json.h#includejsoncpp/json/reader.h#includehttplib.h#includesstream#includestringnamespaceai_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::mapstd::string,std::stringmodel_config){// 加载API密钥autoitmodel_config.find(api_key);if(itmodel_config.end()){ERR(ChatGPTProvider initModel failed, api key not found);returnfalse;}_api_keyit-second;// 加载API根端点缺失则使用官方默认地址itmodel_config.find(endpoint);if(itmodel_config.end()){_endpointhttps://api.openai.com;}else{_endpointit-second;}_isAvailabletrue;INFO(ChatGPTProvider initModel success, apikey:{}, endpoint:{},_api_key,_endpoint);returntrue;}3.3 状态与元信息接口3.3.1 可用性检测boolChatGPTProvider::isAvailable()const{return_isAvailable;}3.3.2 模型名称获取返回具体模型标识而非产品名 ChatGPTstd::stringChatGPTProvider::getModelName()const{returngpt-4o-mini;}3.3.3 模型描述获取std::stringChatGPTProvider::getModelDesc()const{returnOpenAI推出的轻量级、高性价比模型核心能力接近GPT-4 Turbo但成本更低;}3.4 消息发送接口说明全量返回接口同步调用 OpenAI 聊天补全接口一次性返回完整响应文本适合低延迟要求不高的场景。流式返回接口基于 SSEServer-Sent Events协议实现增量响应通过回调函数逐次推送文本片段回调的第二个布尔参数标记当前数据是否为最后一个分片。两个接口的完整实现与 DeepSeek 逻辑同源仅需适配请求 URL 路径/v1/chat/completions、请求头认证格式Bearer API_KEY、响应 JSON 字段结构即可。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【AI大模型接入SDK】Deepseek接入编译报错分析补充C enum class 编译报错与枚举类型博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა
返回列表