跳到主要内容

Anthropic

定义

Anthropic 是一家 AI 安全公司兼模型提供商,由前 OpenAI 研究人员于 2021 年创立。其核心论点是:构建有能力的 AI 模型和解决对齐问题是不可分割的目标——公司在追求前沿能力的同时,也开展 Constitutional AI、可解释性和模型内部机制理解等安全研究。这些研究的商业产品是 Claude 系列模型,通过 Anthropic API 和企业产品提供访问。

Claude 模型阵容遵循三级命名惯例,反映能力与成本的权衡:Opus(最高质量,复杂推理)、Sonnet(质量与速度平衡)和 Haiku(最快且最具成本效益)。截至 2025 年,当前一代为 Claude 3.7 Sonnet——具有扩展思考能力的旗舰模型——以及 Claude 3 OpusClaude 3.5 SonnetClaude 3.5 Haiku。所有 Claude 3+ 模型都支持图像输入,整个系列围绕 200K token 上下文窗口设计,可以处理书籍、大型代码库和长对话历史而无需截断。

从平台角度来看,Anthropic 的 API 以 Messages API 为核心——一个专为多轮对话设计的简洁接口。平台包括工具使用(Anthropic 对函数调用的称呼)、扩展思考(可见的思维链推理)、提示缓存(降低大型重复上下文的成本和延迟)和批处理。Python SDK(anthropic)和 TypeScript SDK 是主要的客户端库。Claude 模型也可通过 Amazon Bedrock、Google Cloud Vertex AI 和企业合同(含数据驻留选项)获取。

工作原理

Messages API

Messages API(POST /v1/messages)是 Anthropic 的主要接口。与某些使用平坦 prompt 字符串的 API 不同,Messages API 以对话为中心:您发送一个包含交替 userassistant 轮次的 messages 数组,以及一个用于设置上下文和角色的可选 system 参数。模型返回一个 Message 对象,其中包含一个 content 列表——默认为文本块,当模型决定调用工具时则为工具使用块。支持流式传输并推荐用于交互使用;SDK 同时提供流式助手和原始 SSE 访问。

工具使用

工具使用允许 Claude 通过发出结构化的 tool_use 内容块来调用外部函数。您在 tools 参数中将工具声明为 JSON schema。当 Claude 决定需要某个工具时,响应包含一个带有工具名称和输入的 tool_use 块;您的代码执行该函数并在下一个用户轮次中返回 tool_result。Claude 然后使用结果完成其响应。这种模式使得代理、代码执行环境、数据库查询和 API 集成成为可能,而无需模型直接访问任何系统。

扩展思考

扩展思考是 Claude 3.7 Sonnet 上可用的一种模式,允许模型在产生最终答案之前进行充分推理。当您设置 thinking: {type: "enabled", budget_tokens: N} 时,模型会发出包含其内部草稿的 thinking 内容块——类似于思维链,但是原生且结构化的。扩展思考显著提升了数学竞赛、复杂代码、多步推理以及需要仔细逐步分析的任务上的性能。思考 token 计入 token 预算,但在响应中可见,让您了解模型是如何得出答案的。

提示缓存

提示缓存显著降低了重复使用大型系统提示或文档上下文的工作负载的成本和延迟。您使用 cache_control: {type: "ephemeral"} 标记请求的前缀部分。在第一次调用时,Anthropic 在其基础设施上缓存提示前缀;与前缀匹配的后续调用以低 90% 的输入 token 成本和显著减少的首 token 时间从缓存提供服务。这对 RAG 管道(每次查询都传递大型上下文)、代理循环(每轮重复大型系统提示)和批量文档处理特别有价值。

长上下文(200K tokens)

所有 Claude 3 及更高版本的模型都支持 200K token 上下文窗口——相当于约 150,000 个单词或约 500 页文本。长上下文使得在单次调用中处理整个代码库、法律文件、研究论文或完整对话历史成为可能,无需分块。Anthropic 关于长上下文性能的研究("大海捞针"评估)表明,Claude 在整个 200K 范围内保持强大的召回准确率,使其在文档问答、合同分析和大型存储库代码审查方面可靠。这是 Anthropic 相对于 GPT-4o 128K 窗口最明显的差异化之一。

何时使用 / 何时不用

使用 Anthropic 的情况避免或考虑替代方案的情况
需要 200K 上下文窗口来处理长文档、代码库或扩展对话而无需分块工作负载需要图像生成、音频转录或文本转语音——Claude 仅支持文本/视觉;OpenAI 涵盖音频
安全约束和可预测的拒绝行为至关重要(合规、医疗、金融)需要用于自托管、微调或数据驻留的开放权重模型——Anthropic 不提供开放权重选项
需要扩展思考进行深度推理任务(数学、复杂代码、多步分析)主要用例是大规模嵌入生成——Anthropic 不提供嵌入 API
提示缓存将有意义地降低成本(大型重复上下文、代理系统提示)严重依赖 OpenAI 特定工具(Assistants API、DALL-E、Whisper),这些工具没有 Anthropic 等效物
构建工具使用或计算机使用工作流,需要经过良好校准的结构化输出模型需要规模化时的绝对最低成本每 token——Claude Haiku 在价格上有竞争力,但 GPT-4o-mini 和开放模型更便宜

对比

标准AnthropicOpenAIGoogle Gemini
旗舰模型Claude 3.7 SonnetGPT-4oGemini 2.5 Pro
上下文窗口200K(所有 Claude 3+)128K(GPT-4o)最高 1M(Gemini 1.5 Pro)
推理/思考扩展思考(原生 CoT)o1、o3 系列Gemini 2.5 Pro 思考
多模态输入文本、图像文本、图像、音频、视频文本、图像、音频、视频
音频/语音是(Whisper、TTS)是(Gemini)
图像生成是(DALL-E 3)是(Imagen)
嵌入 API
开放权重Gemma(部分)
提示缓存是(原生,9折优惠)上下文缓存(有限)是(Gemini)
工具使用/函数调用成熟,支持计算机使用成熟,广泛采用成熟
安全理念Constitutional AI,拒绝调优审核 API,使用政策负责任 AI 指南
数据驻留选项企业合同企业合同Google Cloud 区域

优缺点

优点缺点
所有模型均有 200K 上下文窗口——长文档处理同类最佳没有音频、语音或图像生成 API
扩展思考为困难推理任务提供透明的思维链没有嵌入 API——RAG 需要第二个提供商
提示缓存显著降低大型重复上下文的成本没有开放权重选项的封闭模型
安全优先设计,具有仔细的拒绝校准和 Constitutional AI生态系统比 OpenAI 小——第三方教程和集成较少
Computer use(测试版)可实现对桌面 GUI 的代理控制对于简单任务,定价可能高于 GPT-4o-mini 或开放权重替代方案

代码示例

Messages API——基本完成和系统提示

import anthropic

client = anthropic.Anthropic(api_key="sk-ant-...") # or set ANTHROPIC_API_KEY env var

# Basic message
message = client.messages.create(
model="claude-3-7-sonnet-20250219",
max_tokens=1024,
system="You are a concise technical assistant. Answer in plain English.",
messages=[
{"role": "user", "content": "What is the Anthropic Messages API?"}
],
)
print(message.content[0].text)

# Multi-turn conversation
messages = [
{"role": "user", "content": "What is prompt caching?"},
{"role": "assistant", "content": "Prompt caching stores repeated large context..."},
{"role": "user", "content": "How much does it save?"},
]
response = client.messages.create(
model="claude-3-5-haiku-20241022",
max_tokens=512,
messages=messages,
)
print(response.content[0].text)

工具使用

import json
import anthropic

client = anthropic.Anthropic()

# Define tools as JSON schemas
tools = [
{
"name": "search_docs",
"description": "Search the documentation for a given query and return relevant passages.",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Search query"},
"max_results": {"type": "integer", "default": 3},
},
"required": ["query"],
},
}
]

messages = [{"role": "user", "content": "How do I enable prompt caching?"}]

# First call — Claude may request a tool
response = client.messages.create(
model="claude-3-7-sonnet-20250219",
max_tokens=1024,
tools=tools,
messages=messages,
)

# Process tool calls
if response.stop_reason == "tool_use":
messages.append({"role": "assistant", "content": response.content})

tool_results = []
for block in response.content:
if block.type == "tool_use":
# Simulated tool execution
result = f"Prompt caching docs for '{block.input['query']}': use cache_control param..."
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result,
})

messages.append({"role": "user", "content": tool_results})

# Final call with tool result
final = client.messages.create(
model="claude-3-7-sonnet-20250219",
max_tokens=1024,
tools=tools,
messages=messages,
)
print(final.content[0].text)

扩展思考

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
model="claude-3-7-sonnet-20250219",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000, # tokens allocated for internal reasoning
},
messages=[{
"role": "user",
"content": (
"A train leaves city A at 9am traveling at 80 km/h. "
"Another train leaves city B (320 km away) at 10am traveling at 100 km/h. "
"At what time do they meet, and how far from city A?"
),
}],
)

for block in response.content:
if block.type == "thinking":
print("=== Model's internal reasoning ===")
print(block.thinking[:500], "...") # first 500 chars for brevity
elif block.type == "text":
print("=== Final answer ===")
print(block.text)

大型重复上下文的提示缓存

import anthropic

client = anthropic.Anthropic()

# Large document loaded once — cached after first call
large_document = open("contract.txt").read() # e.g., 50K tokens

response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are a legal document analyst. Answer questions based solely on the document provided.",
},
{
"type": "text",
"text": large_document,
"cache_control": {"type": "ephemeral"}, # mark for caching
},
],
messages=[{"role": "user", "content": "What are the termination clauses?"}],
)

print(response.content[0].text)
# usage.cache_creation_input_tokens — tokens cached this call (full price)
# usage.cache_read_input_tokens — tokens served from cache (10% price)
print(response.usage)

实用资源

另请参阅

  • 模型提供商 — 所有提供商的概述和对比,包括 7 提供商对比表
  • 案例研究:Claude — 深入了解模型架构和训练方法
  • OpenAI — GPT-4o、o 系列推理、函数调用、DALL-E、Whisper
  • 提示工程 — 适用于所有 Claude 模型的技术
  • 工具 — Claude Code,Anthropic 基于 Claude API 构建的 AI 编码代理
  • 代理 — 使用 Claude 工具使用构建代理工作流