これは現在進行中のシリーズの第4部です. See Parts 1, 2, and 3. シリーズ第4作目です 続きを見る , , and . 1 2 3 1 1 2 2 3 3 AI Principle IV: Use Structured Prompt Outputs AI 原則 IV: Structured Prompt Outputs 久しぶりに、LLM APIsが出たばかりで、誰も彼らと正しく対話する方法を確実に知らなかった時代がありました。 トップの問題の1つは、単一のプロンプト応答から複数の出力を抽出することでした。 LLMsが一貫してJSONを返さなかったとき(しばしば失敗しました)、あなたは最高のプロンプトエンジニアリングオラトリウムを使用してLLMを説得しようとしました。 これらは古代の時代でした。当時、我々は馬に乗り、電気はまだ発明されていなかったので、ろうそくの光でプロンプトを書きました。デバッグプロンプトは、モデルがハイクの代わりにリストを返すことを望んで、長い夜をピルクメントのスロールでくことに費やしたことを意味しました。そして、それが失敗した場合、あなたは深く息を吐き、あなたのキールをインクに浸し、再び試してみる以外の選択肢はありませんでした。 しかし、JSON応答を一貫して返すことができなかったLLM APIは本物であり、多くの問題を引き起こしました。 2023年11月 - OpenAI API を使用して、フォーマットされた JSON を提供できるようになりました。2024年には、OpenAI も厳格な構造化された出力のサポートを追加し、JSON を完全に返すことを保証しました。 そして 構造化されていないスピード出力の時代は過ぎ去り、私たちは決して戻ってこない。 構造化した出力 アントロピー Googleの 構造化した出力 アントロピー Googleの Benefits 利点 なぜ他のフォーマットよりもJSON構造のプロンプト出力を使用するか、またはカスタムフォーマットを発明する方が良いのでしょうか。 Reduced Error Rate 現代のLLMは、要求されたときに有効なJSONを出力するように精巧に調整されています - 非常に複雑な応答でさえ失敗することは稀です. さらに、多くのプラットフォームには、不正にフォーマットされた出力に対するソフトウェアレベルの保護があります. たとえば、OpenAI APIは、構造化された出力の厳格なモードで非JSONを返すときに例外を投げます。 複数の出力変数を返すためにカスタムフォーマットを使用する場合、この細かい調節から利益を得ることはなく、エラー率ははるかに高くなります。 Decoupled Prompts and Code JSON 出力では、別の出力フィールドを追加することは微妙で、既存のコードを破るべきではありません。これは、コード処理の論理への変更からプロンプトにフィールドを追加することを解約します。 . 原則II:Low LLM Prompts Safe (If You Really Have To) 原則II:Low LLM Prompts Safe (If You Really Have To) Simplified System 組み込まれたプラットフォームサポートなしで出力フォーマットを使用する実用的な理由はありますか? JSON を使用して応答をフォーマットすることは、あなたとその後のコードの貢献者にとってより容易になります。 When NOT to Use Structured Output 構造化された出力を使用しないとき Single Field Output あなたのプロンプトが応答として単一のフィールドを出力する場合、JSONを出力する利点はありません。 今日の単一変数応答は明日複雑な応答になる可能性があります。 1 つのフィールド出力プロンプトを複数のフィールド出力プロンプトに変えるのに何時間も費やした後、単一フィールドのみが返される場合でも、既定で JSON を使用しています。 プログラムの論理が複数の出力を必要としない場合でも、追加フィールドを追加するには、迅速なエンジニアリングとデバッグの利点があります。 ) それはまた、モデルの決定の説明として記録されることもできます. 最初から回答が JSON であることによって、そのようなフィールドを追加することがはるかに容易になります。 1 1 したがって、プロンプトに単一の出力変数がある場合でも、JSON形式をオプションとして検討してください。 Streaming Response 遅延が重要なアプリケーションでは、LLM ストリーミングエンドポイントが頻繁に使用されます これらは、回答の一部が完全な応答を受け取る前に動作することを可能にします このパターンは JSON でうまく機能しませんので、代わりにシンプルでストリームフレンドリーな形式を使用する必要があります。 たとえば、プロンプトがビデオゲームのキャラクターが行ったアクションとキャラクターが言った言葉を決定する場合、それを「ACTION ÁthaSPEECH_TO_READ」として暗号化して、ストリーミングAPIを使用して反応をストリーミングすることができます。 これはあなたにより良いラテンシーを与えるでしょう。 OpenAI ストリーミング API OpenAI ストリーミング API 例の出力: WAVE_AT_HERO|Hello, Adventurer! Welcome to my shop. アクションが受信されるとすぐに、キャラクターは振動し始め、テキストが流入するように出力されます。 他のストリームフレンドリーなフォーマットも効果的に使用できます。 JSON ライン JSON ライン Conclusion 結論 文明の利点を拒否しないでください - JSON 構造のプロンプト出力を使用してください. 欠点はほとんどありませんが、LLM は有効な JSON 応答を返すために大幅に最適化されていますので、あなたの人生をより容易にします。 あなたがこの投稿を楽しんだ場合は、より多くのシリーズにサブスクリプトしてください。