Automata:未来是自编的
社交媒体
Automata 的目标是发展为一个完全自主、自编程的人工智能系统。
Automata 的灵感来源于代码本质上是一种记忆的理论,当配备了合适的工具时,人工智能可以发展实时能力,这可能会导致人工通用智能(AGI)的出现。Automata 这个词来自希腊词 αὐτόματος,表示“自我动作、自我意志、自我移动”,而自动机理论 是研究抽象机器和自动机,以及使用它们可以解决的计算问题。
更多信息如下。
代码空间
粗略示意图
演示
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 安装
你也可以通过 Docker 安装 Automata。
拉取 Docker 镜像:
$ 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。
Windows 提示
Windows 用户可能需要通过 Visual Studio 的“C++ 桌面开发” 安装 C++ 支持来满足某些依赖项。
此外,可能需要更新到 gcc-11 和 g++-11。可以通过运行以下命令来完成:
# 添加包含较新版本软件的测试工具链库
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
索引
SCIP 索引 是运行 Automata 搜索所需的。使用这些索引创建代码图,关系符号通过整个代码库的依赖关系连接起来。为 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="Explain what AutomataAgent is and how it works, include an example to initialize an instance of AutomataAgent."
理解 Automata
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 = "Explain how embeddings are used by the codebase"
agent = OpenAIAutomataAgent(instructions, config=agent_config)
result = agent.run()
点击查看输出
此代码库中的嵌入由 SymbolCodeEmbedding
和 SymbolDocEmbedding
等类表示。这些类存储有关符号及其各自嵌入的信息,嵌入是表示符号在高维空间中的向量。
这些类的示例包括:
SymbolCodeEmbedding
是用于存储与符号代码相关的嵌入的类。
SymbolDocEmbedding
是用于存储与符号文档相关的嵌入的类。
创建 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)
创建 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 = '包含有关符号信息的文档字符串。'
vector = np.random.rand(10)
symbol_doc_embedding = SymbolDocEmbedding(symbol, document, vector)
贡献指南
如果你想为 Automata 做出贡献,请务必查看贡献指南。此项目遵守 Automata 的行为准则。参与者应遵守此准则。
我们使用 GitHub 问题 来跟踪请求和错误,请参阅 Automata 讨论进行一般性问题和讨论,并请直接提出具体问题。
Automata 项目 strives 力求遵循开源软件开发的普遍接受的最佳实践。
未来
Automata 项目的终极目标是达到自主设计、编写、测试和优化复杂软件系统的水平。这包括理解和导航大型代码库、推理软件架构、优化性能,甚至在必要时发明新的算法或数据结构的能力。
虽然这一目标的完整实现可能是一个复杂而长期的过程,但每向该目标迈出的一步不仅有望显著提高人类程序员的生产力,还可能揭示 AI 和计算机科学中的基本问题。
许可证
Automata 以 Apache 2.0 许可证发布。
其他
该项目是 emrgnt-cmplxty 和 maks-ivanov 之间最初努力的扩展,始于这个仓库。