Chuyển đến nội dung chính

第 2 課:LLM API 大師班 — OpenAI、Claude、Gemini

精通排名前 3 位的 LLM 的 API:身份驗證、聊天完成、串流、結構化輸出(JSON 模式)、視覺和成本優化。比較每個提供者的優缺點。

🧠 人工智慧與機器學習 — 第 1 課 第 2 課:LLM API 大師班 — OpenAI, 克勞德,雙子座

建構 AI 代理:從零到生產

第 1 部分:代理平台 — 建置前了解

亞洲開發網

簡介

在建立代理之前,您需要掌握核心工具—LLM API。本文重點介紹三個最受歡迎的提供者:OpenAI (GPT-4o)、Anthropic (Claude 3.5 Sonnet) 和 Google (Gemini)。您將學習如何呼叫 API、處理流程、結構化輸出,以及最重要的 — 最佳化成本。


1. 3 個 LLM 提供者概述

快速比較

OpenAI GPT-4o人擇克勞德 3.5Google雙子座1.5
輸入價格2.50 美元/100 萬個代幣3.00 美元/100 萬代幣1.25 美元/100 萬個代幣
輸出價格10.00 美元/100 萬個代幣15.00 美元/100 萬個代幣5.00 美元/100 萬個代幣
上下文視窗128K20萬1M
優勢工具使用、編碼推理長,安全龐大的上下文,搜尋
願景✅✅✅
串流✅✅✅

什麼時候使用什麼?

  • OpenAI:預設選擇,最大的生態系統,穩定的函數調用
  • 克勞德:當需要複雜推理、處理長文件或需要高安全性時
  • Gemini:當您需要非常大的上下文視窗或搜尋基礎時

2.OpenAI API

2.1 設定與身份驗證

pip install openai
from openai import OpenAI

# Cách 1: Environment variable (khuyến nghị)
# export OPENAI_API_KEY=sk-...
client = OpenAI()

# Cách 2: Truyền trực tiếp
client = OpenAI(api_key="sk-...")

2.2 聊天完成 — 基本

response = client.chat.completions.create(
    model="gpt-4o-mini",  # Rẻ và nhanh, đủ cho hầu hết use case
    messages=[
        {"role": "system", "content": "Bạn là trợ lý AI nói tiếng Việt."},
        {"role": "user", "content": "Giải thích AI Agent trong 3 câu."}
    ],
    temperature=0.7,       # Creativity level (0 = deterministic, 2 = creative)
    max_tokens=500,        # Giới hạn output
)

print(response.choices[0].message.content)
print(f"Tokens used: {response.usage.total_tokens}")
print(f"Cost: ~${response.usage.total_tokens * 0.00000015:.6f}")

2.3 串流媒體

stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Viết một bài thơ về AI"}],
    stream=True,
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

2.4 結構化輸出(JSON模式)

from pydantic import BaseModel

class AgentStep(BaseModel):
    thought: str
    action: str
    tool_name: str | None
    tool_args: dict | None

response = client.beta.chat.completions.parse(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "Analyze the user request and plan the next agent step."},
        {"role": "user", "content": "Find the weather in Hanoi and compare with Saigon"},
    ],
    response_format=AgentStep,
)

step = response.choices[0].message.parsed
print(f"Thought: {step.thought}")
print(f"Action: {step.action}")
print(f"Tool: {step.tool_name}({step.tool_args})")

3. 人類克勞德 API

3.1 設置

pip install anthropic
from anthropic import Anthropic

client = Anthropic()  # Dùng ANTHROPIC_API_KEY env var

3.2 訊息API

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    system="Bạn là trợ lý AI cho developer Việt Nam.",
    messages=[
        {"role": "user", "content": "So sánh LangChain vs LangGraph"}
    ]
)

print(message.content[0].text)
print(f"Input tokens: {message.usage.input_tokens}")
print(f"Output tokens: {message.usage.output_tokens}")

3.3 串流媒體

with client.messages.stream(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain ReAct pattern"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

4. 谷歌雙子座 API

4.1 設置

pip install google-genai
from google import genai

client = genai.Client()  # Dùng GOOGLE_API_KEY env var

4.2 產生內容

response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents="Giải thích MCP protocol cho AI Agents"
)
print(response.text)

5. 代理商開發的最佳實踐

5.1 選擇合適的型號

# Quy tắc ngón tay cái:
MODEL_SELECTION = {
    "simple_tasks": "gpt-4o-mini",      # Rẻ, nhanh
    "complex_reasoning": "claude-sonnet-4-20250514",  # Chính xác
    "long_context": "gemini-1.5-pro",    # 1M tokens
    "tool_calling": "gpt-4o",            # Ổn định nhất
    "cost_sensitive": "gpt-4o-mini",     # Rẻ nhất
}

5.2 錯誤處理

from openai import RateLimitError, APIError
import time

def call_llm_with_retry(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model="gpt-4o-mini",
                messages=messages,
            )
        except RateLimitError:
            wait = 2 ** attempt
            print(f"Rate limited. Waiting {wait}s...")
            time.sleep(wait)
        except APIError as e:
            print(f"API error: {e}")
            raise
    raise Exception("Max retries exceeded")

5.3 成本跟踪

class CostTracker:
    PRICING = {
        "gpt-4o-mini": {"input": 0.15/1e6, "output": 0.60/1e6},
        "gpt-4o": {"input": 2.50/1e6, "output": 10.00/1e6},
    }
    
    def __init__(self):
        self.total_cost = 0
    
    def track(self, model, usage):
        pricing = self.PRICING.get(model, {"input": 0, "output": 0})
        cost = (usage.prompt_tokens * pricing["input"] + 
                usage.completion_tokens * pricing["output"])
        self.total_cost += cost
        return cost

tracker = CostTracker()

總結

  • 精通3個LLM API:OpenAI、Anthropic、Google Gemini
  • 知道何時使用哪種模型(成本與能力權衡)
  • 串流、結構化輸出、錯誤處理-為代理開發做好準備
  • 建立代理程式時需要成本追蹤(代理程式多次呼叫LLM!)

練習

  1. 寫一個包裝函數,使用相同的介面呼叫所有 3 個提供者
  2. 比較3個模型對於相同複雜提示的反應質量
  3. 實施成本追蹤器並執行 10 個請求,計算總成本 4.嘗試結構化輸出:強制LLM回傳具有特定模式的JSON