- Genkitのミドルウェアを使用すると、モデルフック、ツール、および一般的なフローを使用して、AI生成サイクルをインターセプトおよび変更できます。
- 自動再試行、モデル間のフォールバック、ファイル制御、および人間によるツール承認のためのネイティブ機能が含まれています。
- TypeScript、Go、Dartと互換性があるため、ビジネスロジックを変更することなく、セキュリティと可観測性のレイヤーを簡単に構築できます。
AIアプリケーションを開発する方なら、完璧なプロンプトを作成するだけでは十分ではないことをご存知でしょう。プロトタイプから実際に本番環境で動作するものへと移行する際には、APIタイムアウト、クォータ制限、重要なアクションに対する人間の検証の必要性など、様々な障害に直面します。そこで役立つのが、Googleが提供するGenkit Middlewareです。これは、開発者がエージェントコードをすべて書き直すことなく、制御レイヤーを追加できるように設計されています。
つまり、各関数をラップするのではなく、生成呼び出しの周りにインターセプターを配置するシステムについて話しているのです。 generate() 手動制御ブロックでは、リクエストが通過しなければならない一連の手順を定義できます。これにより、エージェントのアーキテクチャを... よりすっきりとしてモジュール式アプリケーションロジックを、システムセキュリティ、可観測性、回復力といった横断的な懸念事項から分離する。
傍受システムは具体的にどのように機能するのですか?

これをよりよく理解するために、Genkitにおけるリクエストのライフサイクルについて考えてみましょう。通常、モデルはレスポンスを生成し、ツールを使用する必要があるかどうかを判断し、そのツールを実行し、結果を再処理します。Genkitのミドルウェアは単なるボトルネックではなく、このプロセスに介入するための3つの明確なアンカーポイントを提供します。
- フックを生成する: 世代サイクルごとに一度だけ実行されます。これは理想的なサイトです。 システムに命令を注入する または、メッセージが送信される前に内容を変更する。
- モデル別フック: これはモデルのAPIへの直接呼び出しをラップします。管理に不可欠です。 自動再試行キャッシュを実装するか、LLMが応答するまでにかかる時間をログに記録する。
- フックツール: これは、ツールがまさに実行されようとしているときと同じように機能します。作成に最適です。 承認システム エージェントがファイルを削除したり支払いを行ったりする前に、人間が承認を与えなければならない。
この構造は、ExpressやKoaなどのフレームワークに見られるミドルウェアと同様に、玉ねぎのように機能します。リクエストは外側の層から入り、中心(モデル)に到達し、その後再び出ていきます。つまり、逆の順序で各層を通過していくのです。最も優れた点は、複数のミドルウェアを配列に積み重ねることができ、実行順序を正確に定義できることです。
プリインストール済みミドルウェアのカタログ

車輪を再発明する必要がないように、パッケージ @genkit-ai/middleware 既にいくつかのすぐに使えるツールが付属しています。最も便利なツールの1つは… 再試行これは、ジッター付きの指数バックペダルアルゴリズムを使用します。これにより、次のような一時的なエラーが発生した場合に API が過負荷になるのを防ぎます。 RESOURCE_EXHAUSTED o UNAVAILABLEアプリケーションを作成する はるかに堅牢 一時的な故障が発生した場合。
プライマリモデルの割り当て量が上限に達した場合、フォールバックミドルウェアが役立ちます。フォールバックミドルウェアを使用すると、代替モデルのリストを設定できるため、最初のモデルが失敗した場合、リクエストは自動的に、より小型または安価なモデルにルーティングされ、エンドユーザーにエラーが表示されるのを防ぎます。これは、需要の高い環境でサービスの継続性を維持するための重要な戦略です。
セキュリティに関しては、ミドルウェアとして ツール承認このシステムは安全なツールのホワイトリストを作成します。そのリストにない操作を行うとエラーが発生します。 ToolInterruptError誰かがアクションを確認するまでシステムを一時停止させる。これは、ミドルウェアによってさらに悪化する。 ファイルシステムこれによりモデルはローカルファイルにアクセスできるようになりますが、 厳しく制限されている AIが不適切な場所を覗き見するのを防ぐため、ルートディレクトリに移動します。

最後に、以下の機能があります。 スキルこのミドルウェアはフォルダをスキャンしてファイルを探します SKILL.md そして、それらをシステムプロンプトに挿入します。これはエージェントの知識を管理する非常に洗練された方法であり、 特定のスキルをアップロードする メインプロンプトに不要なテキストを入力せずに、オンデマンドで処理します。
カスタムミドルウェアの作成

ネイティブオプションが不十分な場合、Genkit では関数を使用して独自のインターセプターを構築できます。 generateMiddlewareこのツールを使用すると、Zod を使用して構成スキームを定義でき、渡すパラメーターが 正しく入力されています私たちは、すべての入退出を記録するシンプルなロガーから、機密データ(個人情報)を書き込むための複雑なシステムまで、あらゆるものを作成できます。
非常に強力なユースケースとしては、コンテンツフィルタの実装が挙げられます。レスポンスを分析し、禁止語や内部価格データなどを検出した場合は、レスポンスがユーザーに届く前にブロックまたはクリーンアップするモデルフックを作成できます。また、呼び出しを続行する前に生成フックでデータベースを照会することで、ユーザーごとの割り当て量を管理することも可能です。
実装とエコシステムの違い

概念自体は普遍的ですが、言語によってニュアンスが異なります。TypeScriptでは、システムは非常に動的で、ミドルウェアをファイル内で定義することができます。 .prompt フィールドを通して useGo では、コンパイル言語であるため実装がより厳格であり、 ミドルウェア登録 実行時にテキスト名を機能的なオブジェクトに変換できるようにする。
GenkitとGoogleのエージェント開発キット(ADK)を混同しないことが重要です。ADKはGCPインフラストラクチャ上に構築された複雑でリソース集約型のマルチエージェントシステム向けに設計されていますが、Genkitは既存のアプリケーション(Web、モバイルなど)にエージェント機能を追加するのに最適な選択肢です。さらに、 Genkit開発者UIからミドルウェアフロー全体を監視できるため、どのフックがリクエストを変更したか、最終結果に至るまでの経路を正確に追跡できます。
このシステムの導入により、生成機能は真に構成可能なパイプラインへと変貌を遂げます。エラー処理、ファイルセキュリティ、および人間による検証を独立したレイヤーに統合することで、エージェント開発はよりプロフェッショナルなプロセスとなり、本番環境での致命的なエラーの発生リスクを低減します。