automata ist von der Theorie inspiriert, dass Code im Wesentlichen eine Form des Gedächtnisses ist und dass KI, wenn sie mit den richtigen Werkzeugen ausgestattet ist, Echtzeitfähigkeiten entwickeln kann, die möglicherweise zur Schaffung von AGI führen können. Das Wort automata kommt vom griechischen Wort αὐτόματος und bedeutet „selbsttätig, eigenwillig, sich selbst bewegend“. automata ist das Studium abstrakter Maschinen und automata sowie der Rechenprobleme, die mit ihnen gelöst werden können .
Weitere Informationen folgen weiter unten.
Befolgen Sie diese Schritte, um die automata einzurichten
# 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
Ziehen Sie das Docker-Image:
$ docker pull ghcr.io/emrgnt-cmplxty/ automata :latest
Führen Sie das Docker-Image aus:
$ 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
Dadurch wird ein Docker-Container mit installierten automata gestartet und eine interaktive Shell geöffnet, die Sie verwenden können.
Für bestimmte Abhängigkeiten müssen Windows-Benutzer möglicherweise die C++-Unterstützung über „Desktop-Entwicklung mit C++“ von Visual Studio installieren.
Darüber hinaus ist möglicherweise eine Aktualisierung auf gcc-11 und g++-11 erforderlich. Dies kann durch Ausführen der folgenden Befehle erfolgen:
# 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
Zur Ausführung der automata sind SCIP-Indizes erforderlich. Diese Indizes werden zum Erstellen des Codediagramms verwendet, das Symbole durch Abhängigkeiten in der Codebasis verknüpft. Für die automata -Codebasis werden regelmäßig neue Indizes generiert und hochgeladen, Programmierer müssen diese jedoch bei Bedarf für ihre lokale Entwicklung manuell generieren. Wenn Sie auf Probleme stoßen, empfehlen wir Ihnen, die Anweisungen hier zu lesen.
# 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
Die folgenden Befehle veranschaulichen, wie das System mit einer trivialen Anweisung ausgeführt wird. Es wird empfohlen, dass Ihr erster Start etwas in dieser Art ist, um sicherzustellen, dass das System wie erwartet funktioniert.
# 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 funktionieren durch die Kombination großer Sprachmodelle wie GPT-4 mit einer Vektordatenbank, um ein integriertes System zu bilden, das Code dokumentieren, durchsuchen und schreiben kann. Das Verfahren beginnt mit der Generierung umfassender Dokumentation und Codeinstanzen. Dies bildet in Verbindung mit Suchfunktionen die Grundlage für das Selbstcodierungspotenzial von automata .
automata nutzt nachgelagerte Tools, um anspruchsvolle Codierungsaufgaben auszuführen und baut so sein Fachwissen und seine Autonomie kontinuierlich aus. Dieser selbstkodierende Ansatz spiegelt die Arbeit eines autonomen Handwerkers wider, bei dem Werkzeuge und Techniken auf der Grundlage von Feedback und gesammelter Erfahrung kontinuierlich verfeinert werden.
Manchmal ist es am besten, ein kompliziertes System zu verstehen, indem man zunächst ein einfaches Beispiel versteht. Das folgende Beispiel veranschaulicht, wie Sie Ihren eigenen automata -Agenten ausführen. Der Agent wird mit einer einfachen Anweisung initialisiert und versucht dann, Code zu schreiben, um die Anweisung auszuführen. Der Agent gibt dann das Ergebnis seines Versuchs zurück.
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 ()
Einbettungen in dieser Codebasis werden durch Klassen wie SymbolCodeEmbedding
und SymbolDocEmbedding
dargestellt. Diese Klassen speichern Informationen über ein Symbol und seine jeweiligen Einbettungen, bei denen es sich um Vektoren handelt, die das Symbol im hochdimensionalen Raum darstellen.
Beispiele für diese Klassen sind: SymbolCodeEmbedding
eine Klasse zum Speichern von Einbettungen im Zusammenhang mit dem Code eines Symbols. SymbolDocEmbedding
eine Klasse, die zum Speichern von Einbettungen im Zusammenhang mit der Dokumentation eines Symbols verwendet wird.
Codebeispiel zum Erstellen einer Instanz von „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 )
Codebeispiel zum Erstellen einer Instanz von „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 )
Wenn Sie zu automata beitragen möchten, lesen Sie unbedingt die Beitragsrichtlinien. Dieses Projekt hält sich an den Verhaltenskodex von automata . Durch Ihre Teilnahme wird von Ihnen erwartet, dass Sie diesen Kodex einhalten.
Wir verwenden GitHub-Probleme zur Verfolgung von Anfragen und Fehlern. Allgemeine Fragen und Diskussionen finden Sie in automata Diskussionen. Bitte richten Sie auch spezifische Fragen.
Das automata ist bestrebt, allgemein anerkannte Best Practices in der Open-Source-Softwareentwicklung einzuhalten.
Das ultimative Ziel des automata besteht darin, ein Kompetenzniveau zu erreichen, das es ihm ermöglicht, selbstständig komplexe Softwaresysteme zu entwerfen, zu schreiben, zu testen und zu verfeinern. Dazu gehört die Fähigkeit, große Codebasen zu verstehen und darin zu navigieren, Überlegungen zur Softwarearchitektur anzustellen, die Leistung zu optimieren und bei Bedarf sogar neue Algorithmen oder Datenstrukturen zu erfinden.
Während die vollständige Verwirklichung dieses Ziels wahrscheinlich ein komplexes und langfristiges Unterfangen sein wird, hat jeder kleine Schritt in diese Richtung nicht nur das Potenzial, die Produktivität menschlicher Programmierer dramatisch zu steigern, sondern auch Licht auf grundlegende Fragen in der KI und im Computer zu werfen Wissenschaft.
automata ist unter der Apache-Lizenz 2.0 lizenziert.
Dieses Projekt ist eine Erweiterung einer anfänglichen Anstrengung zwischen emrgnt-cmplxty und maks-ivanov, die mit diesem Repository begann.