🟡 🛡️ セキュリティ 公開日: · 4 分で読めます ·

LangChain:外部サンドボックスなしで信頼できないエージェントコードを実行する方法

エディトリアルイラスト:LangChainがQuickJSとWebAssembly環境内で信頼できないエージェントコードを安全に実行

LangChainチームのHunter Lovellは、WebAssemblyにコンパイルされたQuickJSエンジン内で信頼できないエージェントコードを外部サンドボックスなしに実行する技術を解説する。三つのセキュリティの柱と二つの実験的なオープンソースライブラリが開発者コミュニティに公開された。

🤖

この記事はAIにより一次情報源から生成されました。

AIエージェントが生成したコードの実行には常に固有のセキュリティリスクがあった:エージェントがプロンプトインジェクションで操作されて悪意のあるコードを生成したらどうなるか?一般的な解決策は外部サンドボックス——独立したプロセス、Dockerコンテナ、または仮想マシン——だった。LangChainチームのHunter Lovellはより洗練された解決策を提案する:信頼できないエージェントコードをプロセス内で、しかし厳固なメモリ境界の後ろで実行することだ。

なぜ従来のアプローチでは不十分なのか?

外部サンドボックスは分離の問題を解決するが、独自の複雑さをもたらす:プロセス間通信のレイテンシー、複雑なライフサイクル管理、そして——エージェントにとって特に厄介なのが——人間の承認を必要とするステップをまたいで自然な状態を維持できないことだ。

Lovellの手法は核心的な洞察に基づいている:**WebAssembly(WASM)**は外部コンテナなしに単一プロセス内で十分な境界分離を提供する。AWS、Shopify、Figmaはすでに本番環境で同様の目的にWASM境界を使用している。

このアーキテクチャの三つのセキュリティの柱

Lovellは信頼できないエージェントコードを実行するすべてのシステムが満たすべき三つの条件を定義する:

実行分離。 エージェントコードはホストシステムを侵害できてはならない。WASMはサンドボックス化されたインプロセスVM——割り当てられた領域の外を読み書きできない自身のリニアメモリ空間——を通じてこれを達成する。ランタイムは実行するコードの規律に依存することなく、アーキテクチャレベルでメモリと実行の境界を強制する。

能力分離。 エージェントはデフォルトでファイルシステム、ネットワーク、外部依存関係へのアクセスを持たない。すべての能力は狭いコントラクトを持つハーネスを通じて明示的にブリッジされなければならない。これは最小権限の原則をアーキテクチャレベルで実装する——エージェントはプログラム的に承認されたことのみを行い、それ以上は何もできない。

状態を持つ一時停止。 実行は人間の承認を待って停止し、コンテキストを失わずに再開できなければならない。Lovellはインタープリターのリニアメモリ空間をLangGraphの状態にシリアライズすることでこれを解決する——プログラムが止まったところから再開できるスナップショットとして保存される。

オーケストレーションにQuickJSを選ぶ理由?

利用可能なすべてのJavaScriptエンジンの中から、LangChainはQuickJS——Cで書かれた小さく高速でECMA準拠のランタイム——を選択した。理由は三つある:WASMへ完全にコンパイルされる(つまりエンジン自体が境界の後ろに位置し、境界の横ではない)、オーケストレーションスクリプトに十分な表現力を持つ、そして短いプログラムのコンパイルステップが不要——エージェントスクリプトの起動時のレイテンシーを排除する。

このモデルのエージェントはサブエージェントを一つずつディスパッチする代わりに、短いJavaScriptオーケストレーションスクリプトを書く。このシフトは作業のモダリティを変える:エージェントは実行フローを宣言的に定義し、ハーネスが能力の継続的な確認と明示的なブリッジとともにそれを実行する。

Metaのセキュリティ原則への言及

Lovellは、エージェントが機密データへのアクセス、信頼できない入力への露出、外部状態を変更したり外部と通信したりする能力を同時に持つことはできないというMetaのセキュリティ原則を明示的に引用する。残りのシステムの洗練度にかかわらず、三つの要因すべてが揃うと——エージェントアーキテクチャは安全でなくなる。

QuickJS-WASMのアプローチはвторой番目と三番目の条件を直接対処する:デフォルトのネットワークやシステムアクセスがなければ、侵害されたエージェントでさえ影響半径が劇的に制限される。

二つの新しいオープンソースライブラリ

記事の公開と合わせて、LangChainは二つの実験的オープンソースライブラリをリリースした:

  • quickjs-rs ——WASMを通じたQuickJSのランタイムとPythonバインディング。独自実装の基盤として開発者コミュニティに利用可能
  • langchain-quickjs ——quickjs-rsをLangGraphと統合するDeep Agentsミドルウェア。ステップ間の一時停止と状態シリアライズのメカニズムを含む

両方とも実験的とマークされている——APIはバージョン間で変更される可能性があるが、基本的なアーキテクチャとセキュリティモデルは安定している。

本番エージェントアーキテクチャへの示唆

生成されたコードの信頼性の高い実行は、本番環境で堅牢な自律エージェントへの道における重要な技術的課題の一つだ。プロンプトインジェクションは依然として未解決の問題——しかしエージェントが侵害された場合でも、明示的な承認なしにファイルシステム、ネットワーク、外部サービスにアクセスできなければ、可能性のある被害の半径は劇的に縮小する。

LangChainのアプローチは魔法の杖ではない:能力ブリッジの慎重な設計と狭いAPIコントラクト定義の規律が必要だ。しかし外部コンテナなし、レイテンシーの妥協なしに、実行・能力・状態の分離を一度に解決するアーキテクチャは、2026年に本番エージェントシステムを構築するすべての人にとって関連性の高い進歩だ。

よくある質問

なぜ他のJavaScriptエンジンの代わりにQuickJSが選ばれたのか?
QuickJSは軽量でECMA準拠であり、短いプログラムのコンパイルステップなしにWebAssemblyへ完全にコンパイルできる。これにより最小レイテンシーでのインプロセスエージェントオーケストレーションに理想的だ。
Lovellが引用するMetaの「ルール・オブ・ツー」とは何か?
エージェントが機密データへのアクセス・信頼できない入力の受信・外部状態の変更を同時に行うことはできないというセキュリティ原則だ。三つの条件すべてが揃うとアーキテクチャが安全でなくなる。
この記事と一緒に公開されたオープンソースライブラリはどれか?
二つの実験的ライブラリが公開された——quickjs-rs(ランタイムとPythonバインディング)とlangchain-quickjs(LangGraph統合のためのDeep Agentsミドルウェア)だ。