Skip to content

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
推理能力 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
工具调用 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
多模态 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
价格 较低 较高
速度

相关文档