Sử dụng API Anthropic Messages thông qua CometAPI để truy cập các model Claude với extended thinking, prompt caching, tool use, web search/fetch, streaming và effort control.
import anthropic
client = anthropic.Anthropic(
base_url="https://api.cometapi.com",
api_key="<COMETAPI_KEY>",
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="You are a helpful assistant.",
messages=[
{"role": "user", "content": "Hello, world"}
],
)
print(message.content[0].text){
"id": "<string>",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "<string>",
"thinking": "<string>",
"signature": "<string>",
"id": "<string>",
"name": "<string>",
"input": {}
}
],
"model": "<string>",
"stop_reason": "end_turn",
"stop_sequence": "<string>",
"usage": {
"input_tokens": 123,
"output_tokens": 123,
"cache_creation_input_tokens": 123,
"cache_read_input_tokens": 123,
"cache_creation": {
"ephemeral_5m_input_tokens": 123,
"ephemeral_1h_input_tokens": 123
}
}
}import anthropic
client = anthropic.Anthropic(
base_url="https://api.cometapi.com",
api_key="<COMETAPI_KEY>",
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}],
)
print(message.content[0].text)
x-api-key và Authorization: Bearer đều được hỗ trợ để xác thực. Các SDK Anthropic chính thức mặc định sử dụng x-api-key.thinking. Phản hồi sẽ bao gồm các khối nội dung thinking, hiển thị phần suy luận nội bộ của Claude trước câu trả lời cuối cùng.
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000,
},
messages=[
{"role": "user", "content": "Prove that there are infinitely many primes."}
],
)
for block in message.content:
if block.type == "thinking":
print(f"Thinking: {block.thinking[:200]}...")
elif block.type == "text":
print(f"Answer: {block.text}")
budget_tokens tối thiểu là 1,024. Thinking tokens được tính vào giới hạn max_tokens của bạn — hãy đặt max_tokens đủ cao để chứa cả phần thinking và phần phản hồi.cache_control vào các khối nội dung cần được cache:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are an expert code reviewer. [Long detailed instructions...]",
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "Review this code..."}],
)
usage của phản hồi:
cache_creation_input_tokens — tokens được ghi vào cache (tính phí ở mức cao hơn)cache_read_input_tokens — tokens được đọc từ cache (tính phí ở mức thấp hơn)stream: true. Các sự kiện sẽ đến theo thứ tự sau:
message_start — chứa metadata của message và usage ban đầucontent_block_start — đánh dấu phần bắt đầu của mỗi content blockcontent_block_delta — các đoạn văn bản tăng dần (text_delta)content_block_stop — đánh dấu phần kết thúc của mỗi content blockmessage_delta — stop_reason cuối cùng và usage đầy đủmessage_stop — báo hiệu kết thúc luồngwith client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=256,
messages=[{"role": "user", "content": "Hello"}],
) as stream:
for text in stream.text_stream:
print(text, end="")
output_config.effort:
message = client.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
messages=[
{"role": "user", "content": "Summarize this briefly."}
],
output_config={"effort": "low"}, # "low", "medium", or "high"
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Analyze the content at https://arxiv.org/abs/1512.03385"}
],
tools=[
{"type": "web_fetch_20250910", "name": "web_fetch", "max_uses": 5}
],
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "What are the latest developments in AI?"}
],
tools=[
{"type": "web_search_20250305", "name": "web_search", "max_uses": 5}
],
)
{
"id": "msg_bdrk_01UjHdmSztrL7QYYm7CKBDFB",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello!"
}
],
"model": "claude-sonnet-4-6",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 19,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 4
}
}
| Tính năng | Anthropic Messages (/v1/messages) | OpenAI-Compatible (/v1/chat/completions) |
|---|---|---|
| Extended thinking | Tham số thinking với budget_tokens | Không khả dụng |
| Prompt caching | cache_control trên các content block | Không khả dụng |
| Kiểm soát mức độ xử lý | output_config.effort | Không khả dụng |
| Web fetch/search | Server tools (web_fetch, web_search) | Không khả dụng |
| Header xác thực | x-api-key hoặc Bearer | Chỉ Bearer |
| Định dạng phản hồi | Định dạng Anthropic (các content block) | Định dạng OpenAI (choices, message) |
| Models | Chỉ Claude | Đa nhà cung cấp (GPT, Claude, Gemini, v.v.) |
Your CometAPI key passed via the x-api-key header. Authorization: Bearer <key> is also supported.
The Anthropic API version to use. Defaults to 2023-06-01.
"2023-06-01"
Comma-separated list of beta features to enable. Examples: max-tokens-3-5-sonnet-2024-07-15, pdfs-2024-09-25, output-128k-2025-02-19.
The Claude model to use. See the Models page for current Claude model IDs.
"claude-sonnet-4-6"
The conversation messages. Must alternate between user and assistant roles. Each message's content can be a string or an array of content blocks (text, image, document, tool_use, tool_result). There is a limit of 100,000 messages per request.
Show child attributes
The maximum number of tokens to generate. The model may stop before reaching this limit. When using thinking, the thinking tokens count towards this limit.
x >= 11024
System prompt providing context and instructions to Claude. Can be a plain string or an array of content blocks (useful for prompt caching).
Controls randomness in the response. Range: 0.0–1.0. Use lower values for analytical tasks and higher values for creative tasks. Defaults to 1.0.
0 <= x <= 1Nucleus sampling threshold. Only tokens with cumulative probability up to this value are considered. Range: 0.0–1.0. Use either temperature or top_p, not both.
0 <= x <= 1Only sample from the top K most probable tokens. Recommended for advanced use cases only.
x >= 0If true, stream the response incrementally using Server-Sent Events (SSE). Events include message_start, content_block_start, content_block_delta, content_block_stop, message_delta, and message_stop.
Custom strings that cause the model to stop generating when encountered. The stop sequence is not included in the response.
Enable extended thinking — Claude's step-by-step reasoning process. When enabled, the response includes thinking content blocks before the answer. Requires a minimum budget_tokens of 1,024.
Show child attributes
Tools the model may use. Supports client-defined functions, web search (web_search_20250305), web fetch (web_fetch_20250910), code execution (code_execution_20250522), and more.
Show child attributes
Controls how the model uses tools.
Show child attributes
Request metadata for tracking and analytics.
Show child attributes
Configuration for output behavior.
Show child attributes
The service tier to use. auto tries priority capacity first, standard_only uses only standard capacity.
auto, standard_only Successful response. When stream is true, the response is a stream of SSE events.
Unique identifier for this message (e.g., msg_01XFDUDYJgAACzvnptvVoYEL).
Always message.
message Always assistant.
assistant The response content blocks. May include text, thinking, tool_use, and other block types.
Show child attributes
The specific model version that generated this response (e.g., claude-sonnet-4-6).
Why the model stopped generating.
end_turn, max_tokens, stop_sequence, tool_use, pause_turn The stop sequence that caused the model to stop, if applicable.
Token usage statistics.
Show child attributes
import anthropic
client = anthropic.Anthropic(
base_url="https://api.cometapi.com",
api_key="<COMETAPI_KEY>",
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="You are a helpful assistant.",
messages=[
{"role": "user", "content": "Hello, world"}
],
)
print(message.content[0].text){
"id": "<string>",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "<string>",
"thinking": "<string>",
"signature": "<string>",
"id": "<string>",
"name": "<string>",
"input": {}
}
],
"model": "<string>",
"stop_reason": "end_turn",
"stop_sequence": "<string>",
"usage": {
"input_tokens": 123,
"output_tokens": 123,
"cache_creation_input_tokens": 123,
"cache_read_input_tokens": 123,
"cache_creation": {
"ephemeral_5m_input_tokens": 123,
"ephemeral_1h_input_tokens": 123
}
}
}