Messages
curl --request POST \
--url https://openp.ai/v1/messagesimport 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_bodyClaude Messages
Messages
POST /v1/messages —— Claude 原生协议接口
POST
/
v1
/
messages
Messages
curl --request POST \
--url https://openp.ai/v1/messagesimport 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_bodyClaude 原生协议接口,完全兼容 Anthropic 官方,可使用
响应中会多出
详见 推理与思考。
详见 缓存计费。
或 base64:
响应中 assistant content 会包含
把执行结果通过 user 消息回传:
cache_control、thinking 等 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
| Header | 必填 | 说明 |
|---|---|---|
x-api-key | ✅ | OpenPAI 颁发的 sk- 密钥 |
anthropic-version | ✅ | API 版本,目前用 2023-06-01 |
anthropic-beta | 实验特性,如 prompt-caching-2024-07-31 | |
Content-Type | ✅ | application/json |
Body 字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | ✅ | Claude 模型 ID |
messages | array | ✅ | 对话历史,role 只能 user / assistant 交替 |
max_tokens | integer | ✅ | 最大输出 token |
system | string | array | system prompt,数组形式可带 cache_control | |
temperature | number | 0-1 | |
top_p | number | ||
top_k | integer | ||
stop_sequences | array | 停止序列 | |
stream | boolean | SSE 流 | |
tools | array | 工具定义 | |
tool_choice | object | {type:"auto"} / {type:"any"} / {type:"tool",name:"x"} | |
thinking | object | { type:"enabled", budget_tokens: 8000 } | |
metadata | object | { user_id: "..." } |
content 结构
Claude 的content 可以是字符串或 block 数组,block 类型:
text—— 普通文本image—— 图片(source.type为base64或url)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-6、claude-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"
}}
]
}]
}
{"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": "上海天气"}]
}
tool_use block:
{
"content": [{
"type": "tool_use",
"id": "toolu_01...",
"name": "get_weather",
"input": {"city": "上海"}
}],
"stop_reason": "tool_use"
}
{
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": "toolu_01...",
"content": "上海今天 26°C,晴"
}]
}