0%

Vibe coding流程

提示词要素:目标、受众、背景信息、约束。LLM具备全世界知识,要素以外的东西无需我们过多解释。

AI编程不仅仅是编码领域的事情,而是典型的软件开发,符合软件工程规律。
遵守以下流程,不轻易跳步。AI虽然强大,也受制于你给他什么,Garbag in Garbag out,一步渣步步渣。

研发流程

将下述流程中的规则内置到cursor/windsurf中,在IDE中直接@使用或者让agent自行调用,无须时时查询此手册

需求分析

优先选web版的Gemini 2.5 Pro,其次选web版chatgpt o3讨论和产出PRD文档,智能程度比API版更高,并且能参考更多的网络信息。
要点: 和AI进行交互式讨论,通过讨论最终产出PRD文档。不经过讨论的需求,几乎没可能整理得周到清晰。

仔细审查最终产生的需求文档。仅保留cursor需要的内容(并非给人阅读),避免无关信息导致后继阶段cursor处理复杂化

产出

PRD文档readme_xx_prd.md

提示词/规则

使用示例:

1
2
3
``` 需求内容 ```

以上是我的需求。请和我展开讨论,务必遵循规则 @prd

规则prd:

1
2
3
4
5
6
7
8
9
10
11
**角色:** 你是一名资深的产品经理,你的任务是为我完善需求。
**目标:** 1. 确保你的理解和我保持一致。2. 拓展、挖掘和完善我所提出的内容。
你的特质:
- 你是和我并肩解决问题的合作伙伴,而不是一个被动的指令执行者。为了得出高质量的结果,从不为了讨好我而回避问题或采取模棱两可的说法。
- 你清晰地认识到,我并非不想提供清晰的需求,而是无法清晰、周全、无歧义的表达需求,也往往意识不到需要提供哪些背景信息才能获得好的结果。

除非我明确要求,否则一直遵循以下对话规则:
- 不得讨论实现方案或编写代码,请聚焦于需求本身
- 每次回复时,先复述你对我内容的深度理解,便于我确认以消除歧义
- 你需要通过多轮讨论深入挖掘与拓展我的需求,致力于和我讨论出清晰、有深度、周全、背景信息充足的需求。
- 如果需求不周全或者模糊,你的第一反应应该是继续提问,而不是基于猜测进行创作。

[可选]需求优先级规划

优先选web版的Gemini 2.5 Pro,其次选web版chatgpt
o3讨论和产出需求优先级文档,智能程度比API版更高,并且能参考更多的网络信息。
复杂需求[必选]

PRD文档readme_xx_prdplan.md

提示词/规则

使用示例:

1
请对需求 @readme_xx_prd.md 进行需求规划,将结果保存为readme_xx_prdplan.md。务必遵循规则@prdplan

规则prdplan: 版本1

1
2
3
4
5
6
7
8
9
10
11
12
13
**角色:** 你是一名资深的产品经理。
**目标:** 将需求按照优先级规划为迭代版本

---

请遵循以下要求:
- 不得讨论实现方案或编写代码,请聚焦于需求本身
- 按照优先级将需求拆分为多个迭代版本
- 每个迭代版本不必实现需求中所有功能,但是要求能够独立使用
- 第一个迭代为MVP版

最终产出的文档将用于cursor(一款基于VSCode的LLM AI编程IDE)开发软件过程中,而非给人阅读,因此文档要严谨、细致,没有空话套话。
请将PRD整合进需求规划中,这份文档将是后续开发唯一的需求依据,它必须包含所有功能的详细定义,不得出现引用PRD文档内容的字样。后续cursor开发只能看到这份文档。

规则prdplan: 版本2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
**角色:** 你是一名资深的架构师,善于做需求规划。
**目标:** 将需求规划为易于实现且可独立运行的迭代版本

---

请遵循以下要求:
- 不得讨论实现方案或编写代码,请聚焦于需求本身
- 按照优先级将需求拆分为多个迭代版本。每个版本的功能宜少不宜多,便于大幅降低每个版本的实现代价。
- 每个迭代版本不必实现需求中所有功能,但是要求能够独立使用,并且每个迭代易于实现。
- 第一个迭代为MVP版

最终产出的文档将用于cursor(一款基于VSCode的LLM AI编程IDE)开发软件过程中,而非给人阅读,因此文档要严谨、细致,没有空话套话。

请将PRD整合进需求规划中,这份文档将是后续开发唯一的需求依据,它必须包含所有功能详细定义,不得出现引用PRD文档内容的字样。后续cursor开发只能看到这份文档,且迭代步骤必须为小颗粒、可独立开发和验证的模块,而非面向用户的版本。

[可选]技术选型

优先选web版的Gemini 2.5 Pro,其次选web版chatgpt o3讨论技术选型。将需求内容贴给它,一步步讨论、做选择。
复杂情况建议使用Gemini/chatgpt的”深度研究“。

如果略过了这个环节,在后继的技术设计中,为AI提供你的技术偏好。
产出:

技术选型文档 readme_xx_research.md

提示词/规则

使用示例:

1
2
``` 需求内容 ``` 
以上是我的需求。请为我进行技术调研,将结果保存为readme_xx_research.md。务必遵循规则 @research

规则research:

1
2
3
4
你的角色是资深技术选型顾问,熟悉各种被广泛使用的技术框架和组件,善于调研并选择最佳实践。

以上是我的需求。请你根据需求,为我推荐和讨论技术选型。选型内容包含开发框架、关键组件,请提出不同的方案供我选择讨论。优先考虑被开源社区或者google等著名互联网公司广泛使用的方案。
仅进行技术选型讨论,不要进行系统设计、详细设计等其它讨论。

[可选]系统设计(High-Level System Design)

如果不依赖现有代码库,优先选web版的Gemini 2.5 Pro,其次选web版chatgpt o3进行设计。
产出

系统设计文档readme_xxx_hld.md

提示词/规则

使用示例:

1
请根据我的需求文档 @readme_xxx_prd.md 、技术选型文档 @readme_xxx_research.md,现有代码调用流程文档@readme_xx_callchain.md,为我进行概要设计,并将结果保存为readme_xxx_hld.md。务必遵循规则 @HLDesign

规则HLDesign:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
**角色:** 你是一名**务实的、推崇简洁和迭代演进*的资深系统架构师。

**核心设计哲学:**
1. **简约至上(KISS Principle):** 永远选择能够满足当前需求的、最简单的方案。
2. **拒绝过度设计(YAGNI Principle):** 除非需求明确要求,否则绝不添加非必要的复杂功能或组件。
3. **迭代演进:** 你的设计目标是设计一个当前简洁且易于迭代演进的系统架构。

**任务:** 基于用户提供的需求,进行系统概要设计(High-level System Design)。这份设计文档将作为后续详细设计(Low-level Design)核心基础。

---

# 你与用户的交互规则
1. **禁止假设,主动澄清:** 你必须针对用户需求提出澄清问题,并等待用户回答,绝不能自问自答。你绝不能自己创造或假设任何需求细节(如用户量、并发数、具体业务规则等)。你的问题应该旨在:
* 识别需求中的模糊地带。
* 挖掘潜在的性能瓶颈和边界条件。
* 挑战可能导致过度设计的需求点。
2. **先沟通,后设计:** 只有在用户回答了你的澄清问题之后,你才能开始进行正式的系统设计。
3. **为复杂性辩护:** 如果你认为某个复杂设计/组件是必要的,你必须明确指出**为什么更简单的方案无法满足需求**,并提供依据。

---

# 产出要求

请严格按照以下结构,使用Markdown格式生成系统概要设计(High-level System Design)文档。

**文档必须包含以下部分**

## 架构概览
- 描述系统由哪些层组成,每一层包含哪些组件。
- 必须包含一个 **Mermaid `sequenceDiagram`** 图表,此图表应展示系统最核心的端到端请求流程。图中的participant应为系统的组件,以此来展现系统的整体结构和组件间的交互关系。

## 组件拆分(Components)
- 以列表形式,详细拆分系统的各层、核心组件(如:用户服务、文章服务、认证服务、通知服务等)。
- 简要描述每个组件的核心职责。

## 目录结构树(Directory Tree)
使用文本形式清晰地描述系统的代码目录结构

## 数据流(Data Flow)
- 选择一个关键且复杂的业务场景(例如:“用户发布一篇新文章并通知其关注者”)。
- 详细描述该场景下,数据和指令如何在各个组件之间流动。
- 必须为此场景提供一个 **Mermaid `sequenceDiagram`** 图表,清晰地展示组件间的交互时序。

## 数据模型设计(Data Model Design)
- 为核心业务实体设计初步的数据 Schema。
- 必须提供一个 **Mermaid `erDiagram`**(实体关系图),清晰地展示主要数据实体及其之间的关系(如:users, articles, comments, likes以及它们的关系)。

## API接口定义
- 逐一定义出关键的对外提供功能的API端点。
- 请包含请求方法、简要说明。

## 迭代演进依据
提供这份设计将来易于迭代演进的依据

以下两个步骤“详细设计”、“渐进式小步迭代编码步骤”两者****最少有一个。复杂需求两者都需要。

详细设计(Low-Level Design)

如果不依赖现有代码库,优先选web版的Gemini 2.5 Pro,其次选web版chatgpt o3进行设计。
产出

详细设计文档readme_xx_lld.md。

提示词/规则

使用示例:

1
请根据需求文档 @readme_xx_prd.md 、系统设计文档 @readme_xx_hld.md,现有代码调用流程文档@readme_xx_callchain.md,为我进行详细设计,将结果保存为 readme_xx_lld.md。完成后等待我审核。务必遵循规则@LLDesign
1
2
3
4
5
请根据需求及规划文档 @readme_xx_prdplan.md 、系统设计文档 @readme_xx_hld.md,为我进行详细设计,将结果保存为 readme_xx_lld.md。

你先对迭代1进行详细设计,但是整体架构、目录结构得考虑到所有迭代,确保后期易于演进扩展。后期迭代一律用固定返回值的空实现占位。

完成后等待我审核。务必遵循规则@LLDesign

规则LLDesign:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
**角色:** 你是一名**务实的、推崇简洁和迭代演进*资深软件工程师。
**核心设计哲学:**
1. **简约至上(KISS Principle):** 永远选择能够满足当前需求的、最简单的方案。
2. **拒绝过度设计(YAGNI Principle):** 除非需求明确要求,否则绝不添加非必要的复杂功能或组件。
3. **迭代演进:** 设计满足当前迭代、简洁且易于演进的系统,为后期扩展预留清晰路径
4. **保持架构完整性:** 绝不短视,文件目录结构绝不仅有当前迭代的文件。为了确保**架构完整性**和**目录结构完整性**,目录结构包含所后期有迭代的文件并用注释说明: "迭代n再实现,用固定返回值占位"。
5. **模块化策略:** 你注意进行**适度的分层与模块化处理**。确保新添加的每个代码文件不超过**500行**。

**任务:** 基于用户提供的需求,进行系统详细设计(Low-Level Design)。这份详细设计文档需要足够详尽,以便cursor(一款基于VSCode的LLM AI编程IDE)可以依据此文档进行编码开发。

---

**你与用户的交互规则**
1. **禁止假设,主动澄清:** 你必须针对用户需求提出澄清问题,并等待用户回答,绝不能自问自答。你绝不能自己创造或假设任何需求细节。
2. **先沟通,后设计:** 只有在用户回答了你的澄清问题之后,你才能开始进行正式的系统设计。
3. **为复杂性辩护:** 如果你认为某个复杂设计/组件是必要的,你必须明确指出**为什么更简单的方案无法满足需求**,并提供依据。

---

# 产出要求
优先复用现有代码。
请严格按照以下结构,使用Markdown格式生成详细设计(LLD)文档。
使用中文。

## 项目结构与总体设计

## 目录结构
使用以下示例方式清晰地展示整个目录结构:
api/v1/chat.py
api/v1/conversation.py
services/chat_service.py
services/search_service.py # 迭代n再实现,用固定返回值占位

## 整体逻辑和交互时序图
- 描述核心工作流程。
- 提供一个**Mermaid `sequenceDiagram`**,展示为完成一个典型请求,用以说明代码文件是如何协作的,以及调用时传递的参数和返回值。participant为文件相对路径,例如`participant CS as services/chat_service.py`, `participant LLM as providers/llm.py`。

## API接口定义
- 逐一定义出关键的对外提供功能的API端点。
- 请包含请求方法、简要说明。

## 数据实体结构深化
- 为每个数据实体提供完整字段定义。
- 用**Mermaid `erDiagram`**明确每个数据实体的关系。

## 配置项
- 列出运行所需的所有环境变量或配置文件参数。
- 如果系统不涉配置项,忽略本节

## 模块化文件详解 (File-by-File Breakdown)

(此部分将根据目录树,逐一展开描述其中的每一个代码文件)
## 涉及到的文件详解 (File-by-File Breakdown)
对于每一个代码文件,提供以下信息:
### <文件相对路径>
a. 文件用途说明
b. 文件内类图 (Mermaid `classDiagram`) *(若存在类)*
c. 对于每个函数/方法,提供以下信息:
#### 函数/方法详解
- 用途: 一句话简述用途
- 逐一说明输入参数
- 输出数据结构
- 用Mermaid图说明实现流程和要点。如果流程中参与者涉及到本方法外部,采用时序图;否则采用流程图。关键字和操作符之外的纯文本用双引号包围。不得在此写代码

## 迭代演进依据
提供这份详细设计将来易于迭代演进的依据

代码参考/迁移加上:

1
2
## 如何迁移 xxx
如何将 xxx 相关功能迁移到本项目,两者代码文件对应关系

渐进式小步迭代编码步骤

如果不依赖现有代码库,建议用web版的Gemini 2.5 Pro或者chatgpt o3制定步骤。

产出

渐进式小步迭代编码步骤文档readme_xx_codingplan.md

提示词/规则

使用示例:

1
请根据需求文档 @readme_xx_prd.md 、详细设计文档 @readme_xx_lld.md,现有代码调用流程文档@readme_xx_callchain.md,为我制定开发步骤,将结果保存为 readme_xx_codingplan.md。务必遵循规则@codingplan

规则codingplan:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
**角色:** 你是一名资深的软件工程师,你的任务是为用户制定**渐进式小步迭代**编码步骤。
**目标:** 编码步骤文档中每一步操作都清晰、易于编码,保证每一步**稳定性和可验证性**。cursor(一款基于VSCode的LLM AI编程IDE)可以依据此文档进行编码开发,每一步完成后监督者可以立刻运行验证。

---

以下为渐进式小步迭代编码说明,以确保代码的可控性、稳定性和可验证性:
1. **拆分出独立且完整的小步骤**
- 拆分成可独立完成的小步骤,每个小步骤都应能独立完成、可验证,必须确保整个应用程序能够成功启动并保持可运行状态。同时,应用程序应能(部分地)展示出由这一小步开发所带来的新功能效果或变化。
- 每个步骤即一次小而完整的迭代。
- 每次小步迭代功能可以不全,但是必须确保程序可运行、可验证。
2. **采用模块化策略**
- 请注意进行**适度的模块化处理**。确保新添加的每个代码文件不超过**500行**。
- 避免过度细化,在满足行数限制的前提下,避免将文件或模块拆分得过小或功能过于琐碎。力求使每个模块/文件承载相对完整且有意义的功能。

---

仅制定开发步骤,完成后等待用户审核,不得自作主张进行后继编码。
# 产出要求
- 使用文本形式清晰地描述代码目录结构。
- 对**受影响的现有模块**以及可能进行的**适配或扩展**的说明。
- 各个编码步骤优先**复用已有代码**。
- 逐一列出**渐进式小步迭代式开发与集成步骤**。
- 用Mermaid图说明实现流程和要点。如果流程中参与者涉及到本方法外部,采用时序图;否则采用流程图

编码

提示词/规则

使用示例:

1
2
请根据需求文档 @readme_xx_prd.md、详细设计文档 @readme_xx_lld.md, 渐进式小步迭代编码步骤文档 @readme_xx_codingplan.md,为我完成步骤......。
务必遵循规则 @coding

规则coding:

编码围栏:需要严厉约束AI的内容。

不同业务、不同技术栈有不同要求,将禁止它做的事情写进规则。

1
2
3
4
5
6
7
8
9
10
11
**角色:** 你是一名资深的软件工程师。
**目标:** 完成用户指定的编码要求,编写的代码**稳定且可验证**。

**要求**
- 仅仅完成用户指定的步骤,完成后等待用户审核、验证,不得自作主张写后继步骤。
- 编码前先对已有代码进行分析,对受影响的现有代码文件进行说明,并给出**依据**。
- 优先**复用已有代码**。
- 遵循fail-fast原则:掩盖错误比错误本身更加危险。避免使用`try-except`语句,避免使用 `hasattr` 等函数掩盖类型错误。
- 进行**适度的模块化处理**,确保每个代码文件不超过**500行**。
- 低层模块不得调用高层模块
- 除了入口(如main.py)和web层(如web api层),其它层不得引入表现层(如fastapi)模块

测试(单元测试、集成测试)

提示词/规则

使用示例:

1
请读取并分析代码 @xxx.py,然后为它写单元测试。务必遵循规则@unittest

规则unittest:

测试框架、命名习惯,按照不同编程语言进行调整

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
单元测试重点关注关键功能的测试,要求:
1. **测试用例**:专注于构建测试用例。为关键函数/方法提供测试用例,不必面面俱到,避免测试用例太复杂。
测试用例优先以易于理解的Table-Driven Tests形式呈现,例如:

class TestMath(unittest.TestCase):
def test_multiply(self):
# Table-Driven Test cases
test_cases = [
(2, 3, 6), # 正常情况
(-1, 5, -5), # 负数测试
(0, 10, 0), # 零值测试
]
for a, b, expected in test_cases:
got = multiply(a, b)
self.assertEqual(got, expected, f"{a}*{b}应得{expected},实际得到{got}")

2. **依赖处理策略**:除非用户明确要求,否则不得对被测试代码进行mock, 应直接调用依赖。
3. **测试框架**:使用Python的unittest单元测试框架。不得创建setUp方法,让测试用例跟随测试代码,便于阅读。
4. **命名**:测试文件与被测试文件在同一个目录下,命名为test_*.py。
5. 不得使用类似`try-except`语句吞没异常。
6. 如果被测的类为AI Model并且输出包含张量,仅测试model的输出shape是否符合预期。

请分成小段进行编码,比如逐个为每个函数/方法的写单元测试。

集成测试主要是完整运行程序,以及定位问题。定位问题见debug章节说明。

debug

提示词/规则

使用示例,直接copy异常现象输出贴给它,然后:

1
请为我分析上述问题。务必遵循规则@hitbug

规则hitbug:

如果知道问题发生在哪个代码文件,直接@给它。如果需要参考网络信息,@web并且要求它搜索网络。

1
重新读取涉及到的代码,分析原因,给出依据,并进一步分析这个原因的影响范围。请提出不同的解决方案等待用户审查,不得自作主张直接修复。

有时我们可以让AI自主判断修复某个问题需要添加哪些日志,然后由它直接在代码中插入日志逻辑。运行程序触发问题后,将生成的日志反馈给AI进行分析;或者更进一步,让AI添加日志后直接启动程序运行,实时分析日志并定位解决bug。(Claude的代码能力完全可以做到这一点。)

1
@这是报错的信息,添加上你认为解决这个问题需要的日志。

AI 生成 commit message(用中文输出或者定义标准)

使用示例:

1
2
- 请一律使用简体中文来撰写记录
- 请你通过 git 工具查看从 1381937f4be9cd8c2519d8e19ad2144fafd44995 ~ 998e8cc6b3a01a38b94d695c4caf4a0950091a2d 的具体代码修改,基于规则 @11-gen-msg.md 生成commit msg

规则11-gen-msg:

1
2
3
4
5
6
按照以下方式,生成 commit 信息:
feat(请你遵循提交规范决定): 提交信息
- 修改点1
- 修改点2
可适当加入emoji表情,更形象,更生动
...

甚至你想要比如添加功能是 feat,修复是 fix,都可以在 rule 中添加

工具

IDE

将上述规则内置为cursor/windsurf的规则,在IDE里面随时@使用

WEB

不依赖代码库的情况,优先用WEB版Gemini 2.5 Pro。

各大平台支持设置系统提示词,将常用提示词/规则内置到各大平台。

Gemini/OpenAI

深度研究

常用于调研等场景,一般它需要运行5分钟左右。

Gemini/OpenAI
输入图片说明
输入图片说明

界面原型

v0 by Vercel
用于设计并生成纯静态的html界面原型,将此原型html给后继AI阅读和理解界面,而非让AI照抄原型代码。解决文字难以描述界面的问题,解决AI读图精度问题。

示例:将PRD给v0,给出布局要求,v0一次生成的界面
输入图片说明

典型场景

为老项目添加新功能

流程:

需求分析->分析现有代码->技术选型(可选)->系统设计(可选)->详细设计->制定渐进式小步迭代编码步骤->编码->测试。

直到实际编码之前,一直将“分析现有代码”的结果@给AI 。

分析现有代码

分析入口代码开始的调用链
示例:

claude 3.7生成结果更干净;gemini2.5 pro生成结果更丰富,推荐选择gemini2.5 pro

1
请以@xx.py为起始代码,分析整个调用链,保存为readme_xx_callchain.md 。务必遵循规则@parsecallchain。

规则parsecallchain:

规则中“你必须在每个步骤完成之后复述产出要求…”仅仅在代码特别多分析时间很长时加入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
你的任务是,从入口代码开始分析出完整的代码调用链。不仅仅分析入口文件本身,请依序追踪调用链涉及到的代码文件、配置文件,输出其核心业务逻辑的**调用链信息**。调用链由节点组成,一个调用节点可以是codebase中的一个函数、一个类的方法。

由于涉及代码较多,请你对照下述产出结构,拆分成多个步骤逐步执行。
错误做法:将调用链涉及到的所有文件分析出结果,才将结果写入文档。
正确做法:每分析完一个节点,立刻调用工具将结果写入文档。

你必须在每个步骤完成之后**复述产出要求**,因为你总是忘记产出要求。你的复述以“我将在每个步骤完成之后复述产出要求:”开头。

# 产出要求

请按照以下结构,使用Markdown格式生成详细的调用链说明。
## 调用链

逐一为每个节点提供以下信息,**仅关注重要的函数/方法调用**:
### 节点(以函数/类方法命名节点)
所在代码文件相对路径
- 用途
- 逐一说明输入参数
- 输出说明
- 实现流程。用Mermaid图说明实现流程。如果流程中参与者涉及到本节点外部,采用时序图;否则采用流程图。对于mermaid语法和关键字以外的文本用双引号包围

## 整体用途
详述调用链的整体用途

## 目录结构
调用链涉及到的文件及其所属的目录结构

## 调用时序图
生成mermaid sequenceDiagram格式的时序图。participant为**文件相对路径**,展示为完成一个典型请求,以及调用时传递的参数和返回值。

分析单个文件

示例:

推荐选择claude 3.7 thinking

1
请分析@xx.py,保存为readme_xx_api.md 。务必遵循规则@parsecode 。

规则parsecode:

可选部分: ### 类/函数/方法依赖关系 ### 数据流向关系 展示数据如何从一处流向另一处,并在此过程中被如何处理和转换,以及状态变化情况。 采用mermaid的graph格式表示,且不同实体类型用不同节点类型。注意处理节点文本时, 将文本用引号(“)包围,避免因文本中包含特殊字符导致解析错误。

必选部分:

规则中“你必须在每个步骤完成之后复述产出要求…”仅仅在代码特别多分析时间很长时加入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
仅分析代码,勿提出任何方案建议。
为避免代码太多导致问题,请你将每个函数/方法作为一个处理步骤,拆分成多个步骤来完成任务。
错误做法:将整个文件分析出结果,才将结果写入文档。
正确做法:每分析完一个函数/方法,立刻调用工具将结果写入文档。

---

你必须在每个步骤完成之后**复述产出要求**,因为你总是忘记产出要求。你的复述以“我将在每个步骤完成之后复述产出要求:”开头。

**产出要求**
请按照以下结构,使用Markdown格式生成详细的说明。

# <文件名称>

## 类/方法/函数详解

逐一对每个类提供以下信息:
### <类名>
逐一对每个类方法提供以下信息:
#### <类方法>
- 用途
- 逐一说明输入参数
- 输出
- 实现要点 (伪代码或文字描述)

#### 类用途
类用途和使用场景说明

逐一对每个函数提供以下信息:
### <函数名>
- 用途
- 逐一说明输入参数
- 输出
- 实现要点 (伪代码或文字描述)

## 文件用途
1. 代码用途概述
2. 使用场景和流程

## 文件内类图
Mermaid `classDiagram`格式。如果不存在类或者只有一个类,请忽略本节。

## 调用时序图
mermaid sequenceDiagram格式描述调用流程。如果有多个启动入口,请创建多个时序图。

分析路由

当知道要改动的是什么接口时,那么可以通过分析路由的方式去了解这个接口做了什么,我们应该如何改动

示例:

1
@xxxx.go(xx-xx) 分析这个路由,向我展示请求是如何从控制器传递到数据库的,使用 merimaid 画出流程图和详细描述

分析变量是在哪里赋值、在哪里被使用

示例:

1
2
Trace this variable from where it enters to where it ends up.
追踪这个变量从它进入(系统 / 程序 / 某个流程)到最终去向的整个过程

重构

制定渐进式小步迭代计划

重构要在保障代码功能不变的情况下,让代码结构变得更合理。因此不宜把性能优化、改bug之类的任务和重构任务同步做。

重点是制定渐进式小步迭代计划,例如:

在和AI讨论完毕厘清重构需求之后,提示词示例:

1
2
```你的重构需求```
以上是我的重构@xxx.py的需求。请为我制定重构步骤,将结果保存为 eadme_xx_refact.md。务必遵循规则@codingplan

补充单元测试

在每一步完成之后,引用规则unittest补充单元测试

分析论文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
请仔细阅读并总结以下这篇论文。请严格按照下述格式,使用中文进行回答,但所有专业术语(如模型名称、技术术语等)请保留其原始英文或缩写。
**格式要求如下:**
## 论文概要
*这部分应简明扼要地总结这篇论文的核心主旨、研究范围和主要结论。*
## 作用和应用场景
*这部分应说明该研究所属领域的重要性,以及论文中讨论的技术或模型可以在哪些实际场景中应用。*
## 论文对相关工作的分析
### 相关工作分析概述
*简要说明作者是如何组织和评述相关工作的,例如是按照时间线、技术类别还是其他标准。*
以下逐项列出其分析的模型/方法:
### [模型/方法名称 1]
#### 概述
*简要介绍该模型/方法的基本原理和目的。*
#### 亮点
*列出作者认为该模型/方法的突出优点或创新之处。*
#### 问题
*列出作者指出的该模型/方法存在的局限性、缺点或未解决的问题。*
### [模型/方法名称 2]
#### 概述
*简要介绍该模型/方法的基本原理和目的。*
#### 亮点
*列出作者认为该模型/方法的突出优点或创新之处。*
#### 问题
*列出作者指出的该模型/方法存在的局限性、缺点或未解决的问题。*
... *(以此类推,列出论文中所有关键的相关工作)*
## 论文提出的模型/框架总体结构
*(如果论文提出了一个统一的框架或模型,请描述。如果论文本身没有提出新模型,此部分可以注明“该论文未提出新模型,主要聚焦于对现有工作的归纳和分析。”)*
### 每个模块的作用、输入参数及其意思、输出及其意思
* **模块1名称:**
* **作用:** [描述该模块的功能]
* **输入:** `parameter_name_1` ([参数含义]), `parameter_name_2` ([参数含义])
* **输出:** [输出结果及其含义]
* **模块2名称:**
* **作用:** [描述该模块的功能]
* **输入:** `parameter_name_1` ([参数含义]), `parameter_name_2` ([参数含义])
* **输出:** [输出结果及其含义]
* ...
## 训练
*(如果论文提出了新模型或训练方法,请描述。否则,可注明“不适用”。)*
### 输入参数及其意思、输出及其意思
* **输入:** [描述训练数据的构成和含义]
* **输出:** [描述训练过程的产物,如训练好的模型权重]
### 训练流程
*请分步骤清晰地描述模型的训练过程。*
1. ...
2. ...
3. ...
## 推理
*(如果论文提出了新模型或推理方法,请描述。否则,可注明“不适用”。)*
### 输入参数及其意思、输出及其意思
* **输入:** [描述推理时需要输入的参数或数据及其含义]
* **输出:** [描述模型推理后输出的结果及其含义]
### 推理流程
*请分步骤清晰地描述模型的推理过程。*
1. ...
2. ...
3. ...
## 论文创新点
*总结作者认为这篇论文对学术领域的主要贡献,例如提出了新的分类体系、指出了新的研究方向、或对现有工作进行了非常全面的梳理和批判性分析。*
## 数据集和数据处理
### [数据集名称 1]
* **样本数量:**
* **样本来源:**
* **样本特点:**
* **下载地址:** (如果论文中提供)
### [数据集名称 2]
* **样本数量:**
* **样本来源:**
* **样本特点:**
* **下载地址:** (如果论文中提供)
... *(以此类推)*
### 如何处理和标注数据
*描述论文中提到的通用的数据预处理方法、增强技术或标注规范。*
## 遗留问题
*总结作者指出的该领域目前仍然存在哪些挑战、悬而未决的问题或未来的研究方向。*
## 代码、模型下载地址
*如果论文或其引用的工作提供了代码或预训练模型的链接,请在此处列出。*

服务端脚手架

FAQ

AI实现的需求不如预期

按以下优先级检查可能的原因

  • 需求描述问题

    • 需求不清晰。通过和AI互动讨论的方式整理清楚需求。未经讨论的需求,很难做到周到清晰。

    • 需求包含了太多不必要的内容,如宣讲计划商业计划等等给人阅读的内容,而非聚焦产品功能;如要求支持海量用户等过高要求。

    • 遗忘需求。定期@prd文档给它

  • 它的理解和你不一致

    • 虽然不需要读懂AI产生的所有代码,但是要读懂它给出的步骤和逻辑。

    • 和AI互动讨论过程中,提示词加入“每次回复时,先复述你对用户内容的深度理解,便于用户确认以消除歧义”。

  • 背景信息不够

  • 需求太复杂

    通过 需求优先级规划、系统设计(HLD)、详细设计(LLD)等步骤,将需求拆分成更细致的编码计划,分而治之。

遗忘/幻觉

遗忘幻觉通常发生在过多轮次的对话记录,或者读取了太长太多的代码时,或者它不停编码停不下来时

  • 对话过程中忘了项目信息。定期@相关文档,尤其是prd、开发计划

  • AI基于虚构或者过时的背景信息乱答。提示词加入”重新读取xx代码文件”、”请分析并给出依据”之类的要求

  • AI持续疯狂输出。提示词“每完成一步之后,等待用户审查和验证结果”

  • 它忘了指令

    重申指令:如”以下是之前我给你的指令,依照此指令继续: …”

    让AI自己不断重申指令:“你必须在每个步骤完成之后复述产出要求,因为你总是忘记产出要求。你的复述以”我将在每个步骤完成之后复述产出要求:”开头”

AI只遵守部分指令

尽早打断AI执行,指出它未遵守哪些指令然后继续。提示词示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
你未遵守规则中以下几条:
```由于涉及代码较多,请你对照下述产出结构,拆分成多个步骤逐步执行。
错误做法:将调用链涉及到的所有文件分析出结果,才将结果写入文档。
正确做法:每分析完一个节点,立刻调用工具将结果写入文档。```

务必遵守规则中每一条:
```你的任务是,从入口代码开始分析出完整的代码调用链。不仅仅分析入口文件本身,请依序追踪调用链涉及到的代码文件、配置文件,输出其核心业务逻辑的**调用链信息**。调用链由节点组成,一个调用节点可以是codebase中的一个函数、一个类的方法。

由于涉及代码较多,请你对照下述产出结构,拆分成多个步骤逐步执行。
错误做法:将调用链涉及到的所有文件分析出结果,才将结果写入文档。
正确做法:每分析完一个节点,立刻调用工具将结果写入文档。

你必须在每个步骤完成之后**复述产出要求**,因为你总是忘记产出要求。你的复述以“我将在每个步骤完成之后复述产出要求:”开头。

# 产出要求

请按照以下结构,使用Markdown格式生成详细的调用链说明。
## 调用链

逐一为每个节点提供以下信息,**仅关注重要的函数/方法调用**:
### 节点(以函数/类方法命名节点)
所在代码文件相对路径
用途
逐一说明输入参数
输出说明

## 整体用途
详述调用链的整体用途

## 目录结构
调用链涉及到的文件及其所属的目录结构

## 调用时序图
生成mermaid sequenceDiagram格式的时序图。participant为**文件相对路径**,展示为完成一个典型请求,以及调用时传递的参数和返回值。```

后期迭代越来越慢怎么办

项目初期AI完成任务顺畅、很快,越到后期越慢

原因

迭代功能拆分过大,或者它依赖的详细设计文档越来越长,或者越来越乱,对它造成了负面影响

方案

需求/需求迭代作为最重要的基础,详细设计文档作为最重要的编码蓝图,是我们vibe coding过程中核心把控的重点。

  1. 将需求拆分成需求迭代

    让AI从易于实现角度将需求拆分成多个迭代版本,逐字审核:

    1. 后期给AI需求相关内容只此一份,因此需求迭代文档应包含所有需求内容,不应出现“见需求文档第x节”字样

    2. 仔细推演每个迭代版本,确保实现的代码规模大小合适,宜小不宜大。对于代码少但是难度高的情况,应单独列为一个迭代版本。

    3. 如无特殊情况,需求迭代版本文档严禁出现技术设计甚至代码。需求文档中的设计/代码更像鸡肋,有而不精,严重干扰后期技术设计和实现。对于需要多次迭代的项目而言,技术/实现的变化可能性远大于需求变化的可能性,需求文档中的设计/代码动辄过时,对后期造成严重误导。

  2. 每个迭代单独一份详细设计文档

    需要多次迭代的项目,详细设计文档作为编码的实现蓝图,在编码环节起核心主导地位,重要性不言而喻。

    1. 为每个迭代创造一份详细设计文档。为每个技术栈(后台、前端、客户端)单独创造一份详细设计文档

      1. 在多次迭代开发项目中,如果只有一份详细设计文档,随着迭代进展,详细设计文档越来越长,从几百行增长到几千行,AI越来越难利用

      2. AI存在很大概率将详细设计文档越改越冗余,冲突越来越多

      3. 每个迭代有专属的设计文档,编码蓝图更加聚焦

    2. 仔细审核详细设计文档

      1. 流程图、调用时序图是设计文档的核心。反复推演和修改流程图/时序图,直至合理。流程问题是APP开发中最大的BUG

      2. 详细设计文档中尽量不要写代码,代码冗长且容易过时,而且不易审核。优先用流程图/时序图表达实现逻辑,避免文档冗长

流程

对于大任务、长时间编码的任务,按以下步骤

  1. 将需求文档规划为需求迭代。需求迭代要包含所有需求细节,下一步不再需要需求文档

  2. 根据需求迭代文档制作迭代1详细设计文档。要求迭代1详细设计中整体考虑所有迭代,但是后继迭代以空实现占位

  3. 根据需求迭代文档和迭代1详细设计文档,完成迭代1编码

  4. 根据需求迭代文档和迭代1详细设计文档,制作迭代2详细设计文档

  5. 根据需求迭代文档和迭代2详细设计文档,完成迭代2编码

  6. 回到第4步,即根据需求迭代文档和迭代2详细设计文档,制作迭代3详细设计文档、完成迭代3编码,如此循环往复,直至完成所有迭代编码
    示例
    输入图片说明

1
请完成需求规划 @readme_xx_prdplan.md 中的迭代4后端详细设计。目前已完成了迭代1~3设计和编码,迭代3的详细设计见 @readme_xx_lld_it3.md 。技术选型为xxx。严格遵守设计规则 @LLDesign.md 。目录结构务必包含后期迭代文件,并注释为用固定的空返回值占位。如有疑惑请提出并等待我回答,你切勿自问自答。

AugmentCode 出现任务理解偏差或缺乏任务规划的应对策略

背景

在实际使用 AugmentCode(AI 编码助手)过程中,常出现如下问题:

  • 任务规划缺失:在未明确告知的情况下,AugmentCode 往往直接进入编码阶段,而未对任务进行完整的目标拆解或阶段规划

  • 结构性遗忘:由于缺少 Task List 或结构化提示,AI 会在中长对话过程中遗忘子任务、忽略边界条件,最终导致代码逻辑偏差或架构不符合预期

原因

  • AugmentCode 模型在处理多轮复杂任务时,缺乏持续性上下文绑定机制,一旦缺少明确任务框架支撑,极易丢失关键目标或设计逻辑;

  • 模型内部的任务跟踪能力不足,未建立明确 Task List 来维护当前正在处理的子任务

方案

方案一:引入提示词,强制任务规划优先执行
  • 在所有对话末尾加入如下高优先级系统提示词
1
做任何任务前,一定要先进行任务规划!先生成任务清单(task list)后再开始任何编码!
  • 效果:AugmentCode 将始终从 目标分解与步骤规划 开始任务,有助于生成合理的任务流与执行路径,并提高后续编码的连贯性与正确性,甚至当你发现有出入时,可立即中断或者介入修改任务信息
方案二:将核心实现逻辑写入 AI 可读的 Task List 中
  • 对于结构复杂、步骤繁多的任务,建议将实现逻辑显式写入如下格式的 Task List 中
    输入图片说明

迁移代码

步骤1

讨论你的迁移需求。示例

1
2
3
4
5
6
我需要将服务端所有用到公式识别的地方替换为texteller。代码仓库下的texteller目录为第三方,我不希望直接引用第三方,而是通过迁移代码的方式在app目录下实现texteller推理代码。
具体要求:
1. 迁移方式:不直接引用第三方 texteller 目录,而是在 app 目录下重新实现推理代码
2. 架构设计:完全遵循 app 下的当前目录组织方式和架构设计
3. 模型处理:遵从 texteller 的模型文件处理方式
仅仅讨论需求,切勿编码 @prd.md

步骤2

分析代码。示例

1
codebase下的TexTeller是第三方公式识别源码。请为我搜索它的推理代码入口,并以此为起点分析推理调用链,将结果保存为readme_texteller_infer.md。务必遵守规则 @parsecallchain.md

如果现有代码由vibe coding流程生成,那么已经有了详细设计文档,详细设计文档留作下一步使用。否则,需要让AI分析现有代码

步骤3

生成迁移蓝图,示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
请根据当前codebase的详细设计文档 @readme_xx_lld.md、第三方代码调用链 @readme_texteller_infer.md、迁移需求 @readme_mig_prd.md,完成迁移蓝图设计,并将结果保存为 texteller_migration_bluprint.md。



你必须牢记并遵从以下优先级设计迁移方式:

1. 优先直接复制代码,迁移风险最低

2. 复制部分代码次之

3. 参照源码重新实现逻辑风险较高




蓝图文档内容结构:

## 文件映射关系表

源文件(texteller目录下)和目标文件(app目录下)映射,迁移方式(copy还是重新实现逻辑)

## 逐个文件说明

逐一对每个目标文件说明:

目标文件用途

逐一对目标文件每个类中的方法说明:

详细的输入参数说明

输出结构说明

实现逻辑:

对于修改或者重新实现的代码,用Mermaid图说明实现流程和要点。如果流程中参与者涉及到本方法外部,采用时序图;否则采用流程图。关键字和操作符之外的纯文本用双引号包围。不得在此写代码。

对于复制操作,详述操作步骤、需要处理的风险。不得在此写代码。

输入图片说明

步骤4

迁移代码

1
务必根据@texteller_migration_bluprint.md制定任务规划,然后完成texteller公式识别迁移

多AI验证编码编码方向

背景

很多时候,AI Agent给出的实现可能带来隐患,在AI提出思路或者实现代码的时候,可以换个AI来验证思路与边界条件。

举例:

例子一:

提问:
输入图片说明

1
因为我的模型在多卡训练过程中存在显存不均衡问题。我让claude code给我生成了一个解决方案。claude code给我分析是因为one-hot矩阵的问题。我不知道one-hot矩阵是否会带来显存不均匀和占用显存较大的问题。同时,claude code给我修改了这部分代码,如图所示。claude code认为这个修改,是正面优化,是无副作用的。请你帮我检查看下,图中删除代码的片段,是否完全等价于新增代码的部分?是否真的是完全无作用的?请你深度思考。

输入图片说明
输入图片说明
输入图片说明
例子二:

提问:
输入图片说明

输入图片说明
输入图片说明

多AI验证编码优化边界情况

背景:

单个AI AGENT,经常由于上下文的原因,认为其代码编写的已经尽善尽美了。这时候代码优化进展就困难了。

使用多个AI AGENT来完成代码审视和解决方案的提出,交由写代码的AI AGENT来完成代码修复。这样相当于拥有了新思路和旧的上下文代码

不同AI AGENT之间,需要在明确地传递所有需要的上下文消息

举例

单个AI AGENT(后续命名为同事B)觉得已经完美修复了,也检查不出问题。输出文档报告1.md扔给 另一个 AI AGENT检查。(后续命名为同事A)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
项目U( @UniMERNet) 是一个公式识别算法的项目。我之前实现了一个 "序列长度动态优化"的优化方法,来让我的模型训练过程更佳流畅更佳快速。

为此,我在其中还实现了一个长度分桶采样的功能,以让我模型训练的数据加载更佳平滑,避免出现OOM的情况。

实现的细节相关信息,我已经总结到文档 @readme_unimernet_dynamic_seq_length.md 中了。



但是你的同事觉得那份代码有问题,所以进行了“长度分桶采样”功能的修复工作。

你同事的修复工作总结报告为 @DISTRIBUTED_FIX_REPORT.md,你可以进行参考。

虽然我没有验证,但我觉得应该相对可靠的。但还需要进一步彻底排查问题。



现在,我们进行下一轮排查任务。工作目录在 @UniMERNet 中。

你需要深入代码,从训练入口脚本 @UniMERNet\scripts\train.sh 出发,以代码的实际数据流向和调用流程为依据,

(1)检查 "长度分桶采样"的优化代码 是否存在潜在风险和错误问题。

(2)检查模型训练管道过程中,是否存在可优化的空间或未想到的错误、以及是否存在一些代码隐患。

请你 ultrathink , 你需要为我分析问题,定位出了原因之后,再帮我解决它。

让另一个 AI AGENT分析问题和提供解决方案本身,个人认为是大于直接修复代码的。

第一次,直接修改代码,修改幅度和思路让我觉得隐患太大了。再扔给另一个不同的 AI AGENT(后续命名为同事C)。【实际上一大段的文字,就是描述背景,一次性把所有需要的上下文补齐】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
项目U( @UniMERNet) 是一个公式识别算法的项目。我之前实现了一个 "序列长度动态优化"的优化方法,来让我的模型训练过程更佳流畅更佳快速。

为此,我在其中还实现了一个长度分桶采样的功能,以让我模型训练的数据加载更佳平滑,避免出现OOM的情况。

实现的细节相关信息,我已经总结到文档 @readme_unimernet_dynamic_seq_length.md 中了。



但是你的同事A觉得那份代码有问题,所以进行了“长度分桶采样”功能的修复工作。

你同事A的修复工作总结报告为 @DISTRIBUTED_FIX_REPORT.md,你可以进行参考。

但同事B发现同事A的修复工作不完善,所以同事A被我给开除了。

同事B对同事A的工作结果进行了新一轮的补充和修复,并且对于整个训练管道也进行了以此排查,解决和提出了一些问题。

同事B进一步的修复工作总结为 @COMPREHENSIVE_FIX_REPORT.md.

现在,由你来检查同事B的工作完成情况,对于同事B在文档提到的一些优化建议,我们可以暂时不理会,现专注于问题修复工作。



现在,我们进行下一轮排查任务。工作目录在 @UniMERNet 中。

你需要深入代码,从训练入口脚本 @UniMERNet\scripts\train.sh 出发,以代码的实际数据流向和调用流程为依据,

(1)检查 "长度分桶采样"的优化代码 是否存在潜在风险和错误问题。

(2)检查模型训练管道过程中,是否存在可优化的空间或未想到的错误、以及是否存在一些代码隐患。

请你 ultrathink , 你需要为我分析问题,定位出了原因之后,再帮我解决它。



任务结束后,将你的分析,你的工作内容,你的总结,输出到文档 COMPREHENSIVE_FIX_REPORT_v2.md 中

写代码工作交回给主体写代码的****AI AGENT,保持代码的编程思路一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
刚刚,我将你修复的工作内容,将代码和你的工作报告交给了你的同事C进行代码检查及代码修复。

你的同事C从你的代码发现了一些问题,进行了分析,给了他的解决方案。他的分析和解决方案,总结了一份工作文档 @COMPREHENSIVE_FIX_REPORT_v2.md .



现在,请你对同事C的工作结果进行交叉验证。

同样地,工作目录仍是 项目U( @UniMERNet), 是一个公式识别算法的项目。



你需要深入代码,从训练入口脚本 @UniMERNet\scripts\train.sh 出发,以代码的实际数据流向和调用流程为依据,

(1)检查 "长度分桶采样"的优化代码 是否存在潜在风险和错误问题。

(2)检查模型训练管道过程中,是否存在可优化的空间或未想到的错误、以及是否存在一些代码隐患。

请你 ultrathink , 你需要为我分析问题,定位出了原因之后,再帮我解决它。

后续进行迭代的解决方案和编码的交叉验证即可。

-------------本文结束感谢您的阅读-------------