跳转到主要内容
POST
/
v1
/
messages
Messages
curl --request POST \
  --url https://openp.ai/v1/messages
import requests

url = "https://openp.ai/v1/messages"

response = requests.post(url)

print(response.text)
const options = {method: 'POST'};

fetch('https://openp.ai/v1/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://openp.ai/v1/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://openp.ai/v1/messages"

req, _ := http.NewRequest("POST", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://openp.ai/v1/messages")
.asString();
require 'uri'
require 'net/http'

url = URI("https://openp.ai/v1/messages")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)

response = http.request(request)
puts response.read_body
Claude 原生协议接口,完全兼容 Anthropic 官方,可使用 cache_controlthinking 等 OpenAI 协议中没有的高级特性。

请求

curl https://openp.ai/v1/messages \
  -H "x-api-key: $OPENPAI_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-4-8",
    "max_tokens": 1024,
    "system": "你是 Python 工程师",
    "messages": [
      {"role": "user", "content": "用 Python 写一个 LRU Cache"}
    ]
  }'
Header必填说明
x-api-keyOpenPAI 颁发的 sk- 密钥
anthropic-versionAPI 版本,目前用 2023-06-01
anthropic-beta实验特性,如 prompt-caching-2024-07-31
Content-Typeapplication/json

Body 字段

字段类型必填说明
modelstringClaude 模型 ID
messagesarray对话历史,role 只能 user / assistant 交替
max_tokensinteger最大输出 token
systemstring | arraysystem prompt,数组形式可带 cache_control
temperaturenumber0-1
top_pnumber
top_kinteger
stop_sequencesarray停止序列
streambooleanSSE 流
toolsarray工具定义
tool_choiceobject{type:"auto"} / {type:"any"} / {type:"tool",name:"x"}
thinkingobject{ type:"enabled", budget_tokens: 8000 }
metadataobject{ user_id: "..." }

content 结构

Claude 的 content 可以是字符串或 block 数组,block 类型:
  • text —— 普通文本
  • image —— 图片(source.typebase64url)
  • tool_use —— 模型发起的工具调用(assistant 消息)
  • tool_result —— 工具返回结果(user 消息)
  • thinking —— 思考块(thinking 模式响应)
  • document —— PDF 等文档

响应

{
  "id": "msg_01...",
  "type": "message",
  "role": "assistant",
  "model": "claude-opus-4-8",
  "content": [
    {"type": "text", "text": "好的,以下是 LRU Cache 实现..."}
  ],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 24,
    "output_tokens": 256,
    "cache_creation_input_tokens": 0,
    "cache_read_input_tokens": 0
  }
}
stop_reason:end_turn / max_tokens / stop_sequence / tool_use

流式响应

stream: true 时按 SSE 推送事件:
event: message_start
data: {"type":"message_start","message":{"id":"msg_...","role":"assistant","content":[],...}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"你"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":256}}

event: message_stop
data: {"type":"message_stop"}

思考模式

claude-sonnet-4-6claude-haiku-4-5 使用 扩展思考(thinking + budget_tokens);claude-opus-4-8 使用 自适应思考(effort,默认 high):
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 4096,
  "thinking": { "type": "enabled", "budget_tokens": 8000 },
  "messages": [{"role": "user", "content": "证明哥德巴赫猜想"}]
}
{
  "model": "claude-opus-4-8",
  "max_tokens": 4096,
  "effort": "high",
  "messages": [{"role": "user", "content": "证明哥德巴赫猜想"}]
}
响应中会多出 thinking block:
{
  "content": [
    {"type": "thinking", "thinking": "<内部思考链>"},
    {"type": "text", "text": "<最终回答>"}
  ]
}
详见 推理与思考

提示缓存

{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "system": [
    {
      "type": "text",
      "text": "<长 50000 字 system>",
      "cache_control": { "type": "ephemeral" }
    }
  ],
  "messages": [{"role": "user", "content": "..."}]
}
详见 缓存计费

视觉

{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "看图说话"},
      {"type": "image", "source": {
        "type": "url",
        "url": "https://example.com/cat.png"
      }}
    ]
  }]
}
或 base64:
{"type": "image", "source": {
  "type": "base64",
  "media_type": "image/png",
  "data": "<base64>"
}}

工具

{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "tools": [{
    "name": "get_weather",
    "description": "Get weather",
    "input_schema": {
      "type": "object",
      "properties": {"city": {"type": "string"}},
      "required": ["city"]
    }
  }],
  "messages": [{"role": "user", "content": "上海天气"}]
}
响应中 assistant content 会包含 tool_use block:
{
  "content": [{
    "type": "tool_use",
    "id": "toolu_01...",
    "name": "get_weather",
    "input": {"city": "上海"}
  }],
  "stop_reason": "tool_use"
}
把执行结果通过 user 消息回传:
{
  "role": "user",
  "content": [{
    "type": "tool_result",
    "tool_use_id": "toolu_01...",
    "content": "上海今天 26°C,晴"
  }]
}