automata é inspirado na teoria de que o código é essencialmente uma forma de memória e, quando equipado com as ferramentas certas, a IA pode desenvolver capacidades em tempo real que podem potencialmente levar à criação de AGI. A palavra automata vem da palavra grega αὐτόματος, denotando "atuação própria, obstinada, automovimento", e a teoria automata é o estudo de máquinas abstratas e automata , bem como dos problemas computacionais que podem ser resolvidos usando-os. .
Mais informações seguem abaixo.
Siga estas etapas para configurar o ambiente automata
# Clone the repository
git clone [email protected]:emrgnt-cmplxty/ automata .git && cd automata /
# Initialize git submodules
git submodule update --init
# Install poetry and the project
pip3 install poetry && poetry install
# Configure the environment and setup files
poetry run automata configure
Extraia a imagem do Docker:
$ docker pull ghcr.io/emrgnt-cmplxty/ automata :latest
Execute a imagem do Docker:
$ docker run --name automata _container -it --rm -e OPENAI_API_KEY= < your_openai_key > -e GITHUB_API_KEY= < your_github_key > ghcr.io/emrgnt-cmplxty/ automata :latest
Isso iniciará um contêiner Docker com automata instalados e abrirá um shell interativo para você usar.
Os usuários do Windows podem precisar instalar o suporte a C++ por meio do "Desenvolvimento de desktop com C++" do Visual Studio para determinadas dependências.
Além disso, pode ser necessária a atualização para gcc-11 e g++-11. Isso pode ser feito executando os seguintes comandos:
# Adds the test toolchain repository, which contains newer versions of software
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
# Updates the list of packages on your system
sudo apt update
# Installs gcc-11 and g++-11 packages
sudo apt install gcc-11 g++-11
# Sets gcc-11 and g++-11 as the default gcc and g++ versions for your system
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 60 --slave /usr/bin/g++ g++ /usr/bin/g++-11
Os índices SCIP são necessários para executar a pesquisa automata . Esses índices são usados para criar o gráfico de código que relaciona símbolos por dependências na base de código. Novos índices são gerados e carregados periodicamente para a base de código automata , mas os programadores devem gerá-los manualmente se necessário para seu desenvolvimento local. Se você encontrar problemas, recomendamos consultar as instruções aqui.
# Install dependencies and run indexing on the local codebase
poetry run automata install-indexing
# Refresh the code embeddings (after making local changes)
poetry run automata run-code-embedding
# Refresh the documentation + embeddings
poetry run automata run-doc-embedding --embedding-level=2
Os comandos a seguir ilustram como executar o sistema com uma instrução trivial. É recomendável que sua execução inicial seja algo desse tipo para garantir que o sistema esteja funcionando conforme o esperado.
# Run a single agent w/ trivial instruction
poetry run automata run-agent --instructions= " Return true " --model=gpt-3.5-turbo-0613
# Run a single agent w/ a non-trivial instruction
poetry run automata run-agent --instructions= " Explain what automata Agent is and how it works, include an example to initialize an instance of automata Agent. "
automata funciona combinando modelos de linguagem grande, como GPT-4, com um banco de dados vetorial para formar um sistema integrado capaz de documentar, pesquisar e escrever código. O procedimento começa com a geração de documentação abrangente e instâncias de código. Isto, juntamente com as capacidades de pesquisa, forma a base para o potencial de autocodificação dos automata .
automata emprega ferramentas downstream para executar tarefas avançadas de codificação, construindo continuamente sua experiência e autonomia. Esta abordagem de autocodificação reflete o trabalho de um artesão autônomo, onde ferramentas e técnicas são consistentemente refinadas com base no feedback e na experiência acumulada.
Às vezes, a melhor maneira de compreender um sistema complicado é começar entendendo um exemplo básico. O exemplo a seguir ilustra como executar seu próprio agente automata . O agente será inicializado com uma instrução trivial e então tentará escrever código para cumprir a instrução. O agente então retornará o resultado de sua tentativa.
from automata . config . base import AgentConfigName , OpenAI automata AgentConfigBuilder
from automata . agent import OpenAI automata Agent
from automata . singletons . dependency_factory import dependency_factory
from automata . singletons . py_module_loader import py_module_loader
from automata . tools . factory import AgentToolFactory
# Initialize the module loader to the local directory
py_module_loader . initialize ()
# Construct the set of all dependencies that will be used to build the tools
toolkit_list = [ "context-oracle" ]
tool_dependencies = dependency_factory . build_dependencies_for_tools ( toolkit_list )
# Build the tools
tools = AgentToolFactory . build_tools ( toolkit_list , ** tool_dependencies )
# Build the agent config
agent_config = (
OpenAI automata AgentConfigBuilder . from_name ( " automata -main" )
. with_tools ( tools )
. with_model ( "gpt-4" )
. build ()
)
# Initialize and run the agent
instructions = "Explain how embeddings are used by the codebase"
agent = OpenAI automata Agent ( instructions , config = agent_config )
result = agent . run ()
Os embeddings nesta base de código são representados por classes como SymbolCodeEmbedding
e SymbolDocEmbedding
. Essas classes armazenam informações sobre um símbolo e seus respectivos embeddings, que são vetores que representam o símbolo no espaço de alta dimensão.
Exemplos dessas classes são: SymbolCodeEmbedding
uma classe usada para armazenar embeddings relacionados ao código de um símbolo. SymbolDocEmbedding
uma classe usada para armazenar embeddings relacionados à documentação de um símbolo.
Exemplo de código para criar uma instância de 'SymbolCodeEmbedding':
import numpy as np
from automata . symbol_embedding . base import SymbolCodeEmbedding
from automata . symbol . parser import parse_symbol
symbol_str = 'scip-python python automata 75482692a6fe30c72db516201a6f47d9fb4af065 ` automata .agent.agent_enums`/ActionIndicator#'
symbol = parse_symbol ( symbol_str )
source_code = 'symbol_source'
vector = np . array ([ 1 , 0 , 0 , 0 ])
embedding = SymbolCodeEmbedding ( symbol = symbol , source_code = source_code , vector = vector )
Exemplo de código para criar uma instância de 'SymbolDocEmbedding':
from automata . symbol_embedding . base import SymbolDocEmbedding
from automata . symbol . parser import parse_symbol
import numpy as np
symbol = parse_symbol ( 'your_symbol_here' )
document = 'A document string containing information about the symbol.'
vector = np . random . rand ( 10 )
symbol_doc_embedding = SymbolDocEmbedding ( symbol , document , vector )
Se você quiser contribuir com automata , revise as diretrizes de contribuição. Este projeto segue o código de conduta da automata . Ao participar, espera-se que você cumpra este código.
Usamos problemas do GitHub para rastrear solicitações e bugs. Consulte as discussões automata para perguntas e discussões gerais e direcione perguntas específicas.
O projeto automata se esforça para seguir as melhores práticas geralmente aceitas no desenvolvimento de software de código aberto.
O objetivo final do projeto automata é atingir um nível de proficiência onde ele possa projetar, escrever, testar e refinar de forma independente sistemas de software complexos. Isso inclui a capacidade de compreender e navegar em grandes bases de código, raciocinar sobre a arquitetura de software, otimizar o desempenho e até mesmo inventar novos algoritmos ou estruturas de dados quando necessário.
Embora a realização completa deste objetivo seja provavelmente um esforço complexo e de longo prazo, cada passo incremental em direção a ele não só tem o potencial de aumentar dramaticamente a produtividade dos programadores humanos, mas também de lançar luz sobre questões fundamentais em IA e computação. ciência.
automata é licenciado sob a Licença Apache 2.0.
Este projeto é uma extensão de um esforço inicial entre emrgnt-cmplxty e maks-ivanov que começou com este repositório.