Anthropic Claude 使用指南¶
Anthropic 的 Claude 系列模型以优秀的推理能力和长上下文支持著称,特别适合复杂任务和长文档分析。
模型概览¶
推荐模型¶
| 模型 | 上下文 | 特色 | 适用场景 |
|---|---|---|---|
| claude-3-5-sonnet-20241022 | 200K | 最新旗舰、强大推理 | 复杂推理、代码生成 |
| claude-3-opus-20240229 | 200K | 最强推理能力 | 深度分析、复杂任务 |
| claude-3-haiku-20240307 | 200K | 快速、低成本 | 简单对话、快速响应 |
模型选择建议¶
from tfrobot.brain.chain.llms import Claude
# 通用场景(推荐)
llm = Claude(name="claude-3-5-sonnet-20241022")
# 复杂推理
llm = Claude(name="claude-3-opus-20240229")
# 成本敏感
llm = Claude(name="claude-3-haiku-20240307")
配置参数¶
核心参数¶
from tfrobot.brain.chain.llms import Claude
llm = Claude(
name="claude-3-5-sonnet-20241022",
temperature=0.7, # 0.0-1.0,控制随机性
max_tokens=4096, # 最大输出 tokens
top_p=1.0, # 0.0-1.0,核采样
top_k=0, # 0-40,仅某些模型支持
stream=False, # 是否流式输出
)
API 配置¶
llm = Claude(
name="claude-3-5-sonnet-20241022",
anthropic_api_key="sk-ant-...", # API 密钥(推荐使用环境变量)
anthropic_api_base="https://...", # API 基础 URL
timeout=60.0, # 请求超时时间
max_retries=3, # 最大重试次数
)
响应格式¶
from tfrobot.brain.chain.llms import Claude
# 纯文本
llm = Claude(name="claude-3-5-sonnet-20241022")
# JSON 对象
llm = Claude(
name="claude-3-5-sonnet-20241022",
response_format={"type": "json_object"}
)
# JSON Schema(Claude 3.5 Sonnet 支持)
llm = Claude(
name="claude-3-5-sonnet-20241022",
response_format={
"type": "json_schema",
"json_schema": {
"name": "response",
"strict": True,
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"}
},
"required": ["name", "age"]
}
}
}
)
工具调用¶
原生模式¶
from tfrobot.brain.chain.llms import Claude
from tfrobot.brain.chain.prompt.tool_prompt import ToolPrompt
from tfrobot.drive.tool.tool import tool
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气"""
return f"{city} 今天晴天,温度 25°C"
llm = Claude(name="claude-3-5-sonnet-20241022")
llm.system_msg_prompt = [ToolPrompt()]
result = llm.complete(
current_input=TextMessage(content="北京今天的天气怎么样?"),
tools=[get_weather]
)
特色功能¶
Extended Thinking(扩展思考模式)¶
Claude 3.5 Sonnet 支持"扩展思考"功能,可以看到模型的推理过程。
配置参数¶
from tfrobot.brain.chain.llms import Claude
llm = Claude(
name="claude-3-5-sonnet-20241022",
enable_reasoning=True, # 启用推理模式(必需)
reasoning_budget_tokens=10000, # 推理 token 预算,最小 1024
)
# 结果中的 reasoning_content 字段会包含推理过程
result = llm.complete(current_input=user_input)
print(result.generations[0].reasoning_content) # 推理过程
print(result.generations[0].text) # 最终答案
参数说明¶
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enable_reasoning |
bool | False | 是否启用推理模式,仅支持模型有效 |
reasoning_budget_tokens |
int | 1024 | 推理过程的 token 预算,最小 1024 |
模型支持¶
通过 LLMeta 机制自动检测模型是否支持推理模式:
from whosellm import LLMeta
llm_meta = LLMeta("claude-3-5-sonnet-20241022")
if llm_meta.capabilities.supports_thinking:
print("该模型支持推理模式")
注意:推理模式下会自动移除 top_p 参数(API 限制)。
API 映射¶
TFRobot 参数会自动转换为 Anthropic API 格式:
# TFRobot 配置
llm = Claude(
name="claude-3-5-sonnet-20241022",
enable_reasoning=True,
reasoning_budget_tokens=10000,
)
# 转换为 Anthropic API 请求
{
"model": "claude-3-5-sonnet-20241022",
"thinking": {
"type": "enabled",
"budget_tokens": 10000
}
# 注意:top_p 参数会被自动移除
}
Computer Use¶
Claude 3.5 Sonnet 支持计算机控制(Beta 功能):
# TODO: 计算机控制功能即将推出
多模态支持¶
图片理解¶
from tfrobot.schema.message.conversation.message_dto import MultiPartMessage
from tfrobot.schema.message.msg_part import TextPart, ImagePart
msg = MultiPartMessage(content=[
TextPart(text="这张图片里有什么?"),
ImagePart(
image_url=ImgUrl(url="path/to/image.jpg")
),
])
result = llm.complete(current_input=msg)
多图片分析¶
msg = MultiPartMessage(content=[
TextPart(text="比较这两张图片的差异"),
ImagePart(image_url=ImgUrl(url="image1.jpg")),
ImagePart(image_url=ImgUrl(url="image2.jpg")),
])
长上下文应用¶
Claude 的 200K 上下文窗口特别适合长文档分析:
from tfrobot.utils.document_loaders import load_document
# 加载长文档
document = load_document("path/to/long_document.pdf")
result = llm.complete(
current_input=TextMessage(content="总结这篇文档的核心观点"),
elements=document # 自动处理长文档
)
成本优化¶
Token 计费¶
from tfrobot.brain.chain.llms import Claude
# 设置价格
llm = Claude(
name="claude-3-5-sonnet-20241022",
input_price=0.003, # 3美元/百万tokens
output_price=0.015 # 15美元/百万tokens
)
缓存支持¶
Claude 支持 Prompt 缓存,可以降低成本:
# TODO: 缓存功能即将推出
错误处理¶
常见错误¶
| 错误类型 | 原因 | 解决方案 |
|---|---|---|
context_length_exceeded |
上下文超长 | 使用 Chain 的 compact 功能 |
rate_limit_error |
API 限流 | 自动重试(已配置) |
invalid_api_key |
API 密钥错误 | 检查环境变量 |
特殊处理¶
Anthropic 不支持 system 角色,需要特殊处理:
# 已在 Claude 类中自动处理
# Anthropic 使用单独的 system 参数,而非消息列表
高级用法¶
流式输出¶
llm = Claude(name="claude-3-5-sonnet-20241022", stream=True)
result = llm.complete(current_input=user_input)
自定义版本¶
llm = Claude(
name="claude-3-5-sonnet-202401022",
anthropic_version="2023-06-01"
)
最佳实践¶
1. 长文档处理¶
# 利用 200K 上下文
llm = Claude(name="claude-3-5-sonnet-20241022")
result = llm.complete(
current_input=TextMessage(content="分析以下文档的核心论点"),
elements=long_document # 可以是几十万 tokens
)
2. 复杂推理¶
# 使用 Opus 获得最强推理能力
llm = Claude(
name="claude-3-opus-20240229",
temperature=0.0 # 降低随机性
)
result = llm.complete(
current_input=TextMessage(content="分析这个复杂的逻辑问题...")
)
3. 多轮对话¶
# Claude 在长对话中表现优秀
conversation = []
for i in range(10): # 多轮对话
user_input = TextMessage(content=f"第 {i+1} 轮问题")
result = llm.complete(
current_input=user_input,
conversation=conversation
)
conversation.append(user_input)
conversation.append(result.generations[0].to_message())
与 OpenAI GPT 对比¶
| 特性 | Claude 3.5 Sonnet | GPT-4o |
|---|---|---|
| 上下文 | 200K | 128K |
| 推理能力 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 工具调用 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 多模态 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 价格 | 较低 | 较高 |
| 速度 | 快 | 快 |