Skip to content

Anthropic Messages API(原生)

原生 Anthropic Messages 端点 — 直接使用官方 anthropic Python SDK 或 anthropic-sdk-go 对接 JarvisClaw。无格式转换,与 Claude 原生 API 完全功能对等,包括提示缓存、扩展思考和流式输出。

基础 URL: https://api.jarvisclaw.ai

认证

方式Header描述
API Keyx-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 中如何读取文件?"}
    ]
)

请求体参数

参数类型必填描述
modelstring模型 ID(如 claude-sonnet-4.6
messagesarray消息对象数组,包含 rolecontent
max_tokensinteger最大生成 token 数
systemstring/array系统提示
streamboolean通过 SSE 流式输出(默认: false)
temperaturenumber采样温度(0-1)
top_pnumber核采样
top_kintegerTop-K 采样
stop_sequencesarray自定义停止序列
toolsarray函数调用工具定义
tool_choiceobject{"type": "auto"}, {"type": "any"}, {"type": "tool", "name": "..."}
thinkingobject{"type": "enabled", "budget_tokens": N}
metadataobject{"user_id": "..."} 用于滥用追踪

必需 Headers

Header描述
x-api-keysk-...你的 API 密钥
anthropic-version2023-06-01API 版本(curl 必需,SDK 自动设置)
Content-Typeapplication/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.8claude-opus-4.8
Claude Opus 4.7claude-opus-4.7
Claude Sonnet 4.6claude-sonnet-4.6
Claude Sonnet 4.5claude-sonnet-4.5
Claude Haiku 4.5claude-haiku-4.5

anthropic/ 前缀的完整形式同样可用。像 claude-sonnet-4-20250514 这类旧的日期版 ID 已不在 当前清单中 —— 实时列表请查 模型列表GET /v1/models

另请参阅