Home 論文解説: OpenHands — An Open Platform for AI Software Agents
投稿
キャンセル

📄 論文解説: OpenHands — An Open Platform for AI Software Agents

本記事は OpenHands: An Open Platform for AI Software Agents の解説記事です。

論文概要(Abstract)

OpenHands(旧OpenDevin)は、AIソフトウェアエージェントの開発・研究・評価を統一するオープンソースプラットフォームです。著者らは、人間の開発者と同等の操作——コード記述、ターミナル実行、Webブラウジング、API呼び出し——を可能にするエージェント基盤を提供しています。Dockerベースのサンドボックス環境、対話型UI、ヘッドレスモード、マルチエージェントフレームワークを備え、SWE-bench VerifiedでClaude 3.5 Sonnet使用時に38%の解決率を達成したと報告されています(2024年時点)。GitHub Star 40,000以上を獲得し、AIコーディングエージェント分野で最も活発なOSSプロジェクトの一つです。

この記事は Zenn記事: Claude CodeでAI拡張開発を実現する6層アーキテクチャ実践ガイド の深掘りです。

情報源

  • arXiv ID: 2407.16741
  • URL: https://arxiv.org/abs/2407.16741
  • 著者: Xingyao Wang, Boxuan Li, Yufan Song, Frank F. Xu et al.(イリノイ大学アーバナシャンペーン校, カーネギーメロン大学 他)
  • 発表年: 2024(2025年に大幅更新)
  • 分野: cs.SE, cs.AI, cs.CL

背景と動機(Background & Motivation)

2024年以降、LLMベースのコーディングエージェント研究は急速に進展しましたが、各研究グループが独自のフレームワークで実装・評価を行っており、再現性や比較可能性に課題がありました。

著者らはこの問題に対し、以下の3つの要件を満たす統一プラットフォームの必要性を指摘しています。

  1. 安全なコード実行環境: エージェントが生成したコードを安全に実行できるサンドボックス
  2. 統一されたエージェントインターフェース: 異なるエージェント実装を共通のAPIで抽象化
  3. 再現可能な評価基盤: SWE-benchなどのベンチマークを標準化された環境で実行

この動機は、Claude Codeがターミナルエージェントとしてファイル操作・コマンド実行・テスト実行を一体化している設計思想と共通しています。

主要な貢献(Key Contributions)

  • 統一プラットフォーム: エージェント開発・評価・デプロイを一つのフレームワークで提供
  • Dockerサンドボックス: 安全なコード実行環境をコンテナベースで実現
  • CodeActエージェント: 実行可能なPythonコードをアクション空間として使用するエージェント実装
  • イベントストリームアーキテクチャ: エージェント・環境・UIの通信を統一するメッセージングシステム
  • 包括的なベンチマーク統合: SWE-bench、HumanEval、GPQA等の評価タスクを標準化

技術的詳細(Technical Details)

アーキテクチャ概要

OpenHandsのアーキテクチャは3つの主要コンポーネントから構成されています。

graph TD
    A[フロントエンド React UI] --> B[バックエンド FastAPI]
    B --> C[イベントストリーム]
    C --> D[エージェント]
    C --> E[ランタイム Docker Sandbox]
    D --> C
    E --> C
    B --> F[LLM LiteLLM]
    D --> F

フロントエンド: React + TypeScriptで実装されたWeb UI。エージェントの動作をリアルタイムで可視化し、人間が介入するためのインターフェースを提供します。

バックエンド: FastAPIで実装されたサーバー。イベントの管理、LLMの呼び出し、Dockerコンテナの管理を行います。

イベントストリーム: すべての通信はイベントとして統一管理されます。

イベントストリームアーキテクチャ

OpenHandsの中核はイベントストリームです。エージェントのアクション、環境の観測、ユーザーの介入がすべて統一されたイベントとして管理されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from dataclasses import dataclass
from enum import Enum

class EventType(Enum):
    """OpenHandsのイベント型"""
    ACTION = "action"           # エージェントのアクション
    OBSERVATION = "observation" # 環境からの観測
    MESSAGE = "message"         # ユーザーメッセージ

@dataclass
class Action:
    """エージェントが実行するアクション

    Attributes:
        action_type: アクションの種類(run, edit, browse等)
        args: アクション固有の引数
        thought: エージェントの思考プロセス
    """
    action_type: str
    args: dict
    thought: str = ""

@dataclass
class Observation:
    """環境から返される観測

    Attributes:
        obs_type: 観測の種類(command_output, file_content等)
        content: 観測の内容
        exit_code: コマンド実行時の終了コード
    """
    obs_type: str
    content: str
    exit_code: int = 0

イベントストリームの設計は、Claude CodeのHooks(Layer 2)のライフサイクルイベントと類似しています。Claude Codeが24のライフサイクルイベント(PreToolUse、PostToolUse等)を定義しているように、OpenHandsもアクションと観測をイベントとして統一管理しています。

CodeActエージェント

OpenHandsのデフォルトエージェント実装であるCodeActは、LLMが生成するアクションを実行可能なPythonコードとして表現します。従来のJSONベースのアクション定義と比較して、以下の利点があります。

  1. 表現力の高さ: Pythonの制御構造(ループ、条件分岐)を直接使用可能
  2. LLMとの親和性: LLMはPythonコードの生成に長けている
  3. 拡張性: 新しいアクションをPython関数として追加可能

CodeActのアクション空間は以下の関数で構成されます。

関数機能Claude Code対応
run(command)シェルコマンド実行Bashツール
edit(file, start, end, content)ファイル編集Editツール
read(file)ファイル読み取りReadツール
browse(url)Webページ閲覧WebFetchツール
search(pattern, path)コード検索Grepツール

この対応関係は偶然ではありません。LLMベースのコーディングエージェントが必要とする基本操作は、どのプラットフォームでも共通しており、「ファイル読み取り」「ファイル編集」「コマンド実行」「検索」が4つの柱です。

Dockerサンドボックス

OpenHandsは各エージェントセッションを独立したDockerコンテナ内で実行します。

\[\text{Security} = \text{Isolation}(\text{filesystem}) \cap \text{Isolation}(\text{network}) \cap \text{Isolation}(\text{process})\]
  • ファイルシステム分離: エージェントはコンテナ内のファイルシステムのみにアクセス可能。ホストのファイルには直接アクセスできない
  • ネットワーク分離: デフォルトではインターネットアクセスが制限される(設定で変更可能)
  • プロセス分離: エージェントが起動するプロセスはコンテナ内に閉じ込められる

この設計は、Claude Codeのサンドボックス機構と同じ課題——「エージェントに自律的なコード実行を許可しつつ、セキュリティを確保する」——に対する解決策です。Anthropicの公式ブログ「making Claude Code more secure and autonomous」では、ファイルシステムとネットワークの制御を自動で行うサンドボックスアーキテクチャが紹介されており、OpenHandsのDockerベースのアプローチと設計思想を共有しています。

実装のポイント(Implementation)

LLM統合(LiteLLM): OpenHandsはLiteLLMライブラリを介して100以上のLLMプロバイダーに対応しています。GPT-4、Claude 3.5 Sonnet、Llama 3、Geminiなどを統一インターフェースで切り替え可能です。

状態管理: 各セッションの状態(ファイルの変更履歴、コマンドの実行結果)はイベントストリームに記録されます。これによりセッションの再現が可能です。

マルチエージェント対応: OpenHandsはDelegateActionを通じてサブエージェントを起動する機構を持っています。メインエージェントが特定のタスクをサブエージェントに委譲し、結果を受け取ることができます。Claude CodeのSubagents(Layer 4)と同じ設計パターンです。

実験結果(Results)

SWE-benchでの性能

著者らおよびコミュニティが報告している主要な結果です。

エージェントLLMSWE-bench Verified
OpenHands-CodeActClaude 3.5 Sonnet38.0%
OpenHands-CodeActGPT-4o28.4%
OpenHands-CodeActLlama 3.1 70B15.2%
SWE-agentGPT-423.7%

OpenHands-CodeActがClaude 3.5 Sonnet使用時にSWE-agentを上回っている点は、エージェントの「足場」(scaffolding)の設計がLLMの能力を引き出す重要な要素であることを示しています。

他のベンチマーク

ベンチマークスコア説明
HumanEval85.4%コード生成能力
GPQA Diamond47.3%汎用質問応答
WebArena22.1%Web操作タスク

実運用への応用(Practical Applications)

OpenHandsの設計は、Claude Codeの6層アーキテクチャの複数の層に対応しています。

イベントストリーム ↔ Hooksシステム: OpenHandsのイベントベースアーキテクチャは、Claude CodeのHooksが特定のライフサイクルイベント(PreToolUse、PostToolUse等)にフックする設計と構造が類似しています。

CodeActのアクション空間 ↔ Claude Codeのツール: CodeActのruneditreadbrowsesearchは、Claude CodeのBash、Edit、Read、WebFetch、Grepツールと1対1で対応しています。

Dockerサンドボックス ↔ Claude Codeのサンドボックス: 両者ともにファイルシステムとネットワークの分離を通じて安全なコード実行を実現しています。

DelegateAction ↔ Subagents: OpenHandsのタスク委譲メカニズムは、Claude CodeのSubagents(Layer 4)と同じ設計パターンです。

スケーラビリティの制約: OpenHandsは単一Dockerホスト上で動作するため、複数エージェントの同時実行にはホストのリソース(CPU、メモリ)が制約となります。大規模なマルチエージェント構成には、Kubernetes等のオーケストレーション層が別途必要です。

関連研究(Related Work)

  • SWE-agent (Yang et al., 2024): ACIの設計にフォーカスしたエージェント。OpenHandsとは補完関係にあり、SWE-agentをOpenHands上で動作させることも可能
  • Aider (Gauthier, 2024): gitベースのAIペアプログラミングツール。OpenHandsよりもシンプルなインターフェースで、ファイル編集に特化
  • Devon (2024): OpenHandsと同様のOSSエージェントプラットフォーム。OpenHandsの方がコミュニティ規模が大きい

まとめと今後の展望

OpenHandsは、AIソフトウェアエージェントの研究・開発・評価を統一するプラットフォームとして、2026年現在でも活発に開発が続いています。イベントストリーム、Dockerサンドボックス、CodeActエージェントという3つの設計は、Claude Codeを含む現代のAIコーディングツールの設計に影響を与えています。

GitHub Star 40,000以上、月間SDKダウンロード数の急成長は、AIコーディングエージェントへの産業界の関心の高さを示しています。Claude Codeの6層アーキテクチャを理解する上で、OpenHandsのアーキテクチャを比較対象として参照することで、各設計判断の意図をより深く理解できます。

参考文献

この投稿は CC BY 4.0 でライセンスされています。