04

5:43 - 6:35

事前に用意されたエージェント実行環境

この時点から動画を見る

モデルやツールとは別の実行層

エージェントを動かすには、モデルやツールだけでは足りません。実際にコードを読み、変更し、長い作業を続ける計算環境が必要です。この章で話者たちは、その環境としてUberのクラウド上のDevPodsを説明します。

話者たちの説明では、DevPodsは次のような作業に合わせて作られています。

  • 長時間続く作業
  • 互いに分離された作業
  • 複数のエージェントによる並列作業
  • 世界の各地域から利用する作業

ここで大切なのは、計算資源(compute)がモデルやツールとは別のプラットフォーム層だという点です。モデルが次に何をするかを決めても、その処理を安全に実行する場所がなければ、エージェントは仕事を進められません。

「すぐ始まる」理由は、前もって準備すること

一般的な実行環境では、依頼を受けてからマシンやコンテナを用意し、リポジトリを取得し、検索の準備をすることがあります。このような開始を、ここではコールドスタートと呼びます。大きなリポジトリでは、この準備だけでも作業開始を遅らせます。

Uberの説明では、エージェントが要求する前に、Kubernetesのバルーンポッド(balloon pod)を用意しておきます。ポッドは、Kubernetesでスケジュールできるコンテナのまとまりです。これらのポッドには、リポジトリのスナップショットと、コード検索用のインデックスが入っています。

スナップショットは、準備済みの保存状態を切り取ったものです。インデックスは、コードの場所をすばやく探すための情報です。つまり、エージェントが依頼を受けた時点で、毎回同じ準備を最初から行う必要がありません。準備済みの状態を使えるので、話者たちは数秒以内に作業を始められると説明しています。これはウォームスタート、つまり「温まった」状態からの開始です。

コールドスタートとウォームスタートの例

例(このレッスンでの補足):何百万行もあるモノレポに、2つのエージェントが別々の修正を加えるとします。

コールドスタートなら、各エージェントは環境の準備、リポジトリの取得、検索情報の作成を待つかもしれません。ウォームスタートなら、その準備済みの環境を割り当ててもらい、すぐに対象コードを探し始められます。事前に容量を確保するため、使われていない時間のコストは増える可能性があります。しかし、その代わりに開始までの時間を数秒程度に抑えやすくなります。

分離された環境で並列に動かす

エージェントを速くするだけでは不十分です。複数の作業を同時に行うなら、一つの作業が別の作業を壊さないことも必要です。DevPodを分離して使えば、エージェントごとに異なる作業状態を持たせられます。そのため、複数のエージェントが同じ大きなコードベースを扱う場合でも、安全に並列化しやすくなります。

ここでいう「安全」は、エージェントの変更が必ず正しいという意味ではありません。分離された環境は、作業同士が直接混ざることを防ぐための仕組みです。変更の正しさは、別の検証やレビューで確かめる必要があります。

また、エージェントの数が増えると、必要な容量も増えます。地域ごとにどれだけ準備するか、どの依頼にどの環境を割り当てるかを決めなければなりません。したがって、事前プロビジョニングは単にポッドを作る機能ではありません。地域ごとの容量計画とスケジューリングも含む、運用上の設計課題です。

画面の説明:この画面には、即時に開始できるDevPodsと、バルーンポッド、ウォームプール、スナップショット、地域(regions)が示されています。これらのラベルは、準備済みの容量を世界各地に分散した実行基盤へつなげています。画面から確認できるのは、この構成が用意された容量と地域分散を重視していることです。個々のスケジューリング方法まで画面が示しているわけではありません。動画の該当時点(6:17)

Uberの準備済みDevPodを使う流れ

話者の説明:エージェントがUberの大きなリポジトリで仕事をするために実行環境を要求すると、準備済みのDevPodを使って作業を始めます。リポジトリの状態と検索インデックスが前もって用意されているため、環境設定を毎回クリティカルパス(作業を完了するまでに必ず通る待ち時間)へ入れなくて済みます。

この設計の効果は、単なる起動時間の短縮だけではありません。長く続く処理を分離して動かし、複数の作業を並行して進めるための土台にもなります。モデルがより速く答えられることとは別に、エージェントがコードを扱う場所を速く、安定して、必要な地域で提供することが重要です。

まとめ

この章の中心は、エージェントの能力をモデルだけで説明しないことです。事前に用意したDevPodsは、リポジトリのスナップショットと検索インデックスを含むウォームな状態を提供します。分離によって並列作業を支え、地域分散と容量計画によって大規模な利用に対応します。こうして計算環境が、エージェント型ソフトウェア開発ライフサイクル(SDLC)の独立した基盤になります。

100% スペースキーとドラッグで移動 | Ctrl/Cmdとホイールで拡大縮小