2026-10-09 · 原文发布日
边做饭边用语音让Codex改博客
作者在本地Django项目先让Codex起dev server并开浏览器预览,再用桌面语音聊天口述Newsletters页需求:新模型、迁移、导入RSS和仓库、归档页与搜索接入;收尾让Codex开PR,在GitHub审查后把subprocess git改成API。
原文要点
Simon Willison 在 ChatGPT 桌面端 Codex 标签页用语音对话模式改本地 Django 博客:先打字让它起 dev server 并开浏览器预览,再点输入框麦克风右侧的“Start new voice chat”。做饭约半小时里口述了 Newsletters 页需求:新模型与迁移、四个导入(Substack RSS、Substack 未公开 API、GitHub 月度归档仓库、私有仓库)、/newsletters/ 与按年归档页、接入站内搜索、不出现在标签页但出现在日期归档页。收尾让 Codex 建分支开 PR,他在 GitHub 审查后把用 subprocess 调 git 的导入改成 API 方式,又用约半小时打字提示后才部署。
这次做成什么
复刻“语音驱动编码代理”的工作方式:先在本地起一个带浏览器预览的练习项目,再用桌面端语音对话口述一个可拆分的小功能需求,让代理改代码,最后用 PR 审查和打字补细节收尾。以下练习项目与需求是本站独立设计的,非原作者项目。
准备什么
- 装有 ChatGPT 桌面应用并可使用 Codex 语音对话模式的电脑
- 本地有一个可运行的练习项目(如 Django 或任何能起 dev server 的项目)
- 一个安静且允许出声说话的环境,以及可做其他事的半小时空档
- 项目已在 Git 仓库中,便于让代理建分支并审查改动
具体怎么做
先打字建立可视化闭环
在项目目录对应的会话里输入文字指令:"启动开发服务器并在浏览器里打开首页"。确认代理真起了服务、你能看到页面,这样后续可以口述"给我看刚才改的页面"并用眼睛验证,而不是盲信文字汇报。
切到语音模式并摆好电脑
点输入框麦克风右侧的“开始新语音聊天”按钮(不是麦克风图标本身),把笔记本放在你活动区域内能收音的位置。原作者把它放在厨房边做饭边聊,约半小时。
口述一份结构化的功能需求
语音里把需求讲成可执行的清单:要不要新模型和迁移、数据从哪里来、页面路径是什么、在哪些已有页面上出现或不出现、是否要进搜索。说得磕绊没关系,作者原稿充满 um 和改口,模型仍能理解并追问澄清。
边看预览边口头迭代
代理改完一轮后让它打开新页面,你瞄一眼本地预览,直接口头反馈"标题太大""按时间倒序排"这类调整,循环到功能大致完整。
收尾切换到打字审查
让代理建分支并开 PR,在 GitHub 界面逐行看 diff。涉及凭据、外部 API、子进程调用等细节时改用打字:粘贴错误信息、直接指出要换的实现方式(作者就是把 subprocess git 换成 API 调用)。满意后再合并部署。
可直接复制的材料
语音开场需求口述稿(中文示例)
本站独立编写的中文口述稿,对应原做法中语音描述需求的环节,需替换为你自己项目的真实需求。
嗯,我要加一个“读书笔记”栏目,这是一种新内容类型。它不要出现在标签页和首页列表里,但要出现在按日期归档的页面上,并且发布一个月之后要被站内搜索索引到。数据从两个地方导入:一个公开 RSS 源,另一个是我私有的 GitHub 仓库里的 markdown 文件。需要一个新模型和迁移,加 Django Admin 配置,做一个 /notes/ 列表页和按年的归档页。先给我讲讲你的方案,有不确定的地方问我,然后再动手改代码。收尾阶段的打字审查提示词
本站独立编写,对应作者审查时把 subprocess git 换成 API 的做法;环境变量名需按你的部署方式自定。
把当前改动整理成一个分支并开一个 pull request。注意两点:一,导入脚本不要通过 subprocess 调用 git,改成直接调用托管平台的 REST API 拉取文件内容,凭据从环境变量读取,不要把密钥写进代码;二,把归档页的分页和日期显示核对一遍。PR 描述里列出:新增模型与迁移、四个导入函数各自的数据来源、新页面路径、哪些既有页面会显示或不显示新内容。输入与输出示例
本站虚构演示,非原作者结果,未实际调用任何代理。
输入
口述:"给练习博客加一个 /notes/ 页面,只收录读书笔记,不进标签页,不进首页,但要进日期归档和搜索,数据从公开 RSS 导入最近十条。"对应输出
代理汇报:已新增 Note 模型与迁移 0007_add_note.py;新增 import_notes 管理命令,从 RSS 拉取最近 10 条去重入库;新增 /notes/ 与 /notes/2026/ 两个模板;日期归档页已包含 Note 条目,标签页与首页查询已排除;搜索索引函数已注册 Note 内容。本地预览 http://127.0.0.1:8000/notes/ 可查看。做完检查这些
- 语音会话开始前,dev server 已由代理启动且你能在浏览器看到页面
- 口述需求后,模型至少追问或复述过一次理解,再开始改代码
- PR 中没有出现硬编码密钥,也没有用 subprocess 调 git 的导入实现
- 新内容在应出现的页面(日期归档、搜索)出现,在不该出现的页面(标签页、首页)不出现
容易卡住的地方
- 语音模式不适合传达代码片段、错误堆栈和长链接,这些要切换到打字粘贴,这也是作者后半程改用键盘的原因
- 共享办公或嘈杂环境下语音口述既不礼貌也易误识别,作者明确说自己在家办公才这么干
- 涉及私有仓库的 API key 创建无法在纯语音中安全完成,需要坐下来手动处理凭据
- 语音驱动适合功能方向清晰的中等任务,细节调整阶段打字效率更高,别强求全程语音
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- A new feature for my blog, built using my voice
- 原作者
- Simon Willison
- 原始发布日期
- 2026-10-09
- 来源
- https://simonwillison.net/2026/Oct/9/built-using-my-voice/