使用 Google Gemini 原生格式调用 Nebula API
google-generativeai SDK)或需要直接使用 Gemini 数据结构的场景。该接口遵循 Gemini API 规范,支持思考模式(Thinking)、多模态输入、工具调用、Google 搜索(Grounding)、Context Caching、图像生成等完整能力。
/v1/chat/completions 接口。| 特性 | Gemini 原生 | OpenAI 兼容(/v1/chat/completions) |
|---|---|---|
| 消息结构 | contents[].parts[](text / inlineData / fileData) | messages[].content |
| 角色 | user / model | user / assistant / system |
| 系统提示 | systemInstruction.parts | messages 中 role=system |
| 流式 | streamGenerateContent?alt=sse | stream: true |
| 思考模式 | generationConfig.thinkingConfig 或模型后缀 | 模型后缀(如 -thinking) |
| 功能 | 方法 | 路径 |
|---|---|---|
| 文本生成(非流式) | POST | /v1beta/models/{model}:generateContent |
| 文本生成(流式) | POST | /v1beta/models/{model}:streamGenerateContent?alt=sse |
| 单条 Embedding | POST | /v1beta/models/{model}:embedContent |
| 批量 Embedding | POST | /v1beta/models/{model}:batchEmbedContents |
{model} 需替换为实际模型 ID,如 gemini-2.5-pro、gemini-3-pro-preview。
Bearer sk-xxxxxxxxxx(推荐,与 Nebula 其他接口一致)x-goog-api-key: sk-xxxxxxxxxx?key=sk-xxxxxxxxxx。
role(user 或 model)和 parts 数组。parts 元素可为:{"text": "..."}、{"inlineData": {"mimeType": "...", "data": "base64..."}}、{"fileData": {"mimeType": "...", "fileUri": "gs://..."}}。temperature:0–2,随机性topP:核采样topK:Top-K 采样maxOutputTokens:最大输出 token 数stopSequences:停止序列responseMimeType:如 text/plainresponseModalities:如 ["TEXT"] 或 ["IMAGE"]thinkingConfig:思考模式(见下文)imageConfig:图像生成配置(见下文){"parts": [{"text": "..."}]}。[{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "OFF"}]。functionCallingConfig.mode:AUTO / ANY / NONE。generateContent 返回 JSON:
data: 开头,内容为 JSON 片段(含 candidates[].content.parts 等)。
google-generativeai 默认请求 Google 官方端点,接入 Nebula 时需通过 client_options 或环境变量将 api_endpoint 设为 https://llm.ai-nebula.com。具体以所用 SDK 文档为准。thinkingBudget(token 数)LOW / HIGH-thinking、-thinking-8192、-nothinking、-thinking-low、-thinking-highcontents[].parts 中混合文本与媒体:
inlineData + base64 data,或 fileData + fileUri(如 gs://...)inlineData,mimeType 如 audio/mp3functionCall part,需在下一轮 contents 中附带 functionResponse 再请求。
tools 中加入 googleSearch 即可:
googleSearch: {} 与 functionDeclarations 放在同一 tools 数组的不同元素中即可。回答中可能包含检索来源信息(如 groundingMetadata)。
POST /v1beta/models/{model}:streamGenerateContent?alt=sse,请求体与 generateContent 相同。响应为 SSE 流,每条 data: 为一块 JSON。
cachedContent,若服务端返回可缓存标识,后续请求在 body 中带上:
generationConfig 中指定:
candidates[].content.parts 会包含 inlineData(如 base64 图片)。
POST https://llm.ai-nebula.com/v1beta/models/{model}:embedContent
请求体示例:
model 在 path 中:/v1beta/models/text-embedding-004:embedContent,body 仅含 content。
POST https://llm.ai-nebula.com/v1beta/models/{model}:batchEmbedContents
请求体示例:
| 状态码 | 含义 |
|---|---|
| 400 | 请求参数错误(如缺少 contents、模型不支持某参数) |
| 401 | 认证失败(API Key 无效或未传) |
| 404 | 模型不存在或路径错误 |
| 429 | 限流,请稍后重试 |
| 500 | 服务端错误 |
error.message 并做重试或提示。
| 项目 | Gemini 原生 | OpenAI(/v1/chat/completions) |
|---|---|---|
| 基础 URL 路径 | /v1beta/models/{model}:generateContent | /v1/chat/completions |
| 认证 | Authorization: Bearer sk-xxx 或 x-goog-api-key | Authorization: Bearer sk-xxx |
| 消息格式 | contents[].parts[](text/inlineData/fileData) | messages[].content(字符串或数组) |
| 系统提示 | systemInstruction.parts | messages 中 role: "system" |
| 流式 | streamGenerateContent?alt=sse | stream: true |
| 思考模式 | thinkingConfig 或模型后缀 | 模型后缀(如 -thinking) |
| 工具定义 | tools[].functionDeclarations | tools[].function(OpenAI 格式) |
| 适用客户端 | Google SDK、自建 HTTP 客户端 | OpenAI SDK、兼容 OpenAI 的各类客户端 |
thinkingConfig、原生多模态 part)时用原生接口;希望与 OpenAI 生态统一时用 /v1/chat/completions。