30 秒看懂
Devin Chasanoff 使用分阶段验收计划和 Google Antigravity,构建带 AI 教练的训练记录应用。自动检查提供了帮助,但亲自测试暴露出未加载的密钥,以及训练修改波及无关内容的问题。他将后者追溯到缺少计划上下文,随后改为在请求中传入当前日程或待处理建议。本地原型在他的测试中可以工作;云端持久化、身份验证和部署仍未完成。
- 1浏览器控制台错误为智能体提供具体线索Chasanoff 分享错误并在修复后重新加载应用,然后测试真实训练交互。
- 2无害测试值揭示密钥没有加载他检查环境文件的读取路径,而不是反复要求 Gemini 修复失败请求,随后删除临时日志。
- 3单日修改后比较整周计划受控测试显示小改动可能影响无关训练,从而促使他调查教练获得的上下文。
- 4在请求中传入当前计划和待处理建议Chasanoff 选择改变数据流,并在智能体实施前要求概念层面的解释。
- 5先问功能现在是否应该工作测试动态记忆时,他先核对预期架构,追踪服务器响应如何进入本地状态,然后才接受修复。
要点建议
- 先问当前里程碑哪些功能应该工作,再要求智能体修复。
- 使用控制台日志和无害测试值,区分密钥无效和密钥没有被加载。
- 对 AI 定向修改,检查请求是否包含当前状态和尚未接受的建议。
- 本地原型并不等于已部署并具备云端持久化和身份验证的应用。
按章节阅读整理后的全文
分阶段构建并检查每个里程碑
智能体依据已有计划搭建项目、服务器和训练界面。Chasanoff 检查自动化结果,随后打开应用亲自测试。
Devin Chasanoff 基于已有的原型、三份设计规格和分阶段验收的实施计划,构建一款智能私人教练应用。他使用 Google Antigravity 完成各个里程碑,并暂停检查结果。
第一个里程碑初始化版本控制和项目框架,添加 TypeScript 类型与 Firebase 工具,并填充动作目录。智能体运行编译、代码检查和构建检查后,Chasanoff 批准进入下一阶段。

第二个里程碑构建后端服务器,运行计划中列出的验证用例。智能体总结测试结果并创建 Git 检查点,然后继续。
第三个里程碑添加应用框架、导航、客户端状态和训练记录器。Chasanoff 终于可以打开本地运行的应用,亲自测试界面,而不只依赖智能体报告。
首次构建失败时使用浏览器证据
控制台错误和过期浏览器缓存揭示了自动里程碑摘要未解决的问题。Chasanoff 提供证据,并在每次修复后复测。
页面首次加载失败。他打开浏览器开发者控制台,截取错误并交给 Gemini。智能体修复后,他重新加载,确认训练页面和计时器出现。
单个占位动作不足以测试记录器。他要求生成同时包含普通组和超级组的真实训练计划,以检查界面如何处理不同训练块。
尽管数据已更新,页面仍显示旧训练。智能体将原因追溯到浏览器缓存,并修改处理机制;Chasanoff 重新加载,确认更丰富的新计划出现。
连接并测试教练
重复出现的备用回复引出了 API 密钥加载问题。连接后,教练能生成和修改建议,但状态处理尚未完成。
单独调整界面后,他进入 AI 教练里程碑:建立聊天界面,让用户获得训练建议,并接受或修改建议。
教练的第一次回复快得异常,而且总是重复同一份计划。他没有把成功显示回复等同于模型已连接,而是询问 Gemini 已实现哪些部分,发现有些行为仍来自备用响应。
智能体列出已完成和未完成的内容:聊天界面和建议流程已有,但服务端持久化及部分展示功能尚未完成。Chasanoff 询问添加 API 密钥能否启用真正的模型调用。
他在本地环境文件中私下加入 Gemini API 密钥和模型名,没有在镜头前展示密钥。智能体运行连接测试,但应用仍返回固定回复。
Chasanoff 检查应用日志,将问题缩小到两种可能:密钥无效,或应用没有加载密钥。他用无害的测试值检查程序是否读取了环境文件。

测试显示应用没有读取预期值。Gemini 修复加载问题;Chasanoff 删除临时日志,在镜头外恢复真实密钥,并重启开发服务器。
此时模型回复能够到达,但建议的训练计划为空。他把截图交给智能体;后者报告应用不同部分的命名不一致并予以修复。随后他再次测试完整请求。
教练生成了四天的计划。Chasanoff 测试修改训练、提出只应得到文字回答而非建议卡片的问题,以及用语音转文字发出请求。
他注意到,如果输入新请求时没有附上先前的建议,系统可能生成一份新计划,而不是修改原计划。这显示请求携带的上下文十分重要。
他检查从某一天的训练进入教练界面并应用建议的流程。本地训练得到更新,但他希望单日修改返回当天的卡片,而不是整周预览。

找出为何小修改会影响更大范围的计划
对单日和整周的比较暴露出上下文不一致。由于数据库连接尚未完成,Chasanoff 选择在每次请求中传入当前计划或待处理建议。
Chasanoff 请求 Gemini 添加单日建议卡片。测试时卡片出现了,但建议的训练与屏幕上已有计划并不总是一致。
他创建并接受新的周计划,再要求在某一天增加核心训练。结果与原训练不同。接下来的修改看起来更接近,因此他继续测试,没有把一次成功当作充分证明。
他怀疑不一致与计划的存储方式有关。应用已有浏览器本地数据,并计划持久保存到 Firebase,但数据库尚未连接完成。
为了更容易比较差异,他要求加入周视图。然后他设计受控测试:只为周二增加一个动作,或在周三添加训练,并比较修改前后一周其余部分。
这次修改影响了超出要求的计划内容。Chasanoff 向智能体描述观察到的不匹配,并调查教练如何获取现有日程,而不是只要求修补界面。
他询问服务器是否从 Firestore 读取当前计划。Gemini 回答,预期架构确实如此,但数据库尚未连接,所以教练没有得到所需上下文。
他还询问用户修改尚未接受的建议时会发生什么。如果建议还没存入数据库,仅获取已存计划可能遗漏当前状态。
Chasanoff 比较两个选项:连接 Firestore,或在每次请求时传入当前计划和待处理建议。他先要求智能体用通俗语言解释改动,再写代码。

双方同意,由客户端在请求中附上当前周计划或待处理建议的快照。服务器使用这些上下文,并指示教练做定向修改时保留无关动作。
Gemini 实施并检查了改动。Chasanoff 强调,这次请求改变的是系统获取上下文的方式,而不是让模型针对一个错误输出打补丁。
他测试添加核心训练,再修改待处理建议以移除平板支撑。他检查结果卡片并接受,确认需要保留的动作仍然存在。

第二项测试交换周四和周五的训练。显示的周计划按要求变化,让他看到新上下文路径在这些例子中能够保留其余计划。
连接云端前先测试动态记忆
他先问当前哪些功能应该工作,追踪服务器到客户端的数据流,再复测器械和活动更新。云端持久化、身份验证和部署仍待完成。
下一个里程碑添加进度、设置和教练动态记忆视图。设计使用浏览器本地存储保证响应速度,并计划同步到 Firestore 以持久保存数据。
进度和设置页面出现后,Chasanoff 发现移动端布局和导航问题。他要求智能体调整布局,并列出下一验收阶段应执行的检查。
他测试告诉教练有关器械和即将到来的活动,能否更新设置与记忆。预期信息没有出现时,他先问这个阶段是否本来就应该工作。
由于 Firebase 尚未连接,他质疑 Gemini 提出的修复。进一步讨论揭示了内存中的备用存储,他接着询问服务器生成的信息如何到达浏览器本地状态。
他们同意在聊天响应中返回更新后的个人资料,更新客户端本地数据,之后再同步到 Firebase。Chasanoff 先要求概括方案,再同意实施。
第一次复测时,器械出现了,但活动仍未进入记忆。智能体再次修正,他继续测试,直到界面显示器械和有时效的记忆。

结束时,本地应用在他的测试中支持训练记录和教练修改,但云端持久化、身份验证、素材和部署仍是后续工作。Chasanoff 也计划进一步验证并调整界面。
同频道的其他文章
13:01EN → 简体中文
23:57EN → 简体中文
41:04EN → 简体中文
17:27EN → 简体中文
11:59EN → 简体中文
11:16EN → 简体中文