
🎬 个人主页 :艾莉丝努力练剑
❄专栏传送门 :《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》
《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平
🎬 艾莉丝的简介:

文章目录
- [1 ~> Gemini API 体系概述](#1 ~> Gemini API 体系概述)
-
- [1.1 两套 API 设计机制与选型](#1.1 两套 API 设计机制与选型)
-
- [1.1.1 设计背景](#1.1.1 设计背景)
- [1.1.2 接入选型策略](#1.1.2 接入选型策略)
- [1.2 Gemini Flash 模型核心特性](#1.2 Gemini Flash 模型核心特性)
- [2 ~> Gemini Provider 类架构设计](#2 ~> Gemini Provider 类架构设计)
-
- [2.1 类继承体系](#2.1 类继承体系)
- [2.2 头文件定义(GeminiProvider.h)](#2.2 头文件定义(GeminiProvider.h))
- [2.3 源文件核心实现(GeminiProvider.cpp)](#2.3 源文件核心实现(GeminiProvider.cpp))
-
- [2.3.1 模型初始化函数](#2.3.1 模型初始化函数)
- [2.3.2 可用性检测](#2.3.2 可用性检测)
- [2.3.3 模型元信息获取](#2.3.3 模型元信息获取)
- [3 ~> OpenAI 兼容 API 协议规范](#3 ~> OpenAI 兼容 API 协议规范)
-
- [3.1 接口端点](#3.1 接口端点)
- [3.2 请求头规范](#3.2 请求头规范)
- [3.3 请求体核心参数](#3.3 请求体核心参数)
- [3.4 全量响应数据结构](#3.4 全量响应数据结构)
- [4 ~> 工程接入与测试实践](#4 ~> 工程接入与测试实践)
-
- [4.1 项目目录结构](#4.1 项目目录结构)
- [4.2 Apifox 接口测试配置](#4.2 Apifox 接口测试配置)
-
- [4.2.1 环境管理](#4.2.1 环境管理)
- [4.2.2 接口测试流程](#4.2.2 接口测试流程)
- [4.3 网络与代理配置](#4.3 网络与代理配置)
- 结尾

1 ~> Gemini API 体系概述
1.1 两套 API 设计机制与选型
1.1.1 设计背景
- OpenAI 兼容 API:厂商降低开发者迁移成本的获客手段,实现现有 OpenAI 技术栈零成本切换;长期依赖会形成品牌替代效应,难以构建自身技术护城河。
- 原生 API(models.generateContent):充分释放 Gemini 多模态、函数调用、代码执行等原生能力,适配垂直场景深度定制,是厂商实现技术自主、构建生态护城河的核心方案。
- 行业演进规律:大模型厂商普遍遵循「追随者→挑战者→引领者」的 API 演进路径,兼容期快速获客,成熟期推出原生标准。
1.1.2 接入选型策略
- 快速迁移 / 兼容现有 OpenAI 代码:采用 OpenAI 兼容 API,仅需修改密钥、Base URL、模型名三处核心配置。
- 深度使用 Gemini 原生能力:采用 Google 原生 API,发挥多模态、长上下文、工具调用等特性。
- 本工程接入方案:优先采用 OpenAI 兼容 API 完成基础对话能力接入,预留原生 API 扩展空间。
1.2 Gemini Flash 模型核心特性
- 模型标识:
gemini-2.0-flash - 核心定位:低延迟、高吞吐的急速响应大语言模型
- 适用场景:实时对话交互、快速内容生成等对响应时效要求高的场景
- 能力矩阵:文本生成、多模态理解、嵌入表示、长上下文、代码执行、JSON 模式、函数调用、系统指令
2 ~> Gemini Provider 类架构设计
2.1 类继承体系
- 抽象基类:
LLMProvider,定义大模型提供者统一接口规范,实现多态调用 - 具体实现类:
GeminiProvider,封装 Gemini API 的请求构造、响应解析、流式处理逻辑 - 统一接口契约:
- 模型初始化:
initModel - 可用性检测:
isAvailable - 模型元信息获取:
getModelName/getModelDesc - 流式消息接口:
sendMessageStream,支持增量数据回调
- 模型初始化:
2.2 头文件定义(GeminiProvider.h)
cpp
#ifndef GEMINI_PROVIDER_H
#define GEMINI_PROVIDER_H
#include "LLMProvider.h"
#include <string>
#include <map>
#include <functional>
#include <vector>
namespace ai_chat_sdk {
// Gemini模型提供者实现类,继承LLMProvider抽象基类
class GeminiProvider : public LLMProvider {
public:
// 初始化模型配置
// modelConfig: 配置项映射,包含api_key、endpoint等核心参数
// 返回值: 初始化成功返回true,失败返回false
virtual bool initModel(const std::map<std::string, std::string>& modelConfig) override;
// 检测模型是否处于可用状态
virtual bool isAvailable() const override;
// 获取模型官方标识名称
virtual std::string getModelName() const override;
// 获取模型功能描述文本
virtual std::string getModelDesc() const override;
// 发送对话消息并获取流式响应
// messages: 对话上下文消息列表
// callback: 增量数据回调函数
// 参数1: 当前增量文本数据
// 参数2: 是否为最后一个数据块(流结束标记)
virtual std::string sendMessageStream(
const std::vector<std::string>& messages,
std::function<void(const std::string&, bool)> callback) override;
protected:
bool _isAvailable = false; // 模型可用状态标记
std::string _apiKey; // Gemini API访问密钥
std::string _endpoint; // API服务基准端点URL
};
} // namespace ai_chat_sdk
#endif // GEMINI_PROVIDER_H
2.3 源文件核心实现(GeminiProvider.cpp)
2.3.1 模型初始化函数
功能:从配置映射中读取核心参数,完成合法性校验与状态初始化。
cpp
#include "../include/GeminiProvider.h"
#include "../include/util/myLog.h"
namespace ai_chat_sdk {
bool GeminiProvider::initModel(const std::map<std::string, std::string>& modelConfig) {
// 读取并校验API密钥
auto it = modelConfig.find("api_key");
if (it == modelConfig.end()) {
ERR("GeminiProvider::initModel: api_key not found in modelConfig");
return false;
}
_apiKey = it->second;
// 读取并校验API端点地址
it = modelConfig.find("endpoint");
if (it == modelConfig.end()) {
ERR("GeminiProvider::initModel: endpoint not found in modelConfig");
return false;
}
_endpoint = it->second;
// 标记模型可用并输出初始化日志
_isAvailable = true;
INFO("GeminiProvider::initModel: init model success, endpoint:{}", _endpoint);
return true;
}
**安全规范:**日志输出禁止打印 API 密钥明文,仅输出端点地址,避免密钥泄露风险。
2.3.2 可用性检测
cpp
bool GeminiProvider::isAvailable() const {
return _isAvailable;
}
2.3.3 模型元信息获取
cpp
std::string GeminiProvider::getModelName() const {
return "gemini-2.0-flash";
}
std::string GeminiProvider::getModelDesc() const {
return "Google的急速响应模型,专为大模型部署和快速交互的场景设计";
}
3 ~> OpenAI 兼容 API 协议规范
3.1 接口端点
- 请求方法:
POST - 基准 URL:
https://generativelanguage.googleapis.com - 接口路径:
/v1beta/openai/chat/completions - 完整请求地址:
https://generativelanguage.googleapis.com/v1beta/openai/chat/completions
3.2 请求头规范
| 参数名 | 类型 | 取值规范 |
|---|---|---|
| Content-Type | string | 固定值 application/json |
| Authorization | string | 格式为 Bearer {GEMINI_API_KEY} |
3.3 请求体核心参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| model | string | 模型标识,如 gemini-2.0-flash |
| messages | array | 对话消息列表,每条包含role与content字段 |
| temperature | float | 采样温度,控制输出随机性,典型值 0.7 |
| max_tokens | integer | 最大生成 Token 数限制 |
| stream | boolean | 是否开启流式响应,true 为增量返回,false 为全量返回 |
请求体示例:
json
{
"model": "gemini-2.0-flash",
"messages": [
{
"role": "user",
"content": "你是谁?"
}
],
"temperature": 0.7,
"max_tokens": 2048,
"stream": false
}
3.4 全量响应数据结构
json
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "我是一个大型语言模型,由Google训练",
"role": "assistant"
}
}
],
"created": 1759981735,
"id": "pzDnaOXSPjz7IP_tG-6Ao",
"model": "gemini-2.0-flash",
"object": "chat.completion",
"usage": {
"completion_tokens": 12,
"prompt_tokens": 3,
"total_tokens": 15
}
}
- 关键字段说明:
finish_reason:生成终止原因,stop表示正常结束usage:Token 消耗统计,包含提示 Token、补全 Token 与总 Token
4 ~> 工程接入与测试实践
4.1 项目目录结构
bash
sdk/
├── include/
│ ├── common.h # 公共头文件
│ ├── LLMProvider.h # 大模型提供者抽象基类
│ ├── ChatGPTProvider.h # ChatGPT提供者
│ ├── DeepSeekProvider.h # DeepSeek提供者
│ ├── GeminiProvider.h # Gemini提供者头文件
│ └── util/
│ └── myLog.h # 日志工具头文件
├── src/
│ ├── ChatGPTProvider.cpp
│ ├── DeepSeekProvider.cpp
│ ├── GeminiProvider.cpp # Gemini提供者实现
│ └── util/
│ └── myLog.cpp # 日志工具实现
└── test/
├── build/ # 构建输出目录
├── CMakeLists.txt # 构建配置
└── testLLM.cpp # 测试入口程序
4.2 Apifox 接口测试配置
4.2.1 环境管理
- 全局前置 URL:
https://generativelanguage.googleapis.com - 环境变量体系:
GEMINI_API_KEY:密钥类变量,加密存储- 支持多环境隔离:开发环境、测试环境、正式环境、本地 Mock
4.2.2 接口测试流程
- 新建 POST 请求,填写完整接口路径
- Headers 中配置
Content-Type与Authorization - Body 选择 JSON 格式,填入请求体参数
- 配置网络代理,确保 Google API 可达
- 发送请求,校验响应状态码与数据结构
4.3 网络与代理配置
- 前置条件:Gemini API 服务需通过代理网络方可访问
- 代理配置规则:
- 接口请求代理:仅作用于 API 请求,不影响 Apifox 平台连接
- 自定义代理:配置代理 IP 与端口(示例:
127.0.0.1:7890) - 代理绕过列表:配置无需代理的地址,以英文逗号分隔
结尾
uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 艾莉丝努力练剑 C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日练剑达成!"
"技术之路难免有困惑,但同行的人会让前进更有方向。" |
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!
往期回顾:
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
