Gemini 4 Argon API:用 Python 实现原生流式对话
用 Python 创建 Gemini 4 Argon API 对话,读取原生 SSE、保留带签名的内容部分、处理空答案并检查 token 用量。
以 Markdown 阅读Gemini 4 Argon API 对话使用 Gemini 原生内容结构:contents、角色和 parts。第一条请求很简单,难点在于发送追问前正确保存响应。只根据可见文本重建模型轮次可能丢失带签名的内容;把空的加载消息写进历史,则可能导致下一条请求无效。
本教程使用 Python 标准库和 SeedRouter 原生端点,覆盖文本聊天与流式输出。完整 API 参考负责说明全部参数契约,本文则沿着一次请求,构建可用的多轮对话流程。
发送第一条请求之前
你需要 Python 3、SeedRouter API key,以及充足的账户余额。将密钥保存在名为 SEEDROUTER_API_KEY 的环境变量中,不要写入源代码或发送给浏览器的代码包。每条提交的消息都可能产生费用。示例不会自动重试请求,也不会自动调用续写。
模型 ID 为 gemini-4-argon,应放在端点路径中。Google 的原生生成指南说明了这一格式。SeedRouter 使用 Bearer 认证,如下所示。
发送一条 Gemini 4 Argon API 请求
curl --no-buffer --fail-with-body \
'https://api.seedrouter.ai/v1beta/models/gemini-4-argon:streamGenerateContent?alt=sse' \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"contents":[{"role":"user","parts":[{"text":"Explain a mutex in one sentence."}]}],"generationConfig":{"maxOutputTokens":1024,"thinkingConfig":{"thinkingLevel":"low"}}}'响应是一串服务器发送事件,而不是单个 JSON 文档。每个 data: 事件包含原生 Gemini JSON。可见文本位于 candidates[].content.parts[].text;某些部分包含的则是思考或签名。usageMetadata 可能与文本分开发送,因此应读到最后一个事件再认定答案完整。
这里有意设置较小的输出预算,用于基础连通检查。思考也会消耗预算,因此响应可能不完整。更复杂的任务应主动提高预算,不要把不完整答案变成用户看不到的重试循环。
运行两轮 Python 对话
下载完整 Python 示例,保存到本地并运行:
python3 gemini-4-argon-chat.py先问“Explain a mutex in one sentence”,再问“Give a Python example of that idea”。脚本会在每次请求前等待你输入,输入空行即可结束。其核心历史记录规则是:
user = {"role": "user", "parts": [{"text": text}]}
body = {"contents": [*history, user]}
history = [*history, user, {"role": "model", "parts": parts}]可下载脚本还会提供生成设置、解析 SSE 帧、仅打印非思考文本,并且只在结束原因为 STOP 且 parts 非空时写入历史。API 错误、流中断或空答案都会保留之前的历史,不会静默重新提交消息。
上面的小片段用于说明数据结构,完整请求处理请运行整个文件。若需要非流式响应,对应操作为 generateContent;参考示例提供了 cURL、Python、Node.js 和 Go 用法。
保留原生 parts,不要保存加载占位内容
第二条请求应包含三个真实轮次:第一条用户消息、已完成的模型响应,以及第二条用户消息。界面的“思考中……”占位提示不是另一个模型轮次。
例如,contents.3.parts: Too small: expected array to have >=1 items 错误表示第四个内容条目的 parts 数组为空,索引从零开始。修改提示词或模型前,先检查历史记录的构造方式。加载提示属于界面显示状态,绝不能在请求中变成 { "role": "model", "parts": [] }。
按顺序保留每个返回的部分,包括 thoughtSignature 和任何标记为思考的部分,即使界面不展示它们。Google 的思考签名指南解释了为什么后续轮次必须保留这些不透明字段。不要编辑、编造或重建签名。原生历史应与界面展示的文本分开保存。
工具对话同样需要遵守这一保留原则,但执行工具并返回结果需要更完整的应用循环。本文的文本示例没有实现这一循环,不能把它当作完整的编程智能体。
读取用量并处理停止
对于原始请求,保留流中最新报告的用量值。同一次请求内反复报告的是累计快照,不要相加。普通输入为 promptTokenCount 减去 cachedContentTokenCount;计费输出同时包含 candidatesTokenCount 和 thoughtsTokenCount。价格指南说明如何将这些计数换算为预算。
Ctrl+C 会停止示例,不再发送后续请求。停止本地读取不能证明远端生成没有消耗 token。如果流在用量返回前结束,请查阅账户用量记录。示例采取保守做法,不将不完整轮次加入后续历史;是否保留部分答案属于另外的应用设计决策。
长输出续写是另一种情况。CONTINUATION 结束原因表示使用续写 token 恢复原始生成,不是新用户消息。Google 要求保留原始请求并使用最新 token,不将部分输出追加到 contents。详见长输出续写指南。本入门脚本会停止,而非自动实现续写。
哪些内容已经验证?
基础文本流式生成已通过 SeedRouter Playground 的本地端到端检查。示例的解析和历史记录行为使用合成流进行了检查,包括带签名的部分、空响应和中断。这些测试数据是软件检查,不是额外的模型调用。工具、媒体和续写仍需单独检查能力,才能称为已验证的集成。
API 常见问题
能把 OpenAI 模型名直接替换为 gemini-4-argon 吗?
仅替换名称不会转换消息格式。本指南使用 Gemini 原生 contents 和 parts。请确认客户端支持该协议,以及你配置的认证方式和端点。
为什么消耗了 token,答案却是空的?
思考可能耗尽输出预算,安全机制或生成未完成也可能使可见文本为空。请检查结束原因和用量,不要插入空的模型轮次,也不要自动重复付费请求。
百万 token 上下文意味着一百万输出 token 吗?
不是。输入、思考和输出共享上下文。长生成还受到单次请求上限约束,可能需要续写。应为共享总量制定预算,不要将输入和输出当成两份独立额度。
对话跑通后再添加功能
先获得一个完整答案,再确认第二轮收到了原始的原生内容。添加附件、工具或持久化时,将 Gemini 4 Argon API 历史与显示状态分开管理。交互使用和账户要求可继续查看模型 Playground与访问指南。



