Pesquisa generalizada de superinteligência, infraestrutura e aplicativos autônomos
Siga a SuperAGI
Conecte-se com o Criador
Compartilhe este repositório
AutoNode é um sistema de computador autônomo projetado para automatizar interações na web e processos de extração de dados. Ele aproveita tecnologias avançadas como OCR (reconhecimento óptico de caracteres), modelos YOLO (você só olha uma vez) para detecção de objetos e um gráfico de site personalizado para navegar e interagir com páginas da web de forma programática.
Para começar a usar o AutoNode, você precisa ter o Python instalado em seu sistema. Siga estas etapas para instalar o AutoNode:
git clone https://github.com/TransformerOptimus/AutoNode.git
cd AutoNode
Crie uma cópia de .env.example e nomeie-a como .env. Repita esta etapa para todos os três módulos – autonode, yolo, ocr
Certifique-se de que o Docker esteja instalado em seu sistema. Você pode baixá-lo e instalá-lo aqui.
Depois de executar o Docker Desktop, execute o seguinte comando no diretório AutoNode:
docker compose -f docker-compose.yaml up --build
O AutoNode opera com base em um site-graph que define a navegação e as ações a serem realizadas em um site. Aqui está uma visão geral básica de como usar o AutoNode:
Defina seu objetivo: especifique o que você deseja alcançar com o AutoNode, como extração de dados ou automação de interações específicas da web.
Prepare seu Autonode-Site-Graph: Crie um arquivo JSON que represente o gráfico do site. Este gráfico descreve os nós (elementos da web) e arestas (ações) com os quais o AutoNode navegará e interagirá.
Prepare o prompt do planejador do iniciador AutoNode: usando a estrutura de modelo fornecida para prompts do planejador em openai_prompts.py, para OpenAI LLM, você pode criar um novo arquivo de prompt no diretório de prompts com estrutura <llm_prompts.py>
Execute o AutoNode:
O AutoNode pode ser controlado e utilizado por meio de sua API, permitindo aos usuários automatizar interações na web e tarefas de extração de dados de forma programática. Este guia orientará você no processo de envio de solicitações ao AutoNode usando seu endpoint de API.
Antes de começar, certifique-se de que o AutoNode esteja em execução na sua máquina local. Assim que o AutoNode estiver instalado e funcionando, você poderá acessar a documentação da API visitando:
http://localhost:8001/docs
Este URL o levará à UI do Swagger, onde você pode encontrar documentação detalhada sobre todos os endpoints de API disponíveis, incluindo aquele usado para iniciar tarefas do AutoNode.
Para automatizar uma tarefa com AutoNode, você usará o endpoint /api/autonode/initiate. Este endpoint aceita uma carga JSON que especifica o objetivo da tarefa, o caminho para o arquivo JSON do gráfico do site, o nó raiz para iniciar a travessia e a URL do site com o qual você deseja interagir.
Aqui está a estrutura da carga JSON que você precisa enviar para o endpoint /api/autonode/initiate
:
{
"site_url": "string",
"objective": "string",
"graph_path": "string",
"planer_prompt": "string"
}
Solicitação de exemplo: { "site_url": "https://app.apollo.io/#/login", "objective": "Encontre a lista de 20 ceo, cto de empresas de tecnologia em São Francisco. Faça login no Apollo usando os créditos [email protected] e senha dummypassword@123", "graph_path": "autonode/site_trees/apollo.json" "planner_prompt": "apolo" }
site_url: o URL do site que o AutoNode visitará e com o qual interagirá.
objetivo: O objetivo que você deseja alcançar no site. Isso pode ser qualquer coisa, desde a extração de dados até a automatização de uma série de interações na web. Certifique-se de fornecer as instruções de login junto com as credenciais se o login for necessário em seu caso de uso
graph_path: o caminho para o arquivo JSON que contém o gráfico do seu site. O gráfico do site define a estrutura e o fluxo de navegação do site para AutoNode.
planner_prompt: A chave para o prompt de planejamento. Você pode alterar ou mapear a nova chave em Planning_agent.py para o prompt do planejador 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 utiliza modelos YOLO para detecção de objetos e OCR para reconhecimento de texto em páginas da web. Esses modelos são cruciais para identificar elementos clicáveis, ler texto de imagens e interagir dinamicamente com páginas da web.
Estamos fornecendo alguns modelos gerais do yolo treinados no YOLO-V8
em milhares de capturas de tela da web. Navegue até - yolo/web_detection_models/
dir para encontrá-los
Colete um conjunto de dados: reúna imagens dos elementos da web que deseja detectar e anote-os com caixas delimitadoras.
Prepare o conjunto de dados: divida seu conjunto de dados em conjuntos de treinamento e validação.
Treine o modelo: use um script de treinamento YOLO para treinar seu modelo no conjunto de dados preparado. Ajuste os parâmetros de treinamento de acordo com suas necessidades.
Avalie o modelo: teste seu modelo treinado em um conjunto de testes separado para avaliar seu desempenho.
Integrar com AutoNode: Depois de treinado, integre seu modelo YOLO personalizado com AutoNode especificando o caminho do modelo na configuração.
Se você não tiver recursos suficientes em sua máquina local, poderá hospedar os módulos OCR e YOLO em qualquer servidor em nuvem. As seguintes etapas podem ser executadas:
Em seu arquivo ocr/.env, adicione USE_REMOTE_OCR=True e defina a URL para o serviço remoto em OCR_REMOTE_URL
Em seu arquivo yolo/.env, adicione USE_REMOTE_YOLO=True e defina a URL para o serviço remoto em YOLO_REMOTE_URL
Atualize o caminho do modelo de detecção da web yolo em seu arquivo yolo/.env, adicione SAHI_MODEL_PATH e ULTRALYTICS_MODEL_PATH. Exemplo: SAHI_MODEL_PATH = yolo/web_detection_models/twitter.pt
O site-graph é um arquivo JSON que descreve a estrutura e o fluxo de navegação de um site para AutoNode. Veja como prepará-lo:
Identifique os elementos da web: navegue pelo site de destino e identifique os principais elementos com os quais deseja interagir, como botões, caixas de texto e links.
Definir nós: para cada elemento da web, defina um nó no arquivo JSON. Inclua propriedades como node_name, actionable_element_type, location e is_type.
Definir arestas: especifique os relacionamentos entre nós usando as propriedades adjacente_to e adjacente_from para representar o fluxo de navegação.
Incluir detalhes da ação: para nós que exigem digitação ou clique, forneça detalhes adicionais como type_description ou click_action.
Exemplo de um gráfico de site simples:
{
"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": []
}
}
Capturas de tela em cada nó para detecção de elementos da web são armazenadas no diretório de solicitações na pasta raiz. Você pode armazená-los em uma conta AWS s3 caso deseje, ou persisti-los localmente ou nenhum deles conforme sua escolha. Para casos de uso que exigem o download da saída, o conteúdo para download (como a saída no Apollo) precisa ser armazenado local ou remotamente.
# 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)
e passe s3_client=self.s3_client na linha 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()