一般化されたスーパーインテリジェンスの研究、インフラストラクチャ、自律型アプリ
スーパーAGIをフォローする
クリエイターとつながる
このリポジトリを共有する
AutoNode は、Web 対話とデータ抽出プロセスを自動化するように設計された自己オペレーティング コンピューター システムです。 OCR (光学式文字認識)、オブジェクト検出のための YOLO (You Only Look Once) モデル、プログラムで Web ページをナビゲートして操作するためのカスタム サイトグラフなどの高度なテクノロジを活用します。
AutoNode を使い始めるには、システムに Python がインストールされている必要があります。 AutoNode をインストールするには、次の手順に従います。
git clone https://github.com/TransformerOptimus/AutoNode.git
cd AutoNode
.env.example のコピーを作成し、 .env という名前を付けます。 autonode、yolo、ocr の 3 つのモジュールすべてに対してこの手順を繰り返します。
Docker がシステムにインストールされていることを確認してください。ここからダウンロードしてインストールできます。
Docker Desktop を実行したら、AutoNode ディレクトリで次のコマンドを実行します。
docker compose -f docker-compose.yaml up --build
AutoNode は、Web サイト上で実行されるナビゲーションとアクションを定義するサイトグラフに基づいて動作します。 AutoNode の使用方法の基本的な概要は次のとおりです。
目的の定義: データ抽出や特定の Web インタラクションの自動化など、AutoNode で達成したいことを指定します。
Autonode サイト グラフの準備: サイト グラフを表す JSON ファイルを作成します。このグラフは、AutoNode がナビゲートして対話するノード (Web 要素) とエッジ (アクション) の概要を示します。
AutoNode イニシエーター プランナー プロンプトを準備する: openai_prompts.py のプランナー プロンプト用に指定されたテンプレート構造を使用して、OpenAI LLM 用に、<llm_prompts.py> 構造を持つ新しいプロンプト ファイルをプロンプト ディレクトリに作成できます。
AutoNode を実行します。
AutoNode は API を通じて制御および利用できるため、ユーザーは Web 操作やデータ抽出タスクをプログラムで自動化できます。このガイドでは、API エンドポイントを使用して AutoNode にリクエストを送信するプロセスについて説明します。
開始する前に、AutoNode がローカル マシンで実行されていることを確認してください。 AutoNode が起動して実行されたら、次の場所にアクセスして API ドキュメントにアクセスできます。
http://localhost:8001/docs
この URL は Swagger UI に移動します。ここでは、AutoNode タスクの開始に使用されるエンドポイントを含む、利用可能なすべての API エンドポイントに関する詳細なドキュメントを見つけることができます。
AutoNode でタスクを自動化するには、/api/autonode/initiate エンドポイントを使用します。このエンドポイントは、タスクの目的、サイトグラフ JSON ファイルへのパス、トラバーサルを開始するルート ノード、および対話する Web サイトの URL を指定する JSON ペイロードを受け入れます。
/api/autonode/initiate
エンドポイントに送信する必要がある JSON ペイロードの構造は次のとおりです。
{
"site_url": "string",
"objective": "string",
"graph_path": "string",
"planer_prompt": "string"
}
リクエストの例: { "site_url": "https://app.apollo.io/#/login", "objective": "サンフランシスコのテクノロジー企業の CEO、CTO 20 人のリストを検索します。creds を使用して apollo にログインします。 [email protected] とパスワード dummypassword@123", "graph_path": "autonode/site_trees/apollo.json" "planner_prompt": "アポロ" }
site_url: AutoNode がアクセスして対話する Web サイトの URL。
目的: Web サイトで達成したい目標。これには、データ抽出から一連の Web インタラクションの自動化まで、あらゆるものが含まれます。ユースケースでログインが必要な場合は、ログイン手順と資格情報を必ず提供してください。
graph_path: サイトグラフを含む JSON ファイルへのパス。サイトグラフは、AutoNode の Web サイトの構造とナビゲーション フローを定義します。
planner_prompt: 計画プロンプトのキー。 AutoNode プランナー プロンプトの planning_agent.py で新しいキーを変更またはマップできます。
curl -X 'POST'
'http://localhost:8001/api/autonode/initiate'
-H 'accept: application/json'
-H 'Content-Type: application/json'
-d '{
"site_url": "https://example.com/products",
"objective": "Extract product details",
"graph_path": "/path/to/your/site-graph.json"
"planner_prompt": "planner_key"
}'
AutoNode は、オブジェクト検出に YOLO モデルを利用し、Web ページ上のテキスト認識に OCR を利用します。これらのモデルは、クリック可能な要素を識別し、画像からテキストを読み取り、Web ページと動的に対話するために重要です。
私たちは、何千もの Web スクリーンショットを使用してYOLO-V8
でトレーニングされたいくつかの一般的な yolo モデルを提供しています。これらを見つけるには、 yolo/web_detection_models/
dir に移動してください。
データセットを収集する: 検出する Web 要素の画像を収集し、境界ボックスで注釈を付けます。
データセットを準備する: データセットをトレーニング セットと検証セットに分割します。
モデルをトレーニングする: YOLO トレーニング スクリプトを使用して、準備されたデータセットでモデルをトレーニングします。ニーズに応じてトレーニングパラメータを調整します。
モデルを評価する: トレーニングされたモデルを別のテスト セットでテストして、そのパフォーマンスを評価します。
AutoNode との統合: トレーニングが完了したら、構成でモデル パスを指定してカスタム YOLO モデルを AutoNode と統合します。
ローカル マシンに十分なリソースがない場合は、任意のクラウド サーバーで OCR および YOLO モジュールをホストできます。次の手順を実行できます。
ocr/.env ファイルに USE_REMOTE_OCR=True を追加し、OCR_REMOTE_URL にリモート サービスの URL を設定します。
yolo/.env ファイルに USE_REMOTE_YOLO=True を追加し、YOLO_REMOTE_URL にリモート サービスの URL を設定します。
yolo/.env ファイル内の yolo Web 検出モデルのパスを更新し、SAHI_MODEL_PATH と ULTRALYTICS_MODEL_PATH を追加します。例: SAHI_MODEL_PATH = yolo/web_detection_models/twitter.pt
サイトグラフは、AutoNode の Web サイトの構造とナビゲーション フローを記述する JSON ファイルです。準備方法は次のとおりです。
Web 要素を特定する: ターゲット Web サイト内を移動し、ボタン、テキスト ボックス、リンクなど、操作する主要な要素を特定します。
ノードの定義: Web 要素ごとに、JSON ファイルでノードを定義します。 node_name、actionable_element_type、location、is_type などのプロパティを含めます。
エッジの定義: ナビゲーション フローを表すために、隣接する_toプロパティと隣接する_fromプロパティを使用してノード間の関係を指定します。
アクションの詳細を含める: 入力またはクリックが必要なノードの場合は、type_description や click_action などの追加の詳細を指定します。
単純なサイトグラフの例:
{
"1": {
"node_type": "clickable_and_typeable",
"node_name": "Login Button",
"actionable_element_type": "button",
"location": [100, 200],
"is_type": false,
"adjacent_to": ["2"]
},
"2": {
"node_type": "clickable_and_typeable",
"node_name": "Username Field",
"actionable_element_type": "textbox",
"location": [150, 250],
"is_type": true,
"type_description": "Enter username here",
"adjacent_to": []
}
}
Web 要素検出用のすべてのノードのスクリーンショットは、ルート フォルダーの request ディレクトリに保存されます。必要に応じて、それらを AWS s3 アカウントに保存することも、ローカルに保存することも、選択に従ってどちらも保存しないこともできます。出力のダウンロードが必要なユースケースの場合、ダウンロード可能なコンテンツ (apollo の出力など) をローカルまたはリモートに保存する必要があります。
# Uncomment If you have aws account and want to store result in your AWS S3
# self.s3_client = S3Helper(access_key=self.config.AWS_ACCESS_KEY_ID,
# secret_key=self.config.AWS_SECRET_ACCESS_KEY,
# bucket_name=self.config.bucket_name)
84 行目で s3_client=self.s3_client を渡します
s3_client=None
# Uncomment If you have aws account and want to store result in your AWS S3
s3_client.upload_file(file_path=screenshot_filename)
# Uncomment If you have aws account and want to store result in your AWS S3
s3_client.upload_file(file_path=download_file_path)
finally:
# Comment if you don't want to delete screenshots locally
if os.path.exists(screenshots_dir):
logger.info(f"Deleting request directory {screenshots_dir}")
shutil.rmtree(screenshots_dir)
session.close()