开头一段直接写。
AI 时代,做应用的门槛确实被拉低了一大截。过去要凑齐前端、后端、算法才敢开工的事,现在一个人加上几个 AI 会话就能跑起来。但与此同时我观察到一个很有意思的现象:身边真正能把需求推到上线的人,不是在忙着写代码,而是先把文档写清楚,再靠一轮一轮实测去修订它。我自己最近实践比较多的一条路径也正好是这四个字——文档驱动、实测修订。核心逻辑其实非常简单:先用文档把需求、技术方案和验收标准钉死,用文档去指挥 AI 与团队干活,再根据真实环境里的测试结果反过来改文档,让整个开发过程收敛成一个可以一直转下去的闭环。这篇内容就是拆这条路径的完整打法,适合独立开发者、小团队负责人、产品转技术的实践者,以及所有正在靠 AI 写代码却总觉得“做出来不像能用”的人。
1. AI 时代,为什么“先写文档”反而比“先写代码”更吃香
1.1 文档是思考的外化:把“想清楚”这件事提前支付
很多人一听“文档驱动”就皱眉,第一反应是:我又不是在大公司,哪来时间写那堆模板?这个反应我特别能理解,因为传统意义上的需求文档、设计文档,确实有一大半是用来应付流程的。但 AI 时代写文档的意义完全变了。
过去代码是稀缺资源,工程师的主要精力花在“怎么写出来”上;现在代码是最不缺的东西,AI 几秒钟就能生成几十行,真正稀缺的是“这是要解决什么问题”“怎么判断它做对了”“哪些场景不能漏”。这三件事只能写在文档里,没法靠临时对话聊清楚。
我习惯做一个类比:装修一个房子,先画设计图再动工,哪怕中间发现要改,改的只是一张图纸;如果边砸墙边想布局,改的就是预算和工期了。写文档本质上就是那一张图纸,把思考中所有模糊的地方提前暴露出来。你不在纸上暴露它,就一定会在上线后暴露给用户。
还有一个很容易被忽略的点:在 AI 协作开发里,文档是团队与 AI 之间唯一的共同上下文。人是会追问的,AI 不会。你少写一句前提,它就默认一个它自己想象的场景。你需求里没说清楚权限规则,它就自由发挥。最终代码跑偏了,你只能花几轮对话去纠偏,甚至推倒重来。而如果你把需求、选型、接口、验收都落成文字,AI 每次干活读到的都是同一份“事实来源”,方向一致性会高很多。
1.2 这条路径解决什么场景、适合谁来用
我总结了一下,文档驱动加实测修订这条路径,主要解决四类常见问题。
第一类是需求描述不清。很多需求在脑子里觉得已经想明白了,真写出来才发现连“给谁用”都说不清楚,更不要说“怎么算做好了”。第二类是技术选型摇摆不定。今天想用这套模型,明天又看那套框架,代码写了一版又一版,最后全扔。第三类是 AI 生成的代码不可控。这里加个接口,那里换个依赖,几乎没有哪句是照着需求长的。第四类是上线之后没人敢动。文档缺失,代码又长在 AI 对话里,出问题只能猜。
这条路径最适合三类人:独立开发者,你既是产品又是技术,没有人帮你踩刹车,更需要文档充当那个冷静的评审;企业内部工具或项目的负责人,需求方多、优先级乱,没有一份文档,你就会被各方牵着走;以及对产品和技术都比较熟悉的转型实践者,写文档正好把两种视角拧成一股绳。
注意,我讲的文档不是三五十页的模板说明书,而是非常轻的三件套:一页需求、一页技术方案、一页验收清单。它随着实测修订不断填充和变厚,而不是开工前一次性写完。这个区别非常关键,直接决定了你会不会在文档上陷入新的内耗。
2. 需求拆解:把“一句话想法”变成可执行的需求文档
2.1 需求文档的关键,是四个可交付的说话模型
我见过最多的需求原文是“我们想搞一个 XXX”,一句话说完就指望 AI 能做出个能用的应用。这就像你跟装修师傅说“我想要个好看的客厅”然后拍拍手出门,他当然能装完,但装完你肯定要拆。
把一句话想法变成需求文档,我建议只框定四件事。
第一,一句话需求。用不超过三行文字说清楚:解决谁的什么问题,用什么方式。目标感就是这么被逼出来的。比如“让售后工程师不用翻 PDF 就能查到设备参数”,这比“做一个知识库问答助手”要锋利得多。
第二,用户故事与场景。不要写“系统应支持知识库问答”,要写“售后工程师小王在处理客户报修时,在对话框输入设备型号,希望在 10 秒内得到故障排查建议”。谁、什么时候、干什么、期待什么,这四要素缺一不可。因为 AI 要理解需求,靠的就是场景细节。
第三,验收标准。这是整个需求文档里含金量最高的部分。验收标准必须可测试、可量化。你说“回答要准确”,那到底是多准?换成“100 条测试问题里,至少 90 条能在文档中找到明确答案依据”才是真标准。没有验收标准的需求,最后一定会吵成一团浆糊。
第四,优先级排序。任何需求的第一版都只做最核心的 20%。把功能分成 P0、P1、P2,P0 是没它不能用,P1 是缺了不好用,P2 是以后再说。别觉得这残酷,砍得不干净,方案永远落不了地。
这四个东西不需要写成复杂的模板,但它代表四道关卡:目标是什么、谁在用、怎么算好、先做什么。过一个写一个,写不清就说明还没想清。
2.2 用一个“企业知识库问答助手”完整拆一遍
为了把抽象说法落地,我拿一个我实际接触过的模拟项目举例:某团队想做“企业知识库问答助手”,初衷是公司资料散落在多个平台,新人找答案效率低,老师傅又没时间天天回答重复问题。这个需求最初也只是一句话:“搞一个 AI 问答助手,让员工自己问。”
用上面四个模型拆完之后,文档大概是这样的。
| 功能模块 | 用户故事 | 验收标准 | 优先级 |
|---|---|---|---|
| 通用知识问答 | 员工提问“报销流程是什么”,10 秒内得到带原文依据的答案 | 预先准备的 100 条问答测试集中,答案文本能在知识库原文档中找到出处的比例不低于 90% | P0 |
| 文档实时更新 | 新入职员工第二天提问昨天刚发布的制度,能检索到最新版本 | 上传新文档后 5 分钟内即可被检索命中,且旧版本不重复出现 | P0 |
| 权限隔离 | 不同团队只能看到授权范围内文档的答案 | 使用无权账号测试,带有越权提问意图的 20 个问题全部拒绝或返回无权限提示 | P1 |
| 多轮追问 | 用户第一次问“报销上限”,再追问“住宿呢”,可理解上下文 | 连续追问场景下,第二问的答案正确率不低于第一问的 80% | P2 |
| 未知问题兜底 | 问“今天食堂吃什么”,不胡编,明确回复不知道 | 50 条知识库外问题中,胡编率必须为 0 | P1 |
拆完你会发现,这里每一个验收标准,之后都直接变成了开发任务和测试用例的来源。尤其是“来源可查”和“不知道就说不知道”这两条,几乎决定了 AI 应用靠不靠谱。
拆完后我还习惯回读三遍文档,每次都问三个问题:第一,每一个模块是否都在支持那句话需求,有没有脱离目标的自嗨功能;第二,验收标准是否能被一个不了解需求的人直接执行检查;第三,边界场景有没有漏,比如空文档上线、上传超长 PDF、同一段内容反复修改。这些问题如果在写文档阶段没考虑,那一定会在实测阶段以更贵的方式找上门来。
3. 技术方案设计:在文档里把选型定下来,代码才有回头路
3.1 技术选型先算账:一份对比表把摇摆焊死
需求文档定了“做什么”,技术方案文档要解决“怎么做”。这里最容易犯的错误是一上来就打开 AI 对话框问“帮我设计个架构”,然后被它的选项带着跑。正确顺序是先把几个关键决策点列出来,自己算一遍账,再写进文档。技术方案里最怕的不是选择“不好”,而是三个月后没人知道“当时为什么这么选”。
我用同一个知识库问答项目来拆。当时摆在面前的决策点主要是三个,每个都有取舍。
第一个是模型选择:调用现成大模型 API,还是部署开源模型自托管。现成 API 的优势是效果稳定、开发快、按量付费不用养卡;劣势是数据出域和长期成本不可控。开源模型自托管则相反,数据可控但效果和运维负担更重。对这个场景来说,内部知识库问答涉及公司内部资料,合规压力大于成本压力,但团队又没有专门的算法工程师,所以最终结论是先用 API 快速验证效果,数据脱敏后再评估私有化。这个过程必须写进文档,因为三个月后一旦采购策略变化,你要能回答“当初为什么没用开源”。
第二个是向量数据库选型。起步阶段数据量只有几千个文档片段,完全可以用轻量方案先跑通;但如果后续要支撑全公司上万份文档,就要考虑具备水平扩展能力的方案。我倾向于小步起步:先算文档总量和单文档切片数,得到一个数量级估算,选择能覆盖预计未来一年数据量的方案,并留好迁移接口。这个量级估算的过程,也会写在文档里。
第三个是应用框架。要不要用现成的 Agent 编排框架,还是自己写一个轻量的“检索-组装-生成”链路。现成框架上手快,但抽象层多,出问题排查成本高;自研链路可控性最强,尤其是调试 Prompt 和检索排序时,只隔着一层你自己的代码,问题定位会非常直接。对这种核心链路清晰的项目,自己把控反而更稳。
这三个决策点我建议用一张表写进文档,每行都包括:决策项、候选方案、最终选择、选择原因、放弃项的代价。这张表的价值在于,它把“为什么”固化了。选型不怕慢,怕的是反复横跳。
3.2 用文字链路写清数据流和接口边界
技术方案里另一块容易犯懒的是数据流和接口。很多人在这个环节说“我脑子有图,到时候直接写代码就行”,但 AI 协作时代,图片没法喂给 AI 当上下文,文字链路可以。
所谓文字链路,就是把系统处理过程用箭头串出来。比如这个知识库问答项目的核心链路写成文字就是:用户提问,系统对问题做基础清洗与改写,再到向量库召回相关文档片段,再把问题和片段按预设模板组装成大模型输入,由模型生成答案,最后对答案做后处理和引用标注。每一步的输入是什么、输出是什么、失败时落到哪个兜底分支,都要在这段链路里写清楚。
接口描述则不需要写一堆 RESTful 规范。轻量级写法就是一张表:接口名、方法、入参、出参、异常行为。比如“上传文档接口”,入参是文件流和所属团队 ID,出参是解析状态和文档 ID,异常情况是文件格式不支持时返回错误码并保留原文件不落库。这个粒度对 AI 生成代码已经足够。
这一节文档的另一个作用是变成 AI 的约束条件。你后面给 AI 下任务时,直接引用链路和接口表,它就知道自己在全局里处于哪个位置,不会自己去发明一个完整系统。可以说,技术方案文档写得好不好,直接决定了 AI 写出来的代码是“按图施工”还是“工地自嗨”。
4. 从文档到实现:让 AI 协作基于文档而不是临时对话
4.1 任务切片:一个大文档切成一串能执行的小任务
文档只是蓝图,真正落地要把它切成任务。切片的核心原则是:一次只给 AI 一个能够独立验证的模块,而不是把整个系统一次性丢过去。AI 的上下文窗口再大,一次输出和推理的质量也会随任务复杂度显著下降。与其让它一口气写一百个文件,不如让它写一个模块、一个测试、你验一次,再继续下一个。
知识库问答项目可以切成这样一串任务:文档解析与清洗,把 PDF、Word 转成干净的纯文本并拆分片段;向量化与索引写入,把切片通过嵌入模型写入向量库,并处理重复上传;检索接口,把用户问题转成查询并召回最相关的片段;问答生成接口,组装 Prompt 调用模型生成答案;前端对话界面,提供一个输入框、一个对话区;评测脚本,用验收清单里的测试问题自动评估效果。每个任务都是独立闭环,单独给 AI 下指令、单独验证。
这里要特别提醒:任务切片一定要按照依赖顺序来。先做数据接入,再做检索,再做问答,最后做界面和评测。不要并行轰炸 AI,否则后期联调时你会面对一堆互相不兼容的接口,然后陷入“到底是谁写错了”的泥潭。
4.2 真正能用的“文档驱动”提示词长什么样
经常有人问我:你说的文档驱动,是不是把需求文档整个粘贴给 AI 就行?不是。把五十页文档全塞进窗口,AI 反而会迷失重点,回复质量并不比不给文档高多少。正确姿势是“按节引用”:每次只把当前任务相关的段落摘出来,作为上下文喂给 AI。
我长期使用的一段提示词骨架是四段式。第一段是角色声明,告诉 AI 你现在是实现某个模块的开发者;第二段是文档上下文,直接粘贴需求文档或技术方案里对应的段落和验收标准;第三段是当前具体任务,例如“根据上述接口定义,实现文档解析与清洗模块”;第四段是输出约束,比如“不新增第三方依赖、不修改已约定的接口名、为异常路径输出日志、附上自测案例”。
用文字展开,大概是这个效果:
你是一名熟悉 Python 的后端开发者,负责实现企业知识库问答助手的“文档解析与清洗”模块。以下是需求文档中与当前模块相关的验收标准:支持 PDF 格式解析并保留表格内容,100 个测试文件中至少 95 个解析成功且无乱码。以下是技术方案中的接口约定:入参为文件流和团队 ID,出参为文件 ID、状态及章节列表。请实现该模块,要求不新增第三方依赖,不修改已定义接口,异常分支写日志,并给出 3 条自测用例。
你会发现我并没有把整个需求文档丢进去,而是只选取了当前模块相关的上下文。这就是文档驱动的精髓:文档不是拿来整套复制粘贴的,而是拿来按需引用的。AI 不知道哪些东西重要,你要帮它划重点。
4.3 给 AI 的代码上“约束项”,防止自由发挥
AI 写代码时最大的毛病是喜欢“顺手加戏”:多定义几个看起来更通用的接口,换一种你以为没差的实现方式,甚至偷偷引入新的库。这些加戏在单次对话里不明显,累积到后期就会变成维护噩梦。所以要在技术方案里提前写一份“通用约束条款”,每次给 AI 下任务都带上。
我常用的约束条款包括:不允许新增需求文档未提及的第三方依赖;不允许改变已约定的接口签名;不允许删除既有测试代码;所有异常分支必须记录日志;不允许自行修改全局配置;代码必须包含最小自测用例。这些约束看起来很死板,实则是给 AI 划定了安全边界。边界内它怎么发挥都可以,边界外一律禁止。
第一次让 AI 生成的代码,我从来不当最终版,只当第一版草稿。因为实测修订还在后面。很多时候要跑起来才会发现,文档里那条验收标准其实写得不够准确,或者技术方案的链路漏了一层。这些都得靠真实环境把它逼出来。
5. 实测修订:让真实数据回去改文档,把闭环转起来
5.1 至少跑三类实测:功能流程、对话质量、性能成本
代码写完,真正磨人的阶段才刚开始。实测修订的“实测”不能是随机问几个问题觉得“看起来差不多”,而是要对着需求文档里的验收标准,一组一组跑。我通常把实测分成三类。
第一类是功能流程验收。对着验收清单逐条打勾,用真实场景走完整链路,同时重点测边界情况:空输入、超长问题、完全不在知识库里的问题、权限外的越权提问、同一份文档反复上传。流程测试往往能暴露最多的低级问题,比如上传接口没处理 PDF 加密,或者检索链路没过滤已删除的文档。
第二类是对话质量评估。准备一份固定的问题集,最好包含标准问题和模拟真实用户写法的口语化问题。回答的质量看三点:答案有没有原文依据,有没有胡编;召回片段和回答之间是否对得上;用户追问时能否接住上下文。质量评估要打分,但不要只凭感觉打分,要落到“有依据、部分有依据、无依据”这种可统计的分类上。打分结果直接进文档,方便后续对比版本迭代效果。
第三类是性能与成本评估。这组指标在 AI 应用里特别容易被忽略,但恰恰决定项目能不能长期存活。核心指标包括:单次问答的响应延迟、首字返回时间、并发情况下的吞吐表现、每次问答的 token 消耗与费用、检索环节的召回命中率。我把常用指标整理成一个速查表,实测时直接照着填。
| 指标类别 | 具体指标 | 采集方式 | 优化方向 |
|---|---|---|---|
| 功能与流程 | 上传成功率、检索命中率、权限拦截率 | 自动化脚本打测试集 | 文档解析逻辑、检索逻辑 |
| 对话质量 | 答案有依据率、胡编率、追问正确率 | 人工打分或评分模型 | Prompt 模板、召回片段数量 |
| 性能 | 平均响应时长、首字延迟、并发上限 | 压测工具记录 | 缓存、向量检索优化、模型选择 |
| 成本 | 单次问答 token 数、月预估费用 | 日志统计 | 精简 Prompt、调低无效上下文、缓存 |
这三类实测做完之后,往往能发现一些文档里没写清的地方,也往往能验证一些当时拍脑袋定的参数到底合不合理。这就是“实测”的核心价值:把文档里的抽象标准变成真实数据。
5.2 把结果回写到文档:修订记录是闭环的关键
实测之后最重要的一步是“修订”,这一步最能区分真正的实践者和只是“用 AI 写了个 Demo”的人。修订不是改代码就完了,而是要回到文档里,把这次实测逼出来的认知资产沉淀下来。
举个我在知识库项目里真实遇到的例子:一开始文档的验收标准只写了“支持 PDF 格式文件”,实测时用了一批包含表格的文档,结果提示词和模型回答里完全读不到表格里的价格信息。问题定位后发现是文档解析模块把表格转成了乱序文本,向量化之后彻底丢了结构。于是做了三件事:在技术方案里增加了一条“文档解析需对 PDF 表格结构做识别与还原”的处理步骤;在需求文档里把验收标准修订为“包含表格的文档,答案同样能引用到准确单元格内容”;在修订记录表里登记这次变更。这就完成了一次标准的实测修订循环。
所以需求文档和技术方案要放在版本管理下,并且在开头留一张修订记录表,至少包含日期、问题描述、文档版本号、变更内容、验证结果这五列。项目跑起来之后,文档不是越写越少,而是每次实测逼着它变厚变准。这和传统瀑布式文档正好相反:传统文档是开工前写完了事,这里的文档是跟着应用一起长大。
6. 常见问题与避坑指南
6.1 常见问题速查表
这条文档驱动加实测修订的路径,我跑过好几轮后积累了一些高频踩坑点,整理成速查表,方便你直接对照排查。
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 文档写了两周还在改,项目没进展 | 把文档当交付物,而不是工具 | 按时间盒收口:今天只允许写 80%,剩下边做边补 |
| AI 生成的代码一跑就报错 | 任务没有切片,一次塞太多逻辑 | 切小模块,每个任务附最小自测用例 |
| 文档写清楚了,AI 还是不按文档做 | 上下文投喂不到位,AI 没有读到对应章节 | 改用“按节引用”,在任务描述里显式粘贴相关片段 |
| 接口名、字段名前后不一致 | 没有统一定义接口文档,并行开发失控 | 先锁接口表,再分任务开发 |
| 实测发现一堆问题,不知道先改谁 | 没有优先级,所有问题都想要解决 | 先修 P0 验收项,再修影响核心链路的问题,降低期望剩余项 |
| 版本迭代后文档和代码对不上 | 只改代码没回写文档 | 用修订记录约束,提交代码时同步更新文档 |
| 需求不断膨胀,功能越加越多 | 没有严格守住一句话需求 | 用目标作为筛子,与目标无关的功能一律不进本期 |
| 模型回答总在胡编 | 只做检索不做兜底 | 加“未检索到相关内容”的分支,要求模型结合原文回答,无据可说就明说不知道 |
速查表里每一条都是真金白银的教训。但要强调一点:不要把速查表当万能药,实例永远是你自己的数据。文档里的时间盒、验收标准、约束条款,都要根据你的项目规模和团队节奏修自己的版本。
6.2 几条越用越顺手的心得
最后再补充几条写文档和做修订的独家心得,这些在常规教程里很少被提到。
第一,文档是给队友看的合同,不是给领导交的作业。我写需求文档时心里想的是“下一周名叫 AI 的队友是不是能照这个干”,而不是“格式对不对、详略得不得当”。一旦视角换了,文档会立刻变得简洁而务实。
第二,验收标准的写作质量,直接决定项目的交付质量。我宁可少写十页功能描述,也要把八十条验收标准写得可测。比如“支持多轮对话”这种描述,我在所有项目中都会改成“连续两轮追问的正确率不低于第一轮的多少百分数”。看起来只是换了个说法,但落到开发阶段,AI 和你自己的行动路径会完全不同。
第三,实测发现问题并回写文档之后,尽量把对应的测试用例也留下来。需求文档里的验收标准是断言,测试集是证据。有了证据,下一次修改时你才能回答“这次改动有没有让效果变差”。这个“效果回归”能力,很多人直到项目上线后期才意识到有多珍贵。
第四,一个很容易被忽略的小技巧:文档和代码放在同一个仓库里管理。需求文档、技术方案、修订记录与代码提交记录放在一起,这样每一次代码变更都能回溯到对应的文档版本。没有这个绑定,文档很快会变成挂在网盘里的死文档。
我自己走这条路径最大的体会是:它是用一次次的“先写后测再改”的循环,把做错一个需求的成本平均摊到了每一步里。回头再看,我手上最稳的几个项目,恰恰是文档写得最勤、修订做得多、看似最“不酷”的那几个。很多需求之所以烂尾,不是技术不够,而是从头到尾都没有一个像样的文档在掌舵。你手里如果正握着一个讲不清的需求,先别急着开新的 AI 对话窗口。花半小时把需求、技术方案和验收标准写下来,然后让 AI 照着文档干活,让实测结果回去改文档。这条路不需要你有惊艳的灵感和天赋,它只奖励愿意把每一步走稳的人。