Automata 的灵感来源于一种理论:代码本质上是一种记忆形式。当配备合适的工具时,AI 可以发展出实时能力,这有可能导向通用人工智能(AGI)的诞生。Automata 一词源于希腊语 αὐτόματος,意为“自我行动、自我意愿、自我移动”。Automata theory 是研究抽象机器、自动机 以及可用它们解决的计算问题的学科。
更多信息如下。
https://github.com/emrgnt-cmplxty/Automata/assets/68796651/2e1ceb8c-ac93-432b-af42-c383ea7607d7
按照以下步骤设置 Automata 环境:
# 克隆仓库
git clone git@github.com:emrgnt-cmplxty/Automata.git && cd Automata/
# 初始化 Git 子模块
git submodule update --init
# 安装 poetry 和项目依赖
pip3 install poetry && poetry install
# 配置环境和设置文件
poetry run automata configure
$ docker pull ghcr.io/emrgnt-cmplxty/automata:latest
运行 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
这将启动一个安装了 Automata 的 Docker 容器,并为你打开一个交互式 shell 以供使用。
# 添加包含较新软件版本的测试工具链仓库
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
# 更新系统软件包列表
sudo apt update
# 安装 gcc-11 和 g++-11 包
sudo apt install gcc-11 g++-11
# 将 gcc-11 和 g++-11 设置为系统的默认 gcc 和 g++ 版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 60 --slave /usr/bin/g++ g++ /usr/bin/g++-11
运行 Automata 搜索需要 SCIP 索引。这些索引用于创建代码图,该图通过依赖关系关联代码库中的符号。Automata 代码库会定期生成并上传新的索引,但开发人员如果需要,必须手动为本地开发生成索引。如果遇到问题,建议参考这里的说明。
# 安装依赖项并对本地代码库运行索引
poetry run automata install-indexing
# 刷新代码嵌入向量(在本地更改后)
poetry run automata run-code-embedding
# 刷新文档和嵌入向量
poetry run automata run-doc-embedding --embedding-level=2
以下命令说明了如何使用一个简单的指令运行系统。建议初次运行时使用此类指令,以确保系统按预期工作。
# 运行单个代理,使用简单指令
poetry run automata run-agent --instructions="Return true" --model=gpt-3.5-turbo-0613
# 运行单个代理,使用非简单指令
poetry run automata run-agent --instructions="解释什么是 AutomataAgent 以及它是如何工作的,并包含一个初始化 AutomataAgent 实例的示例。"
Automata 通过将大型语言模型(如 GPT-4)与向量数据库相结合,形成一个集成的系统,能够记录、搜索和编写代码。该过程始于生成全面的文档和代码实例。这,再加上搜索能力,构成了 Automata 自我编码潜力的基础。
Automata 利用下游工具来执行高级编码任务,不断积累其专业知识和自主性。这种自我编码方法类似于自主工匠的工作,即根据反馈和积累的经验不断改进工具和技术。
有时,理解一个复杂系统的最好方法是从理解一个基本示例开始。以下示例说明了如何运行你自己的 Automata 代理。该代理将使用一个简单指令进行初始化,然后尝试编写代码来完成该指令。最后,代理将返回其尝试的结果。
from automata.config.base import AgentConfigName, OpenAIAutomataAgentConfigBuilder
from automata.agent import OpenAIAutomataAgent
from automata.singletons.dependency_factory import dependency_factory
from automata.singletons.py_module_loader import py_module_loader
from automata.tools.factory import AgentToolFactory
# 将模块加载器初始化为本地目录
py_module_loader.initialize()
# 构建用于构建工具的所有依赖项集合
toolkit_list = ["context-oracle"]
tool_dependencies = dependency_factory.build_dependencies_for_tools(toolkit_list)
# 构建工具
tools = AgentToolFactory.build_tools(toolkit_list, **tool_dependencies)
# 构建代理配置
agent_config = (
OpenAIAutomataAgentConfigBuilder.from_name("automata-main")
.with_tools(tools)
.with_model("gpt-4")
.build()
)
# 初始化并运行代理
instructions = "解释代码库如何使用嵌入向量"
agent = OpenAIAutomataAgent(instructions, config=agent_config)
result = agent.run()
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)
创建 `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)
如果你想为 Automata 做贡献,请务必查阅贡献指南。本项目遵循 Automata 的行为准则。参与其中,即表示你承诺遵守此准则。
我们使用 GitHub issues 来跟踪功能请求和错误报告,请访问 Automata Discussions 进行一般性问题和讨论,并请将具体问题定向到该处。
Automata 项目致力于遵循开源软件开发中普遍接受的最佳实践。
Automata 项目的最终目标是达到能够独立设计、编写、测试和优化复杂软件系统的熟练程度。这包括理解和导航大型代码库、推理软件架构、优化性能,甚至在必要时发明新的算法或数据结构。
虽然完全实现这一目标可能是一项复杂且长期的工作,但朝着这个方向迈出的每一步,不仅有可能极大地提高人类程序员的生产力,也有助于阐明人工智能和计算机科学中的基本问题。
Automata 采用 Apache License 2.0 许可证。
本项目是 emrgnt-cmplxty 和 maks-ivanov 之间最初合作的延伸,始于这个仓库。