Closed14

AIエージェントプラットフォーム「AgentSea」を試す

kun432kun432

https://x.com/Dan_Jeffries1/status/1803106091217146054

https://www.agentsea.ai/

AgentSea

ビルダーのための高度なエージェントツールキット

私たちのツールは、それぞれ一つのことを非常にうまく行うように設計されている。Unixマシンでsed、awk、grep、ps、topを使うように、混ぜて使ったり、一緒に使ったり、個別に使ったりできる。Githubでは、どのような使用例にも対応するMITライセンスが無料で提供されている。

SurfKit
エージェントをローカル、コンテナ、クラウドで構築、実行し、デバイスに接続することができる。

ToolFuse
エージェントが環境を観察し対話するために使用できるエージェントツールを構築するための堅牢なライブラリ。

AgentD
AIエージェントがデスクトップOSにアクセスできるようにする強力なデーモン。HTTP API経由でデスクトップを公開し、デスクトップとAI駆動型アプリとのシームレスなインタラクションを可能にする。

AgentDesk
AgentDを搭載したVMをクラウドまたはローカルで起動し、Toolインスタンスとして実行するライブラリ。

DeviceBay
ファイルシステム Playwright ブラウザやデスクトップのように、エージェントが使用できるデバイスのプラグイン可能なインスタンスをセットアップできる。ToolFuseを介して動作する。

ThreadMem
マルチロール永続スレッドを構築するためのライブラリ。エージェントはこのライブラリを使って LLM や MLLM と通信する。

MLLM
マルチロール持続スレッドを介してマルチモーダル大規模言語モデルと通信するためのライブラリ。

Taskra
AIエージェント用のタスク管理システム。

kun432kun432

AgentSeaプラットフォームにディープダイブ

AgentSeaは、エージェントのためのオープンソースプラットフォームである。どこでもエージェントを実行、構築、展開するために使用するUNIXライクなツールのコレクションである。

パズルの最高かつ最も重要なピースはSurfkitだ。 エージェントのためのKubernetesだと思ってほしい。ローカルプロセス、Dockerコンテナ、またはGCP/Amazonのクラウドでエージェントを立ち上げることができる。

エージェントをパッケージ化し、起動させれば、「Airbnbにアクセスして、7月15日から20日の間だけ、ロンドンで300ドル以下の場所とアパートメントを全部探してきてくれ」といったタスクをこなしてくれる。

エージェントは、デバイスやトラッカーに接続する。 デバイスとは、ファイルシステム、プレイライト・ブラウザ、デスクトップなど、エージェントが扱えるものであれば何でもいい。

私たちがリリースする最初のデバイスは大きなもので、マウスクリックやキーコマンドなどを送信することでエージェントがコントロールできる完全な仮想デスクトップだ。

我々の最初のプロトタイプのアルファエージェントは、GUIサーフィンの達人、SurfpizzaとSurfSlicerだ。 これらは、GUIをナビゲートするために純粋なマルチモーダル・アプローチを使っている。 つまり、Playwrightとは異なり、デスクトップやインストールされたアプリなどと対話することができる。彼らは画面を見て、次に取るべきアクションを見つけ出す。

kun432kun432

なるほど、複数のコンポーネントを組み合わせるところはUNIXライクでK8Sライクかもしれない。

kun432kun432

いくつかのコンポーネントはより詳細な説明がある。

SurfKit

https://github.com/agentsea/surfkit

SurfKit は、エージェントのための完全な Kubernetes スタイルのオーケストレータを提供する。ローカル、コンテナ、クラウドでエージェントをビルドして実行し、デバイスに接続してタスクを実行させることができる。

  • GCPまたはAmazonでモデルを起動する
  • 複数のエージェントを同時に起動し、すべてのエージェントを追跡する。
  • Playwrightブラウザ、フル仮想デスクトップ、ファイルシステムなど、リモートまたはローカルのツールにエージェントをアタッチする。

ToolFuse

https://github.com/agentsea/toolfuse

ToolFuseは、LLMベースのエージェントツールを構築するための堅牢なライブラリを提供する。ツールやそのアクションや観察を定義するためのシンプルなインターフェイスを提供する。

ツールは、データの取得、デスクトップの操作、計算、ファイルへの書き込みなどに使用できる。

ToolFuseは、次のことに重点を置いている:

  • モデルに対して、どのツールが使用可能か、またそのツールの能力は何かを示す。
  • モデルの応答に基づいて、許可されたアクションを実行する方法
  • エージェントのアクションに関するルールを強制する

AgentDesk

https://github.com/agentsea/agentdesk

AgentDeskは、AIエージェントによってプログラム制御可能なフル機能のデスクトップ環境を提供する。

AgentDeskは、ローカルとクラウドでVMを実行し、Python SDKとCLIを使って制御することができる。これにより、AgentDeskはGUIベースのエージェントのための強固な基盤となる。

DeviceBay

https://github.com/agentsea/devicebay

Devicebayは、ファイルシステム、Playwrightブラウザ、デスクトップなどのデバイスをエージェントにアタッチすることができる。

私たちの最初の主要なデバイスは、エージェントがTeamviewerをコントロールするようにコントロールする完全な仮想Linuxデスクトップだが、マウスクリックやキーコマンドの送信はエージェントが担当する。

QEMU、GCP、AWS経由でデスクトップをアタッチすることができる。

kun432kun432

AgentSeaは何が他と違うのか?

  • ほとんどのチームは、LLMとの対話、データロード、RAGに集中している。 我々はそれ以外の全てに取り組んでいる。
  • 我々はUNIXの哲学である、一つのことをうまくやるということを支持している。 それぞれのツールは一つのことをする。 別々に使ってもいいし、一緒に使ってもいい。 sed、awk、grep、top、psを考えてほしい。
  • 相互運用性。 LlamaIndexやLangChainが好きなら、それらも使おう。
    最後に、LLMはインテリジェントなアプリにとって最も重要な部分であると同時に最も重要でない部分でもあると我々は感じている。
  • 我々は、LLMをホットスワップ可能な頭脳やLinuxカーネルのようなものだと考えている。 LLMがより良く、より速く、より賢くなったときでも、LLMの周りでコーディングしたものはすべて役に立つはずだ。 入れ替えれば、少しの調整ですぐにアップグレードできる。
  • 人々が好きなようにソフトウェアを使うことができる、最もシンプルで優れたOSSライセンスであるMITライセンスで全て提供されている。商用アプリを作るか、上流に貢献するか。それはあなたの選択だ。
kun432kun432

コンポーネントが多いのでどこから手を付けたらいいのかちょっとわかりにくいけど、SurfKitがどうやらコアなコンポーネントの様子。

QuickStartに従って進めてみる。今回はローカルのMacで。仮想環境を作っておくこと。

https://docs.hub.agentsea.ai/quickstart

SurfKitをインストール

$ pip install surfkit

エージェントをインストールする。AgentSeaではHubにあらかじめエージェントが用意されている様子。Hubにあるエージェントはsurfkit findで確認できる。

$ surfkit find
Name                       Kind       Description                                        Supports    Tags    Source
-------------------------  ---------  -------------------------------------------------  ----------  ------  ---------------------------
pbarker/SurfPizza          TaskAgent  A GUI surfer which slices up the screen            desktop     gui     https://api.hub.agentsea.ai
mariyadavydova/SurfSlicer  TaskAgent  A GUI surfer which zooms and slices up the screen  desktop     gui     https://api.hub.agentsea.ai

現時点ではSurfPizzaとSurfSlicerというエージェントがある様子。ちなみにドキュメントのトップに、Hubにあるエージェントの説明がある。

  • SurfPizza: 画面をスライスして探索するエージェントで、マルチモーダルモデルに合成結果を返すことで、次に進むべき場所を選ぶことができる。
  • SurfSlicer: スクリーンを領域を示すドットに分割し、マルチモーダルモデルは探しているものに最も近いドットを選び、ズームインしてターゲットをゼロにする。
  • SurfNinja(近日公開): 精密ベースの第2世代AIエージェント。
  • SurfMonsta(近日公開): 最高のパフォーマンスを誇るエージェント。SurfSlicerリージョン、GUIのバウンディングとセグメンテーションのためのSAMモデル、テキストの位置決めのためのOCR、マルチモーダルモデルに最適な解像度を与えるために画像の小さなスライスをアップスケールするためのGANなど、多くの我々の技術を組み合わせている。

一般的なエージェントフレームワークの「エージェント」といえば、何かしらのペルソナ的な役割をもたせるもの、というイメージがあるが、AgentSeaにおいてはどちらかというとケイパビリティをもたせたもの、現時点ではデスクトップやブラウザの自動操作を行うものという印象。もう少し見ていくとまた違うかもしれない。

今回はSurfSlicerをエージェントとしてインストールする

$ surfkit create agent -t mariyadavydova/SurfSlicer -n agent01

OpenAIのAPIキーを求められるので入力。なお、出力を見る限り、gpt-4oを使う様子。

This agent requires one of the following LLM API keys:
   - OPENAI_API_KEY

Would you like to enter an API key for 'gpt-4o' [y/N]: y
OPENAI_API_KEY: sk-XXXXXXXXXXXXX

エージェントはDockerコンテナになっている様子。

Running agent 'mariyadavydova/SurfSlicer' with runtime 'docker' and name 'agent01'...
Pulling Docker image 'us-central1-docker.pkg.dev/agentsea-dev/guisurfer/surfslicer:latest'...
Status update for latest: Pulling from agentsea-dev/guisurfer/surfslicer
Layer fb784af4aeda: 100%|██████████████████████████| 12376835/12376835 [00:10<00:00, 1207529.55it/s]
Layer 1103112ebfc4: 100%|█████████████████████████████| 3507699/3507699 [00:09<00:00, 352668.03it/s]
Layer 8a1e25ce7c4f: 100%|██████████████████████████| 29124181/29124181 [00:09<00:00, 2966172.87it/s]
Layer 043e7f3dd05a: 100%|█████████████████████████████████████████| 245/245 [00:07<00:00, 34.29it/s]
Layer 538a89c93346: 100%|█████████████████████████████| 3364108/3364108 [00:05<00:00, 655255.89it/s]
(snip)

しばらく待っていると、、、失敗した。

waiting for agent to be ready...
waiting for agent to be ready...
waiting for agent to be ready...
Failed to run agent: Container 'agent01' did not pass health check
Container 'agent01' does not exist.

waiting for agent to be ready...中にdocker psで見た感じだと、9090番ポートで待ち受けていたみたいだけども、ヘルスチェックが通らなかったっぽい。

 $ docker ps
CONTAINER ID   IMAGE                                                                 COMMAND                   CREATED              STATUS              PORTS                    NAMES
18e5ef3a99d4   us-central1-docker.pkg.dev/agentsea-dev/guisurfer/surfslicer:latest   "poetry run python -…"   About a minute ago   Up About a minute   0.0.0.0:9090->9090/tcp   agent01

もう一度やってみたけど同じだった。ポートがバッティングしているというようなこともない。

ドキュメントを再度確認してみると、こういう記載がある。

If you are using Docker Desktop on MacOS, please update the settings: go to Settings | Advanced and make sure that the checkbox Allow the default Docker socket to be used (requires password) is checked. Save the settings, apply and restart.

Docker Desktopの設定を確認してみる。

問題なし。

んー、ちょっとわからない。Docker Desktopのバージョンが最新でなかった(4.23.0。最新は4.31.0)ので一旦バージョンアップして再トライしてみるか。それでもダメならUbuntuサーバの方でやり直してみるかなー。

kun432kun432

Docker Desktopのバージョンが最新でなかった(4.23.0。最新は4.31.0)ので一旦バージョンアップして再トライしてみるか。

バージョンアップしたら、ヘルスチェックは通るようになった。ただバージョンアップでそれが改善したのかどうかはわからない。あとなんとなくエラーっぽい出力が見える。

waiting for agent to be ready...
waiting for agent to be ready...
waiting for agent to be ready...
Health check passed for 'agent01'
Failed to run agent: (sqlite3.IntegrityError) UNIQUE constraint failed: agent_instances.name
[SQL: INSERT INTO agent_instances (id, name, full_name, type, runtime_name, runtime_config, version, status, tags, labels, port, icon, owner_id, created, updated) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('2b81da2d-a1bb-48a3-8225-fc2de18dd568', 'agent01', None, '{"version":null,"kind":"TaskAgent","id":"a8a56888-65db-4f9e-b919-990a3a23eb49","name":"SurfSlicer","description":"A GUI surfer which zooms and slices ... (584 characters truncated) ... "cpu":"2","memory":"4Gi"},"llm_providers":{"preference":["gpt-4o"]},"devices":[],"meters":[],"tags":["gui"],"labels":{},"namespace":"mariyadavydova"}', 'docker', '{"timeout":null}', 'latest', 'running', '[]', '{}', 9090, None, None, 1718943202.543777, 1718943202.543778)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
INFO:mllm.router:loading models with preference: ['gpt-4o']
INFO:mllm.router:Found LLM provider 'gpt-4o' API key in environment variables.
INFO:uvicorn.error:Will watch for changes in these directories: ['/app']
INFO:uvicorn.error:Uvicorn running on http://0.0.0.0:9090 (Press CTRL+C to quit)
INFO:uvicorn.error:Started reloader process [1] using WatchFiles
Intialized router with Routing strategy: simple-shuffle

Routing fallbacks: None

Routing context window fallbacks: None

Router Redis Caching=None
INFO:mllm.router:loading models with preference: ['gpt-4o']
INFO:mllm.router:Found LLM provider 'gpt-4o' API key in environment variables.
INFO:watchfiles.main:147 changes detected
INFO:uvicorn.error:Started server process [18]
INFO:uvicorn.error:Waiting for application startup.
INFO:uvicorn.error:Application startup complete.
INFO:uvicorn.access:192.168.65.1:16451 - "GET /health HTTP/1.1" 200

んー、どうもエージェントは内部のDBで管理されるぽいのだけど、ここまででエージェントのインストールに失敗した際に、どうもエージェント名が既に登録されている、ってことでエラーになってるような気がするな。エージェント自体は起動しているように思える。

surfkit list agentsでインストールされているエージェントの一覧を見るとたしかに存在している。

$ surfkit list agents
Name     Kind       Type                       Runtime    Status      Port
-------  ---------  -------------------------  ---------  --------  ------
agent01  TaskAgent  mariyadavydova/SurfSlicer  docker     running     9090

ちょっと気持ち悪いのでエージェントを一旦削除してみる。Usageを見るとdeleteがある。

$ surfkit --help

 Usage: surfkit [OPTIONS] COMMAND [ARGS]...

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --debug               -d                                       Enable debug mode                                                                     │
│ --install-completion          [bash|zsh|fish|powershell|pwsh]  Install completion for the specified shell. [default: None]                           │
│ --show-completion             [bash|zsh|fish|powershell|pwsh]  Show completion for the specified shell, to copy it or customize the installation.    │
│                                                                [default: None]                                                                       │
│ --help                                                         Show this message and exit.                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ build                            Build an agent container                                                                                            │
│ config                           Retrieve tracker logs                                                                                               │
│ create                           Create resources                                                                                                    │
│ delete                           Delete resources                                                                                                    │
│ find                             Find an agent                                                                                                       │
│ get                              Get resources                                                                                                       │
│ list                             List resources                                                                                                      │
│ login                            Login to the hub                                                                                                    │
│ logs                             Resource logs                                                                                                       │
│ new                              Create a new agent repo                                                                                             │
│ publish                          Publish an agent                                                                                                    │
│ solve                            Use an agent to solve a task                                                                                        │
│ version                          Show the version of the CLI                                                                                         │
│ view                             View resources                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
$ surfkit delete agent agent01
Successfully deleted container: agent01
Agent 'agent01' deleted

ということで再度エージェントインストール。

$ surfkit create agent -t mariyadavydova/SurfSlicer -n agent01

うまく行けた模様。

waiting for agent to be ready...
waiting for agent to be ready...
waiting for agent to be ready...
Health check passed for 'agent01'

Successfully created agent 'agent01'
$ surfkit list agents
Name     Kind       Type                       Runtime    Status      Port
-------  ---------  -------------------------  ---------  --------  ------
agent01  TaskAgent  mariyadavydova/SurfSlicer  docker     running     9090
kun432kun432

次にエージェントが操作するデバイスの作成。デバイスは以下の3つから選択できる。

  • QEMU
  • AWS EC2
  • GCP GCE

それぞれ事前にセットアップが必要になる。EC2やGCEのほうが有料にはなるが環境汚さなくて簡単に捨てれそうで良さそうな印象だし、QEMUあんまりしらないのだけどなんとなく環境に影響されそうな気もしているが、一旦QEMUで。QEMUのインストール手順はここにある。

https://docs.hub.agentsea.ai/configuration/qemu

うちはHomebrewが入っているので以下でOKだった。

$ brew install qemu
$ qemu-system-x86_64 --version
QEMU emulator version 9.0.1
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers

ではデバイスを作成する。

$ surfkit create device --provider qemu -n desktop01

ディスクイメージがダウンロードされる。

Creating desktop 'desktop01' using 'qemu' provider
Downloading image 'https://storage.googleapis.com/agentsea-vms/jammy/latest/agentd-jammy.qcow2'...

起動するまで待つ。

No encryption key found. Generating a new one. This key will be stored in ~/.agentsea/keys/agentdesk_encryption_key
waiting for desktop to be ready...
waiting for desktop to be ready...
waiting for desktop to be ready...

うーん、待てど暮らせど終わらない。。。。一旦止めてやり直してみたけども変わらず。Apple Siliconだから、とかあるのかなぁ、色々見てるとサポートしているようには思えるのだけど。QEMUあんまり知らないんだよなぁ・・・・

ということで諦めてEC2にする。EC2を使う場合の設定手順は以下。

https://docs.hub.agentsea.ai/configuration/aws

自分の場合は既にAWS CLIが使える環境ができているので基本的に作業不要だった。

では改めて。

$ surfkit create device --provider ec2 -n desktop01
Creating desktop 'desktop01' using 'ec2' provider
Key pair 'desktop01' successfully imported.
(snip)
Exception: No default VPC found in this region.

んー、デフォルトVPCがない?デフォルトのリージョンはap-northeast-1でデフォルトVPCはあるのだけども。。。。

$ aws ec2 describe-vpcs
{
    "Vpcs": [
        {
            "CidrBlock": "172.31.0.0/16",
            "DhcpOptionsId": "dopt-XXXXXXXX",
            "State": "available",
            "VpcId": "vpc-XXXXXXXXXXXXXXXX",
            "OwnerId": "XXXXXXXX",
            "InstanceTenancy": "default",
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-assoc-XXXXXXXX",
                    "CidrBlock": "172.31.0.0/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "IsDefault": true,
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "default"
                }
            ]
        },

Tracebackを見ているとどうもus-east-1に作ろうとしているぽく見える。

│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │      _provider = <agentdesk.vm.ec2.EC2Provider object at 0x10e091250>     │                    │
│ │            cpu = 2                                                        │                    │
│ │           data = V1ProviderData(type='ec2', args={'region': 'us-east-1'}) │                    │
│ │           disk = '30gb'                                                   │                    │
│ │          image = None                                                     │                    │
│ │  load_provider = <function load_provider at 0x10e7176a0>                  │                    │
│ │         memory = 4                                                        │                    │
│ │           name = 'desktop01'                                              │                    │
│ │       provider = 'ec2'                                                    │                    │
│ │     reserve_ip = False                                                    │                    │
│ │           type = 'desktop'                                                │                    │
│ │ V1ProviderData = <class 'agentdesk.server.models.V1ProviderData'>         │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯

そういえばus-east-1にデフォルトVPCはなかった。

CLIのUsage見る限りはここを手動で変更する方法は見当たらない。

$ surfkit create device --help

 Usage: surfkit create device [OPTIONS]

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --name        -n                     TEXT     The name of the desktop to create. Defaults to a generated name. [default: None]                       │
│ --type        -t                     TEXT     The type of device to create. Options are 'desktop' [default: desktop]                                 │
│ --provider    -p                     TEXT     The provider type for the desktop. Options are 'ec2', 'gce', and 'qemu' [default: qemu]                │
│ --image                              TEXT     The image to use for the desktop. Defaults to Ubuntu Jammy. [default: None]                            │
│ --memory                             INTEGER  The amount of memory (in GB) for the desktop. [default: 4]                                             │
│ --cpu                                INTEGER  The number of CPU cores for the desktop. [default: 2]                                                  │
│ --disk                               TEXT     The disk size for the desktop. Format as '<size>gb'. [default: 30gb]                                   │
│ --reserve-ip      --no-reserve-ip             Whether to reserve an IP address for the desktop. [default: no-reserve-ip]                             │
│ --help                                        Show this message and exit.                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

ということでus-east-1にデフォルトVPCを作成。

$ aws ec2 --region us-east-1 create-default-vpc

再度デバイス作成。

$ surfkit create device --provider ec2 -n desktop01
ClientError: An error occurred (AuthFailure) when calling the RunInstances operation: Not authorized for images:
[ami-XXXXXXXXXXXX]

今度は違うエラーが。。。。うーん、イメージが公開されていないのか????

しょうがないのでGCPにする。手順は以下。GCPのアカウントはあったけど、Google-Cloud-SDKは設定してなかったので設定する。

https://docs.hub.agentsea.ai/configuration/gcp

  • GCPコンソールから新規プロジェクト作成。今回はagentsea-testとした
  • 作成したプロジェクトでCompute Engine APIを有効化
  • HomebrewでGoogle−Cloud−SDKをインストール
$ brew install --cask google-cloud-sdk
  • Google−Cloud−SDKの設定(gcloud init
    • ブラウザ経由でログイン(You must log in to continue. Would you like to log in (Y/n)? Y
    • 作成したプロジェクトを選択(Pick cloud project to use:
    • デフォルトのComputeリージョンを設定(Do you want to configure a default Compute Region and Zone? (Y/n)?
      • 今回はasia-northeast1-aを選択
  • 設定確認
$ gcloud config configurations list
NAME     IS_ACTIVE  ACCOUNT                PROJECT        COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
default  True       XXXX@XXXXX             agentsea-test  asia-northeast1-a     asia-northeast1
  • CLIのデフォルトのクレデンシャルの作成
$ gcloud auth application-default login
  • プロジェクトの設定
$ gcloud config set core/project agentsea-test
$ export GOOGLE_CLOUD_PROJECT=agentsea-test
  • 確認
# アカウントが表示されてACTIVE(*)になっていること
$ gcloud auth list
# 該当のプロジェクトでCompute Engine APIが有効になっていること
$ gcloud services list --enabled | grep compute.googleapis.com
# 作成したプロジェクトが設定されてデフォルトになっていること
$ gcloud config list

では再度デバイスを作成。

$ surfkit create device --provider gce -n desktop01

成功したーーーー

waiting for desktop to be ready...
waiting for desktop to be ready...
waiting for desktop to be ready...

successfully created desktop 'desktop01'

us-central-1aに作成されているらしい。デフォルトリージョンの設定はあんまり関係ないのかもね。

kun432kun432

トラッカーの作成。トラッカーは、Dockerコンテナ内でタスクを追跡するタスクサーバーらしい。

$ surfkit create tracker -n tracker01 -r docker

イメージがダウンロードされる

Pulling Docker image 'us-central1-docker.pkg.dev/agentsea-dev/taskara/api:latest'...
Layer 14aea17807c4:  40%|██████████▋                | 1048576/2647113 [00:00<00:00, 12376243.13it/s]

完了

Tracker 'tracker01' created using 'docker' runtime
kun432kun432

ではいよいよタスクを投げてみる。エージェント、デバイス・トラッカーを指定してsurfkit solveでクエリを投げる。ドキュメントの例の"French Duck"ってのがピンとこないので変えて、日本語にしてみた。

$ surfkit solve "最も一般的なお米の品種を検索して。" \
  --agent agent01 \
  --device desktop01 \
  --tracker tracker01

何やらエージェントがデバイスに接続しているのと、UI用の別のコンテナが起動しているのがわかる。

Found agent instance 'agent01'
finding device 'desktop01'...
starting proxy to vm...
proxy from local port 8000 to remote port 8000 started...
connected to desktop via agentd
found device 'desktop01'...
viewing device...
creating UI container...
Pulling Docker image 'us-central1-docker.pkg.dev/agentsea-dev/guisurfer/surfkit-ui:latest'...
Status update for latest: Pulling from agentsea-dev/guisurfer/surfkit-ui
Layer 1e60a453843e:  66%|█████████████████         | 32505856/49613402 [00:10<00:05, 3041443.44it/s]
Layer 51cd5f8f608f:  16%|████▎                     | 10485760/63994737 [00:09<00:49, 1080501.66it/s]

UIコンテナが起動した

waiting for UI container to start...

ブラウザが立ち上がってこんな画面が表示される。

のだけど、裏でコケてた。。。。

raise SystemError(f"could not connect to desktop, is agentd running? {e}")
SystemError: could not connect to desktop, is agentd running? HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /health (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x2aaabb4522c0>: Failed to establish a new connection: [Errno 111] Connection refused'))

んー、ログを見る限り、VMへポートフォワードしてるのだけど、ここの接続がうまくできていないっぽいように思える。

一応ポートは応答するようなのだけども。

$ curl localhost:8000/health
{"status":"ok"}

一旦止めて、リトライしてみたけども変わらずだった。

kun432kun432

全然関係ないけど、この画面内でデスクトップの操作はできた。おそらくここで自動で操作されている様を見るのだろうと思う。

kun432kun432

現時点でのまとめ

まあ開発中ということを置いといても、ちょっと環境への依存度が高いような印象を個人的に持った。DockerやKubernetesあたりのコンポーネントごとに役割・責任をもたせるみたいな思想はいいと思うんだけど、ここの連携でうまくいかないとなると意味がないように思える。

インフラ部分で躓いているので、AIエージェントプラットフォームとしてはそもそも評価できる状況ではない。自分の環境依存なのかもしれないけど、まだ時期尚早と感じた。

kun432kun432

後片付け。特にEC2やGCE使う場合はデバイス削除を忘れないように。

$ surfkit list agents
$ surfkit list devices
$ surfkit list trackers
$ surfkit delete agent XXXX
$ surfkit delete device XXXX
$ surfkit delete tracker XXXX

あと途中コケたりしてるのでDockerコンテナが残ってたりもするのでその辺りも消しておく。

$ docker ps
このスクラップは5ヶ月前にクローズされました