OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Automata 基于项目上下文自动生成代码的智能Agent

Automata 基于项目上下文自动生成代码的智能Agent

 
  nineteen ·  2026-03-18 00:49:10 · 4 次点击  · 0 条评论  

Automata:未来,由代码自我书写

codecov
CodeFactor

License

Documentation Status

社交平台

Discord
Twitter Follow
GitHub star chart

Automata 的目标是演变成一个完全自主、自我编程的人工智能系统

Automata 的灵感来源于一种理论:代码本质上是一种记忆形式。当配备合适的工具时,AI 可以发展出实时能力,这有可能导向通用人工智能(AGI)的诞生。Automata 一词源于希腊语 αὐτόματος,意为“自我行动、自我意愿、自我移动”。Automata theory 是研究抽象机器、自动机 以及可用它们解决的计算问题的学科。

更多信息如下。

Codespace

Open in GitHub Codespaces

概览示意图

Rough_Schematic_06_30_23_


演示

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++ 的桌面开发”](https://visualstudio.microsoft.com/downloads/?q=build+tools) 安装 C++ 支持,以满足某些依赖项的要求。 此外,可能需要将 gcc 和 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

索引

运行 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

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()
点击查看输出 在此代码库中,嵌入向量由诸如 `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 = '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-cmplxtymaks-ivanov 之间最初合作的延伸,始于这个仓库

4 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 49 ms
Developed with Cursor