Chat Completions API
兼容 OpenAI 的 Chat Completions 端点,覆盖平台上所有对话与推理模型 —— 当前列表见模型列表。支持流式输出、函数调用、视觉和结构化输出。
基础 URL: https://api.jarvisclaw.ai/v1
认证
两种方式均支持 — 所有请求通过 x402 链上结算:
| 方式 | Header | 描述 |
|---|---|---|
| API Key | Authorization: Bearer sk-... | 平台自动从你的 HD 钱包签名 x402 |
| 私钥(x402) | 通过 SDK 自动 | Agent 直接从自身钱包签名 x402 |
详见 Agent 支付(x402) 了解完整详情。
端点
POST /v1/chat/completions
创建聊天补全。
Headers
| Header | 必填 | 描述 |
|---|---|---|
| Authorization | 是 | Bearer sk-your-api-key |
| Content-Type | 是 | 必须为 application/json |
| PAYMENT-SIGNATURE | 条件性 | Base64 编码的 x402 支付载荷(402 响应后必需,x402 v2)。X-PAYMENT 是等价别名 |
请求体参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| model | string | 是 | 模型 ID(如 openai/gpt-5.5) |
| messages | array | 是 | 消息对象数组 |
| max_tokens | integer | 否 | 最大生成 token 数(默认: 1024) |
| max_completion_tokens | integer | 否 | 最大输出 token 数含推理(用于 o 系列/推理模型) |
| temperature | number | 否 | 采样温度(0-2) |
| top_p | number | 否 | 核采样参数 |
| top_k | integer | 否 | Top-K 采样(取决于供应商) |
| stream | boolean | 否 | 通过 SSE 流式传输部分结果 |
| tools | array | 否 | 可用函数/工具列表 |
| tool_choice | string/object | 否 | "auto", "none", "required", 或特定工具 |
| response_format | object | 否 | {"type": "json_object"} 或 JSON Schema |
| n | integer | 否 | 生成数量(默认: 1) |
| stop | string/array | 否 | 停止序列 |
| presence_penalty | number | 否 | 出现惩罚(-2.0 到 2.0) |
| frequency_penalty | number | 否 | 频率惩罚(-2.0 到 2.0) |
| reasoning_effort | string | 否 | "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)
}
}