はじめに
エージェントを構築する前に、コア ツールである LLM API をマスターする必要があります。この記事では、OpenAI (GPT-4o)、Anthropic (Claude 3.5 Sonnet)、Google (Gemini) という 3 つの最も人気のあるプロバイダーに焦点を当てます。 API の呼び出し、ストリーミングの処理、構造化された出力、そして最も重要な コストの最適化の方法を学びます。
1. 3 つの LLM プロバイダーの概要
簡単な比較
| OpenAI GPT-4o | 人間クロード 3.5 | Google ジェミニ 1.5 | |
|---|---|---|---|
| 入力価格 | $2.50/100万トークン | $3.00/100万トークン | $1.25/100万トークン |
| 出力価格 | $10.00/100万トークン | $15.00/100万トークン | $5.00/100万トークン |
| コンテキスト ウィンドウ | 128K | 200K | 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. Google Gemini 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 を複数回呼び出します!)
演習
- 同じインターフェイスで 3 つのプロバイダーすべてを呼び出すラッパー関数を作成します。
- 同じ複雑なプロンプトに対する 3 つのモデルの応答品質を比較します。
- コスト トラッカーを実装し、10 件のリクエストを実行し、総コストを計算します
- 構造化出力を試す: LLM が特定のスキーマを持つ JSON を返すように強制します。