見出し画像

Replitエージェントアーキテクチャ テックトーク[2]

Replit マルチエージェントアーキテクチャ:コンテキスト管理と最適化の技術

カリフォルニア州Foster CityのReplitオフィスでのライブ録画

はじめに

本セッションでは、JamesとZhenがReplitのマルチエージェントアーキテクチャの技術的詳細について解説します。異なるサブエージェントと楽観的実行を使用したコンテキスト管理とパフォーマンス最適化に焦点を当てています。

スピーカー紹介

[司会者]
「最初の2人のスピーカーを紹介させていただきます。1人目は、実質的にAGI(人工汎用知能)と言えるJamesです。多くの人が核エネルギーを購入してコードに変換しようとしている中、私たちはJamesにカフェインをたくさん与えるだけでコードに変換してもらっています。彼のファンタジーフットボールチームは「GPT-4 Mini」という名前で、アメリカンフットボールのことを全く知らないのに驚くほどよい成績を収めています。よくやっていますね、James。

2人目はZhenです。2017年、OpenAIがFiveをリリースした時、そのAIが彼よりもDOTAが上手いことが判明しました。これは本当にショッキングでした。なぜならZhenはDOTAがとても上手かったからです。その時から、彼は機械を支配する側になることを誓い、全てのプログラマーに同じ痛みを味わってもらうために、彼らの仕事を奪うためにここに来たというわけです。

では、ZhenとJames、よろしくお願いします。」

Replit Agentの概要 [Zhenのプレゼンテーション]

「みなさん、こんにちは。私たちは今日、Replit Agentがどのように動作するのかについて、ハイレベルな概要をお話しします。その後、他の方々が具体的な部分について詳しく説明していきます。

私はZhenです。Replit Agentの最初のバージョンを作りました。1年前にReplitに入社したのですが、それはソフトウェアエンジニアがAIに置き換えられると信じていて、他の誰かに置き換えられるのではなく、自分で自分を置き換えたいと思ったからです。

Replit Agentの基本構造

私たちは、Replit Agentや他のどんなコードエージェントでも、実際に動作するものを作りたいと考えています。基本的に2つのパートがあります:

  1. ユーザーが「このアプリを作って」というようなリクエストを出す

  2. エージェントがreplを作成する(コード、環境、その他必要なものすべてを含む)

そこから物事を修正し改善するループに入ります。これはReactのループのようなものですが、これがコアループです。これにより:

  • 実際の製品が作られる(初期作成)

  • アプリケーションが継続的に改善される(コアループ)

Replの作成プロセス

  1. 初期リクエスト処理

    • ユーザーが「レストラン投票アプリを作りたい」というようなリクエストを出す

    • エージェントがプランを生成

    • プランはユーザーのリクエストを技術的な具体的リクエストに分解:

      • 必要な機能

      • UI要件

      • 技術スタック(React、Flask、Node.jsなど)

  2. ブループリントの活用

    • LLMには現実から外れてしまう可能性が無限にあるため

    • エージェントを正しい軌道に保つために使用

  3. 実装フェーズ

    • replの中で全てのファイルを一度に生成

    • 設定の実行:

      • パッケージのインストール

      • ワークフローの設定

      • シークレットとデータベースの設定

  4. 検証フェーズ

    • スクリーンショットの撮影

    • ログの確認

    • エージェントループによる機能検証

    • フィードバックループへの移行

コアエージェントループ

エージェントのコアループは以下の流れで動作します:

  1. 状態更新

    • replとワークスペースからの情報収集:

      • 現在のファイル群

      • 現在の状態

      • ログ情報

      • エラー情報

      • アプリケーションの視覚的状態

  2. サブエージェント選択

    • 作業を実行する最適なサブエージェントの決定

  3. 次のアクション決定

    • 利用可能なツール:

      • コード編集

      • パッケージインストール

      • シェルワークフロー

      • その他の特殊ツール

エージェントの状態管理

Replit Agentは以下の状態を管理しています:

  1. 埋め込みを持つファイルシステム

    • RAG機能による関連ファイルへのアクセス

  2. メモリ

    • 過去のアクション履歴

    • 正誤判断

    • 次のステップの計画

  3. ワークフロー

    • アプリケーション実行設定

  4. ログとエラー

    • コンソール出力

    • Chrome DevTools情報

  5. バージョン管理

    • チェックポイント作成

    • バージョンロールバック機能

  6. スクリーンショット

    • アプリケーションの視覚的状態の記録

  7. シークレット管理

    • APIキー管理

    • サードパーティ統合

  8. ブループリントとWeb連携

    • 内部ガイダンスシステム

    • 外部情報の取得

マルチエージェントアーキテクチャ [Jamesのプレゼンテーション]

「基本的に、エージェントに関して私たちが日々管理している複雑さの99%は、コンテキストの管理に関するものです。これは基本的に、LLMに送るプロンプトのことです。

この課題に対処するため、私たちは「マルチエージェントアーキテクチャ」を構築しました。基本的な考え方は、異なるペルソナが異なるツールにアクセスし、異なるメモリや、これまでに起こったことの異なる部分にアクセスできるようにすることです。これにより、問題をできるだけ制約し、運用コストを抑え、より軌道に乗せやすくなります。

現在のアーキテクチャ

私たちには現在2つのサブエージェントがあります:

  1. Manager Agent

    • ユーザーと直接対話

    • セッション全体を管理

    • ユーザー要件を整理してプロンプト管理を効率化

  2. Editor Agent

    • 特定のプランステップを実装

    • ユーザーからのフィードバック取得が可能

    • 各ステップ後に進捗を自動要約

ツール実行の最適化

私たちはAnthropicやOpenAIが提供するネイティブのツール呼び出しAPIを使用していません。その主な理由は、これらのモデルが単純な思考とツール呼び出しの組み合わせに最適化されているためです。

実際のところ、LLMがループで動作している場合、多くの場合、次に何をしたいかは既に明確です。例えば:

<code_agent_thinking>
I understand that we need to create a new migration to add the missing columns
to the GenePanel model, apply the migration, and then verify the schema. Let's
start by creating the new migration.
</code_agent_thinking>

<code_agent_execute language="python">
workflows_set_run_config_tool(name="Create New Migration", command="flask db
migrate -m 'Add missing columns to GenePanel'", wait_for_port=None)
</code_agent_execute>

楽観的実行

私たちは「楽観的実行」というアプローチを採用しています:

  • 各ステップが成功すると仮定して次のステップを生成

  • 例:ファイル書き込み → サーバー再起動

  • 失敗した場合は、それ以降の生成を無効化

  • この手法により実行コストを最大50%削減

今後の展開

  1. さらなるコスト最適化

    • より多くのユーザーが利用できるように

  2. レスポンス性の改善

    • より快適な使用感を目指して

  3. コンピュータービジョンを使用した自動デバッグ

    • エージェントが実際にアプリケーションを操作してデバッグ

  4. より長い軌跡の処理

    • 複雑な開発プロセスへの対応

  5. 既存のreplsのインポート

    • 既存プロジェクトとの連携強化


いいなと思ったら応援しよう!