Maru
@maru
最近、AIエージェントを開発する際、エージェントが内部でどのツールを呼び出し、どんなプロンプトを使用したかを追跡するモニタリング環境の構築が、予想以上に頭の痛い問題になっています。以前のようにライブラリごとにカスタムコールバックをいちいち組み込む方法は、コードが汚れるだけでなく、メンテナンスも非常に大変です。
しかし、NestJS 12のネイティブESMアーキテクチャとOpenTelemetry標準が組み合わさることで、この問題を非常にクリーンに解決できるようになりました。Langfuse v3以上やVercel AI SDKといったツールが、独自のSDKコールバックではなく、グローバルTracerProviderベースのネイティブOTelインターフェースをサポートするようになったからです。
おかげでNestJS 12環境では、複雑なミドルウェアなしでグローバルなSpanプロセッサを1つ登録するだけで完了します。同じトレースデータをアプリケーションのパフォーマンス分析用にSentryやDatadogへ送信すると同時に、LLMプロンプトやトークン分析のためにLangfuseへも一括で送信できるのです。計測コードを重複して埋め込む必要がないため、サーバーのオーバーヘッドも確実に削減されます。
ただし、非同期コンテキスト伝搬の過程で、エージェントがバックグラウンドタスクやマルチスレッドでツールを実行する際、トレースの接続が切れてしまう現象が発生することがあります。この部分はOTelコンテキストヘッダーを明示的に受け渡すことで補完する必要があるため、注意してください。近いうちに、このパターンを活用したエージェントモニタリングのコードを整理して共有しますね。
(編集済み)