因为AI笔试,尤其是牛客网的AI笔试, Agent性能非常拉,一定要在提示词上下功夫,它会有如下问题

  1. 短上下文容量导致注意力涣散: 一定要将关键信息持久化为md文档,比如事实维护一个code.md保存工作上下文中的关键信息。 tips:agent又笨又没权限,一定要明确让它创建文档,否则它可能试图读文件,然后没有权限,然后找你要一个不存在的文件的读权限
  2. Agent个性古怪,喜欢过度发挥,默认会发散要求,做一些要求之外的事,而且往往不可控,哪怕方向蒙对了也效果很差: 每一次发消息都要有围栏信息,明确不让它做的事
  3. AI没脑子,跟它说话不要带感情带情绪,要高效明确地指挥它做事

1. 明确任务

,先不要写代码,先把任务明确

1
2
3
4
5
6
7
8
9
10
11
12
13
切换你的角色为问题研究员,**不要写代码,也不要给实现方案**。先把这个任务整理成一份可执行的问题定义,只输出:

1. 最终交付产物
2. 硬约束
3. 隐含要求
4. 什么叫完成
5. 容易翻车的风险点

要求
- 尽量短
- 不要做实现假设
- 不明确的地方标出来
- 输出结果到你创建的`question.md`

然后不要急着往下走,一定要看一眼question.md有没有不明确的点,这些往往是AI做不了的决策,要把这些决策清空了再往下走,否则会严重影响质量

2. 选择方案

先让AI多给2~3种方案,防止AI按自己的理解一条道走到黑,最后翻车。给出多个方案后可以再和AI讨论选择的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
切换你的角色为方案设计师,不要写代码,基于刚才的问题定义,给2到3条执行方案,每个方案有如下内容:

1. 大致怎么做
2. 主要优点
3. 主要风险
4. 实现复杂度
5. 可测试性

要求:
- 最后请明确推荐一条方案,并说明为什么不选择另外几条,
- 要求首要考虑稳定交付,而不是炫技
- 输出结果到你创建的`design.md`

3. 确定骨架

这里对骨架的定义是模块,接口,数据,这个是后面代码开发的重要依据,可以每一轮代码开发都把这个文件发过去,保持注意力

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
切换你的角色为架构工程师,基于已选定的方案,先不要展开实现细节,请先输出一份足够支持编码开发的系统骨架,至少包括

1. 模块拆分
2. 目录结构
3. 各模块职责和能力边界
4. 核心接口或API
5. 关键数据结构
6. 主链路时序
7. 权限、隔离和、边界

要求:
- 足够支撑编码
- 简洁精炼,不要写成长篇设计文档
- 如果有边界还不稳,请明确标出来
- 结果输出到你创建的`skeleton.md`

4. MVP实现循环迭代

为了稳定交付,最好是先做出MVP实现,然后循环迭代和验证

为了保持注意力,可以每轮迭代都发送@question.md@skeleton.md,然后为了减少重复劳动,可以把下面的提示词都写到pxx.md中,
比如这一步第一轮发的提示词写到p1.md或者mvp.md

bug反馈: AI往往做不到一次性写好,要将编译报错和测试报错返回给它,但别忘了执行一下题目的样例自测和提交自测(总共可以提交20次),次数其实挺多的,而且也有反馈提示,可以告诉AI有哪些最基本的接口约束没做好,可以有效防止AI注意力发散

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
切换你的角色到代码开发工程师,现在开始编码实现,先完成MVP闭环

请先回答:
1. 什么事这套系统最小可运行闭环
2. 应该按什么顺序实现
3. 哪些东西现在必须做
4. 哪些东西现在明确先不做

然后只围绕这个最小闭环开始写代码

要求:
- 不要提前铺满所有功能
- 每完成一部分,都给出最短验证方式/ (如果没提供终端就写这个: 每完成一部分,就自行执行最短验证测试)
- 如果发现规格有冲突,先指出,不要默默改掉
- 每一阶段开发都维护同一个`code.md`,要求尽量短,只记录关键信息,过期/低价值信息及时删除

然后后面循环迭代就可以复制粘贴这个文件,改名成pxx+1.md,写入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
切换你的角色到代码开发工程师,现在开始编码实现,在已有代码的基础上实现下一阶段开发

请先回答:
1. 什么是添加新功能后的最小逻辑闭环
2. 应该按什么顺序实现
3. 哪些东西现在必须做
4. 哪些东西现在明确先不做

然后只围绕这个最小闭环开始写代码

要求:
- 不要提前铺满所有功能
- 每完成一部分,都给出最短验证方式/ (如果没提供终端就写这个: 每完成一部分,就自行执行最短验证测试)
- 如果发现规格有冲突,先指出,不要默默改掉
- 每一阶段开发都维护同一个`code.md`,要求尽量短,只记录关键信息,过期/低价值信息及时删除

最后再来个收尾提示词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
切换你的角色到代码开发工程师,现在开始编码实现,在已有代码的基础上实现下一阶段开发

请先回答:
1. 什么是添加新功能后的最小逻辑闭环
2. 应该按什么顺序实现
3. 哪些东西现在必须做
4. 是否完成收尾的全部工作

然后只围绕这个最小闭环开始写代码

要求:
- 不要额外添加新功能
- 每完成一部分,都给出最短验证方式/ (如果没提供终端就写这个: 每完成一部分,就自行执行最短验证测试)
- 如果发现规格有冲突,先指出,不要默默改掉
- 每一阶段开发都维护同一个`code.md`,要求尽量短,只记录关键信息,过期/低价值信息及时删除

5.补充异常和边界

简单场景用不到,复杂场景没时间用,这部分提示词缺乏验证

完成的主流程MVP实现,还缺少如下内容

  • 异常路径
  • 权限边界
  • 输入校验
  • 失败场景
  • 剩余风险
1
2
3
4
5
6
7
8
9
10
现在先不要继续推进新功能

请你切换成“安全审查员+质量工程师”的视角,只看一下几件事
1. 哪些异常路径还没覆盖
2. 哪些权限边界还没卡住
3. 哪些输入还缺校验
4. 哪些失败现在会让系统行为很差
5. 哪些风险必须修,哪些可以作为已知限制留下

请先列问题,再按优先级排序,再给出最小必要修改建议

6.用证据验收

就是验收,根据实际情况编写

1
2
3
4
5
6
7
8
9
10
11
请你切换成AQ 和 reviewer,不再默认当前结果是对的

基于已确认的问题定义,系统骨架和当前实现,请做一次系统性自检

请输出:
1. 主链路应该有哪些测试
2. 关键异常路径应该有哪些测试
3. 当前最值得跑的测试命令
4. 哪些地方还没有证据证明它是对的
5. 按严重程度列出当前缺口
6. 给出一个明确结论,现在能不能交,如果不能,卡点在哪

7. 把交付写清楚

检查一遍交付物,很重要,查漏补缺

1
2
3
4
5
6
7
8
9
10
11
12
13
现在请你切换成交付负责人,不再增加新功能,只做最后收口

请把当前结果整理成一套别人接的住的交付材料
1. README: 怎么启动,怎么跑,怎么验证
2. 设计说明:为什么这么设计,核心结构是什么
3. 测试说明: 验证了什么,还有什么没验证
4. 风险与限制:哪些问题是已知的,为什么对当前仍可接受
5. 演示顺序: 如果只有几分钟,应该按什么顺序战士

要求:
- 不要重新编故事
- 文档必须和真实实现一致
- 用最短路径让人看懂