Skip to content

Chat Completions API

兼容 OpenAI 的 Chat Completions 端点,覆盖平台上所有对话与推理模型 —— 当前列表见模型列表。支持流式输出、函数调用、视觉和结构化输出。

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

认证

两种方式均支持 — 所有请求通过 x402 链上结算:

方式Header描述
API KeyAuthorization: Bearer sk-...平台自动从你的 HD 钱包签名 x402
私钥(x402)通过 SDK 自动Agent 直接从自身钱包签名 x402

详见 Agent 支付(x402) 了解完整详情。

端点

POST /v1/chat/completions

创建聊天补全。

Headers

Header必填描述
AuthorizationBearer sk-your-api-key
Content-Type必须为 application/json
PAYMENT-SIGNATURE条件性Base64 编码的 x402 支付载荷(402 响应后必需,x402 v2)。X-PAYMENT 是等价别名

请求体参数

参数类型必填描述
modelstring模型 ID(如 openai/gpt-5.5
messagesarray消息对象数组
max_tokensinteger最大生成 token 数(默认: 1024)
max_completion_tokensinteger最大输出 token 数含推理(用于 o 系列/推理模型)
temperaturenumber采样温度(0-2)
top_pnumber核采样参数
top_kintegerTop-K 采样(取决于供应商)
streamboolean通过 SSE 流式传输部分结果
toolsarray可用函数/工具列表
tool_choicestring/object"auto", "none", "required", 或特定工具
response_formatobject{"type": "json_object"} 或 JSON Schema
ninteger生成数量(默认: 1)
stopstring/array停止序列
presence_penaltynumber出现惩罚(-2.0 到 2.0)
frequency_penaltynumber频率惩罚(-2.0 到 2.0)
reasoning_effortstring"low", "medium", "high"(推理模型)

请求示例

json
{
  "model": "anthropic/claude-sonnet-4.6",
  "messages": [
    {"role": "system", "content": "你是一个有帮助的助手。"},
    {"role": "user", "content": "解释量子计算"}
  ],
  "max_tokens": 1024,
  "temperature": 0.7,
  "stream": true
}

响应

json
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1700000000,
  "model": "anthropic/claude-sonnet-4.6",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "量子计算利用量子力学原理..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 150,
    "total_tokens": 175
  }
}

流式响应

启用 stream: true 时,响应以 SSE 事件形式到达:

data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"量子"},"index":0}]}

data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"计算"},"index":0}]}

data: [DONE]

函数调用

json
{
  "model": "openai/gpt-4.1",
  "messages": [
    {"role": "user", "content": "北京今天天气怎么样?"}
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "获取指定位置的当前天气",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {"type": "string", "description": "城市名称"}
          },
          "required": ["location"]
        }
      }
    }
  ],
  "tool_choice": "auto"
}

视觉(多模态)

json
{
  "model": "openai/gpt-4.1",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "这张图片里有什么?"},
        {"type": "image_url", "image_url": {"url": "https://example.com/image.png"}}
      ]
    }
  ]
}

SDK 示例

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api.jarvisclaw.ai/v1"
)

response = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.6",
    messages=[
        {"role": "system", "content": "你是一个有帮助的助手。"},
        {"role": "user", "content": "解释量子计算"}
    ],
    max_tokens=1024,
    stream=True
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
python
from jarvisclaw import ChatClient

chat = ChatClient(api_key="sk-your-api-key")

# 简单补全(智能路由 — 自动选择最佳模型)
response = chat.complete("解释量子计算。")
print(response)

# 指定模型
response = chat.complete("解释量子计算。", model="anthropic/claude-sonnet-4.6")
print(response)

# 流式输出
for chunk in chat.stream("讲个笑话。", model="openai/gpt-5.4-mini"):
    print(chunk, end="")
python
from jarvisclaw import ChatClient

# ─── 选项 A: Base 链 (EVM) ───
# Hex 私钥 → Base 上的 USDC (Chain ID 8453)
chat = ChatClient(private_key="0x<evm-private-key>")

# ─── 选项 B: Solana ───
# Base58 密钥对 → Solana 主网上的 USDC SPL
# chat = ChatClient(private_key="<solana-bs58-keypair>")

# SDK 从密钥格式自动检测链 — 无需配置

# 简单补全(智能路由 — 自动选择最佳模型)
response = chat.complete("解释量子计算。")
print(response)

# 指定模型
response = chat.complete("解释量子计算。", model="anthropic/claude-sonnet-4.6")
print(response)

# 流式输出
for chunk in chat.stream("讲个笑话。", model="openai/gpt-5.4-mini"):
    print(chunk, end="")
go
package main

import (
    "context"
    "fmt"
    jc "github.com/api-jarvisclaw/go-sdk/v2"
)

func main() {
    ctx := context.Background()
    cc, _ := jc.NewChatClient(jc.WithAPIKey("sk-your-api-key"))

    // 简单补全
    response, _ := cc.Complete(ctx, "解释量子计算。",
        jc.WithChatModel("anthropic/claude-sonnet-4.6"))
    fmt.Println(response)

    // 流式输出
    stream, _ := cc.Stream(ctx, "讲个笑话。", jc.WithChatModel("openai/gpt-5.4-mini"))
    for chunk := range stream.Channel() {
        fmt.Print(chunk)
    }
}
go
package main

import (
    "context"
    "fmt"
    jc "github.com/api-jarvisclaw/go-sdk/v2"
)

func main() {
    ctx := context.Background()

    // x402 Agent 钱包 — 通过 Base 上的 USDC 按调用付费 (Chain ID 8453)
    cc, _ := jc.NewChatClient(jc.WithPrivateKey("0x<evm-private-key>"))

    // 简单补全(智能路由 — 自动选择最佳模型)
    response, _ := cc.Complete(ctx, "解释量子计算。")
    fmt.Println(response)

    // 指定模型
    response, _ = cc.Complete(ctx, "解释量子计算。",
        jc.WithChatModel("anthropic/claude-sonnet-4.6"))
    fmt.Println(response)

    // 流式输出
    stream, _ := cc.Stream(ctx, "讲个笑话。", jc.WithChatModel("openai/gpt-5.4-mini"))
    for chunk := range stream.Channel() {
        fmt.Print(chunk)
    }
}