Anthropic Messages API(原生)
原生 Anthropic Messages 端点 — 直接使用官方 anthropic Python SDK 或 anthropic-sdk-go 对接 JarvisClaw。无格式转换,与 Claude 原生 API 完全功能对等,包括提示缓存、扩展思考和流式输出。
基础 URL: https://api.jarvisclaw.ai
认证
| 方式 | Header | 描述 |
|---|---|---|
| API Key | x-api-key: sk-... | Anthropic 风格 header。平台路由并处理 x402 结算 |
| 私钥(x402) | 通过 SDK 自动 | Agent 直接从自身钱包签名 x402 |
端点
POST /v1/messages
使用 Anthropic 原生协议创建消息。支持所有 Claude 模型。
快速开始
python
import anthropic
client = anthropic.Anthropic(
api_key="sk-your-api-key",
base_url="https://api.jarvisclaw.ai"
)
message = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=1024,
messages=[
{"role": "user", "content": "用一段话解释量子计算"}
]
)
print(message.content[0].text)go
package main
import (
"context"
"fmt"
"github.com/anthropics/anthropic-sdk-go"
"github.com/anthropics/anthropic-sdk-go/option"
)
func main() {
client := anthropic.NewClient(
option.WithAPIKey("sk-your-api-key"),
option.WithBaseURL("https://api.jarvisclaw.ai"),
)
message, _ := client.Messages.New(context.Background(),
anthropic.MessageNewParams{
Model: "claude-sonnet-4.6",
MaxTokens: 1024,
Messages: []anthropic.MessageParam{
anthropic.NewUserMessage(
anthropic.NewTextBlock("用一段话解释量子计算"),
),
},
},
)
fmt.Println(message.Content[0].Text)
}bash
curl https://api.jarvisclaw.ai/v1/messages \
-H "x-api-key: sk-your-api-key" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4.6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "用一段话解释量子计算"}
]
}'流式输出
python
with client.messages.stream(
model="claude-sonnet-4.6",
max_tokens=1024,
messages=[{"role": "user", "content": "写一个快速排序的实现"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)go
stream := client.Messages.NewStreaming(ctx, anthropic.MessageNewParams{
Model: "claude-sonnet-4.6",
MaxTokens: 1024,
Messages: []anthropic.MessageParam{
anthropic.NewUserMessage(
anthropic.NewTextBlock("写一个快速排序的实现"),
),
},
})
for stream.Next() {
event := stream.Current()
switch e := event.AsUnion().(type) {
case anthropic.ContentBlockDeltaEvent:
if delta, ok := e.Delta.AsTextDelta(); ok {
fmt.Print(delta.Text)
}
}
}扩展思考
python
message = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000
},
messages=[
{"role": "user", "content": "解释 P vs NP 问题并讨论其影响"}
]
)
for block in message.content:
if block.type == "thinking":
print(f"思考过程: {block.thinking}")
elif block.type == "text":
print(f"回答: {block.text}")提示缓存
python
message = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=1024,
system=[{
"type": "text",
"text": "你是一个专家助手...[很长的系统提示]...",
"cache_control": {"type": "ephemeral"}
}],
messages=[
{"role": "user", "content": "回答关于文档的问题"}
]
)
# 后续使用相同 system prompt 的请求将命中缓存函数调用
python
message = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "获取指定城市的当前天气",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名称"}
},
"required": ["location"]
}
}],
messages=[
{"role": "user", "content": "东京现在天气怎么样?"}
]
)
# 处理响应中的 tool_use 块
for block in message.content:
if block.type == "tool_use":
print(f"工具: {block.name}, 输入: {block.input}")go
message, _ := client.Messages.New(ctx, anthropic.MessageNewParams{
Model: "claude-sonnet-4.6",
MaxTokens: 1024,
Tools: []anthropic.ToolParam{{
Name: "get_weather",
Description: "获取指定城市的当前天气",
InputSchema: map[string]any{
"type": "object",
"properties": map[string]any{
"location": map[string]any{"type": "string", "description": "城市名称"},
},
"required": []string{"location"},
},
}},
Messages: []anthropic.MessageParam{
anthropic.NewUserMessage(
anthropic.NewTextBlock("东京现在天气怎么样?"),
),
},
})系统提示
python
message = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=1024,
system="你是一个编程助手。始终提供可运行的示例代码。",
messages=[
{"role": "user", "content": "Python 中如何读取文件?"}
]
)请求体参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| model | string | 是 | 模型 ID(如 claude-sonnet-4.6) |
| messages | array | 是 | 消息对象数组,包含 role 和 content |
| max_tokens | integer | 是 | 最大生成 token 数 |
| system | string/array | 否 | 系统提示 |
| stream | boolean | 否 | 通过 SSE 流式输出(默认: false) |
| temperature | number | 否 | 采样温度(0-1) |
| top_p | number | 否 | 核采样 |
| top_k | integer | 否 | Top-K 采样 |
| stop_sequences | array | 否 | 自定义停止序列 |
| tools | array | 否 | 函数调用工具定义 |
| tool_choice | object | 否 | {"type": "auto"}, {"type": "any"}, {"type": "tool", "name": "..."} |
| thinking | object | 否 | {"type": "enabled", "budget_tokens": N} |
| metadata | object | 否 | {"user_id": "..."} 用于滥用追踪 |
必需 Headers
| Header | 值 | 描述 |
|---|---|---|
x-api-key | sk-... | 你的 API 密钥 |
anthropic-version | 2023-06-01 | API 版本(curl 必需,SDK 自动设置) |
Content-Type | application/json | 请求格式 |
流式事件
| 事件类型 | 描述 |
|---|---|
message_start | 消息对象,包含元数据和用量 |
content_block_start | 新内容块(text, tool_use, thinking) |
content_block_delta | 增量文本或 JSON 增量 |
content_block_stop | 内容块完成 |
message_delta | 停止原因和最终用量 |
message_stop | 消息完成 |
模型名称
使用原生 Anthropic 端点时,模型名称不需要 anthropic/ 前缀:
| 模型 | ID |
|---|---|
| Claude Opus 4.8 | claude-opus-4.8 |
| Claude Opus 4.7 | claude-opus-4.7 |
| Claude Sonnet 4.6 | claude-sonnet-4.6 |
| Claude Sonnet 4.5 | claude-sonnet-4.5 |
| Claude Haiku 4.5 | claude-haiku-4.5 |
带 anthropic/ 前缀的完整形式同样可用。像 claude-sonnet-4-20250514 这类旧的日期版 ID 已不在 当前清单中 —— 实时列表请查 模型列表 或 GET /v1/models。
另请参阅
- Responses API — OpenAI 兼容 Responses 格式(使用
openaiSDK) - Chat Completions API — 传统 OpenAI Chat 格式
- 模型列表 — 完整模型列表