ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #39 - OpenHands-Versa」という勉強会を開催しました。
アーカイブ動画はこちらです。
OpenHands-Versa
今回は、マルチモーダルなブラウジング機能を持つコーディングエージェント「OpenHands-Versa」をキャッチアップしました。
OpenHands-VersaのGitHubリポジトリはこちらです。
今回のポイント
OpenHands-Versaとは
OpenHands-Versaは、OpenHandsをベースにブラウジング機能を追加したエージェントです。 「Coding Agents with Multimodal Browsing are Generalist Problem Solvers」という論文のリファレンス実装とされています。
OpenHands-Versaは、SWE-Bench Multimodal・GAIA・The Agent Companyといったベンチマークで高い性能を示しています。
なお、OpenHands-Versaのブラウジング機能は、現在はOpenHands自体にも実装されています。
OpenHands-Versaを動かした様子
OpenHands-Versaを実際に動かしてみました。
README.mdに書かれているインストールと設定の手順を実施したあと、make runコマンドで起動することができました。
例として、ちょっとしたコードを書く指示を出してしばらく待つと、コードが実装されました。 (このとき、Dockerでの環境構築にしばらく時間がかかりました)

その後、ブラウザでアクセスして操作してみるよう指示すると、ボタンをクリックしたりする様子を確認できました。

OpenHands-Versaで使われているツール
OpenHands-Versaはいくつかのエージェントで構成されています。
そのうちCodeActエージェントには、ファイル編集やブラウザ操作のツールに加えて、Anthropicのブログで紹介されている「think」ツールも実装されていました。
ThinkTool = ChatCompletionToolParam(
type='function',
function=ChatCompletionToolParamFunctionChunk(
name='think',
description=_THINK_DESCRIPTION,
parameters={
'type': 'object',
'properties': {
'thought': {'type': 'string', 'description': 'The thought to log.'},
},
'required': ['thought'],
},
),
)
OpenHands-Versaのブラウザ操作の実装
OpenHands-VersaのCodeActエージェントのブラウザ操作について、もう少し掘り下げてみました。
LLMに与えるツールの実装は以下のようになっていました。
BrowserTool = ChatCompletionToolParam(
type='function',
function=ChatCompletionToolParamFunctionChunk(
name='browser',
description=_BROWSER_DESCRIPTION,
parameters={
'type': 'object',
'properties': {
'code': {
'type': 'string',
'description': (
'The Python function that interacts with the browser.\n'
+ _BROWSER_TOOL_DESCRIPTION
),
}
},
'required': ['code'],
},
),
)
LLMがこのツールを呼び出す際のパラメータはcodeのみです。
codeには、fill('a12', 'example with "quotes"')やclick('a51')、click('48', button='middle', modifiers=['Shift'])といったコードが出力されることになります。
codeというパラメータのdescriptionはとても詳細に記述されています。
この実装では、Anthropicなどの組み込みのComputer use機能とは異なる方法で、ブラウザ操作の指示を出力させているということになります。
BrowserGymの活用
fill('a12', 'example with "quotes"')やclick('a51')といったコードがどのように実行されるのか確認していったところ、「BrowserGym」というライブラリを使用していました。
BrowserGymは、Webエージェントのためのフレームワークであり、BrowserGymを使うとPlaywrightなどを直接使用するよりも簡単にWebエージェントを実装できるようです。
BrowserGymはなかなか面白そうだったので、今後のテーマとして改めて取り上げたいと思います。
次回のご案内
以上、今回は「OpenHands-Versa」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #40 - Motia」ということで、API・イベント・エージェント向けの統合的なバックエンドフレームワーク「Motia」がテーマです!
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!