利益:
- アイデアから製品化まで LLM 機能を利用するエンドツーエンドのアーキテクチャを設計できる
- 検証の実施、人間による承認、追跡 (ロギング/メトリクス) のレイヤーを確立します。
- 境界は倫理とプライバシーの原則を制作上の意思決定に反映します
これまでの 10 単元では、リクエストの構造、トークン エコノミクス、フロー、システム プロンプト、モデルの選択、キャッシュ、バッチ、エラー管理、安全なキー、自動化の各部分を 1 つずつ学習しました。この最後の単元では、部品を組み合わせて、アイデアから製造まで LLM 機能を実現する総合的なアーキテクチャを確立します。制作は「動作するデモ」とは異なります。検証が必須であり、出力を監視する必要があり、境界と倫理原則を意思決定に組み込む必要があります。このユニットはモジュールのキャリアコラムです。これまでのものはすべてここに集まります。
実稼働アーキテクチャの層
堅実な LLM 資格は、およそ 5 つの層で構成されています。
- 入力層: データを収集し、クリーンアップし、敏感な領域をマスクし、必要なものだけを送信します。
- モデル層: 正しいモデル (ユニット 5) を選択し、システム プロンプトとパラメーター (ユニット 4)、キャッシュ (ユニット 6) を設定します。
- 検証層: 出力をスキーマ/ルール、ソース、および必要に応じて人間の承認と照合してチェックします。
- アクション層: 検証された出力でアクションを実行します。インパクトの大きいアクションをキャプチャします。
- モニタリング層: すべての通話、コスト、エラー、品質を記録し、測定します。
これらの層はパイプラインです。それぞれが前の出力をチェックします。
なぜ検証が必要なのでしょうか?
LLM は流暢な出力を生成できますが、場合によっては不正確な出力を生成します。これは幻覚と呼ばれます。モデルは、真実であるように見える情報を捏造する可能性がありますが、真実ではありません。チャット ゲームではこれは許容範囲です。運用システム (請求書、健康、法律、財務) では許容できません。したがって、それは盲目的に信頼できないことが判明しました。が確認されています。
検証レイヤー (影響により増加):
- 形式/スキーマの検証: 出力は予想される JSON スキーマに準拠していますか? (構造化された出力はこれをほぼ保証します。)
- ルール/ロジックの検証: 値は妥当か? (金額はマイナスですか、日付は未来ですか、カテゴリーは有効ですか?)
- 情報源の検証: 主張は提供された文書に基づいていますか?モデルは文書にないことを言っていますか?
- 人間の承認: 専門家が影響の大きい決定や曖昧な決定をレビューします。
注意: 「モデルは非常に優れているので、これ以上の検証は必要ありません」は、最も危険な製造上の誤りです。モデルがどれほど優れていても、検証層は影響の大きい意思決定におけるセーフティネットです。自動決定が 1 つでも間違っていると、節約できた時間がすべて失われる可能性があります。
人間参加型
すべての決定が完全に自動化されている必要はありません。人間参加型アプローチでは、モデルが作業をスピードアップし、人間がそれを承認します。適切なバランスは、決定の影響とそのタスクに対するモデルの信頼性に依存します。
決定の影響
アプローチ
低 (ラベル提案、ドラフト)
完全自動化。エラーは安価で元に戻せる
中 (ルーティング、優先順位付け)
自動化 + サンプリング制御
高(お金、契約、健康、削除)
人間の同意は必須です。モデルは示唆するだけです
モニタリング: 見えないものは管理できない
運用環境では、すべての呼び出しを監視する必要があります。モニタリングがなければ、コストや品質を改善したり、問題を早期に発見したりすることはできません。記録すべき主要な指標:
- 使用量/コスト: リクエストごと、トークンの合計、モデルの分布、1 日あたりの支出。
- 遅延: 平均および最悪の場合の応答時間。
- エラー率: 429/500 率、再試行、放棄。
- 品質: 検証層での出力拒否率、人間の承認での修正率、ユーザーのフィードバック。
ヒント: 機密データ (個人情報、キー) を監視ログに書き込まないでください。ログは機密保持の範囲内であると考えてください。必要に応じてマスキングして記録します (ユニット 9)。
倫理と境界
倫理的責任は、技術的な正確さと同じくらい、制作上の意思決定の一部です。
- 透明性: ユーザーは、自分が人工知能と話しているのか人間と話しているのかを知る必要があります。
- 公平性とバイアス: モデルには、トレーニングに使用されたデータからのバイアスが含まれる可能性があります。影響の大きい意思決定 (雇用、信用) における差別的な結果を監視します。
- 責任: 自動化された決定によって損害が生じた場合、責任はあなたにあります。 「モデルがそう言った」というのは擁護ではありません。
- 制限の受け入れ: モデルは一部のタスクを確実に実行できません。自動化しないのも設計上の決定です。
コピー可能なテンプレート
# 検証チェックリスト (出力生成後)1) スキーマは有効ですか? (構造化された出力の検証)2) 値は意味がありますか? (ルールチェック: 範囲、日付、列挙型)3) 主張は出典に基づいていますか? (文書にない場合は却下)4) 影響は大きいか? → 人間の承認のために送信5) すべて合格した場合 → アクションを許可し、保存します
# ソースに依存することを強制するシステム プロンプト。提供されたドキュメント内の情報のみに依存します。文書にないものは追加しないでください。文書に記載がない場合は「文書に記載なし」と記載してください。決して推測したりでっち上げたりしないでください。
# 人間の承認閾値(意思決定ルール)IF Decision_type in [money, Contract, delete, health] → 人間の承認必須IF model_trust < 閾値 OR 検証「不確実」 → 人間の承認に提出OTHER → 自動適用 + サンプリング制御
# トレース ログ テンプレート (機密データの書き込み){ "time":"...", "model":"...", "input_token":..., "output_token":..., "lay_ms":..., "stop_reason":"...", "authentication":"passed|rejected|human", "cost_usd":... } // 個人データとキーは決して書き込まれません
弱いプロンプト / 強いプロンプト (生産信頼性)
# WEAK (検証なし、ソースなし、自動的に適用) このリクエストを評価し、払い戻しの決定を行って適用します。
# STRONG (ソースベース、推奨事項を生成、人間の承認に委ねる) 返品ポリシー文書のみに基づいてこの返品リクエストを評価します。正当な理由を示して決定を推奨しますが、実装はしません: {"recommendation":"approve|reject","reason":"...","policy_clause":"..."}。政策文書に明確な根拠がない場合は、「不明」を指定します。代表者が最終決定を承認します。
強力なバージョン。それは決定を情報源に帰し、モデルを「実行者」ではなく「提案者」として位置づけ、影響力の大きいステップを人間の承認の後に置きます。これが生産の信頼性の本質です。
ミニケース3個
ケース 1 — 検証レイヤーが保存された日。あるフィンテックでは、モデルにトランザクションの説明を分類させ、自動会計記録を作成させていました。彼らはルール検証を追加しました。モデルが金額を誤って出力すると(文書内の 1,250 ではなく 12,500)、「金額が文書と一致しない」ルールによって出力が拒否され、記録は人間の手に渡りました。検証が行われなかった場合、不正なレコードが黙ってシステムに入力されることになります。
ケース 2 — 監視によって捕らえられた逃亡者。 SaaS チームは監視パネルを設置しました。ある朝、1日のコストが3倍になった。ログから、クライアントがループに入り、同じリクエストを何千回も送信したことがわかりました。クォータと重複排除が追加されました。問題は数時間以内に解決されました。追跡がなければ、月末に請求書が驚くほど高額になるでしょう。
ケース 3 — 制限を受け入れる。ヘルスケアの新興企業は、診断の推奨事項を完全に自動的に作成し、患者に表示することを計画していました。倫理と責任の検討で、彼らはこれは立ち入り禁止であると決定しました。モデルは概要と考えられるポイントを医師に提供するだけであり、医師が診断を下します。ジョブを自動化しないことも、成熟した設計上の決定です。
よくある間違い
- 検証をスキップする: 「モデルは良好である」と言って、出力を盲目的に適用します。
- 影響の大きい意思決定の自動化: お金、健康、法律においては人間の承認が不可欠です。
- 監視していない: コストと品質の問題が発見されるのが遅い。
- 機密データをログに書き込む: プライバシーの侵害。マスキングして保存します。
- ソースに依存しようとしない: モデルは文書にないものを補う可能性があります。
- 制限を無視する: 一部のタスクを自動化しないのは正しい判断です。透明性と責任はあなたのものです。
さらに詳しく: リリース管理、ロールバック、および増分デプロイメント
LLM 機能を実稼働環境に導入するということは、それを設定して忘れることではありません。稼働中のシステムを時間をかけて安全に変更することです。それには3つの柱があります。
バージョン管理。システム プロンプト、モデルの選択、検証ルールは時間の経過とともに変化します。重要な変更をそれぞれバージョン付けし、どのバージョンがライブであるかを記録します。ある日品質が下がったら、「何を変えたんだろう?」数分以内に質問に回答できるはずです。バージョンのないシステムでは、回帰の根本原因を見つけるのに数日かかります。
ロールバック。新しいプロンプトまたはモデルがライブで予想よりも悪い動作をした場合は、以前の既知のバージョンにすぐに戻すことができるはずです。ロールバック計画のない変更は、現実のリスクを盲目的に受け入れることになります。 「何かを変更したら悪くなった、もう戻れない」というのは、最もコストのかかる制作シナリオです。
段階的な展開。すべてのトラフィックに変更を一度に適用するのではなく、最初に小さな割合 (例: 5%) に変更を適用し、メトリクス (品質、コスト、エラー) を監視します。良い場合はパーセンテージを増やします。悪質な場合は、影響を受ける部分が小さいだけで元に戻ります。これによりリスクが大幅に制限されます。
これら 3 つのプラクティスは、これまでのすべてのユニットのテクニックを組み合わせたものです。eval (ユニット 5) は変更を事前に測定し、モニタリング (このユニット) は伝播中に早期に警告を発し、検証層は誤った出力が実用的になる前にキャッチします。本番環境は単一の正しいセットアップではありません。これは、測定、監視し、自信を持って変更できる継続的な規律です。モジュール全体は、この規律を確立するためのものです。
要約すると
本番環境は単なる動作デモではなく、入力層、モデル層、検証層、アクション層、監視層のパイプラインです。検証がなければ出力は信頼できません。影響の大きい決定は人間の承認に結びつきます。すべての通話のコスト、エラー、品質が監視されます。倫理、透明性、バイアス制御、説明責任、および限界の受け入れは、技術的な決定に不可欠です。このモジュールで学習したすべての要素が、この総合的なデザインにまとめられます。
アプリケーションタスク
LLM 機能をエンドツーエンドで設計します。 (1) 特定のタスクの 5 つのレイヤー (入力、モデル、検証、アクション、モニタリング) を入力します。 (2) どの決定が人間の承認を必要とするかを影響によってマークします。 (3) 少なくとも 3 つの検証チェック (スキーマ、ルール、ソース) を作成します。 (4) 追跡する主要な指標とログに記録しない主要な指標を決定します。 (5) この特集で受け入れる制限と倫理原則を書きます。
チェックリスト
- [ ] 私は 5 層の生産パイプラインを設計できます。
- [ ] 出力をスキーマ、ルール、ソースと照合して検証できます。
- [ ] 決定の影響に基づいて人間の承認のしきい値を設定できます。
- [ ] 私はコスト、エラー、品質を監視し、機密データをログに書き込まないように実践しています。
- [ ] 私は倫理、責任、境界を制作上の決定に変えることができます。
モジュール試験
1. LLM チャット API での「システム」ロールは何をしますか?
- A) 会話全体に適用される永続的な指示と行動ルールをモデルに与える ✔
- B) ユーザーが最後に書いた質問を保持します。
- C) モデルによって生成された応答を保存します
- D) API キーを暗号化します
説明: システム ロールは、会話全体に適用される永続的な指示、個性、ルールをモデルに与えます。これは、ユーザー メッセージとは別の高レベルのリダイレクトです。
2. API リクエストで毎回会話履歴 (以前のメッセージ) が再送信されるのはなぜですか?
- A) サーバー側で履歴が削除されるためバックアップが必要です
- B) API 呼び出しはステートレスです。 ✔ モデルは履歴を覚えていないため、リクエストごとにコンテキストが再送信されます。
- C) 請求の場合にのみ必要であり、モデルには影響しません。
- D) 応答の遅延を避けるために送信履歴は必須です
説明: LLM API 呼び出しはステートレスです。モデルは前のラウンドを記憶していないため、コンテキストを保持するためにすべての関連する履歴がリクエストごとに再送信されます。
3. LLM 価格設定における「トークン」とは何ですか?
- A) APIへのログインに使用するワンタイムパスワード
- B) リクエストごとに支払われる固定料金
- C) モデルがテキストを処理する最小単位。通常は単語部分に相当します ✔
- D) 出力の長さのみを測定する単位
説明: トークンは、モデルがテキストを処理する最小単位です。通常、これは単語の断片に対応し、入力と出力の両方がトークンの数に基づいて課金されます。
4. ほとんどの LLM プロバイダーでは、出力トークンが入力トークンよりも高価であるのはなぜですか?
- A) 出力トークンは常に入力よりも長くなります
- B) 入力トークンは無料です
- C) 出力トークンはインターネット経由で 2 回送信されます
- D) 出力生成にはトークンごとに追加の計算が必要なため、単位コストが高くなります ✔
説明: 各出力トークンでは、モデルが段階的に生成 (計算) を実行する必要があります。この生産コストは、インプットを一度に処理するよりも高いため、通常、アウトプットの単価は高くなります。
5. ストリーミングの使用が最も有益なのはどのような状況ですか?
- A) 長い回答の場合。知覚される遅延を軽減し、タイムアウトを防止します ✔
- B) 非常に短い、一言での回答のみ
- C) コストをゼロにする
- D) API キーを非表示にする
説明: 長い応答では、ストリーミングによって最初の単語がすぐに表示されるため、知覚される遅延が減少し、大きな max_tokens 値での HTTP タイムアウトが防止されます。
6. 最新のモデルで「努力」パラメーターを増やすと、一般にどのような影響がありますか?
- A) 答えは常に短くしてください
- B) API キーを自動的にローテーションする
- C) 入力トークンの価格を下げるだけです
- D) 思考の深さとトークンの支出が増加します。品質は向上する可能性がありますが、遅延とコストも増加します ✔
説明: 努力パラメータは、モデルがタスクについてどの程度深く考えるか、およびモデルが費やすトークンの数を調整します。アップグレードすると品質が向上する可能性がありますが、遅延とコストも増加します。単純なタスクの場合は、少ない労力で十分です。
7. 一般に、単純で大量の分類タスクに対する最もコスト効率の高いアプローチは何ですか?
- A) 常に最も高価で最も強力なモデルを使用してください
- B) リクエストごとにすべてのモデルを同時に呼び出す
- C) 小さな eval で検証することにより、タスクを達成する最も軽量/最も安価なモデルを選択する ✔
- D) max_tokens 値を不必要に高くしすぎる
説明: タスクが複雑でない場合は、最も高価で強力なモデルを使用する代わりに、タスクを簡単に達成できるより高速で安価なモデル (例: Haiku クラス) を選択すると、コストが大幅に削減されます。
8. プロンプト キャッシュによって最もコストが削減されるのはどのシナリオですか?
- A) 大規模で固定されたコンテキストが多くのリクエストにわたって繰り返し使用される場合 ✔
- B) リクエストごとにまったく異なるテキストが送信される場合
- C) リクエストが 1 つだけの場合
- D) 出力トークンを減らすため
説明: キャッシュはプレフィックス一致です。大規模で不変のコンテキスト (システム プロンプト、ドキュメント) が多くのリクエストにわたって再利用される場合、キャッシュからの読み取りは通常の料金のほんの一部 (~0.1 倍) で済みます。
9. プロンプト キャッシュがヒットするようにプロンプトを編集するにはどうすればよいですか?
- A) 可変コンテンツを先頭に、固定コンテンツを最後に配置する
- B) 各リクエストのシステム プロンプトに現在の日付と時刻を埋め込む
- C) 固定コンテンツ (システム プロンプト、ドキュメント) を先頭に配置し、可変コンテンツを最後に配置する ✔
- D) リクエストごとにツールリストの順序を変更する
説明: キャッシュはプレフィックス一致であるため、固定/変更されていないコンテンツ (システム プロンプト、ドキュメント) が初期化されます。変数の内容 (日付、ユーザーの質問、リクエスト ID) は最後に置かれます。先頭で 1 バイト変更されただけでもキャッシュは無効になります。
10. バッチ処理はどのタイプのワークロードに最適ですか?
- A) ユーザーが画面上での即時応答を期待するライブ チャット
- B) 短い質問を 1 つだけ
- C) APIキーの生成
- D) 遅延を許容し、大規模で、すぐに結果を必要としないジョブ ✔
説明: バッチ処理は、即時応答を必要とせず、遅延を許容できる大量のジョブに適しています。結果はしばらくしてから提供されますが、通常は単価が低くなります。
11. 結果がバッチ内のどのリクエストに属するかを確実に照合するには何を使用しますか?
- A) リクエストの送信順序(位置)
- B) 回答の長さ
- C) API キーの下 4 桁
- D) 各リクエストに与えられる一意のcustom_id ✔
注: 一括結果は、送信順序とは異なる順序で返される場合があります。したがって、結果を場所ではなく ID で照合し、各リクエストに指定された一意のcustom_id と照合する必要があります。
12. API から 429 (レート制限) エラーを受け取った場合の推奨される動作は何ですか?
- A) より多くのリクエストを同時に送信して強制する
- B) retry-after 見出しに従って、指数バックオフを使用して再試行します ✔
- C) リクエストを完全にキャンセルし、エラーをクラッシュとしてユーザーに表示します。
- D) APIキーの変更
説明: 429 は再試行可能なエラーです。正しいアプローチは、retry-after ヘッダーを考慮して、指数バックオフを使用して再試行することです。ほとんどの公式 SDK はこれを自動的に行います。
13. 次の HTTP エラー コードのうち、一般に再試行可能と考えられるのはどれですか?
- A) 400 (無効なリクエスト)
- B) 401 (認証エラー)
- C) 529 (サーバー過負荷) ✔
- D) 404 (見つからない)
説明: 429 (速度制限)、500 (サーバーエラー)、および 529 (過負荷) は一時的なエラーであり、バックオフすることで再試行できます。 400 や 401 のようなエラーはリクエスト/アイデンティティの問題です。もう一度試しても解決しません。
14. API キーを管理する安全な方法は次のうちどれですか?
- A) コードに埋め込まず、環境変数/隠しマネージャーに保存し、定期的にローテーションする ✔
- B) キーをソース コードに直接書き込み、リポジトリに送信します。
- C) クライアント側 (ブラウザ) JavaScript にキーを置く
- D) 単一のキーを電子メールでチーム全体と共有する
説明: キーがソース コードやリポジトリに書き込まれることはありません。これは環境変数または非表示の管理ツールに保存され、最小限の権限が付与され、定期的にローテーションされます。
15. プライバシーの観点から、自動化ツール (n8n、Zapier、Make) と LLM を統合するための最良のアプローチは何ですか?
- A) 必要ではない場合でも、すべての生データをモデルに送信する
- B) フローステップ内に API キーをプレーンテキストで書き込む
- C) 機密データを最小限に抑えてマスキングし、キーを秘密の資格情報として保存する ✔
- D) 個人データをフロー履歴に永続的に保存する
説明: データ入力の自動化はサードパーティのシステムとモデルを通過するため、機密/個人データは最小限に抑え、マスクして必須フィールドのみを送信する必要があります。 API キーは、ツール内に秘密の認証情報としても保存されます。
16. LLM ベースの実稼働機能では出力の検証が必須なのはなぜですか?
- A) モデルは間違いを犯さないため、フォーマットのみが必要です
- B) モデルは流動的に生成できるが、場合によっては誤って生成するため。スキーマ/ルールはリソースと人間の承認を得て監査する必要があります ✔
- C) 検証はコストが増加するだけなので避けるべきです
- D) 検証はトークンの数を減らすためだけに行われる
説明: LLM は流暢ですが、場合によっては不正確な (幻覚的な) 出力を生成することがあります。したがって、それは大きな影響を与える決定として現れました。必要に応じて、スキーマ/ルールのチェック、ソースの検証、および人間の承認によって監査する必要があります。