2024年6月,Anthropic发布了Claude 3.5 Sonnet。这款模型一发布,就在AI圈引起了轰动。它的性能接近甚至超过了Claude 3 Opus,但价格只有Opus的五分之一,性价比极高。

我从发布第一天就开始用Claude 3.5 Sonnet,从最基础的网页聊天,到API调用,再到复杂的应用集成,积累了不少经验。这篇文章,就来详细讲解Claude 3.5 Sonnet的配置方法,从基础到高级,帮你充分发挥这款大模型的能力。

基础配置:账号和API密钥

在使用Claude 3.5 Sonnet之前,首先需要注册账号并获取API密钥。

第一步,注册Anthropic账号。去Anthropic的官网(anthropic.com),点击右上角的"Get API access",用邮箱注册账号。注册过程很简单,填写邮箱、设置密码、验证邮箱即可。

第二步,完成实名认证。Anthropic要求用户完成实名认证才能使用API。需要提供姓名、地址、电话号码等信息,有时候还需要验证身份。这个过程可能需要几天时间,耐心等待即可。

第三步,获取API密钥。登录后,进入控制台(console.anthropic.com),在左侧菜单找到"API Keys",点击"Create Key",给密钥起个名字,就能生成一个API密钥。这个密钥只会显示一次,一定要保存好,弄丢了只能重新生成。

第四步,充值。Anthropic的API是按使用量收费的,需要先充值才能使用。在控制台的"Billing"页面,可以用信用卡充值,最低充值5美元。充值后,就可以开始调用API了。

这里有几个注意事项:

  • API密钥要妥善保管,不要泄露给别人,也不要提交到代码仓库
  • 可以设置使用额度上限,避免意外产生高额费用
  • 可以创建多个API密钥,分别用于不同的项目,方便管理和撤销

模型选择:Sonnet、Opus还是Haiku

Claude 3系列有三个模型:Opus、Sonnet、Haiku。Claude 3.5 Sonnet是Sonnet的升级版。

这三个模型的区别:

  • Claude 3 Opus:最强的模型,性能最好,但价格最贵,速度最慢。适合复杂的推理、分析、创作任务。
  • Claude 3.5 Sonnet:性能接近Opus,价格便宜很多,速度快。性价比最高,适合大多数场景。
  • Claude 3 Haiku:最轻量的模型,速度最快,价格最便宜,但性能稍弱。适合简单的分类、摘要、实时响应任务。

对于大多数用户来说,Claude 3.5 Sonnet是最佳选择。它在编码、分析、写作、数学等方面的表现都很出色,价格只有Opus的五分之一,速度比Opus快很多。

在API调用中,模型名称是"claude-3-5-sonnet-20240620"。注意,这个名称包含了版本日期,以后如果有新版本,名称会更新。

基础API调用

获取了API密钥之后,就可以开始调用API了。

Claude的API使用比较简单,发送一个POST请求到https://api.anthropic.com/v1/messages,带上必要的参数即可。

最基础的调用,需要这些参数:

  • model:模型名称,比如"claude-3-5-sonnet-20240620"
  • max_tokens:最大生成token数,比如1024
  • messages:消息列表,包含用户和助手的对话历史

一个最简单的Python调用示例:

import anthropic

client = anthropic.Anthropic(api_key="你的API密钥")

response = client.messages.create(
    model="claude-3-5-sonnet-20240620",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "你好,请介绍一下你自己。"}
    ]
)

print(response.content[0].text)

这个示例中,我们创建了一个Anthropic客户端,然后调用messages.create方法,传入模型名称、最大token数和消息列表。返回的response中,content[0].text就是模型生成的回复。

如果你不想用官方的Python SDK,也可以直接用requests库发送HTTP请求:

import requests

api_key = "你的API密钥"
headers = {
    "x-api-key": api_key,
    "anthropic-version": "2023-06-01",
    "content-type": "application/json"
}
data = {
    "model": "claude-3-5-sonnet-20240620",
    "max_tokens": 1024,
    "messages": [
        {"role": "user", "content": "你好,请介绍一下你自己。"}
    ]
}
response = requests.post("https://api.anthropic.com/v1/messages", headers=headers, json=data)
print(response.json()["content"][0]["text"])

注意,HTTP请求需要在header中带上x-api-keyanthropic-version,这是Anthropic API的特殊要求。

多轮对话配置

上面的示例是单轮对话。在实际应用中,通常需要多轮对话,让模型记住之前的上下文。

Claude的API通过messages列表来维护对话历史。每一轮对话,都把用户的问题和模型的回复添加到messages列表中,一起发送给API。

示例:

messages = []

# 第一轮
messages.append({"role": "user", "content": "我叫小明,今年25岁。"})
response = client.messages.create(
    model="claude-3-5-sonnet-20240620",
    max_tokens=1024,
    messages=messages
)
assistant_reply = response.content[0].text
messages.append({"role": "assistant", "content": assistant_reply})
print(assistant_reply)

# 第二轮
messages.append({"role": "user", "content": "我叫什么名字?今年多大?"})
response = client.messages.create(
    model="claude-3-5-sonnet-20240620",
    max_tokens=1024,
    messages=messages
)
print(response.content[0].text)

在这个示例中,我们维护了一个messages列表,每一轮对话都把用户和助手的消息添加进去。这样,模型就能记住之前的对话内容,回答"我叫什么名字"这样的问题。

但要注意,Claude 3.5 Sonnet的上下文窗口是200K token。如果对话历史太长,超过了上下文窗口,就需要做上下文管理,比如截断旧的对话、总结对话历史等。

系统提示词配置

系统提示词(System Prompt)是一个很重要的配置,它可以设定模型的角色、行为规范、输出格式等。

在Claude的API中,系统提示词通过system参数传入:

response = client.messages.create(
    model="claude-3-5-sonnet-20240620",
    max_tokens=1024,
    system="你是一个专业的Python编程助手,回答问题时要简洁明了,给出代码示例。",
    messages=[
        {"role": "user", "content": "怎么用Python读取CSV文件?"}
    ]
)

系统提示词可以很复杂,包含角色设定、行为规范、输出格式、示例等。一个好的系统提示词,能显著提升模型的输出质量。

写系统提示词的几个技巧:

  • 明确角色:告诉模型它是谁,应该以什么身份回答
  • 明确任务:告诉模型它要做什么
  • 明确格式:告诉模型输出的格式,比如JSON、Markdown、列表等
  • 给出示例:如果有特定的输出要求,给出一两个示例
  • 设定边界:告诉模型什么该做,什么不该做

比如,一个用于代码审查的系统提示词:

你是一个资深的代码审查专家。请审查用户提供的代码,从以下几个方面给出反馈:
1. 代码质量:命名、注释、结构
2. 潜在bug:逻辑错误、边界条件、异常处理
3. 性能问题:时间复杂度、空间复杂度
4. 安全问题:注入风险、数据泄露

输出格式:
- 总体评价:一句话总结
- 详细问题:按严重程度排序,每个问题说明位置、问题描述、修改建议
- 改进建议:整体的改进方向

请用中文回答,语气专业但友好。

参数调优

Claude的API有几个重要的参数,可以调整模型的输出行为。

第一个参数是max_tokens。这个参数控制模型最多生成多少个token。设置太小,可能输出不完整;设置太大,可能浪费token,也可能让模型啰嗦。一般来说,简单的问答设置512到1024就够了,复杂的写作和分析可以设置2048到4096。

第二个参数是temperature。这个参数控制输出的随机性。temperature越低,输出越确定、越保守;temperature越高,输出越随机、越有创意。默认值是1.0。对于事实性问答、代码生成,建议设置0.1到0.5;对于创意写作、头脑风暴,建议设置0.7到1.0。

第三个参数是top_k。这个参数控制每一步只从概率最高的k个token中选择。k越小,输出越确定;k越大,输出越多样。一般不需要调整这个参数,用默认值即可。

第四个参数是topp。这个参数控制核采样,只从累积概率达到p的token中选择。p越小,输出越确定;p越大,输出越多样。和temperature类似,一般不需要同时调整temperature和topp,调整一个就够了。

第五个参数是stopsequences。这个参数可以设置停止序列,当模型生成到指定的序列时,就会停止输出。比如,你可以设置stopsequences为["\n\n"],让模型在生成两个换行时停止。

这些参数,可以根据具体的应用场景来调整。建议多做实验,找到最适合自己场景的参数组合。

流式输出配置

默认情况下,Claude的API是等模型生成完所有内容后,一次性返回。但对于长文本生成,用户可能需要等待很长时间。这时候,可以用流式输出,让模型一边生成一边返回,提升用户体验。

开启流式输出很简单,只需要设置stream=True

with client.messages.stream(
    model="claude-3-5-sonnet-20240620",
    max_tokens=2048,
    messages=[{"role": "user", "content": "写一篇关于秋天的散文,500字左右。"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

在这个示例中,我们用了client.messages.stream方法,然后遍历stream.text_stream,逐段打印生成的文本。这样,用户就能看到文本一个字一个字地出现,而不是等很久才看到完整的输出。

流式输出在聊天机器人、内容生成等场景中非常重要,能显著提升用户体验。

函数调用配置

函数调用(Function Calling)是Claude 3.5 Sonnet的一个强大功能。它允许模型在需要的时候,调用你定义的外部函数,获取外部信息,然后基于这些信息回答用户的问题。

比如,你可以定义一个"查询天气"的函数。当用户问"北京今天天气怎么样"时,模型会自动调用这个函数,获取天气数据,然后用自然语言回答用户。

配置函数调用,需要在API请求中传入tools参数,定义函数的名称、描述和参数格式:

tools = [
    {
        "name": "get_weather",
        "description": "查询指定城市的天气信息",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "城市名称,比如北京、上海"
                }
            },
            "required": ["city"]
        }
    }
]

response = client.messages.create(
    model="claude-3-5-sonnet-20240620",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "北京今天天气怎么样?"}]
)

当模型决定调用函数时,返回的response中会包含tool_use类型的content,里面有函数名称和参数。你需要执行这个函数,然后把结果返回给模型:

if response.stop_reason == "tool_use":
    tool_use = response.content[-1]
    tool_name = tool_use.name
    tool_input = tool_use.input
    
    # 执行函数
    if tool_name == "get_weather":
        result = get_weather(tool_input["city"])
    
    # 把结果返回给模型
    messages = [
        {"role": "user", "content": "北京今天天气怎么样?"},
        {"role": "assistant", "content": response.content},
        {
            "role": "user",
            "content": [
                {
                    "type": "tool_result",
                    "tool_use_id": tool_use.id,
                    "content": result
                }
            ]
        }
    ]
    
    final_response = client.messages.create(
        model="claude-3-5-sonnet-20240620",
        max_tokens=1024,
        tools=tools,
        messages=messages
    )
    print(final_response.content[0].text)

函数调用是构建复杂AI应用的关键功能。通过函数调用,你可以让AI访问数据库、调用API、执行代码,从而实现各种强大的功能。

多模态配置

Claude 3.5 Sonnet支持多模态,可以处理图片输入。你可以给模型看一张图片,让它描述图片内容、分析图表、识别文字等。

在API中,图片通过content中的image类型传入:

import base64

with open("image.jpg", "rb") as f:
    image_data = base64.b64encode(f.read()).decode()

response = client.messages.create(
    model="claude-3-5-sonnet-20240620",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/jpeg",
                        "data": image_data
                    }
                },
                {
                    "type": "text",
                    "text": "请描述这张图片的内容,并分析图片中的数据趋势。"
                }
            ]
        }
    ]
)

Claude 3.5 Sonnet支持JPEG、PNG、GIF、WebP等格式的图片,最大支持5MB。它能很好地理解图片内容,包括图表、截图、照片、手绘等。

多模态功能在很多场景中都很有用,比如分析数据图表、识别文档内容、描述产品图片、解读设计稿等。

高级技巧和最佳实践

最后,分享一些高级技巧和最佳实践。

第一,上下文管理。Claude 3.5 Sonnet的上下文窗口是200K token,虽然很大,但也不是无限的。对于长对话或长文档,需要做好上下文管理。可以用滑动窗口,只保留最近的N轮对话;也可以用模型总结旧的对话历史,用摘要代替原文。

第二,提示词工程。好的提示词能显著提升输出质量。要花时间优化提示词,多做实验,找到最有效的表达方式。可以参考Anthropic官方的提示词工程指南,里面有很多实用的技巧。

第三,错误处理。API调用可能会失败,比如网络错误、速率限制、服务器错误等。要做好错误处理,设置重试机制,遇到错误时优雅降级。特别是速率限制,要注意控制请求频率,避免被限流。

第四,成本控制。Claude 3.5 Sonnet虽然性价比高,但大量使用也会产生不少费用。要监控使用量,设置预算告警,优化提示词减少不必要的token消耗。对于简单的任务,可以考虑用更便宜的Haiku模型。

第五,安全和隐私。不要在API调用中传入敏感信息,比如密码、密钥、个人隐私数据。Anthropic的API会保留数据一段时间(默认30天),如果有隐私要求,可以联系Anthropic关闭数据保留。

第六,评估和测试。对于重要的应用,要建立评估体系,测试模型在各种场景下的表现。可以准备一批测试用例,每次调整提示词或参数后,跑一遍测试,确保质量没有下降。

写在最后

Claude 3.5 Sonnet是一款非常强大的大模型,性能出色,价格合理,功能丰富。通过合理的配置,你可以充分发挥它的能力,构建出强大的AI应用。

这篇文章从基础的账号注册和API调用,到高级的参数调优、函数调用和多模态,覆盖了Claude 3.5 Sonnet配置的主要方面。希望能帮你快速上手,少走弯路。

当然,AI技术发展很快,API和功能也在不断更新。建议关注Anthropic的官方文档和更新日志,及时了解最新的功能和最佳实践。

愿你能在Claude 3.5 Sonnet的帮助下,构建出出色的AI应用。