Обобщенные исследования сверхинтеллекта, инфраструктура и автономные приложения
Следуйте за SuperAGI
Соединитесь с Создателем
Поделитесь этим репозиторием
AutoNode — это автономная компьютерная система, предназначенная для автоматизации веб-взаимодействий и процессов извлечения данных. Он использует передовые технологии, такие как модели OCR (оптическое распознавание символов), модели YOLO (вы смотрите только один раз) для обнаружения объектов, а также настраиваемый график сайта для программной навигации и взаимодействия с веб-страницами.
Чтобы начать работу с AutoNode, вам необходимо, чтобы в вашей системе был установлен Python. Выполните следующие действия, чтобы установить AutoNode:
git clone https://github.com/TransformerOptimus/AutoNode.git
cd AutoNode
Создайте копию .env.example и назовите ее .env. Повторите этот шаг для всех трех модулей — autonode, yolo, ocr.
Убедитесь, что Docker установлен в вашей системе. Вы можете скачать и установить его отсюда.
После запуска Docker Desktop выполните следующую команду в каталоге AutoNode:
docker compose -f docker-compose.yaml up --build
AutoNode работает на основе графа сайта, который определяет навигацию и действия, которые необходимо выполнить на веб-сайте. Вот базовый обзор того, как использовать AutoNode:
Определите свою цель: укажите, чего вы хотите достичь с помощью AutoNode, например извлечение данных или автоматизацию определенных веб-взаимодействий.
Подготовьте график сайта Autonode: создайте файл JSON, представляющий график сайта. На этом графике показаны узлы (веб-элементы) и края (действия), по которым AutoNode будет перемещаться и с которыми будет взаимодействовать.
Подготовьте приглашение планировщика инициатора AutoNode: используя структуру шаблона, указанную для подсказок планировщика в openai_prompts.py, для OpenAI LLM вы можете создать новый файл подсказок в каталоге подсказок со структурой <llm_prompts.py>
Запустите Автоноде:
AutoNode можно контролировать и использовать через его API, что позволяет пользователям программно автоматизировать веб-взаимодействие и задачи извлечения данных. Это руководство проведет вас через процесс отправки запросов в AutoNode с использованием конечной точки API.
Прежде чем начать, убедитесь, что AutoNode запущен на вашем локальном компьютере. После запуска AutoNode вы можете получить доступ к документации API, посетив:
http://localhost:8001/docs
Этот URL-адрес приведет вас к пользовательскому интерфейсу Swagger, где вы сможете найти подробную документацию по всем доступным конечным точкам API, включая ту, которая используется для запуска задач AutoNode.
Чтобы автоматизировать задачу с помощью AutoNode, вы будете использовать конечную точку /api/autonode/initiate. Эта конечная точка принимает полезную нагрузку JSON, которая определяет цель задачи, путь к JSON-файлу графа сайта, корневой узел для начала обхода и URL-адрес веб-сайта, с которым вы хотите взаимодействовать.
Вот структура полезных данных JSON, которые необходимо отправить в конечную точку /api/autonode/initiate
:
{
"site_url": "string",
"objective": "string",
"graph_path": "string",
"planer_prompt": "string"
}
Пример запроса: { "site_url": "https://app.apollo.io/#/login", "objective": "Найдите список из 20 генеральных директоров и технических директоров технологических компаний в Сан-Франциско. Войдите в Apollo, используя учетные данные. [email protected] и пароль dummypassword@123", "graph_path": "autonode/site_trees/apollo.json" "planner_prompt": "аполлон" }
site_url: URL-адрес веб-сайта, который AutoNode будет посещать и с которым будет взаимодействовать.
цель: цель, которую вы хотите достичь на веб-сайте. Это может быть что угодно: от извлечения данных до автоматизации серии веб-взаимодействий. Убедитесь, что вы предоставили инструкции по входу в систему вместе с учетными данными, если в вашем случае требуется вход в систему.
Graph_path: путь к файлу JSON, содержащему график вашего сайта. Граф сайта определяет структуру и поток навигации веб-сайта для AutoNode.
planner_prompt: ключ для приглашения к планированию. Вы можете изменить или сопоставить новый ключ в Planning_agent.py для приглашения планировщика AutoNode.
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 для обнаружения объектов и OCR для распознавания текста на веб-страницах. Эти модели имеют решающее значение для идентификации кликабельных элементов, чтения текста с изображений и динамического взаимодействия с веб-страницами.
Мы предоставляем некоторые общие модели yolo, обученные на YOLO-V8
на тысячах веб-скриншотов. Перейдите в - yolo/web_detection_models/
dir, чтобы найти их.
Соберите набор данных. Соберите изображения веб-элементов, которые вы хотите обнаружить, и добавьте к ним примечания с помощью ограничивающих рамок.
Подготовьте набор данных: разделите набор данных на обучающий и проверочный наборы.
Обучение модели. Используйте сценарий обучения YOLO для обучения модели на подготовленном наборе данных. Настройте параметры тренировки в соответствии с вашими потребностями.
Оцените модель. Проверьте обученную модель на отдельном наборе тестов, чтобы оценить ее производительность.
Интеграция с AutoNode. После обучения интегрируйте свою пользовательскую модель YOLO с AutoNode, указав путь к модели в конфигурации.
Если на вашем локальном компьютере недостаточно ресурсов, вы можете разместить модули OCR и YOLO на любом облачном сервере. Можно предпринять следующие шаги:
В файле ocr/.env добавьте USE_REMOTE_OCR=True и установите URL-адрес удаленной службы в OCR_REMOTE_URL.
В файле yolo/.env добавьте USE_REMOTE_YOLO=True и установите URL-адрес удаленной службы в YOLO_REMOTE_URL.
Обновите путь к модели веб-обнаружения yolo в файле yolo/.env, добавьте SAHI_MODEL_PATH и ULTRALYTICS_MODEL_PATH. Пример: SAHI_MODEL_PATH = yolo/web_detection_models/twitter.pt
Граф сайта — это файл JSON, который описывает структуру и поток навигации веб-сайта для AutoNode. Вот как его приготовить:
Определите веб-элементы: перемещайтесь по целевому веб-сайту и определите ключевые элементы, с которыми вы хотите взаимодействовать, такие как кнопки, текстовые поля и ссылки.
Определить узлы: для каждого веб-элемента определите узел в файле JSON. Включите такие свойства, как имя_узла, тип_элемента_действия, местоположение и is_type.
Определить края: укажите отношения между узлами, используя свойства смежных_то и смежных_из, чтобы представить поток навигации.
Включить сведения о действии. Для узлов, требующих ввода или щелчка, укажите дополнительные сведения, такие как 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": []
}
}
Снимки экрана на каждом узле для обнаружения веб-элементов хранятся в каталоге запросов в корневой папке. Вы можете сохранить их в учетной записи 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)
и передайте s3_client=self.s3_client в строке 84
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()