OpenAI 統合ガイド
ルール
- 公式の
openai パッケージを使用 — new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
- チャットのストリーミング: 非同期イテレータで
stream: true を使用 — ユーザー向けレスポンスでは完了を待たずにストリームを返すこと
- 関数呼び出し: JSON スキーマで関数を定義し、レスポンス内の
tool_calls を処理し、結果を tool メッセージとして返す
- 構造化出力:
response_format: { type: "json_schema", json_schema: {...} } または AI SDK と Zod を使用
- トークン管理: 送信前にトークン数を推定(おおよそ4文字 = 1トークン)、コンテキストをトリミングして制限内に収める
- モデル選択: 複雑な推論には
gpt-4o、簡単なタスクには gpt-4o-mini — 設定可能にすること
- システムプロンプトは最初のメッセージとして配置 — トーン、制約、出力フォーマットを設定する
- Temperature: 決定論的な出力(データ抽出)には 0、クリエイティブなタスクには 0.7〜1.0
- レート制限:
x-ratelimit-* ヘッダーを尊重し、429 エラーに対して指数バックオフを実装する
パターン
const stream = await openai.chat.completions.create({
model: "gpt-4o",
messages,
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
process.stdout.write(content);
}
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages,
tools: [{ type: "function", function: { name: "get_weather", parameters: schema } }],
});
回避すべきこと
- API キーのハードコーディング — 常に環境変数を使用すること
- トークン制限の無視 — トークンをカウントし、メッセージを事前にトリミングすること
- 簡単なタスクに
gpt-4o を使用する — コスト削減のために gpt-4o-mini を使用すること
- API 呼び出しのエラーハンドリング漏れ — 429、500、タイムアウトエラーを適切に処理すること