搜索结果

×

搜索结果将在这里显示。

🔛 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__}")

如何使用:

  1. 安装 anthropic (如果还没安装):

    pip install anthropic
  2. 设置 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 的请求。