Google Gemini 对话格式(Generate Content)
📝 简介¶
Google Gemini API 支持使用图片、音频、代码、工具等生成内容。给定输入 GenerateContentRequest 生成模型响应。支持文本生成、视觉理解、音频处理、长上下文、代码执行、JSON 模式、函数调用等多种功能。
💡 请求示例¶
基础文本对话 ✅¶
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[{"text": "Write a story about a magic backpack."}]
}]
}' 2> /dev/null
图像分析对话 ✅¶
# 使用临时文件保存base64编码的图片数据
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"
# 使用临时文件保存JSON载荷
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT
cat > "$TEMP_JSON" << EOF
{
"contents": [{
"parts":[
{"text": "Tell me about this instrument"},
{
"inline_data": {
"mime_type":"image/jpeg",
"data": "$(cat "$TEMP_B64")"
}
}
]
}]
}
EOF
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d "@$TEMP_JSON" 2> /dev/null
函数调用 ✅¶
cat > tools.json << EOF
{
"function_declarations": [
{
"name": "enable_lights",
"description": "Turn on the lighting system."
},
{
"name": "set_light_color",
"description": "Set the light color. Lights must be enabled for this to work.",
"parameters": {
"type": "object",
"properties": {
"rgb_hex": {
"type": "string",
"description": "The light color as a 6-digit hex string, e.g. ff0000 for red."
}
},
"required": [
"rgb_hex"
]
}
},
{
"name": "stop_lights",
"description": "Turn off the lighting system."
}
]
}
EOF
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-d @<(echo '
{
"system_instruction": {
"parts": {
"text": "You are a helpful lighting system bot. You can turn lights on and off, and you can set the color. Do not perform any other tasks."
}
},
"tools": ['$(cat tools.json)'],
"tool_config": {
"function_calling_config": {"mode": "auto"}
},
"contents": {
"role": "user",
"parts": {
"text": "Turn on the lights please."
}
}
}
') 2>/dev/null |sed -n '/"content"/,/"finishReason"/p'
JSON 模式响应 ✅¶
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"contents": [{
"parts":[
{"text": "List 5 popular cookie recipes"}
]
}],
"generationConfig": {
"response_mime_type": "application/json",
"response_schema": {
"type": "ARRAY",
"items": {
"type": "OBJECT",
"properties": {
"recipe_name": {"type":"STRING"},
}
}
}
}
}' 2> /dev/null | head
音频处理 🟡¶
文件上传限制
仅支持通过 inline_data
以 base64 方式上传音频,不支持 file_data.file_uri
或 File API。
# 使用File API上传音频数据到API请求
# 使用 base64 inline_data 上传音频数据到 API 请求
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
AUDIO_B64=$(base64 $B64FLAGS "$AUDIO_PATH")
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [
{"text": "Please describe this audio file."},
{"inline_data": {"mime_type": "audio/mpeg", "data": "'$AUDIO_B64'"}}
]
}]
}' 2> /dev/null | jq ".candidates[].content.parts[].text"
视频处理 🟡¶
文件上传限制
仅支持通过 inline_data
以 base64 方式上传视频,不支持 file_data.file_uri
或 File API。
# 使用File API上传视频数据到API请求
# 使用 base64 inline_data 上传视频数据到 API 请求
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
VIDEO_B64=$(base64 $B64FLAGS "$VIDEO_PATH")
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [
{"text": "Transcribe the audio from this video and provide visual descriptions."},
{"inline_data": {"mime_type": "video/mp4", "data": "'$VIDEO_B64'"}}
]
}]
}' 2> /dev/null | jq ".candidates[].content.parts[].text"
PDF处理 🟡¶
文件上传限制
仅支持通过 inline_data
以 base64 方式上传 PDF,不支持 file_data.file_uri
或 File API。
MIME_TYPE=$(file -b --mime-type "${PDF_PATH}")
# 使用 base64 inline_data 上传 PDF 文件到 API 请求
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
PDF_B64=$(base64 $B64FLAGS "$PDF_PATH")
echo $MIME_TYPE
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [
{"text": "Can you add a few more lines to this poem?"},
{"inline_data": {"mime_type": "application/pdf", "data": "'$PDF_B64'"}}
]
}]
}' 2> /dev/null | jq ".candidates[].content.parts[].text"
聊天对话 ✅¶
curl https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{"role":"user",
"parts":[{
"text": "Hello"}]},
{"role": "model",
"parts":[{
"text": "Great to meet you. What would you like to know?"}]},
{"role":"user",
"parts":[{
"text": "I have two dogs in my house. How many paws are in my house?"}]},
]
}' 2> /dev/null | grep "text"
流式响应 ✅¶
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
--no-buffer \
-d '{
"contents": [{
"parts": [{"text": "写一个关于魔法背包的故事"}]
}]
}'
代码执行 ✅¶
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [{"text": "计算斐波那契数列的第10项"}]
}],
"tools": [{
"codeExecution": {}
}]
}'
生成配置 ✅¶
curl https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"text": "Explain how AI works"}
]
}],
"generationConfig": {
"stopSequences": [
"Title"
],
"temperature": 1.0,
"maxOutputTokens": 800,
"topP": 0.8,
"topK": 10
}
}' 2> /dev/null | grep "text"
安全设置 ✅¶
echo '{
"safetySettings": [
{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_ONLY_HIGH"},
{"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}
],
"contents": [{
"parts":[{
"text": "'I support Martians Soccer Club and I think Jupiterians Football Club sucks! Write a ironic phrase about them.'"}]}]}' > request.json
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d @request.json 2> /dev/null
系统指令 ✅¶
curl "https://你的newapi服务器地址/v1beta/models/gemini-2.0-flash:generateContent?key=$NEWAPI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
"parts":
{ "text": "You are a cat. Your name is Neko."}},
"contents": {
"parts": {
"text": "Hello there"}}}'
📮 请求¶
端点¶
生成内容¶
POST https://你的newapi服务器地址/v1beta/{model=models/*}:generateContent
流式生成内容¶
POST https://你的newapi服务器地址/v1beta/{model=models/*}:streamGenerateContent
鉴权方法¶
在请求URL参数中包含API密钥:
其中 $NEWAPI_API_KEY
是您的 Google AI API 密钥。
路径参数¶
model
¶
- 类型:字符串
- 必需:是
用于生成补全项的模型名称。
格式:models/{model}
,例如 models/gemini-2.0-flash
请求体参数¶
contents
¶
- 类型:数组
- 必需:是
与模型当前对话的内容。对于单轮查询,这是单个实例。对于聊天等多轮查询,这是包含对话历史记录和最新请求的重复字段。
Content 对象属性:
Part 对象属性:
InlineData 对象属性:
FileData 对象属性:
tools
¶
- 类型:数组
- 必需:否
模型可能用于生成下一个响应的工具列表。支持的工具包括函数和代码执行。
Tool 对象属性:
FunctionDeclaration 对象属性:
FunctionCall 对象属性:
FunctionResponse 对象属性:
ExecutableCode 对象属性:
CodeExecutionResult 对象属性:
CodeExecution 对象属性:
toolConfig
¶
- 类型:对象
- 必需:否
请求中指定的任何工具的工具配置。
ToolConfig 对象属性:
FunctionCallingConfig 对象属性:
FunctionCallingMode 枚举值:
MODE_UNSPECIFIED
: 默认模式,模型决定是否调用函数AUTO
: 模型自动决定何时调用函数ANY
: 模型必须调用函数NONE
: 模型不能调用函数
safetySettings
¶
- 类型:数组
- 必需:否
用于屏蔽不安全内容的 SafetySetting 实例列表。
SafetySetting 对象属性:
HarmCategory 枚举值:
HARM_CATEGORY_HARASSMENT
: 骚扰内容HARM_CATEGORY_HATE_SPEECH
: 仇恨言论和内容HARM_CATEGORY_SEXUALLY_EXPLICIT
: 露骨色情内容HARM_CATEGORY_DANGEROUS_CONTENT
: 危险内容HARM_CATEGORY_CIVIC_INTEGRITY
: 可能用于破坏公民诚信的内容
HarmBlockThreshold 枚举值:
BLOCK_LOW_AND_ABOVE
: 允许发布评分为 NEGLIGIBLE 的内容BLOCK_MEDIUM_AND_ABOVE
: 允许发布评分为 NEGLIGIBLE 和 LOW 的内容BLOCK_ONLY_HIGH
: 允许发布风险等级为 NEGLIGIBLE、LOW 和 MEDIUM 的内容BLOCK_NONE
: 允许所有内容OFF
: 关闭安全过滤器
HarmBlockThreshold 完整枚举值:
HARM_BLOCK_THRESHOLD_UNSPECIFIED
: 未指定阈值BLOCK_LOW_AND_ABOVE
: 屏蔽低概率及以上的有害内容,只允许 NEGLIGIBLE 级别的内容BLOCK_MEDIUM_AND_ABOVE
: 屏蔽中等概率及以上的有害内容,允许 NEGLIGIBLE 和 LOW 级别的内容BLOCK_ONLY_HIGH
: 只屏蔽高概率的有害内容,允许 NEGLIGIBLE、LOW 和 MEDIUM 级别的内容BLOCK_NONE
: 不屏蔽任何内容,允许所有级别的内容OFF
: 完全关闭安全过滤器
systemInstruction
¶
- 类型:对象(Content)
- 必需:否
开发者设置的系统指令。目前仅支持文本。
generationConfig
¶
- 类型:对象
- 必需:否
模型生成和输出的配置选项。
GenerationConfig 对象属性:
支持的 MIME 类型:
text/plain
: (默认)文本输出application/json
: JSON响应text/x.enum
: ENUM作为字符串响应
Modality 枚举值:
TEXT
: 指示模型应返回文本IMAGE
: 表示模型应返回图片AUDIO
: 指示模型应返回音频
Schema 对象属性:
Type 枚举值:
TYPE_UNSPECIFIED
: 未指定类型STRING
: 字符串类型NUMBER
: 数字类型INTEGER
: 整数类型BOOLEAN
: 布尔类型ARRAY
: 数组类型OBJECT
: 对象类型
支持的编程语言(ExecutableCode):
LANGUAGE_UNSPECIFIED
: 未指定语言PYTHON
: Python编程语言
代码执行结果枚举(Outcome):
OUTCOME_UNSPECIFIED
: 未指定结果OUTCOME_OK
: 代码执行成功OUTCOME_FAILED
: 代码执行失败OUTCOME_DEADLINE_EXCEEDED
: 代码执行超时
cachedContent
¶
- 类型:字符串
- 必需:否
缓存的内容的名称,用于用作提供预测的上下文。格式:cachedContents/{cachedContent}
📥 响应¶
GenerateContentResponse¶
支持多个候选回答的模型的回答。系统会针对提示以及每个候选项报告安全分级和内容过滤。
candidates
¶
- 类型:数组
- 说明:模型的候选回答列表
Candidate 对象属性:
FinishReason 枚举值:
STOP
: 模型的自然停止点或提供的停止序列MAX_TOKENS
: 已达到请求中指定的词元数量上限SAFETY
: 出于安全考虑,系统已标记回答候选内容RECITATION
: 由于背诵原因,回答候选内容被标记LANGUAGE
: 回答候选内容因使用不受支持的语言而被标记OTHER
: 原因未知BLOCKLIST
: 由于内容包含禁止使用的字词,因此token生成操作已停止PROHIBITED_CONTENT
: 由于可能包含禁止的内容,因此token生成操作已停止SPII
: 由于内容可能包含敏感的个人身份信息,因此token生成操作已停止MALFORMED_FUNCTION_CALL
: 模型生成的函数调用无效IMAGE_SAFETY
: 由于生成的图片违反了安全规定,因此词元生成已停止
promptFeedback
¶
- 类型:对象
- 说明:与内容过滤器相关的提示反馈
PromptFeedback 对象属性:
BlockReason 枚举值:
BLOCK_REASON_UNSPECIFIED
: 默认值,此值未使用SAFETY
: 出于安全原因,系统屏蔽了提示OTHER
: 提示因未知原因被屏蔽了BLOCKLIST
: 系统屏蔽了此提示,因为其中包含术语屏蔽名单中包含的术语PROHIBITED_CONTENT
: 系统屏蔽了此提示,因为其中包含禁止的内容IMAGE_SAFETY
: 候选图片因生成不安全的内容而被屏蔽
usageMetadata
¶
- 类型:对象
- 说明:有关生成请求令牌用量的元数据
UsageMetadata 对象属性:
modelVersion
¶
- 类型:字符串
- 说明:用于生成回答的模型版本
responseId
¶
- 类型:字符串
- 说明:用于标识每个响应的ID
完整响应示例¶
{
"candidates": [
{
"content": {
"parts": [
{
"text": "你好!我是 Gemini,一个由 Google 开发的人工智能助手。我可以帮助您解答问题、提供信息、协助写作、代码编程等多种任务。请告诉我有什么可以为您效劳的!"
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE",
"blocked": false
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE",
"blocked": false
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE",
"blocked": false
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE",
"blocked": false
}
],
"tokenCount": 47
}
],
"promptFeedback": {
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
}
]
},
"usageMetadata": {
"promptTokenCount": 4,
"candidatesTokenCount": 47,
"totalTokenCount": 51,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 4
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 47
}
]
},
"modelVersion": "gemini-2.0-flash",
"responseId": "response-12345"
}
🔧 高级功能¶
安全评级¶
SafetyRating 对象属性:
HarmProbability 枚举值:
NEGLIGIBLE
: 内容不安全的概率可忽略不计LOW
: 内容不安全的概率较低MEDIUM
: 内容不安全的概率为中等HIGH
: 内容不安全的概率较高
引用元数据¶
CitationMetadata 对象属性:
CitationSource 对象属性:
代码执行¶
当启用代码执行工具时,模型可以生成和执行代码来解决问题。
代码执行示例响应:
{
"candidates": [
{
"content": {
"parts": [
{
"text": "我来计算斐波那契数列的第10项:"
},
{
"executableCode": {
"language": "PYTHON",
"code": "def fibonacci(n):\n if n <= 1:\n return n\n else:\n return fibonacci(n-1) + fibonacci(n-2)\n\nresult = fibonacci(10)\nprint(f'第10项斐波那契数是: {result}')"
}
},
{
"codeExecutionResult": {
"outcome": "OK",
"output": "第10项斐波那契数是: 55"
}
},
{
"text": "所以斐波那契数列的第10项是55。"
}
],
"role": "model"
},
"finishReason": "STOP"
}
]
}
接地功能 (Grounding)¶
GroundingMetadata 对象属性:
GroundingAttribution 对象属性:
AttributionSourceId 对象属性:
GroundingPassageId 对象属性:
SemanticRetrieverChunk 对象属性:
SearchEntryPoint 对象属性:
Segment 对象属性:
RetrievalMetadata 对象属性:
GroundingChunk 对象属性:
Web 对象属性:
GroundingSupport 对象属性:
多模态处理¶
Gemini API 支持处理多种模态的输入和输出:
支持的输入模态:
TEXT
: 纯文本IMAGE
: 图片(JPEG、PNG、WebP、HEIC、HEIF)AUDIO
: 音频(WAV、MP3、AIFF、AAC、OGG、FLAC)VIDEO
: 视频(MP4、MPEG、MOV、AVI、FLV、MPG、WEBM、WMV、3GPP)DOCUMENT
: 文档(PDF)
ModalityTokenCount 对象属性:
MediaResolution 枚举值:
MEDIA_RESOLUTION_LOW
: 低分辨率(64个令牌)MEDIA_RESOLUTION_MEDIUM
: 中等分辨率(256个令牌)MEDIA_RESOLUTION_HIGH
: 高分辨率(256个令牌进行缩放重新取景)
思考功能¶
ThinkingConfig 对象属性:
语音生成¶
SpeechConfig 对象属性:
VoiceConfig 对象属性:
PrebuiltVoiceConfig 对象属性:
MultiSpeakerVoiceConfig 对象属性:
SpeakerVoiceConfig 对象属性:
支持的语言代码:
zh-CN
: 中文(简体)en-US
: 英语(美国)ja-JP
: 日语ko-KR
: 韩语fr-FR
: 法语de-DE
: 德语es-ES
: 西班牙语pt-BR
: 葡萄牙语(巴西)hi-IN
: 印地语ar-XA
: 阿拉伯语it-IT
: 意大利语tr-TR
: 土耳其语vi-VN
: 越南语th-TH
: 泰语ru-RU
: 俄语pl-PL
: 波兰语nl-NL
: 荷兰语
Logprobs 结果¶
LogprobsResult 对象属性:
TopCandidates 对象属性:
Candidate (Logprobs) 对象属性:
URL检索功能¶
UrlRetrievalMetadata 对象属性:
UrlRetrievalContext 对象属性:
UrlContextMetadata 对象属性:
UrlMetadata 对象属性:
UrlRetrievalStatus 枚举值:
URL_RETRIEVAL_STATUS_SUCCESS
: 网址检索成功URL_RETRIEVAL_STATUS_ERROR
: 由于出错,网址检索失败
完整安全类别¶
HarmCategory 完整枚举值:
HARM_CATEGORY_UNSPECIFIED
: 类别未指定HARM_CATEGORY_DEROGATORY
: PaLM - 针对身份和/或受保护属性的负面或有害评论HARM_CATEGORY_TOXICITY
: PaLM - 粗鲁、无礼或亵渎性的内容HARM_CATEGORY_VIOLENCE
: PaLM - 描述描绘针对个人或团体的暴力行为的场景HARM_CATEGORY_SEXUAL
: PaLM - 包含对性行为或其他淫秽内容的引用HARM_CATEGORY_MEDICAL
: PaLM - 宣传未经核实的医疗建议HARM_CATEGORY_DANGEROUS
: PaLM - 危险内容会宣扬、助长或鼓励有害行为HARM_CATEGORY_HARASSMENT
: Gemini - 骚扰内容HARM_CATEGORY_HATE_SPEECH
: Gemini - 仇恨言论和内容HARM_CATEGORY_SEXUALLY_EXPLICIT
: Gemini - 露骨色情内容HARM_CATEGORY_DANGEROUS_CONTENT
: Gemini - 危险内容HARM_CATEGORY_CIVIC_INTEGRITY
: Gemini - 可能用于破坏公民诚信的内容
HarmProbability 完整枚举值:
HARM_PROBABILITY_UNSPECIFIED
: 概率未指定NEGLIGIBLE
: 内容不安全的概率可忽略不计LOW
: 内容不安全的概率较低MEDIUM
: 内容不安全的概率为中等HIGH
: 内容不安全的概率较高
Modality 完整枚举值:
MODALITY_UNSPECIFIED
: 未指定模态TEXT
: 纯文本IMAGE
: 图片VIDEO
: 视频AUDIO
: 音频DOCUMENT
: 文档,例如PDF
MediaResolution 完整枚举值:
MEDIA_RESOLUTION_UNSPECIFIED
: 未设置媒体分辨率MEDIA_RESOLUTION_LOW
: 媒体分辨率设为低(64个令牌)MEDIA_RESOLUTION_MEDIUM
: 媒体分辨率设为中等(256个令牌)MEDIA_RESOLUTION_HIGH
: 媒体分辨率设为高(使用256个令牌进行缩放重新取景)
UrlRetrievalStatus 完整枚举值:
URL_RETRIEVAL_STATUS_UNSPECIFIED
: 默认值,此值未使用URL_RETRIEVAL_STATUS_SUCCESS
: 网址检索成功URL_RETRIEVAL_STATUS_ERROR
: 由于出错,网址检索失败
🔍 错误处理¶
常见错误码¶
详细错误码说明¶
错误响应示例¶
{
"error": {
"code": 400,
"message": "Invalid argument: contents",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "contents",
"description": "contents is required"
}
]
}
]
}
}