Orux AI / 模型观察
Claude Sonnet 5.5 API:价格、SDK与JSON验证
用OpenAI Python SDK调用Claude Sonnet 5.5 API,查看每100万tokens输入190、输出950 Credits价格与缓存条件。含两次博物馆JSON提取的输入输出、Node/Python验证器、9个拒绝样本和调用费用;区分结构正确与事实一致,并说明最低收费和Haiku的100K阈值。

文章目录
Claude Sonnet 5.5 API:价格、调用与经过验证的 JSON 提取
Anthropic 的 Claude Sonnet 5.5 API 标价为每100万输入 tokens $2、输出 $10。在 Orux AI,同一模型 claude-sonnet-5-5 的价格是输入190 Credits($0.95)、输出950 Credits($4.75),标准 OpenAI Python SDK 只需更改 base_url 即可调用。下文提供价格表、可用的 Python 和 cURL 请求、实际运行过两次的 JSON 提取案例、发现首轮不匹配的验证器,以及这两次调用的费用。
Claude Sonnet 5.5 API 速览
Claude Sonnet 5.5 是 Anthropic 于2026年9月28日发布的中间档型号。Haiku 不足以完成任务、Opus 成本又偏高时,可以把它作为候选。以下价格按每100万 tokens 计,核对日为2026年10月29日。
| 费率(每100万 tokens) | Anthropic 标价 | Orux AI | Orux 占官方标价 |
|---|---|---|---|
| 输入 | $2.00 | 190 Credits($0.95) | 47.5% |
| 输出 | $10.00 | 950 Credits($4.75) | 47.5% |
| 缓存读取 | $0.10 | 12 Credits($0.06) | 60% |
| 5分钟缓存写入 | $2.50 | 237.5 Credits($1.19) | 47.5% |
| 1小时缓存写入 | $4.00 | 380 Credits($1.90) | 47.5% |
左右滑动查看完整表格。
来源:Anthropic 定价及 Claude Sonnet 5.5 模型页。Orux AI 以 Credits 结算,固定1 Credit=$0.005,即200 Credits=$1;括号内美元仅用于比较。
表中还未体现三件事:
- Orux AI 每次聊天请求最低收费0.001 Credits。
- Anthropic Batch API 提供50%折扣。Orux AI 当前不为该模型提供批处理,所以上表比较的是标准非批量价格。
- 失败请求不收费,只对完成的调用计费,使用预付余额,无月费。
Claude 三档型号、缓存计算和 Haiku 100K 阈值的完整对照,见Claude API 定价(英文)。
用 OpenAI SDK 调用 Claude Sonnet 5.5
Orux AI 的 OpenAI 兼容 Chat Completions 接入地址为 https://orux.top/api/v1。在/keys创建密钥;完整明文只在创建时展示一次,应立即保存到环境变量。
# pip install openai
import os
from openai import OpenAI
client = OpenAI(base_url="https://orux.top/api/v1", api_key=os.environ["ORUX_API_KEY"])
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Summarize this in 3 bullet points: ..."}],
max_tokens=500,
)
print(resp.choices[0].message.content)
# Estimate the charge in Credits from the published rates (Credits per 1M tokens)
IN_RATE, OUT_RATE = 190, 950 # claude-sonnet-5-5, checked 2026-10-29
u = resp.usage
print(f"~ {(u.prompt_tokens * IN_RATE + u.completion_tokens * OUT_RATE) / 1e6:.6f} Credits")同一请求的 cURL 版本:
curl https://orux.top/api/v1/chat/completions \
-H "Authorization: Bearer $ORUX_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "claude-sonnet-5-5", "max_tokens": 500,
"messages": [{"role": "user", "content": "Summarize this in 3 bullet points: ..."}]}'设置 stream=True 即可流式返回。错误处理应从接入第一天做好:401 表示密钥有误,402 表示余额不足,应充值而非轮换密钥;429 表示需要降低速率,并采用带随机抖动的指数退避。
还要分清不同接入方式。Anthropic 提供自己的 OpenAI SDK 兼容层,当前文档将其介绍为用于测试 Claude API,并列明功能限制(官方文档,译文于2026年11月1日复核)。原文把它描述为主要用于试用和比较;这里不把这句话扩大为官方全面禁止生产使用。需要原生功能时可直接使用 Anthropic SDK。Orux AI 则是独立第三方网关:同一个密钥、OpenAI 风格客户端和余额,可以访问 Claude、GPT、Gemini、DeepSeek 等模型。按需要接入的模型范围选择即可。
从 Claude 获得可验证的 JSON
Orux AI 的 Claude Sonnet 5.5 端点资料列有 messages 和 max_tokens。下方测试没有使用 JSON 模式或 schema 参数,而是先通过提示词生成,再由代码验证。无论选什么模型,都值得区分“返回了能解析的 JSON”与“数据正确”。
提取契约
2026年10月29日的测试使用4条虚构博物馆借展记录及 max_tokens=1000。记录包含相互冲突且未批准的估值、明确确认的零、缺失展厅和不可能的日期(2月30日),用来暴露粗心提取的问题。完整首轮请求如下,保留原始英文:
Extract this fictional museum loan inventory. Return JSON only, without Markdown. The root has exactly one key, items. Each item has exactly id, title, gallery, insurance_usd, arrival_date. Preserve the stated item order. insurance_usd is a nonnegative JSON number or null; an explicitly confirmed zero is 0, not null. arrival_date is an actual calendar date in YYYY-MM-DD or null. Missing, unapproved, conflicting or impossible values must be null. Never choose between conflicting unapproved estimates. Do not infer facts.
A1: Brass compass. Gallery A. Approved insurance USD 12000. Arrival 2026-11-14.
B2: Silk route map. Gallery B. Draft insurance estimates: USD 8000 in one note and USD 9000 in another; neither approved. Arrival 2026-11-16.
C3: Ceramic sherd. Insurance is explicitly confirmed as USD 0. Gallery and arrival date are unconfirmed.
D4: Glass lens. Gallery D. Approved insurance USD 500. Arrival is written as 2026-02-30; the actual date has not been confirmed.首轮输出与澄清后重跑
首轮回复未改写:
{"items":[{"id":"A1","title":"Brass compass","gallery":"A","insurance_usd":12000,"arrival_date":"2026-11-14"},{"id":"B2","title":"Silk route map","gallery":"B","insurance_usd":null,"arrival_date":"2026-11-16"},{"id":"C3","title":"Ceramic sherd","gallery":null,"insurance_usd":0,"arrival_date":null},{"id":"D4","title":"Glass lens","gallery":"D","insurance_usd":500,"arrival_date":null}]}它正确处理了难点:C3 确认的零仍是 0,B2 没在8000和9000之间擅自选择,2月30日变为 null。但“Gallery A”被缩短为“A”。提示词没有要求保留完整标签,所以这是契约缺口,不是误解事实;按“Gallery A”作键的导入表仍会出错。
我们加上一句话,保持记录和参数不变重跑:
For gallery, preserve the full source label exactly (for example, "Gallery A", not "A"). Never shorten or translate these labels.第二次回复同样未编辑,保存为 response.json:
{
"items": [
{"id": "A1", "title": "Brass compass", "gallery": "Gallery A", "insurance_usd": 12000, "arrival_date": "2026-11-14"},
{"id": "B2", "title": "Silk route map", "gallery": "Gallery B", "insurance_usd": null, "arrival_date": "2026-11-16"},
{"id": "C3", "title": "Ceramic sherd", "gallery": null, "insurance_usd": 0, "arrival_date": null},
{"id": "D4", "title": "Glass lens", "gallery": "Gallery D", "insurance_usd": 500, "arrival_date": null}
]
}两次都以 finish_reason=stop 结束。单个 null 会把未批准、未确认和不可能等原因合并为同一值。真实导入应在 JSON 之外保留源文及人工审核队列。
可运行的验证器
验证器检查根键、字段集合、非空且唯一的 ID、数值类型、非负金额及真实日历日期。给出第二个文件时,还会逐值比较参考答案和条目顺序。本例的预期值由编辑根据源记录手工录入,与第二轮回复一致,因此 expected.json 和 response.json 内容相同。
实际使用的 Node.js 22 版本,保存为 validate.mjs:
import fs from 'node:fs';
import {pathToFileURL} from 'node:url';
import {isDeepStrictEqual} from 'node:util';
export function validate(raw, expected) {
const x = JSON.parse(raw), keys = ['id','title','gallery','insurance_usd','arrival_date'];
const object = v => v !== null && typeof v === 'object' && !Array.isArray(v);
const sameKeys = (v, k) => object(v) && Object.keys(v).sort().join('|') === [...k].sort().join('|');
if (!sameKeys(x, ['items']) || !Array.isArray(x.items) || !x.items.length) throw Error('items');
const seen = new Set();
for (const item of x.items) {
if (!sameKeys(item, keys)) throw Error('keys');
if (typeof item.id !== 'string' || !item.id.trim() || seen.has(item.id)) throw Error('id');
seen.add(item.id);
for (const k of ['title','gallery']) {
if (item[k] !== null && (typeof item[k] !== 'string' || !item[k].trim())) throw Error(k);
}
const n = item.insurance_usd;
if (n !== null && (typeof n !== 'number' || !Number.isFinite(n) || n < 0)) throw Error('insurance_usd');
const d = item.arrival_date;
if (d !== null) {
if (typeof d !== 'string' || !/^\d{4}-\d{2}-\d{2}$/.test(d)) throw Error('arrival_date');
const parsed = new Date(d + 'T00:00:00Z');
if (!Number.isFinite(parsed.getTime()) || parsed.toISOString().slice(0,10) !== d) throw Error('arrival_date');
}
}
if (expected !== undefined && !isDeepStrictEqual(x, expected)) throw Error('source_mismatch');
return x;
}
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
try {
const expected = process.argv[3] ? JSON.parse(fs.readFileSync(process.argv[3],'utf8')) : undefined;
const data = validate(fs.readFileSync(process.argv[2],'utf8'), expected);
console.log(`PASS ${data.items.length} items; source fixture ${expected ? 'checked' : 'NOT checked'}`);
} catch (error) { console.error('REJECT', error.message); process.exitCode = 1; }
}Python 等价实现 validate.py,采用相同的核心检查及错误标签:
import json, math, re, sys
from datetime import date
KEYS = {"id", "title", "gallery", "insurance_usd", "arrival_date"}
def validate(raw, expected=None):
x = json.loads(raw) # Markdown fences or prose around the JSON fail here
if not isinstance(x, dict) or set(x) != {"items"} or not isinstance(x["items"], list) or not x["items"]:
raise ValueError("items")
seen = set()
for item in x["items"]:
if not isinstance(item, dict) or set(item) != KEYS:
raise ValueError("keys")
item_id = item["id"]
if not isinstance(item_id, str) or not item_id.strip() or item_id in seen:
raise ValueError("id")
seen.add(item_id)
for k in ("title", "gallery"):
v = item[k]
if v is not None and (not isinstance(v, str) or not v.strip()):
raise ValueError(k)
n = item["insurance_usd"]
if n is not None and (isinstance(n, bool) or not isinstance(n, (int, float))
or not math.isfinite(n) or n < 0):
raise ValueError("insurance_usd")
d = item["arrival_date"]
if d is not None:
if not isinstance(d, str) or not re.fullmatch(r"[0-9]{4}-[0-9]{2}-[0-9]{2}", d):
raise ValueError("arrival_date")
try:
date.fromisoformat(d) # rejects 2026-02-30
except ValueError:
raise ValueError("arrival_date") from None
if expected is not None and x != expected:
raise ValueError("source_mismatch")
return x
if __name__ == "__main__":
try:
expected = json.load(open(sys.argv[2])) if len(sys.argv) > 2 else None
data = validate(open(sys.argv[1]).read(), expected)
checked = "checked" if expected is not None else "NOT checked"
print(f"PASS {len(data['items'])} items; source fixture {checked}")
except json.JSONDecodeError:
print("REJECT json", file=sys.stderr)
sys.exit(1)
except ValueError as e:
print("REJECT", e, file=sys.stderr)
sys.exit(1)任选其一,把回复和参考文件一起传入:
node validate.mjs response.json expected.json
python validate.py response.json expected.json
# PASS 4 items; source fixture checked只传 response.json 时,只检查结构;金额即使错误,只要是合法数值类型也可能通过。参考答案比较才会发现内容错误。相对该参考,首轮因展厅标签缩写而报 source_mismatch,第二轮通过。
把调用和验证串起来时,可复用快速入门的客户端:
import json
from validate import validate
PROMPT = open("prompt.txt").read() # the contract and records above, plus the gallery rule
expected = json.load(open("expected.json"))
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": PROMPT}],
max_tokens=1000,
)
data = validate(resp.choices[0].message.content, expected) # raises on any mismatch9种损坏样本,全部被拒绝
随后将参考文件故意改坏9次,再逐个运行验证器。9个均被拒绝。Python 版本与 Node 原版的标签一致,但 Markdown 围栏样本在 Python 中报告 json,Node 则是 JSON.parse 错误。这是验证器测试,不是9次模型失败。
- 重复 ID:
id - 条目多出一个键:
keys - 删除一条:
source_mismatch - 把12000改成字符串“12000”:
insurance_usd - 未知估值从
null改为0:source_mismatch - 已确认零从0改为
null:source_mismatch - 到达日期改为2026-02-30:
arrival_date - 12000改成12500:
source_mismatch - 给 JSON 加 Markdown 代码围栏:解析阶段拒绝
两次模型调用和9个样本说明了本例发生的事,不构成可靠性百分比。验证失败时应停止导入,转交人工处理。
两次调用实际花了多少
两次返回的用量分别为402输入/195输出 tokens、446输入/207输出 tokens。按上面的费率:
| 调用 | tokens(输入/输出) | Orux AI | Anthropic 标价 |
|---|---|---|---|
| 首轮 | 402 / 195 | 0.26163 Credits($0.001308) | $0.002754 |
| 澄清后重跑 | 446 / 207 | 0.28139 Credits($0.001407) | $0.002962 |
| 合计 | 848 / 402 | 0.54302 Credits($0.002715) | $0.005716 |
左右滑动查看完整表格。
算式就是用量乘费率:(402×190+195×950)÷1,000,000=0.26163 Credits。输出单价是输入的5倍,因此账单往往主要来自输出;比起缩短提示词,约束输出格式通常更值得先试。按两次平均0.27151 Credits估算,每月10,000次类似提取约为2,715 Credits($13.58)。
什么时候换用 Haiku 5.5 或 Opus 5.5
同一假设任务:每次2000输入、500输出 tokens,以下按1000次请求计,价格日期为2026年10月29日。
| 模型 | Orux 每100万(输入/输出) | Orux 每1000次 | Anthropic 每1000次标价 | 适合先评估的任务 |
|---|---|---|---|---|
| Claude Haiku 5.5(提示≤100K) | 10.8 / 54 Credits | 48.6 Credits($0.243) | $0.45 | 高频分类、路由、短提取 |
| Claude Sonnet 5.5 | 190 / 950 Credits | 855 Credits($4.275) | $9.00 | 常规提取、草稿、调试 |
| Claude Opus 5.5 | 380 / 1,900 Credits | 1,710 Credits($8.55) | $18.00 | 答错代价高的复杂推理 |
左右滑动查看完整表格。
Haiku 5.5 有价格阶梯:输入超过100,000 tokens时,每100万按56/280 Credits收费,官方为$0.50/$2.50。可先在 Haiku 上运行上述验证器;若它通过你的参考样本,该参考工作量的费用约可降至原来的1/17。跨厂商选择可参考Claude Sonnet 5.5、GPT-6 Luna 与 Gemini 4 Argon 对比(英文)。
FAQ
Claude Sonnet 5.5 支持 JSON 模式吗?
Orux AI 的端点资料列有 messages 和 max_tokens,本例没有使用 JSON 模式或 schema 参数。我们在提示词中明确键、类型和 null 规则,再由代码验证,获得了可解析 JSON。能解析只是检查的开始,不代表数据已经正确。
能用 OpenAI Python SDK 调 Claude 吗?
可以,将 SDK 指向 https://orux.top/api/v1,使用 Orux AI 密钥并设置 model="claude-sonnet-5-5";标准 Chat Completions 调用的其他部分不变。Anthropic 也有自己的兼容层,当前文档介绍了测试用途和功能限制,使用前应核对原生与兼容接口的差异。
一次 Claude Sonnet 5.5 调用多少钱?
用量乘费率即可:Orux AI 每100万输入190 Credits,输出950 Credits。本例真实402输入、195输出调用为0.26163 Credits(约$0.0013),Anthropic 标价约$0.0028。每次聊天请求最低收费0.001 Credits。
Orux AI 支持 Claude Sonnet 5.5 提示缓存吗?
模型页公布了缓存费率:每100万缓存读取12 Credits,5分钟写入237.5 Credits,1小时写入380 Credits。长且完全相同的前缀,例如系统提示或文档,在缓存窗口内多次复用时,缓存才可能带来节省。
请求失败会怎样?
失败请求不计费,只为完成的调用付费。402 按余额不足处理并充值,401 检查密钥,429 采用带抖动的指数退避。能够解析、但没通过你的验证器的回复,仍属于已完成调用,会收费,这也是控制输出长度的理由。
来源与下一步
在Claude Sonnet 5.5 模型页选择已保存的“Museum inventory · validated extraction”示例;载入只填表,不会自动运行。价格核对日2026-10-29。来源:Anthropic 定价、Anthropic OpenAI SDK 兼容说明、Orux AI 定价。
用一个 API 调用这些模型
一个 OpenAI 兼容 API,覆盖对话、图像、视频与音频模型,按积分计费。
相关文章
浏览全部文章 →
Claude API价格2026:Opus、Sonnet与Haiku 5.5
比较Claude API三款5.5模型的官方与Orux AI价格,核对Haiku的100K分档、缓存写入与读取、Batch优惠和三类任务预算。附Python成本计算器,价格快照为2026年10月29日,并说明最低收费、失败请求和最终账单的边界;模型名称、代码、数值与来源链接完整保留。

Claude Sonnet 5.5、GPT-6 Luna与Gemini 4 Argon费用比较
比较Claude Sonnet 5.5、GPT-6 Luna与Gemini 4 Argon的积分价格、缓存、长上下文和三种任务预算,附Python切换示例。核对博物馆JSON首轮与修正轮真实结果,更新Sol、Astra现已上架的说明,明确历史价格与未复证边界,不把同token算价冒充三模型质量实测。

Gemini API价格:12月涨价前后的费用与预算
Gemini 4 Argon于2026年12月1日、Gemini 3.8 Flash于2027年1月1日涨价。比较Standard、Batch、Flex、Priority,列出Nano Banana 2.1每图费用、三档月预算、思考tokens与缓存条件,保留Orux AI Credits价格和Python调用示例。