generateContent
curl --request POST \
--url https://openp.ai/v1beta/models/{model}:generateContentimport requests
url = "https://openp.ai/v1beta/models/{model}:generateContent"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://openp.ai/v1beta/models/{model}:generateContent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://openp.ai/v1beta/models/{model}:generateContent",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://openp.ai/v1beta/models/{model}:generateContent"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://openp.ai/v1beta/models/{model}:generateContent")
.asString();require 'uri'
require 'net/http'
url = URI("https://openp.ai/v1beta/models/{model}:generateContent")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyGoogle Gemini
generateContent
POST /v1beta/models/:generateContent —— Gemini 原生协议
POST
/
v1beta
/
models
/
{model}
:generateContent
generateContent
curl --request POST \
--url https://openp.ai/v1beta/models/{model}:generateContentimport requests
url = "https://openp.ai/v1beta/models/{model}:generateContent"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://openp.ai/v1beta/models/{model}:generateContent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://openp.ai/v1beta/models/{model}:generateContent",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://openp.ai/v1beta/models/{model}:generateContent"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://openp.ai/v1beta/models/{model}:generateContent")
.asString();require 'uri'
require 'net/http'
url = URI("https://openp.ai/v1beta/models/{model}:generateContent")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyGemini 原生协议,支持多模态输入(图片 / PDF / 音频 / 视频)与函数调用。
响应中包含
执行后追加
或使用带
请求
curl "https://openp.ai/v1beta/models/gemini-3.1-pro-preview:generateContent" \
-H "x-goog-api-key: $OPENPAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [{"text": "用中文介绍一下傅立叶变换"}]
}
],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 2048,
"topP": 0.95
}
}'
路径变量
| 变量 | 说明 |
|---|---|
{model} | Gemini 模型 ID,如 gemini-3.1-pro-preview |
主要字段
| 字段 | 类型 | 说明 |
|---|---|---|
contents | array | 对话内容,role 为 user / model |
systemInstruction | object | system prompt |
generationConfig.temperature | number | 0-2 |
generationConfig.topP | number | |
generationConfig.topK | integer | |
generationConfig.maxOutputTokens | integer | 最大输出 |
generationConfig.candidateCount | integer | 1-8 |
generationConfig.stopSequences | array | |
generationConfig.responseMimeType | string | application/json 启用结构化输出 |
generationConfig.responseSchema | object | JSON Schema 强约束 |
generationConfig.thinkingConfig | object | { thinkingBudget: 8000 } |
tools | array | 函数 / 检索工具 |
toolConfig | object | function_calling_config |
safetySettings | array | 安全过滤等级 |
parts 类型
{"role": "user", "parts": [
{"text": "看这张图"},
{"inline_data": {"mime_type": "image/png", "data": "<base64>"}},
{"file_data": {"mime_type": "application/pdf", "file_uri": "https://..."}}
]}
响应
{
"candidates": [
{
"content": {
"role": "model",
"parts": [{"text": "傅立叶变换是..."}]
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [...]
}
],
"promptFeedback": {"safetyRatings": [...]},
"usageMetadata": {
"promptTokenCount": 15,
"candidatesTokenCount": 412,
"totalTokenCount": 427,
"cachedContentTokenCount": 0,
"thoughtsTokenCount": 0
}
}
finishReason:STOP / MAX_TOKENS / SAFETY / RECITATION / OTHER。
函数调用
{
"contents": [{"role": "user", "parts": [{"text": "北京天气"}]}],
"tools": [{
"functionDeclarations": [{
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}]
}]
}
functionCall:
{
"candidates": [{
"content": {"role": "model", "parts": [
{"functionCall": {"name": "get_weather", "args": {"city": "北京"}}}
]}
}]
}
functionResponse:
{"role": "user", "parts": [{
"functionResponse": {
"name": "get_weather",
"response": {"city": "北京", "temp": 18, "desc": "晴"}
}
}]}
思考模式
{
"contents": [{"role": "user", "parts": [{"text": "证明哥德巴赫猜想"}]}],
"generationConfig": {
"thinkingConfig": { "thinkingBudget": 8000 }
}
}
-thinking 后缀的模型 ID:gemini-2.5-pro-thinking。
结构化输出
{
"contents": [{"role": "user", "parts": [{"text": "返回一个 user JSON"}]}],
"generationConfig": {
"responseMimeType": "application/json",
"responseSchema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"}
},
"required": ["name", "age"]
}
}
}