🔛 Anthropic 对话格式(Python)
官方文档
📝 简介
这是Anthropic
格式完整 Python
代码,用于通过 anthropic SDK
调用 Anthropic API
。
💡 请求示例
Python
基础文本对话 ✅
import anthropic # 导入 anthropic 模块
import httpx # anthropic 库依赖 httpx 进行网络请求
import os # 用于从环境变量中获取 API 密钥(推荐方式)
# --- 配置 ---
# 强烈建议:将 API 密钥存储在环境变量中,而不是硬编码在代码里。
# 例如,在您的终端设置: export ANTHROPIC_API_KEY="sk-your-anthropic-api-key"
# 或者在 Windows PowerShell: $env:ANTHROPIC_API_KEY="sk-your-anthropic-api-key"
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
# 如果您没有设置环境变量,或者想临时测试,可以取消下面一行的注释并填入您的密钥
ANTHROPIC_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 替换为您的 Anthropic API 密钥
# 自定义 Base URL (仅当您通过特定代理访问 Anthropic 时需要)
# 例如,如果您之前的 sg.uiuiapi.com/v1 也代理 Anthropic 请求
# ANTHROPIC_BASE_URL = "https://sg.uiuiapi.com/v1"
ANTHROPIC_BASE_URL = "https://sg.uiuiapi.com" # 默认为 None, SDK 将使用 Anthropic 官方端点
# 模型选择 (根据您的 API 密钥权限和需求选择)
# Claude 3 Opus: "claude-3-opus-20240229" (能力最强,可能需要更高权限或付费计划)
# Claude 3 Sonnet: "claude-3-sonnet-20240229" (平衡性能和成本)
# Claude 3 Haiku: "claude-3-haiku-20240307" (速度最快,最经济)
MODEL_NAME = "claude-3-7-sonnet-20250219" # 默认使用 Sonnet,您可以更改
# --- 安全警告 ---
if not os.getenv("ANTHROPIC_API_KEY") and ANTHROPIC_API_KEY and "sk-anthropic-xxxx" not in ANTHROPIC_API_KEY:
print("**********************************************************************************")
print("警告:API 密钥似乎已在代码中硬编码。")
print("这对于测试可能很方便,但请注意,将敏感信息(如 API 密钥)直接写入代码中")
print("存在严重安全风险,尤其是在共享代码、将其提交到版本控制系统 (如 Git) 或部署到生产环境时。")
print("强烈建议在生产环境中使用环境变量等更安全的方式管理 API 密钥。")
print("例如: export ANTHROPIC_API_KEY='your_actual_api_key'")
print("**********************************************************************************")
# 1. 验证 API 密钥
if not ANTHROPIC_API_KEY:
raise ValueError(
"API 密钥 (ANTHROPIC_API_KEY) 未设置。\n"
"请通过设置环境变量 ANTHROPIC_API_KEY 或直接在代码中提供 ANTHROPIC_API_KEY 来设置它 (不推荐用于生产环境)。"
)
else:
print(f"使用的 API Key (部分显示): '{ANTHROPIC_API_KEY[:12]}...{ANTHROPIC_API_KEY[-4:]}'") # 显示 sk-anthropic- 前缀加部分
if ANTHROPIC_BASE_URL:
print(f"使用的自定义 Base URL: {ANTHROPIC_BASE_URL}")
else:
print("使用 Anthropic 默认 Base URL。")
# 2. 配置 API 客户端
try:
client_params = {
"api_key": ANTHROPIC_API_KEY,
"timeout": httpx.Timeout(300.0, connect=60.0), # 总体超时300秒,连接阶段超时60秒
"max_retries": 1,
}
if ANTHROPIC_BASE_URL:
client_params["base_url"] = ANTHROPIC_BASE_URL
client = anthropic.Anthropic(**client_params)
except Exception as e:
print(f"创建 Anthropic 客户端时发生错误: {e}")
exit()
# 3. 准备 API 请求的消息体
# Anthropic 的 messages API 格式与 OpenAI 类似
messages_payload = [
{"role": "user", "content": "你好,你能做什么?请用中文回答。"}
]
# 4. 发送请求并处理响应
try:
print(f"\n正在尝试调用 Anthropic API (模型: {MODEL_NAME})...")
response = client.messages.create(
model=MODEL_NAME,
max_tokens=200, # 建议至少150-200 tokens for Claude 3 Sonnet for meaningful replies
temperature=0.7, # 温度参数,控制生成文本的随机性
messages=messages_payload
# system="You are a helpful assistant." # 可选的系统提示
)
# 5. 提取并打印模型生成的回复内容
if response.content and isinstance(response.content, list) and len(response.content) > 0:
# 通常,对于非流式响应,内容在 response.content[0].text
assistant_reply = response.content[0].text
print("\n模型回复:")
print(assistant_reply)
else:
print("\n未能从 API 获取有效回复。")
if response.stop_reason:
print(f"停止原因: {response.stop_reason}")
# print("完整响应对象:", response.model_dump_json(indent=2)) # 用于调试
# 打印用量信息(如果可用)
if response.usage:
print("\n用量信息:")
print(f" 输入 Token: {response.usage.input_tokens}")
print(f" 输出 Token: {response.usage.output_tokens}")
except anthropic.APIStatusError as e:
print(f"\nAnthropic API 返回了错误状态码: {e.status_code}")
print(f"错误类型: {e.type}" if hasattr(e, 'type') and e.type else "")
print(f"错误消息: {e.message}" if hasattr(e, 'message') and e.message else "")
print(f"响应详情: {e.response}") # 包含原始的 httpx.Response
if e.status_code == 401:
print("错误详情:API 密钥无效或未提供。请检查您的 ANTHROPIC_API_KEY。")
elif e.status_code == 403:
print("错误详情:认证成功,但密钥无权访问所请求的资源/模型,或已超出使用限制,或账户存在问题。")
print(f" - 请检查您的 Anthropic 账户是否有权访问模型 '{MODEL_NAME}'。")
print(" - 检查您的账户用量、账单状态和 API 密钥权限。")
print(" - 尝试使用其他模型,例如 'claude-3-haiku-20240307' 或 'claude-3-sonnet-20240229'。")
elif e.status_code == 404:
print(f"错误详情:找不到请求的资源。很可能是模型名称 '{MODEL_NAME}' 不正确或不可用。")
print(" - 请检查 Anthropic 文档以获取正确的模型名称。")
elif e.status_code == 429:
print("错误详情:达到 Anthropic API 速率限制。请稍后重试或检查您的速率限制策略。")
elif e.status_code >= 500:
print("错误详情:Anthropic 服务器端错误。请稍后重试。")
except anthropic.APIConnectionError as e:
print(f"\n无法连接到 Anthropic API: {e}")
print(" - 请检查您的网络连接。")
print(f" - 如果您使用了自定义 Base URL ('{ANTHROPIC_BASE_URL}'), 请确保它正确且可访问。")
except anthropic.RateLimitError as e:
print(f"\n达到 Anthropic API 速率限制: {e}")
except anthropic.AuthenticationError as e:
print(f"\nAnthropic API 认证失败: {e}")
print(" - 请再次检查您的 ANTHROPIC_API_KEY 是否正确且有效。")
except Exception as e:
print(f"\n调用 API 时发生未知错误: {e}")
print(f"错误类型: {type(e).__name__}")
如何使用:
-
安装
anthropic
库 (如果还没安装):pip install anthropic
-
设置 API 密钥:
推荐: 设置环境变量
ANTHROPIC_API_KEY
。
1. 创建 .env 变量文件文件
-
在您的 Python 脚本(例如
xxxx.py
)所在的同一个目录下,创建一个名为.env
的文件(注意,文件名就是.env
,前面有一个点,没有其他前缀)。 -
在该
.env
文件中,输入以下内容,将您的 API 密钥和基础 URL 填入:# .env 文件内容 OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" OPENAI_BASE_URL="https://sg.uiuiapi.com/v1"
您未来还可以添加其他配置变量,例如:
DEFAULT_MODEL="claude-3-7-sonnet-20250219"
MAX_TOKENS_DEFAULT=150
2.或者,直接在代码中修改 `ANTHROPIC_API_KEY = "sk-anthropic-..."` 这一行 (不推荐用于共享或生产代码)。
二、 **选择模型**:
- 代码中默认使用 `MODEL_NAME = "claude-3-7-sonnet-20250219"`。
- 如果您想使用 Opus 或 Haiku,您可以在 `uiuiapi.com` 控制台获取不同的模型名称,请修改此变量。**确保您的 API 密钥有权访问您选择的模型。** 正如您之前遇到的 403 错误,Opus 模型可能有更严格的访问要求。
三. **自定义 Base URL (如果需要)**:
- 如果您通过像 `https://sg.uiuiapi.com/v1` 这样的代理服务器访问 Anthropic,并且这个代理服务器也处理 Anthropic 的请求。