起因
之前写了在coze平台中发布塔罗牌应用的完整经历,随后发布到coze 和 公众号后,感觉有两个限制点:
-
用户输入的要求其实很规范化(生日 出生城市 性别 疑问),但是因为没有web 界面引导用户,结果用了大模型通过对话的形式开始的。这一步,就要和用户聊好几轮。
-
workflow输出的内容其实很简单:先是3张卡牌,然后是markdown格式的解析说明。
但是这个效果在小程序上很不好(显示不出图片,文字也是markdown格式的),想要完整体验的话又必须在coze 的应用市场中使用。
结合这两个不满意的地方,希望跳出 coze 应用市场 在手机上或电脑上就可以完成塔罗牌的占卜和解析。
还有其他两个动机:
- 我有一个朋友,想了解 cursor 如何在程序开发中提升效率,以及哪些工作是必要且需要注意的。
- 希望在 塔罗牌解读功能之上,再追加一个 用户注册 登入 登出的功能,不使用数据库而是利用飞书多维表格 记录用户用户基本信息。——俗称 上点难度。
效果预览
为了白瞟 vercel的 服务,我把代码更新到了github上(项目代码),并且让vercel 自动同步github 项目的最新版本。
所以理论上,如果你也按照我之前的文章 在coze上做了塔罗牌的工作流, 完全可以复用这套代码 。
登录后页面长这样—— 网页
归根结底,这篇文章是coze 工作流的引申篇——使用AI编程工具,快速对接coze工作流并完成前端展示的任务。
以这个项目为例,捎带记录了各项任务花费的时间,总共三个半天——
| 任务阶段 | 使用工具 | 花费时间 |
|---|---|---|
| 阶段1: 需求分析&沟通 | cursor | 0.5h |
| 阶段1: 前端demo 效果测试 | cursor | 1h |
| 阶段1: API 对接后端(coze API 网关),部署到vercel平台 | cursor + github + vercel | 1h |
| 阶段1: 基础功能测试 | 浏览器开发模式 + vercel + cursor | 1.5h |
| 阶段2: 页面优化调整 | cursor | 2.5h |
| 阶段2: 讨论script.js 代码拆分(重构)方案 | cursor | 1h |
| 阶段2: 执行script.js 拆分(重构)方案,重新验证基础功能 | 浏览器开发模式 + vercel + cursor | 1h |
| 阶段3: 讨论 追加用户用户登录认证的方案 | cursor | 1h |
| 阶段3: 生成用户认证功能开发计划和任务表 | cursor | 0.5h |
| 阶段3: 逐步推进认证系统任务(重点:对接多维表格API ) | cursor + curl + vercel+ feishu | 2.5h |
| 阶段3: 其余优化任务讨论 | cursor | 1h |
几个关键步骤
没有办法把每个过程都展示一遍,这里放几个典型场景说明。可以感受下 cursor 等AI 编程工具的强大之处和能力边界。
阶段1: 需求分析&沟通
我们一上来并不是 发送一句“我要一个塔罗牌web 界面” 给cursor,因为这里的上下文不清晰。此时让cursor 干活,肯定是不符合项目具体要求的 垃圾代码。
所以,这个阶段的正确做法是:沟通需求,生成项目README.md 文档。
得益于coze 平台对于 API 的文档支持到位(https://www.coze.cn/open/playground/workflow_stream_run)。直接使用curl 的命令,将整个工作流(流式响应)交互的过程展示出来——
|
|
直接把以上内容粘贴复制给cursor “ASK” 对话框内,告诉它:
|
|
同时引用“.cursorrules”,告诉它我们使用的开发工具和偏好(“可以选择html/css/js就做到的,就不使用react或next.js的方式”):
|
|
这样通过几轮对话后,就可以告诉cursor 让它产出一个比较良好的项目说明文档——README.md。
注意:具体细节在项目推进中,可以逐步细化和完善。这里有个初步的框架和清晰的目标就可以。
报错时,如何找到问题原因,并进行修复
即便已经告诉 cursor:根据coze workflow 返回的数据显示塔罗牌卡片信息和解读信息,但是在初期执行时因为任务和代码数量比较多,cursor 可能还是会“失焦”——丢失任务细节。
对应的解决办法有两个:
-
通过浏览器的 “开发者模式” 查看服务端或浏览器显示的数据,将相关报错作为补充信息告诉cursor。
cursor 会根据具体的报错信息和项目结构,分析相关代码,特别是逻辑关系调用 AI 工具在这方面效率很高。
当然这种方式(小段报错直接发给AI 编程工具)适用于小问题的修修补补,大问题反而不建议直接修改,原因后面也会提到。
-
重要的功能节点,一定安排相关的测试项目。
如上面代码的修复成功后,cursor 生成了测试页面:
通过模块化的测试页面,一方面可以帮助验证功能和代码的有效;另一方面也可以提高后续代码调整后反复验证的效率。
所以,重要的功能测试都有相关的测试页面—— 例如:卡牌图片效果测试
阶段2: 讨论script.js 代码拆分(重构)方案
关键代码重构一定要慎重:先讨论清楚,再进行,这一步很可能因为设计不清楚或者需求太复杂,导致回滚。
-
重构的必要性讨论:
肯定是 利 > 弊才会考虑 进行代码重构。
例如,本项目中 script.js 不断添加新功能,导致代码一度达到1300多行 原有 script.js 代码放这里。
这个长度 超出了AI编程工具一次代码修改量的最佳长度(还是那个问题,代码过长可能会导致编程模型注意力分散,写出一些无用代码的可能性变高)。
同时在这个文件中,还融合了城市数据、应用入口、markdown格式渲染等好几个功能。
所以这个1300多行的代码拆分后,是有利于,后续功能实现和迭代的。
-
重构的方案讨论:
AI 编程工具在讨论这个过程中,有时会给你提一个过于激进的方案。
这个过程中,人在其中的判断很重要,可能要讨论好几次——
-
评估重构对现有项目的影响
如果项目结构和模块清晰,这里的影响范围一般会比较可控。
但如果是已经上线的代码,有着诸多“历史原因”,这里的影响评估就要非常小心了,指不定哪里有个“牵一发而动全身”的遗留代码。
-
操作过程中尽量按照 “子任务执行” –> “测试” 的步骤循环进行。并且尽量 一次就解决一个问题。
前面提到的重要功能的测试模块,此时就能帮助我们快速完成原有基础功能是否正常的判断,同时还有利于定位问题原因。
拆分后效果——
阶段3: 逐步推进认证系统任务
-
该阶段属于项目新增重大功能。
同样的,不能一开始就 让AI 工具直接动手改,否则也是改出一堆问题代码,到头来给自己徒增一堆烦恼。
最佳实践,也简单:把之前的 “需求讨论分析 –> 任务计划产生 –> todolist ” 再走一遍。甚至让cursor 先生成相关功能的伪代码,突出相关函数功能和逻辑。
最后再安排cursor 按照约定的步骤&计划执行,就会非常省心:
因为这样做之后,既可以保证AI编程工具知道自己当前具体的任务(一次聚焦一个子任务),也知道上下文(上一步完成了什么,这一步完成后如何测试等等)。
在这种框架下推进,即使遇到问题,也是局部优化调整的事情。不会耽误太多时间。
-
简单数据的增删改查,完全可以考虑飞书多维表格的API 接口实现。
例如,这里用户信息查询的接口 ——
而且表格形式的数据更方便展示,例如这里记录的用户登录信息——
-
如果遇到技术架构&方案等高阶问题,记得让AI 编程工具提供三个不同的解决方案。
然后,由开发者 分析哪个方案在当前项目更合适。当然 AI 编程工具在信息对比和汇总方便很厉害。
例如,这里关于用户登录后,页面的显示效果就有两套不同的方案,方案差异和优缺点一目了然——
PS:
使用飞书多维表格,有两个前置准备工作:
-
需要创建“企业自建应用”,应用中的 “APP ID” 和 “APP Secret” 分别对应 vercel 中的环境变量“FEISHU_APP_ID”和“FEISHU_APP_SECRET”。
-
用到的多维表格,需要在“文档应用”中添加“企业自建应用”的“可编辑”权限。
当前阶段AI 编程工具的现状(能力边界)
-
任务描述不清时,让工具直接改动反而会导致更多的问题。
解法: 先别着急直接生成代码,而是使用“chat” 模式。多聊几轮,聊得越具体,产生的文档 (任务文档、项目文档)越清晰,越有利于后续开发中聚焦。
-
AI 编程工具 习惯性的添加代码 ,当代码长到一定程度,它会“忘记”代码的细节。
解法: 尝试保持代码模块化和结构,如果个别代码太长,该拆分就拆分。
-
如果功能比较多,在设计时 最好考虑代码模块化。
一来是保持项目结构清晰,二来 减少重复代码和过长代码, 三来 结构化的代码无论是人类还是AI 都是更容易理解和阅读的。
-
调用外部模块的时候,可能遇到 AI 编程工具自己都弄不清楚的情况,它也会尝试联网搜索。
解法: 对于外部的模块,很可能升级个版本 接口格式就变了,所以最佳的实践还是前面提到的 做好测试工程。
-
复杂问题的解决方法可能有多个,不要让AI 自动解决。
解法: 此时开发者最好 多问一句“你给我提供 三个不同的方案,并详细对比它们间的差异”。往往,它可以帮助我们判断哪个方案更合适当前的项目。
-
当前 AI 编程工具提高的是实施效率,但关键节点的判断决定它还做不了。
这也就意味着,在这种模式下如果人判断错了,后续失败或返工的结果也是开发者自己承担。不能过度依赖 这套工具。
未来畅想(胡言论语)
我相信未来随着AI 编程工具越来越智能,开发过程中的 反馈和自我修复能力应该会大大进化:
-
尤其是涉及UI 的部分,AI 工具可直接得到最终页面效果图,然后以图识别出页面效果和问题。然后,询问用户是否让它自动完成“修改” –> “测试” –> “反馈” 这一套流程。
-
当出现 报错时,AI 工具可以从多个维度 搜集问题信息,进而归类整理出问题根本原因,然后提交、对比三个解决方案。
-
另外,大家有没有想过 为啥AI 编程工具先火了,并且反响还不错。
但是,其他高科技行业 如造车、芯片制造哪怕是视频生成 都没有这么高效&可行。。。这背后也有 代码本身就是优秀的结构化数据的原因。