Skip to content

Google 模型 ​

基础对话 ​

http
POST /v1beta/models/<Model ID>:generateContent
bash
curl --location --request POST 'https://neolink.com/api/v1beta/models/<Model ID>:generateContent' \
     --header 'Authorization: Bearer <API Key>' \
     --header 'Content-Type: application/json' \
     --data-raw '{
         "contents": [
             {
                 "parts": [
                     {
                         "text": "How does AI work?"
                     }
                 ]
             }
         ]
     }'
python
import requests

url = "https://neolink.com/api/v1beta/models/<Model ID>:generateContent"

headers = {
    "x-goog-api-key": "<API Key>",
    "Content-Type": "application/json",
}

payload = {
    "contents": [
        {
            "parts": [
                {
                    "text": "How does AI work?"
                }
            ]
        }
    ]
}

resp = requests.post(url, headers=headers, json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
print(data)

鉴权说明: Google 模型请求 header 中默认使用 Authorization: Bearer <API Key>,如遇到不能识别 Authorization 参数的情形,可将 "Authorization": "Bearer <API Key>" 替换为 "x-goog-api-key": "<API Key>"。

可选参数 ​

Google 模型的可调参数集中在 generationConfig 对象中。

参数名类型必填默认值说明
generationConfig.temperaturefloat否1.0采样温度,取值范围 0.0~2.0。较高的值(如 1.5)使输出更随机和创造性,较低的值(如 0.3)使输出更确定和聚焦。0 表示几乎确定性的输出。建议与 topP 和 topK 只调整一个
generationConfig.topPfloat否-核采样(nucleus sampling)阈值,取值范围 0.0~1.0。模型会考虑概率累积达到 topP 的 token。例如 0.95 表示只考虑概率累积达到 95% 的最可能的 token。建议与 temperature 和 topK 只调整一个
generationConfig.topKint否-仅从前 K 个最可能的 token 中采样。例如设置为 40 表示模型每次只从概率最高的 40 个 token 中选择。这是控制输出多样性的另一种方式
generationConfig.maxOutputTokensint否-生成响应的最大 token 数。设置此参数可以控制响应长度和成本。不同模型有不同的最大限制,超过限制的值会被自动调整
generationConfig.candidateCountint否1生成的响应候选数量。设置大于 1 时,API 会返回多个不同的响应候选,每个都会计费。适用于需要多个不同答案的场景
generationConfig.stopSequencesarray否-停止序列列表,最多 5 个字符串。当模型生成的文本中出现任一停止序列时,将立即停止生成。停止序列本身不会包含在输出中。适用于控制输出格式
generationConfig.presencePenaltyfloat否0.0存在惩罚系数,取值范围 -2.0~2.0。正值会惩罚已经出现过的 token,鼓励模型谈论新主题;负值则鼓励重复已有主题
generationConfig.frequencyPenaltyfloat否0.0频率惩罚系数,取值范围 -2.0~2.0。正值会根据 token 在文本中的出现频率进行惩罚,降低重复相同词汇的可能性;负值则增加重复可能性
generationConfig.responseLogprobsbool否false是否返回输出 token 的对数概率信息。启用后,响应中会包含每个 token 的对数概率,可用于分析模型的确定性和置信度
generationConfig.logprobsint否-每个 token 位置返回的候选 token 数量。设置此参数后,每个输出 token 位置会返回指定数量的备选 token 及其概率,用于分析模型的决策过程
generationConfig.responseMimeTypestring否text/plain响应的 MIME 类型。设置为 application/json 可强制模型输出有效的 JSON 格式。使用 JSON 模式时,建议配合 responseSchema 定义 JSON 结构
generationConfig.responseSchemaobject否-响应的 JSON schema,用于结构化输出。定义后,模型会严格按照 schema 生成 JSON 响应。需要配合 responseMimeType: "application/json" 使用
generationConfig.thinkingConfigobject否-思考配置,用于控制推理能力(仅支持思考的模型生效)。配置后,模型会在回答前进行内部推理,推理过程会体现在响应中
generationConfig.thinkingConfig.thinkingBudgetint否-思考过程可用的 token 预算。设置为 0 可完全关闭思考功能。较高的值允许模型进行更深入的推理,但会增加延迟和成本
safetySettingsarray否-安全设置数组,用于控制有害内容过滤级别。每个设置包含 category(如 HARM_CATEGORY_HATE_SPEECH)和 threshold(如 BLOCK_MEDIUM_AND_ABOVE)。可根据应用场景调整过滤强度
toolsarray否-模型可调用的工具列表。Google 模型支持特定工具如 googleSearch(网络搜索)、urlContext(URL 内容提取)等。每个工具定义其功能和参数
toolConfigobject否-工具配置,控制工具调用行为。可设置 functionCallingConfig.mode 为 AUTO(模型自行决定)、ANY(必须调用工具)或 NONE(不调用工具)

说明:

  • Google 模型的推理与生成控制参数均需放在 generationConfig 对象内,这与 OpenAI 和 Anthropic 的扁平化参数结构不同。
  • thinkingBudget 仅对支持思考的模型(如 Gemini 2.0 Flash Thinking)生效。
  • 建议 temperature、topP、topK 三个参数只调整一个,同时调整可能导致不可预测的采样行为。
  • presencePenalty 和 frequencyPenalty 可以同时使用,组合使用可以更精细地控制输出的重复性和多样性。

完整参数示例 ​

bash
curl --location --request POST 'https://neolink.com/api/v1beta/models/<Model ID>:generateContent' \
     --header 'Authorization: Bearer <API Key>' \
     --header 'Content-Type: application/json' \
     --data-raw '{
         "contents": [
             {
                 "parts": [
                     {
                         "text": "How does AI work?"
                     }
                 ]
             }
         ],
         "generationConfig": {
             "temperature": 1.0,
             "topP": 0.95,
             "maxOutputTokens": 2048,
             "thinkingConfig": {
                 "thinkingBudget": 1024
             }
         }
     }'
python
import requests

url = "https://neolink.com/api/v1beta/models/<Model ID>:generateContent"

headers = {
    "x-goog-api-key": "<API Key>",
    "Content-Type": "application/json",
}

payload = {
    "contents": [
        {
            "parts": [
                {
                    "text": "How does AI work?"
                }
            ]
        }
    ],
    "generationConfig": {
        "temperature": 1.0,
        "topP": 0.95,
        "maxOutputTokens": 2048,
        "thinkingConfig": {
            "thinkingBudget": 1024
        }
    }
}

resp = requests.post(url, headers=headers, json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
print(data)

搜索请求 ​

原生模型搜索请求 ​

http
POST /v1beta/models/<Model ID>:generateContent
bash
curl --location --request POST 'https://neolink.com/api/v1beta/models/<Model ID>:generateContent' \
     --header 'Authorization: Bearer <API Key>' \
     --header 'Content-Type: application/json' \
     --data-raw '{
         "contents": [
             {
                 "parts": [
                     {
                         "text": "北京今天天气怎么样?"
                     }
                 ]
             }
         ],
         "tools": [
             {
                 "googleSearch": {}
             },
             {
                 "urlContext": {}
             }
         ]
     }'
python
import requests

url = "https://neolink.com/api/v1beta/models/<Model ID>:generateContent"

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <API Key>",
}

payload = {
    "contents": [
        {
            "parts": [
                {
                    "text": "北京今天天气怎么样?"
                }
            ]
        }
    ],
    "tools": [
        {
            "googleSearch": {}
        },
        {
            "urlContext": {}
        }
    ]
}

response = requests.post(url, headers=headers, json=payload, timeout=30)
response.raise_for_status()
result = response.json()
print(result)

默认搜索请求 ​

http
POST /v1beta/models/<Model ID>:generateContent
bash
curl --location --request POST 'https://neolink.com/api/v1beta/models/<Model ID>:generateContent' \
     --header 'Authorization: Bearer <API Key>' \
     --header 'Content-Type: application/json' \
     --data-raw '{
         "contents": [
             {
                 "parts": [
                     {
                         "text": "北京今天天气怎么样?"
                     }
                 ]
             }
         ]
     }'
python
import requests

url = "https://neolink.com/api/v1beta/models/<Model ID>:generateContent"

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <API Key>",
}

payload = {
    "contents": [
        {
            "parts": [
                {
                    "text": "北京今天天气怎么样?"
                }
            ]
        }
    ]
}

response = requests.post(url, headers=headers, json=payload, timeout=30)
response.raise_for_status()
result = response.json()
print(result)

支持模型Id:

  • gemini-3-pro-preview-search

视频理解 ​

http
POST /v1beta/models/<Model ID>:generateContent
bash
curl --location --request POST 'https://neolink.com/api/v1beta/models/<Model ID>:generateContent' \
     --header 'Authorization: Bearer <API Key>' \
     --header 'Content-Type: application/json' \
     --data-raw '{
         "contents": [
             {
                 "parts": [
                     {
                         "inline_data": {
                             "mime_type": "video/mp4",
                             "data": "<Base64 Code>"
                         }
                     },
                     {
                         "text": "请总结这个视频的主要内容,并列出三个关键时刻。"
                     }
                 ]
             }
         ]
     }'
python
import requests

url = "https://neolink.com/api/v1beta/models/<Model ID>:generateContent"

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <API Key>",
}

payload = {
    "contents": [
        {
            "parts": [
                {
                    "inline_data": {
                        "mime_type": "video/mp4",
                        "data": "<Base64 Code>"
                    }
                },
                {
                    "text": "请总结这个视频的主要内容,并列出三个关键时刻。"
                }
            ]
        }
    ]
}

resp = requests.post(url, headers=headers, json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
print(data)

Base64 编码说明: <Base64 Code> 参数是将视频文件进行 Base64 编码后的字符串,参考脚本如下:

bash
#!/usr/bin/env bash
set -euo pipefail
VIDEO_PATH="./demo.mp4"

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
    B64FLAGS="--input"
else
    B64FLAGS="-w0"
fi
base64 $B64FLAGS "$VIDEO_PATH" > base64.txt