OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Smol Developer — 自动生成代码 Agent

Smol Developer — 自动生成代码 Agent

 
  halo ·  2025-12-16 10:04:14 · 12 次点击  · 0 条评论  

🐣 smol developer




Deploy agent on e2b button




Morph Morph

以人为中心且连贯的完整程序合成,也就是你的专属初级开发者。

构建那个能构建事物的东西! 为每个开发者、每种场景配备一个 smol dev

这是一个“初级开发者”智能体(又名 smol dev),它能够:

  1. 根据你提供的产品规格,为你搭建整个代码库的脚手架。
  2. 提供基础构建模块,让你在自己的应用程序中集成一个 smol 开发者。

与创建和维护特定、僵化、一次性的启动器(如 create-react-appcreate-nextjs-app)不同,这本质上就是或能帮助你创建 create-anything-app,你可以与你的 smol 开发者进行紧密的循环迭代,来开发你的脚手架提示词。

成功发布初始 v0 版本之后,smol developer 被重写为更小,并且可以从库中导入!

基本用法

Git 仓库模式

# 安装
git clone https://github.com/smol-ai/developer.git
cd developer
poetry install # 安装依赖。如果需要,请先运行 pip install poetry

# 运行
python main.py "一个 HTML/JS/CSS 井字棋游戏" # 默认使用 gpt-4-0613
# python main.py "一个 HTML/JS/CSS 井字棋游戏" --model=gpt-3.5-turbo-0613

# 其他命令行标志
python main.py --prompt prompt.md # 对于较长的提示词,可以将它们移动到 markdown 文件中
python main.py --prompt prompt.md --debug True # 用于调试
这让你可以作为“人在回路”来开发应用程序,这是 smol developer 的原始版本模式。

*用提示词进行工程开发,而非提示词工程* `prompt.md` 中的演示示例展示了 AI 赋能,但仍以人类开发者为中心的强大工作流程潜力: - 人类为他们想要构建的应用程序编写一个基本提示词。 - `main.py` 生成代码。 - 人类运行/阅读代码。 - 人类可以: - 在发现提示词中未明确指定的部分时,直接将其添加到提示词中。 - 手动运行代码并识别错误。 - *将错误信息粘贴到提示词中*,就像提交 GitHub issue 一样。 - 为了获得额外帮助,他们可以使用 `debugger.py`,它会读取整个代码库以提出具体的代码修改建议。 循环直到满意为止。请注意,AI 仅在增加价值时被使用——一旦它妨碍了你,只需从你的 smol 初级开发者那里接管代码库,无需大惊小怪,也不会伤害感情。(*我们也可以让 smol-dev 接管一个现有的代码库并引导其自身的提示词……但这是未来的方向*)

通过这种方式,你可以使用此仓库的克隆版本来原型化/开发你的应用程序。

库模式

这是 smol developer v1 的新功能!将 smol developer 添加到您自己的项目中!

pip install smol_dev

在这里,你基本上可以将 main.py 的内容视为我们关于如何在您自己的应用程序中使用这些函数和提示词的“文档”:

from smol_dev.prompts import plan, specify_file_paths, generate_code_sync

prompt = "一个 HTML/JS/CSS 井字棋游戏"

shared_deps = plan(prompt) # 返回一个代表编码计划的长字符串

# 如果你愿意,可以对 shared_deps 计划做一些事情,例如请求用户确认/编辑并在循环中迭代

file_paths = specify_file_paths(prompt, shared_deps) # 返回一个字符串数组,代表它需要根据你的提示词和 shared_deps 编写的文件名。依赖于 OpenAI 的新函数调用 API 来保证 JSON 格式。

# 如果你愿意,可以对 file_paths 做一些事情,例如展示一个计划

# 遍历 file_paths 数组并为每个文件生成代码
for file_path in file_paths:
    code = generate_code_sync(prompt, shared_deps, file_path) # 生成每个文件的源代码

    # 对文件的源代码做一些事情,例如写入磁盘或在 UI 中显示
    # 这个函数也有一个异步版本 `generate_code()`

API 模式(通过 Agent Protocol

要启动服务器,请运行:

poetry run api

python smol_dev/api.py

然后你可以使用以下命令调用 API:

创建一个任务,请运行:

curl --request POST \
  --url http://localhost:8000/agent/tasks \
  --header 'Content-Type: application/json' \
  --data '{
    "input": "用 Python 写一个简单的脚本。它应该将 '\''Hello world!'\'' 写入 hi.txt"
}'

你将收到类似这样的响应:

{"input":"用 Python 写一个简单的脚本。它应该将 'Hello world!' 写入 hi.txt","task_id":"d2c4e543-ae08-4a97-9ac5-5f9a4459cb19","artifacts":[]}

然后要执行任务的一个步骤,请复制你从上一次请求中得到的 task_id 并运行:

curl --request POST \
  --url http://localhost:8000/agent/tasks/<task-id>/steps

或者你可以使用 Python 客户端库

from agent_protocol_client import AgentApi, ApiClient, TaskRequestBody

...

prompt = "用 Python 写一个简单的脚本。它应该将 'Hello world!' 写入 hi.txt"

async with ApiClient() as api_client:
    # 创建 API 类的实例
    api_instance = AgentApi(api_client)
    task_request_body = TaskRequestBody(input=prompt)

    task = await api_instance.create_agent_task(
        task_request_body=task_request_body
    )
    task_id = task.task_id
    response = await api_instance.execute_agent_task_step(task_id=task_id)

...

示例/提示词库

  • 6 分钟视频演示 - (抱歉音频加速了,我们当时为了推特优化,这是个错误的决定)
    • 这是原始的 smol developer 演示——从提示词到一个完整的 Chrome 扩展程序,该扩展程序请求并存储 API 密钥,生成弹出窗口,读取和传输页面内容,并使用 Anthropic Claude 有效地总结任何网站,并根据输入长度切换到高达 100k 的模型。
    • 提示词位于 prompt.md,它输出到 /exampleChromeExtension
  • smol-plugin - 提示词生成 ChatGPT 插件(推文, 分支

我正在积极寻找更多示例,请提交你的 PR!

抱歉示例不多,我知道这很令人沮丧,但我没料到会有这么多用户,哈哈。

主要分支/替代方案

请提交替代实现方案,以及在替代技术栈上的部署策略!

  • JS/TS: https://github.com/PicoCreator/smol-dev-js smol-dev 的纯 JS 变体,允许通过提示词进行更小的增量更改(如果你不想做整个 spec2code 的事情),允许你将其实时插入任何项目(好坏参半)。
  • C#/Dotnet: https://github.com/colhountech/smol-ai-dotnet 用 C# 实现!
  • Golang: https://github.com/tmc/smol-dev-go 用 Go 实现。
  • https://github.com/gmchad/smol-plugin 通过以 smol-developer 风格在 markdown 中指定你的 API,自动生成 @openai 插件。
  • 你的分支在这里!

创新与洞见

请订阅 https://latent.space/ 以获取更完整的文章、洞见和反思。

  • Markdown 就是全部所需 - Markdown 是提示完整程序合成的完美方式,因为它易于混合英语和代码(无论是 variable_names 还是整个 ``` 代码块)。
    • 事实证明,你可以在提示词中指定代码中的提示词,而 GPT4 会严格遵守。
  • 复制粘贴式编程
    • 通过直接粘贴 curl 的输入和输出,教程序理解如何围绕一个新 API(Anthropic 的 API 在 GPT3 的知识截止日期之后)进行编码。
    • 将错误信息粘贴到提示词中,并模糊地告诉程序你希望如何处理。这感觉有点像“日志驱动编程”。
  • 通过 cat 整个代码库并附上错误信息来调试并获得具体的修复建议——特别令人愉快!
  • 保持整个程序连贯性的技巧 - 我们选择的示例用例,Chrome 扩展程序,在文件之间有很多间接依赖关系。任何跨依赖关系的幻觉都会导致整个程序出错。
    • 我们通过添加一个中间步骤来解决这个问题,要求 GPT 思考 shared_dependencies.md,然后在生成每个文件时坚持使用它。这基本上意味着 GPT 能够与自己对话……
    • ……但它还不完美。shared_dependencies.md 有时不能全面理解文件之间的硬依赖关系。所以我们只是通过在提示词中指定一个特定的 name 来解决。起初感觉有点取巧,但它有效,而且说到底,这其实就是清晰无歧义的沟通。
    • 查看 prompt.md 了解最新的 smol-dev 提示词。
  • 降低不熟悉 API 的启动门槛
    • 我们从未真正学过 CSS 动画,但现在只需说我们想要一个“生动有趣的 CSS 动画红白糖果条纹加载指示器”,它就能实现。
    • Chrome Extension Manifest v3 也是如此——文档一团糟,但幸运的是,我们现在不需要阅读它们就能完成基本的事情。
    • Anthropic 的文档(非常糟糕)缺少关于其返回签名的指导。所以直接 curl 它并把结果扔进提示词里,哈哈。
  • Modal 就是全部所需 - 我们选择 Modal 来解决 4 个问题:
    • 解决开发和生产中的 Python 依赖地狱问题。
    • 可并行化的代码生成。
    • 从本地开发到云端托管端点的简单升级路径(未来)。
    • 具有重试/退避机制的容错 OpenAI API 调用,以及附加存储(供未来使用)。

请订阅 https://latent.space/ 以获取更完整的文章、洞见和反思。

注意事项

我们当时正在开发一个 Chrome 扩展程序,它需要生成图像,因此我们在其中添加了一些特定于用例的代码来跳过销毁/重新生成它们,我们还没有决定如何将其通用化。

我们无法访问 GPT4-32k,但如果我们能访问,我们会探索将整个 API/SDK 文档放入上下文中。

目前的反馈循环非常慢(time 显示即使用 Modal 并行化,生成一个 GPT4 程序也需要大约 2-4 分钟,偶尔会更高),但可以稳妥地预测,随着时间的推移,这个时间会减少(另见下面的“未来方向”)。

未来方向

可以尝试/愿意接受公开 issue 讨论和 PR 的方向:

  • 为每个生成的文件指定 .md 文件,其中包含可以微调每个文件输出的进一步提示词。
    • 所以基本上像 popup.html.mdcontent_script.js.md 等等。
  • 为现有代码库引导生成 prompt.md - 编写一个脚本来读取代码库并编写一个描述性的、带项目符号的提示词,该提示词可以生成它。
    • smol pm 完成,但效果还不是很好——希望有一些集中的改进/努力,直到我们拥有可以生成自身的 quine smol developer,哈哈。
  • 能够安装自己的依赖项
    • 这涉及到依赖执行环境,我们都知道这是通往依赖地狱的道路。如何避免?Docker 化?Nix?Web 容器
    • Modal 有一个有趣的可能性:生成使用 modal 语法的函数,这也能解决依赖问题 https://twitter.com/akshat_b/status/1658146096902811657
  • 自我修复,通过运行代码本身,并使用错误信息作为重新提示的依据。
    • 然而,从 Chrome 扩展环境中获取错误有点困难,所以我们没有尝试这个。
  • 使用 Anthropic 作为编码层
    • 你可以运行 modal run anthropic.py --prompt prompt.md --outputdir=anthropic 来尝试。
    • 但它不起作用,因为 Anthropic 不能很好地遵循生成文件代码的指令。
  • 创建能够自主循环运行此代码/监视提示词文件的智能体,并在新的 git 分支上每次重新生成代码。
    • 代码可以在 5 个并行的 git 分支上生成,检查它们的输出只需要切换 git 分支。
12 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私政策 ·  服务条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 21 ms
Developed with Cursor