这是Fly.io在 AI 辅助编程/编码代理领域推出的一款引人入胜的新成员,其博客Phoenix.new 上发布了这款名为“Phoenix 的远程 AI 运行时”的产品:只需在提示符中描述一个应用程序,即可获得一个完整的 Phoenix 应用程序,该应用程序由 SQLite 支持,并在 Fly 的托管平台上运行。观看Phoenix.new 官方 YouTube 发布视频是了解其功能的好方法。
Phoenix、Elixir 和 Fly 的背景
首先介绍一下背景。Phoenix 是一个面向Elixir的开源 Web 框架。Elixir 是一种类似 Ruby 的语言,可以编译为 Erlang 的 BEAM 字节码,并在高度并发的 Erlang 运行时上运行。该框架的标志性功能是Phoenix LiveView ,这是一个工具包,用于通过 WebSocket 连接将 diff 流式传输到服务器端 HTML 来构建实时界面。
Phoenix由 Chris McCord 于 11 年前创立,Chris 加入 Fly 已近四年。Phoenix.new 是他最新的项目。
Phoenix LiveView 非常适合 Fly 地理分布的应用服务基础设施。Fly 联合创始人 Kurt Mackey 在 2021 年 4 月(当时他们还没有聘请 Chris)就曾撰文描述过这一点,他描述了 LiveView 如何通过“将应用进程移到更靠近用户的位置”来获得低延迟的优势——Fly 的设计初衷就是为了实现这一点。
但有一个主要挑战:Elixir 仍然是一种小众编程语言,这意味着准备启动新 Phoenix 应用程序的人数一直受到人为限制。
Fly 的解决方案是什么?获得法学硕士学位,就能将学习难度降低到几乎为零。
使用 Phoenix.new 进行快速驱动的应用程序开发
Phoenix.new 是一个快速驱动的应用程序开发平台。您可以描述想要构建的内容,然后观看由 LLM 提供支持的编码代理编写、测试和迭代代码,以帮助您实现目标。它与Lovable 、 v0.dev以及Val Town 的 Townie属于同一类别。
编码代理需要解决的最重要的问题之一是为它们提供一个健壮的沙盒,让它们能够在不破坏沙盒空间之外的情况下运行代码。Fly 的核心是一家沙盒公司——他们的Fly Machines产品让在几秒钟内启动一个新的沙盒虚拟机变得轻而易举。我正是出于这个原因,在 Fly 上构建了Datasette Cloud 。
我尝试了 Phoenix.new,启动提示如下:
A notebook application. Notes are rich text, using a nice visual markdown editors. The first line of a note becomes the title. Notes have a URL that is a 6 character random text string - thise can be used to link notes to each other by dropping in an @ sign and that text string. A hash and then text becomes a tag, clicking a tag goes to a page with that tag on. Notes are all in SQLite FTS so they can be searched with a search tool.
观察它的工作过程非常令人着迷。它在浏览器中提供了一个完整的 IDE 风格环境,运行一个专用容器,并带有一个转发端口,允许你在构建应用程序时与它进行交互。
它启动了一个plan.md
,规划了方法,然后开始编写代码。最有趣的是,它使用一个类似于我自己的shot-scraper的测试工具不断测试它正在构建的应用程序。以下是该工具的输出示例:
我明白问题所在!页面仍然显示“欢迎使用您的笔记本”消息,而不是表单。请稍等片刻,让 JavaScript 执行完毕,然后检查表单是否显示。
$ web http://localhost:4000 --js "setTimeout(() => { document.querySelector('button[phx-click=\"start_creating\"]').click(); }, 500); setTimeout(() => { console.log('Form visible?', !!document.querySelector('textarea')); console.log('Creating note state:', document.body.innerHTML.includes('Create New Note')); }, 2000);"
我习惯于编写和执行自己的测试的编码代理,但这是我见过的最令人印象深刻的编码代理示例,它在迭代代码时主动与实时应用程序交互并进行测试。
最有趣的是,由于 LiveView 是一个实时框架,我可以在机器编写和测试应用程序的同时直接与应用程序交互,并在我的浏览器中立即看到它所做的任何更改!
效果如何?最终还是完成了,但事后看来,我最初的提示有点太复杂了:在尝试实现 SQLite 全文搜索时,它陷入了一个错误循环,我不得不进行补救。就像你自己构建的项目一样,如果你从最简单的应用程序版本开始,然后不断迭代添加其他功能,最终效果会更好。
我最喜欢的细节之一是 Git 集成的工作原理。Phoenix.new 在运行时会不断提交,然后菜单选项“将 X 克隆到本地计算机”会显示如下命令:
git clone "https://phoenix.new/git/WENQLj...big-random-string...VHFW/$RANDOM/notebook"
在本地运行该代码即可获取完整的代码库副本!我运行了以下命令,将其推送到我的 GitHub 帐户中的新代码库:
git remote add github https://github.com/simonw/phoenix-new-notebook.git git push -u github主目录
您可以在我的simonw/phoenix-new-notebook仓库中看到代码(和提交历史记录)。
我学到了多少?
我最初对 Phoenix.new 的实验非常注重氛围编码– 我与生成的应用程序进行了交互,但并没有过多关注正在编写的代码,尽管它在 IDE 中呈现给我,让我很容易地查看正在发生的事情。
因此,我并没有学到太多关于 Phoenix 和 Elixir 底层语法细节的知识。然而,随着代码在我眼前飞舞,我却对 Elixir 和 Phoenix 的高层结构有了深刻的感受。
事实证明,让法学硕士 (LLM) 在你面前编写应用程序是开始理解框架功能的好方法。
这几乎就像观看 YouTube 直播中一位经验丰富的开发人员快速构建应用程序一样,只不过该应用程序正是您要求他们构建的,并且您可以随时插入并向他们发送新的方向。
超越 Elixir 和 Phoenix
克里斯的公告中包含以下内容:
此时你可能会想——我能让它构建一个 Rails 应用吗?或者一个 Expo React Native 应用?或者 Svelte?或者 Go?
是的,你可以。
我们的系统提示已针对 Phoenix 进行了调整,但您关心的所有语言都已安装完毕。我们仍在研究下一步的计划,但添加新的语言和框架绝对是我计划中的重中之重。
基于浏览器的 IDE 包含一个终端,我已检查过python3
和python3 -m pip install datasette
已经可以在那里运行。
如果 Fly 确实将其发展为用于构建 Web 应用程序的与框架无关的工具,他们可能需要将其从 Phoenix.new 重新命名为更通用的名称!
Phoenix.new 目前的订阅价格为每月 20 美元。Val Town 最近将其类似的 Townie 助手的定价从订阅改为按次付费,大概是因为对于许多用户来说,这类工具只是偶尔使用。不过,鉴于 Phoenix.new 的功能,它有可能成为人们按月付费的驱动力,尤其是在它扩展到更多框架之后。
Fly 赞助了我们在 Datasette Cloud 上的一些工作(参见披露),但本文不是赞助内容,Fly 也没有请求或审查这篇文章。
标签: erlang 、 sqlite 、 ai 、 fly 、 generative-ai 、 llms 、 ai-agents 、 vibe-coding 、 ai-assisted-search 、 coding-agents
原文: https://simonwillison.net/2025/Jun/23/phoenix-new/#atom-everything