数行のコードでAIエージェントがブラウザを操作！Python×Sentientを用いたブラウザ制御

## はじめに

近年人工知能（AI）の進化により、さまざまなタスクを自動化するためのツールやライブラリが登場しています。その中でも、SentientはPythonを用いてブラウザを制御するエージェントを簡単に実装できる強力なライブラリです。

本記事では、Sentientの基本的な使い方を解説します。


https://github.com/sentient-engineering/sentient

:::note warn 

- 注意事項
    - 利用規約の遵守: 使用するAIプロバイダーやブラウザの利用規約を遵守してください。特に、スクレイピングや自動操作に関する規約に注意が必要です。
    - 著作権: 著作権で保護されたコンテンツを無断で操作・再生しないでください。
:::

## 事前準備

### ライブラリのインストール
ターミナルを開き、以下のコマンドを実行します。
```python 
(venv)% pip install sentient
```

### ブラウザをデバッグモードで起動
Sentientはブラウザを制御するために、ブラウザをデバッグモードで起動する必要があります。以下の手順でブラウザをデバックモードで起動します。

- Macの場合

```bash
% sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
```

- Macの場合(Brave)

```bash
% sudo /Applications/Brave\ Browser.app/Contents/MacOS/Brave\ Browser --remote-debugging-port=9222 --guest
```

- Linuxの場合

```bash
$ google-chrome --remote-debugging-port=9222
```


- Windowsの場合
```
> "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-por
```


### APIキーの設定
`OPENAI_API_KEY`を取得し、環境変数に設定します。

```bash 
% export OPENAI_API_KEY="sk-APIキー"
```

OPENAI以外のプロバイダー(ex.AnthropicやOllama)でも設定可能です。

https://github.com/sentient-engineering/sentient

## 実行例: Youtubeの自動実行
### プログラム
Sentientを用いてYoutubeで特定の動画を流すプログラムは以下です。

```python 
from sentient import sentient
import asyncio

custom_instructions = """
1. Google検索をせず、直接YouTubeで検索してください。
"""
custom_goal = "XXXの動画を再生してください。" #適宜変更

result = asyncio.run(sentient.invoke(
    goal=custom_goal,
    task_instructions=custom_instructions,
    provider="openai",
    model="gpt-4o-mini"))
```


`sentient.invoke`における`goal`にはタスクの完了状態、`task_instructions`にはタスクの実行における具体的な指示、`provider`にはプロバイダー名、`model`にはモデル名を入力します。

特にタスクごとに具体的な指示を設定可能ということで、ある程度カスタマイズ性に優れています。


### 実行ログ

プログラムを実行すると、以下のような初期状態のログが出力されます。(結果の一部をXXXでマスキングしています。)

```bash 
Starting orchestrator
Browser started and ready
Executing command XXXの動画を再生してください。
==================================================
Current State: agentq_base
Agent: sentient
Current Thought:
Plan: none
Completed Tasks: none
==================================================
```


Current Thoughtは現状の思考、Planは行動計画、Current Taskは現在行っているタスク、Completed Tasksは完了したタスクを意味します。（初期状態は何もなし。）

タスクの実行具合によって以下のように状態が変わります。（以下のログは追加で出力されます。）

```bash 
==================================================
Current State: State.BASE_AGENT
Agent: sentient
Current Thought: I am tasked with playing a XXX video on YouTube. Since the current page is the Google homepage, I will navigate directly to YouTube's website instead of searching for it. This way, I can avoid unnecessary steps. Once on YouTube, I will search for XXX's videos by entering his name in the search bar and clicking the search button. Finally, I will select one of the videos to play it, achieving the objective of playing a XXX video.
Plan:
 1. Navigate to www.youtube.com
 2. List interaction options available on YouTube relevant for search and video playback.
 3. Enter 'XXX' in the search bar.
 4. Click the search button to find XXX videos.
 5. Select one of XXX videos from the results to play it.
 6. Confirm that the video is playing.
Current Task: Navigate to www.youtube.com
Completed Tasks:
  [✓] 1. Navigate to www.youtube.com
==================================================
```

また実際のアクション(ex.ページの移動や画面クリック)ログは以下のように出力されます。

```bash 
Action - GOTO
Action results: ['Page loaded: https://www.youtube.com/, Title: YouTube']
Base Agent Q has updated the memory.
```

実際にデバックモードで起動しているGoogle Chromeのブラウザが自動実行されていることが確認できれば、動作確認完了です:tada:


## まとめ
Sentientは、Pythonを用いてブラウザを自動制御する強力なツールです。

今回はYoutubeの自動実行のみに触れていますが、シンプルなコードかつ自然言語の指示を用いてエージェントを実行できるため、日常的なタスクの自動化や特定のアクションを実行するボットの作成が容易になると思います。

ただし各サイトの利用規約やコンテンツの著作権等を十分に確認してプログラムを実行してください。