読み込み中…
読み込み中…
Pinterest の Staff Engineer が、大規模な Apache Spark ジョブのトラブルシューティングを自動化する AI ツール「Medic」の開発事例を発表しました。単一のプロンプトから始まり、ログやメトリクスのノイズ処理、テスト基盤の構築を経て、最終的に LangGraph を活用したマルチエージェントアーキテクチャへと進化させた過程が語られています。特に、LLM のコンテキストウィンドウ制限を克服するために画像分析サブエージェントを導入したり、オフライン評価による品質保証を行ったりする実務的な知見は、AI エージェント開発の参考になります。
Spark の運用担当者が直面する「ジョブ失敗の根本原因特定」という普遍的な課題に対し、AI エージェントがどのように解決策を提供し、そのためのアーキテクチャをどう進化させたかが具体的に描かれています。開発者向けの AI ツール設計や、LLM を実システムに組み込む際の注意点を知る上で極めて価値高い内容です。
初期の単一 React アジェントではプロンプト調整が非効率で品質が不安定だったため、専門役割を持つマルチエージェントアーキテクチャへ移行した。
ログのノイズをフィルタリングする例外分類パイプラインと、メトリクスを画像化して LLM に提示するサブエージェントにより、診断精度を大幅に向上させた。
本番環境への依存を減らすため、レコード/プレイバックモードによるエンドツーエンドテストハッチとオフライン評価を導入し、品質を定量化した。
この事例は、大規模分散システムにおける AI エージェントの実用化において、単なるプロンプトエンジニアリングを超えたアーキテクチャ設計の重要性を示しています。特に、LLM の制約(コンテキストウィンドウ)を克服するための画像処理やサブエージェント活用、そして品質保証のためのテスト自動化は、エンタープライズレベルでの AI 導入における標準的なベストプラクティスとして確立される可能性があります。
Pinterest の Staff Engineer である Draško Proferović 氏が発表した、大規模な Apache Spark ジョブのトラブルシューティングを自動化する AI ツール「Medic」の開発事例は、単なるプロンプトエンジニアリングを超えた、実務レベルでの AI エージェント設計の重要性を示しています。本稿では、初期の試行錯誤から LangGraph を活用したマルチエージェントアーキテクチャへの進化、そして LLM の制約を克服するための具体的な技術的アプローチについて解説します。
データプラットフォーム部門でインフラを支えるエンジニアにとって、パートナーチームからのサポート要請は絶え間ないものです。特に Apache Spark や分散システムのトラブルシューティングは難易度が高く、新人にとっては壁が高いのが実情です。また、優先順位が曖昧な状況下で「どのジョブを先に救うか」という判断に人間が時間を割く必要があるのも課題でした。
そこで Pinterest が目指したのは、ユーザーが「なぜジョブが失敗したのか?」と尋ねるだけで、根本原因の証拠に基づいた深い分析レポートと、その文脈に即した修復案を返す AI エージェントの実現です。初期段階では、単一の React(ReAct)エージェントを採用し、一つのプロンプトで問題解決のアプローチや回答形式を定義するアプローチが取られました。
しかし、この「万能プロンプト」方式には致命的な欠陥がありました。
プロンプトの調整が非効率になり、ある部分の詳細化が別の部分の挙動を悪化させるというトレードオフに直面しました。また、分析が浅すぎたり冗長になったりして品質が不安定でした。
さらに、本番環境での大規模ジョブでは、ログ出力の巨大さが LLM のコンテキストウィンドウ(記憶容量)を瞬時に埋め尽くし、推論プロセスを停止させる問題が発生しました。手動テストに依存していた評価体制も、本番データの保存期間が限られるため、変更が以前の成果を壊していないかを確認するのが困難でした。
システム改善のために Pinterest が最初に着手したのは、観測可能性(Observability)とテスト基盤の整備です。OpenTelemetry を活用してエージェントの実行トレースを可視化し、質の低い回答の原因を特定しました。その上で、ログとメトリクスという「ノイズ」をどう処理するかが診断精度を分ける鍵となりました。
Spark のログには多くの例外が含まれていますが、その多くは成功するジョブでも発生する無害なものです。単に最後の例外だけを見るアプローチでは、誤った原因特定(アンカー効果)に陥るリスクがありました。
Pinterest は、ヒューリスティックな正規表現フィルタリングから脱却し、「例外分類パイプライン」を構築しました。この仕組みは以下の手順で動作します。
これにより、エージェントは生のログを直接読み込むのではなく、「上位 K 個の切り捨てられた例外」や「特定の例外の詳細」というツールを通じて情報を取得します。その結果、信号対ノイズ比が大幅に向上し、誤った原因特定を防ぐことができました。
時系列メトリクスデータをそのまま LLM に渡すのは、トークン効率が悪く、長期間稼働するジョブでは機能しません。Pinterest はこの課題に対し、「隔離されたサブエージェント」を設けて解決しました。
LLM は数値の羅列ではなく、視覚化されたパターン(例:エグゼキュータがゼロになる、ボトルネックによる長時間の停滞など)を認識して推論を行います。これにより、ジョブの稼働時間に関わらず、分析に使用するトークン数を一定に保ちながら、リソースの不整合な挙動を検出できるようになりました。
AI エージェントの開発において、変更が既存機能を壊していないかを確認するのは困難です。Pinterest は、本番環境への依存を減らし、品質を定量化するために「エンドツーエンドテストハッチ」を構築しました。
この仕組みは以下の 2 つのモードで動作します。
生成されたレポートは、事前に定義した「オフライン評価(Offline Evals)」によって自動採点されます。例えば、「修復案は 3 つまでに抑える」というルールがあれば、それを超えた回答には低スコアが付与され、冗長性の制御が図れます。このテストスイートの導入により、直感や経験則に頼らず、変更による品質の低下を即座に検知できるようになりました。
最終的に Pinterest は、単一の React エージェントから、専門役割を持つマルチエージェントアーキテクチャへと移行しました。この設計は、LangGraph のディープエージェントライブラリを活用して実現されています。
各エージェントには専用のプロンプトと MCP ツールのサブセットが割り当てられ、以下のような役割分担が行われています。
このアーキテクチャの最大の利点は、「単一プロンプトの分解」にあります。各役割が明確に分離されたことで、開発者は個別のプロンプトを保守しやすくなり、テストも焦点を絞って行えます。また、プロジェクトの範囲拡大(例:Spark SQL の最適化支援)も、新しいエージェントを追加するだけの簡単な作業となりました。
Pinterest の「Medic」事例は、大規模分散システムにおける AI エージェントの実用化において、単なるプロンプト調整ではなく、「ノイズ除去」「コンテキストウィンドウの制約克服」「堅牢なテスト基盤」という 3 つの要素を体系的に設計することが不可欠であることを示しています。LLM の限界を技術的な工夫で補い、人間が判断するべき優先順位付けや複雑な推論を AI に委ねることで、インフラサポートの質と速度は劇的に向上します。
今後は、このパターンを Flink や Trino などの他の分散システムへ拡張し、さらにユーザーフィードバックを活用した自動改善にも取り組む予定とのことです。これは、エンタープライズレベルでの AI 導入における標準的なベストプラクティスとして確立される可能性を秘めています。
この記事はAIが動画の内容を記事化したものです。正確な発言は動画および文字起こしをご確認ください。