在當今的 AI 應用開發中,三大主流大語言模型 API——OpenAI、Google Gemini 和 Anthropic Claude 都提供了強大的功能。本教程將詳細介紹如何使用 Python 的 requests 庫直接調用這三個 API。

一、環境準備

首先,確保安裝了 requests 庫:

pip install requests

二、OpenAI API 調用

2.1 獲取 API Key

  1. 訪問 OpenAI Platform
  2. 註冊並登錄賬户
  3. 在 API Keys 頁面創建新的 API 密鑰

2.2 代碼示例

import requests
import json

def call_openai(prompt, api_key):
    url = "https://api.openai.com/v1/chat/completions"
    
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    
    data = {
        "model": "gpt-4",
        "messages": [
            {"role": "user", "content": prompt}
        ],
        "temperature": 0.7
    }
    
    response = requests.post(url, headers=headers, json=data)
    
    if response.status_code == 200:
        result = response.json()
        return result['choices'][0]['message']['content']
    else:
        return f"錯誤: {response.status_code}, {response.text}"

# 使用示例
api_key = "your-openai-api-key"
prompt = "什麼是人工智能?"
response = call_openai(prompt, api_key)
print(response)

2.3 主要參數説明

  • model: 模型名稱,如 gpt-4, gpt-3.5-turbo
  • messages: 消息列表,包含 role 和 content
  • temperature: 控制隨機性,範圍 0-2,越高越隨機
  • max_tokens: 最大生成的 token 數量

三、Google Gemini API 調用

3.1 獲取 API Key

  1. 訪問 Google AI Studio
  2. 使用 Google 賬户登錄
  3. 創建 API 密鑰

3.2 代碼示例

import requests
import json

def call_gemini(prompt, api_key):
    url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={api_key}"
    
    headers = {
        "Content-Type": "application/json"
    }
    
    data = {
        "contents": [
            {
                "parts": [
                    {"text": prompt}
                ]
            }
        ],
        "generationConfig": {
            "temperature": 0.7,
            "maxOutputTokens": 1024
        }
    }
    
    response = requests.post(url, headers=headers, json=data)
    
    if response.status_code == 200:
        result = response.json()
        return result['candidates'][0]['content']['parts'][0]['text']
    else:
        return f"錯誤: {response.status_code}, {response.text}"

# 使用示例
api_key = "your-gemini-api-key"
prompt = "請介紹一下機器學習"
response = call_gemini(prompt, api_key)
print(response)

3.3 主要參數説明

  • contents: 內容列表,包含 parts 數組
  • generationConfig: 生成配置,包含 temperature 和 maxOutputTokens
  • model: 支持 gemini-pro(文本)、gemini-pro-vision(多模態)

四、Anthropic Claude API 調用

4.1 獲取 API Key

  1. 訪問 Anthropic Console
  2. 創建賬户並登錄
  3. 在 API Keys 頁面生成新的 API 密鑰

4.2 代碼示例

import requests
import json

def call_claude(prompt, api_key):
    url = "https://api.anthropic.com/v1/messages"
    
    headers = {
        "Content-Type": "application/json",
        "x-api-key": api_key,
        "anthropic-version": "2023-06-01"
    }
    
    data = {
        "model": "claude-3-opus-20240229",
        "max_tokens": 1024,
        "messages": [
            {
                "role": "user",
                "content": prompt
            }
        ]
    }
    
    response = requests.post(url, headers=headers, json=data)
    
    if response.status_code == 200:
        result = response.json()
        return result['content'][0]['text']
    else:
        return f"錯誤: {response.status_code}, {response.text}"

# 使用示例
api_key = "your-claude-api-key"
prompt = "請解釋深度學習的原理"
response = call_claude(prompt, api_key)
print(response)

4.3 主要參數説明

  • model: 模型名稱,如 claude-3-opus-20240229, claude-3-sonnet-20240229, claude-3-haiku-20240307
  • max_tokens: 必須參數,設置最大輸出 token 數
  • messages: 消息數組,必須包含 role 和 content
  • anthropic-version: API 版本號,必須在 header 中指定

五、錯誤處理和最佳實踐

5.1 錯誤處理

在實際應用中,建議添加更完善的錯誤處理:

import requests
import time

def api_call_with_retry(url, headers, data, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.post(url, headers=headers, json=data, timeout=30)
            
            if response.status_code == 200:
                return response.json()
            elif response.status_code == 429:  # Rate limit
                wait_time = 2 ** attempt
                print(f"達到速率限制,等待 {wait_time} 秒...")
                time.sleep(wait_time)
            else:
                print(f"錯誤 {response.status_code}: {response.text}")
                return None
        except requests.exceptions.Timeout:
            print(f"請求超時,第 {attempt + 1} 次重試...")
        except Exception as e:
            print(f"發生異常: {str(e)}")
            return None
    
    return None

5.2 最佳實踐

  1. 保護 API Key:不要將 API Key 直接寫在代碼中,使用環境變量或配置文件
import os
from dotenv import load_dotenv

load_dotenv()
openai_key = os.getenv('OPENAI_API_KEY')
gemini_key = os.getenv('GEMINI_API_KEY')
claude_key = os.getenv('CLAUDE_API_KEY')
  1. 設置超時:避免請求無限期等待
  2. 處理速率限制:實現重試機制和指數退避
  3. 監控成本:記錄每次 API 調用的 token 消耗
  4. 緩存結果:對相同的請求進行緩存,減少不必要的調用

六、總結

本教程介紹瞭如何使用 Python requests 庫連接三大主流 AI API:

  • OpenAI:使用 Bearer Token 認證,支持 GPT-4 和 GPT-3.5
  • Gemini:在 URL 中傳入 API Key,使用 contents 結構
  • Claude:使用 x-api-key header,需要指定 anthropic-version

雖然各家都提供了官方 SDK,但直接使用 requests 可以讓你更深入地理解 API 的工作原理,也更靈活地控制請求和響應。希望這篇教程能幫助你快速上手這三個強大的 AI API!