大模型交互协议:从模糊提问到流程化协作的完整实践
和大多数刚开始用大模型的人一样我最早把“人机交互”理解成非常朴素的问答关系我问一句它答一句不满意就再问一次。真正让我开始反思的是连续三周的低效产出——那时候我手上有一个需要频繁生成文档和脚本的模拟项目X几乎每天都要和大模型来回沟通。某次复盘时我粗略统计了一下十二次对话里八次出现了返工要么它理解错了范围要么输出里藏着我没要求的假设。那之后我才意识到和模型沟通不是“说话”而是建立一套可以被双方共同执行的人机交互协议。我花了一段时间整理规则把它落成一个可以复用的文档迭代到现在的V2.00版本。这篇文章想分享的就是这套协议的核心内容它怎么解决“提示词该写多长”的问题、为什么单独说“帮我做某事”不够、验收标准要怎么落地以及我在实际跑任务时反复踩过的坑。如果你也遇到过“AI明明很聪明一到我手上就不听使唤”的情况这里的内容应该能让你把对话从“碰运气”变成“走流程”。1. 没有协议的时代我和大模型的“无效对话”是怎么浪费时间的在讲V2.00协议本身之前我想先把旧问题摊开。很多人以为无效对话是因为模型能力不够但我在复盘之后发现至少九成的问题出在发起对话的人身上——这里的“人”就是我。我给出的是一个模糊的快照却期待模型还给我一个完整清晰的成品这本身就不太公平。1.1 三个让我决定写协议的翻车场景第一次翻车是整理会议纪要。当时我丢给模型一段接近两千字的会议零散记录说“帮我把这些材料整理成一份会议纪要”。它很快生成了一份标题完整、目录清晰的文档但里面既没有标明“谁在什么时间点前要交付什么”也没有区分“已决定事项”和“待讨论事项”。我要的是一份能直接发给团队的执行纪要它给我的却是一篇适合归档的叙述性总结。第二次翻车是在处理报价单翻译。我让它把一份含数字的单位从中文翻译成英文原文里写的是“预算约350万元”。模型直接给成了“about 3.5 million yuan”。逻辑上没错但客户习惯看“RMB 3.5 million”更关键的是我需要它顺手把货币单位统一到同一列。我当时没写“保留原始单位并添加货币符号”结果它自作主张做了格式化害得我又花了一个小时手工清理表格。第三次翻车相对严重我求它“写一个处理Excel数据清洗的脚本”。它给了我一段几乎可以运行的代码却默认数据文件是xlsx格式、默认表头在第一行、默认所有空值都可以直接填0。真实的文件是csv编码格式表头在第三行空值需要分列处理。模型不是不会写而是没有被告知这些约束于是它用最典型的假设填满了所有空白。这三个场景有一个共同特征我认为自己“已经把任务说清楚”了但把背景信息、约束条件、输出规范全部放进了“模型应该懂”的默认项里。模型确实懂很多但它不懂我现在手上的具体文件和具体场景。1.2 翻车背后的共性问题我把任务丢给模型自己的责任却只停在“提问”如果把每一次对话都看成一次项目协作那么提问方至少需要负责四件事交代背景、交代目标、交代约束、交代验收方式。那时我只做到了第一件甚至连背景都说得不完整。我后来用了一个更直白的类比来解释这个思路我不可能把一个新来的实习生叫到工位前说“帮我把这个项目弄好”然后期待他补全所有细节。现实中我一定会告诉他项目背景、交付物是什么、截止时间、给谁看、有哪些红线。我对大模型也应该保持同样的专业态度只不过模型比实习生知识面更广所以它更容易“自信地犯错”。这就是V2.00协议诞生的直接原因——我要把对实习生的那套交代流程迁移到和模型的交互里。V1.0时期我试过另一个方向写很长的提示词模板。模板越长模型越容易执行但问题在于模板固化后我懒得改遇到新场景还是硬套旧规则结果和直接把任务丢给它没有本质区别。V2.00彻底改变了思路不追求一个“万能提示词”而是建立一套动态更新的工作协议让每次会话开始时都能快速组装出清晰的上下文。2. V2.00协议的第一支柱上下文文件让每一轮对话都站在同一起跑线上协议的第一个支柱我把它叫做“上下文文件”。这不是指系统里的某个文件格式而是一种思考方式在真正向模型提出需求之前先把所有它需要知道的背景信息整理成一个结构化段落然后再让模型基于这段信息做输出。2.1 我为什么改用“先贴背景文件再开口提问”的流程大模型和搜索引擎不同。搜索引擎是“因关键词而返回多条候选”你可以在结果里挑选大模型则是“基于整个上下文生成唯一回复”你的每一句话都会影响它的概率分布。这意味着如果你开头只说“帮我写一封邮件”它只能根据常识猜测邮件的目的、语气、篇幅和收件人。这个猜测过程越自由越容易偏离你的真实需求。我之前一直觉得“把背景写清楚”会浪费时间后来做了一次对比实验同一个写作任务第一次只给一句话需求第二次给两百字的背景说明第三次给包含约束和验收标准的完整上下文。结果是第三次用时最短——因为前两次我都要在模型输出后继续纠正来回消耗的轮次远超预估。改用“先贴背景文件再开口提问”之后我还会做一件看起来有点多余的事每一步对话前先简单说明这一步想达成什么。比如写“下面请基于背景文件只做第二项任务其他事项先不要展开”。这能让模型知道本轮焦点在哪里避免它把所有相关事项一次性铺开又产生一大段需要二次筛选的内容。2.2 上下文文件模板与一个最小可用示例我在V2.00协议里使用的上下文文件不长通常包含五到六项内容每项一两句话即可。它的核心不是“写得长”而是“各归其位”。我常用的模板如下项目/任务名称一句话说明我在做什么。背景与场景模型需要理解的业务语境包括给谁看、解决什么问题。具体目标明确本次会话要产出什么比如“一份可发布的通知”“一个可运行的清洗脚本”。输入素材可以直接粘贴的关键素材或说明“素材在后续对话中提供”。约束条件字数、格式、语气、禁止事项、环境信息等。已知失败模式如果之前失败过把失败原因写进去提醒模型不要重蹈覆辙。举个最小示例。假设我要生成一份培训通知上下文文件可以这么写项目/任务名称提交一份新员工培训通知。 背景与场景培训对象是没有技术背景的新员工通知将通过内部平台发布需要简洁、务实不欢迎过于煽动的语气。 具体目标一段500字左右的中文通知结尾附上“报名方式”和“注意事项”。 输入素材培训时间为下周三下午两点地点为会议室A时长两小时主讲人为某导师。 约束条件不使用“赋能”“抓手”“闭环”这类词汇不要添加我没有提供的讲师职称不要写“欢迎踊跃报名”之类空话。 已知失败模式上次生成的版本里凭空多了“本次培训旨在提升全员数字化能力”这不是我要求的。这样一段百来字的上下文能让模型从一开始就收敛到合理方向。它不需要“猜”背景只需要在划定的范围内工作。2.3 上下文文件何时更新、何时重发长对话进行到中途上下文文件可能会失效。模型在十几轮之后会逐渐把早期信息“挤”出注意力范围如果主题发生变化我需要主动把关键信息重新发送一遍。我给自己定了一个更新节奏每完成一个子任务就把已经确定的结论摘出来存储成一段不超过五行的“最新共识”在下一轮开始时粘贴在最前面。这样相当于不断刷新模型的短期记忆避免它把上一轮的错误结果当成既定事实。这里还有一个小经验不要在长对话里不断追加新要求却从不清理旧要求。上下文会变得越来越杂乱模型也会分不清哪些要求仍有效。V2.00协议的做法是只要发现对话超过十轮就把旧对话折叠成摘要重新构建一个简洁的上下文文件。宁可多花一次交互去确认背景也不要让模型在陈旧信息上继续发挥。3. 第二支柱角色说明书与边界清单有了上下文文件模型能知道“做什么”但它还容易忽略另一件事它该以什么心态和权限来做。我一直认为大模型最需要被管理的不是它的知识量而是它默认给出的“发挥空间”。V2.00协议的第二支柱就是给模型写一份角色说明书和边界清单。3.1 “你不是我的帮手你是受雇于我的独立外包负责人”这句话听起来有点傲慢但它非常有用。如果我把模型当成“帮手”我就会下意识觉得它能理解我说的一切但如果我把模型当成“独立外包负责人”我就会要求它遵守合同、提交验收、不越权、主动告知风险。在实际操作中我会明确告诉模型“你现在不是我对话窗口里的助手而是一个受我委托处理某个具体任务的外部协作角色。”然后给它一个角色定义。比如“你是一位文档工程师负责根据提供的素材整理会议纪要你的职责是忠实转述而不是评论或总结。”为什么要把角色定义到这种细度因为模型在没有角色约束时倾向于平均用力它既想帮你把内容写详实又想表现得很得体还想给出改进建议。结果就是产出一个“看起来很好、但不符合真实用途”的中间态。角色定义越明确模型越能放弃那些不必要的均衡把资源集中在你的目标上。3.2 我常用的角色说明书模板角色说明书不复杂通常是三到五行角色定位、核心职责、边界声明、汇报方式。我直接给出一个常见的填法角色定位你是资深数据分析师但只负责检查脚本逻辑不负责美化代码风格。核心职责阅读我提供的数据样例找出可能导致脚本崩溃或误算的三类问题。边界声明不要修改代码不要输出完整代码不要输出额外建议只输出问题清单和对应行号。汇报方式每条问题按“严重程度-位置-原因-建议”四段式输出。加上“边界声明”是整套模板里最关键的一步。因为模型天然倾向于“帮人帮到底”如果你不声明边界它大概率会在回答完问题之后顺手给你一份重写版代码或者补一段“仅供参考”的科普说明。这些信息不是没用但会稀释真正的交付物让你在验收时多花时间筛选。3.3 边界缺失的教训一个物料预算脚本的“过度发挥”前阵子我参与一个模拟项目X的小型预算盘点工作请模型帮我检查一组物料费用计算逻辑。我在第一轮没有写边界声明只说“看一下这组数据有没有问题”。模型不仅列出了问题还主动重写了公式并且补了一个新的汇总方式。那个新汇总方式里有一个假设“所有未标注数量的物料都按1计算”这和我当时的业务规则完全不符。如果我细心一点可能会发现这个假设但更麻烦的是模型的新公式天然呈现了一种权威感团队里的同事差点直接采用。那次之后我给所有“检查类”任务都加上了同样一句边界你有权指出问题但你没有权力在不经过确认的情况下提供替代方案。这件事让我真正明白角色说明书的本质不是把模型“调教”得更强而是把它的“默认行为”约束在我们可以审查的范围内。越像“懂很多的人”的工具越需要明确声明它在某个任务里面没有决策权。4. 第三支柱验收标准先行把“再调整一下”改成“通过清单”第三支柱看起来最像项目管理但它恰恰是很多和大模型合作的人最容易忽略的部分。大家习惯了无限逼近的修改模式一轮不满意就让模型重新调整直到自己觉得“差不多对了”。效率低不说还经常陷入“越改越差”的循环。4.1 验收清单怎么写才有约束力验收清单不能写“质量高”“逻辑清晰”这类形容词因为模型会把它们翻译成自己的审美。真正有效的验收清单是可被检查的客观指标哪怕这些指标看起来很小。我用了一个“三可原则”来写清单可数、可比、可验证。可数指有数量目标比如“不超过500字”可比指有对照依据比如“用提供的三个案例作为格式样例”可验证指有无需解释的规则比如“每个事项都要注明责任人和截止日期缺一不可”。举个例子让模型写一份对外沟通邮件时我会在验收清单里写不少于两段、每段不超过四行第一段说明来意第二段说明需求不使用感叹号结尾包含“期待回复”;不用任何我没有提供的统计数据。这些条目看起来琐碎但它们能让模型在生成内容时有可遵循的行为边界也让我在最终验收时有一个简单的打勾动作。4.2 两轮反馈法先用“问题清单”再要求“修改方案”我试过很多修改反馈的方式最后留下的是“两轮反馈法”。第一轮反馈时我只把模型输出中的问题列出来不要求它直接修改。比如“第2段的例子和数据无关第4段预算单位不统一结尾缺少下一步信息。”这时候模型会先承认问题而不是一边修改一边把原本没问题的部分也顺带改了。第二轮反馈时我再给它一份修改指令让它针对第一批问题做最小改动同时明确要求它不要动其他部分。这样能有效阻止模型“顺手美化全文”的冲动。第二轮结束后如果还有少量偏差我会继续使用第三轮但通常三轮之后我会选择换个会话重开而不是继续在一个已经跑偏的对话里打补丁。这个方法的收获不止是省时间。更重要的它向模型示范了“如何围绕问题点做精确沟通”长期下来模型会更倾向于克制自己的生成范围不再主动把一句话扩展成一篇文章。4.3 当验收不通过时我的回退动作是什么即使有验收清单也总有彻底跑偏的时候。我在V1.0时代会尝试用更多提示词去“救”同一个会话结果往往越救越乱。V2.00协议明确规定同一任务如果在同一个会话里连续两次验收不通过就强制新开一个会话重新粘贴上下文文件并用更严格的边界清单重新发起。新会话看起来是在“重来”实际上是在重设模型的状态。旧会话里积累的错误可能会在后续答题中反复干扰模型让它总觉得“用户想要我之前那种写法”。新会话能把这个背景污染彻底清除效果通常立竿见影。唯一需要记住的是重开时不要把整段历史对话连在一起粘贴只需要把“最新共识”和“上次失败原因”写进上下文文件里。我一直觉得回退机制是整套协议里最不起眼、但最救命的部分。因为它承认了一个事实模型不是每次都能一次做对我也不可能每次都能把需求说清。比起祈求一次成功不如准备一套快速恢复流程。5. 全流程复盘用V2.00协议跑通一份“培训通知配套问答”到这里协议的理论部分已经讲完。我想用一个真实发生过的完整流程来做复盘方便你看清每个支柱是如何在具体任务中发挥作用的。这个任务是为某团队的新人培训撰写一份通知并附带一个“常见问题问答”文档。5.1 会话开始我会先粘贴什么我在会话最前面粘贴的上下文文件大概长这样项目/任务名称某团队新人培训通知常见问答。 背景与场景培训面向两周内入职的新同事他们刚接触内部流程需要一个通俗版本素材由培训负责人口头提供我只是整理者。 具体目标生成一份可直接发布的通知400-600字以及一份五人规模问答文档每问一答不超过80字。 输入素材培训时间为下周三下午两点地点为会议室B内容包括系统账号申请、报销流程、周报模板三部分。 约束条件不要使用“新起点”“新旅程”等套话不要写“讲师拥有十年经验”之类未经确认的措辞问答部分需要在每条回答前标注所属主题。 验收清单通知里必须包含时间、地点、三个内容模块每段不超过四行问答部分至少六组所有日期使用“2025-XX-XX”格式。 已知失败模式上次的版本里擅自增加了“培训对象为全体成员”这次不要扩大范围。这一份上下文文件大约两百字。我把它粘贴完之后才补充具体指令“请基于以上上下文文件先草拟通知正文问答部分等通知验收通过后再生成。”5.2 输出、差距、二次对话的关键转折模型第一版通知基本合格时间、地点、三个模块都在但段落明显偏长部分句子试图解释“为什么需要培训”。按照协议我没有直接说“改一下”而是先输出了一个差距清单第四行出现“帮助大家更快融入团队”这类未经要求的信息第二段超过四行“2025-03-18”写成了“3月18日”格式不合规。模型在收到差距清单后先把问题复述了一遍这符合我的预期。我随即给出第二轮指令“请在保持结构不变的前提下删除第一轮差距清单里指出的多余句子将第二段拆成两段并把日期改成指定格式。不要调整其他内容。”这一轮我特意写了“不要调整其他内容”因为经验告诉我它可能顺手把标题语气也改得更“正式”。第二轮输出通过验收整个通知流程只用了三轮对话。接着我才让它生成常见问答部分。问答阶段也有一次返工模型把“系统账号申请”展开成很详细的步骤但每答超过80字。我再次使用差距清单让它压缩。最终交付物在四个会话内完成总耗时比我直接用一句“帮我写通知”少得多。5.3 复盘表协议哪里起到决定性作用复盘完这次任务后我做了一个简单表格记录三个支柱分别起到了什么作用。表格列在下面上下文文件让模型从一开始就明确培训对象、时间和场景避免把“新人培训”写成“全员动员会”。约束条件和验收清单共同限制了生成范围。角色说明书与边界把模型定义为“整理者”而不是“培训策划者”有效阻止它补充“培训意义”和“讲师背景”等虚构信息。验收标准把“改一下”变成可定位的差距清单第二轮就能收敛不需要进行第六次微调。这个表格让我最意外的是真正省时间的不是模型生成的速度而是我这边“需求拆解”的速度。只要我把上下文和验收写清楚了模型的所有改动都会在预期的误差范围内浮动不会突然跑出边界。V2.00协议最值钱的部分就是把我从“无限修正”的低效协作中解放出来。6. 运行三个月后的补充低成本维护协议的技巧与误区整套协议我用了三个月中间也做了一些简化。现在它更像是一套习惯而不是一份沉重的文档。如果你也想在自己的项目里落地这套方法下面几个补充技巧和误区值得提前知道。6.1 协议不该是仪式感要保留可裁剪性最容易犯的错就是每次和模型对话都走一遍完整流程。实际上简单任务不需要上下文文件也不需要角色说明书更不需要验收清单。比如让模型“把下面这段话改写成三段”这种小操作直接说清楚就行。我的原则是任务的复杂度决定协议的完整度。单点操作只需要一句话涉及交付物、多轮修改、影响他人的任务才需要启动完整流程。过度协议化和完全不协议化一样耗费精力。V2.00强调的不是“每一步都不可省略”而是在需要的时候能快速切换到完整模式。为了做到这一点我会在协议文档里给不同任务预设“协议等级”轻量级、标准级、完整级。轻量级就是一句带过标准级需要背景和目标完整级包含角色、边界、验收清单和回退流程。这样我就不需要在每次开始前纠结“到底要写多长”。6.2 我常用的七条协议微指令除了大的框架我还在日常对话里养成了七个固定的小指令它们被我用在几乎每一次重要会话中如果信息不足直接问我不要自行假设。不确定的数据用“待确认”标注不要编造来源。如果你给出了多条建议按“代价最低”到“代价最高”排序。不要重复我已经确认过的信息。任何没有可执行步骤的结论请额外补一个“最小下一步”。长度超出目标时先停下说明“结构可压缩需要保留哪部分”而不是直接删减。完成一项后汇报“已完成”和“未完成”不需要评价自己的工作。这七条微指令本质上都是在压缩模型的自由发挥空间同时保留它的判断力。“不要自行假设”听着像反效率实际上能防止我在验收时发现一堆隐藏假设而“不要评价自己的工作”则让模型停止说“这段写得很好”之类的废话避免我花时间在过滤套话上。6.3 别掉进“协议越写越长”的陷阱最后想提醒一件事协议是有生命周期的它应该随任务变化而更新而不是永远膨胀。我曾经在V2.00运行到第二个月时积累了一个接近三千字的完整文档内容包罗万象但使用频率反而降低了。原因是我根本不想在每一个小任务里都去翻那篇文档。后来我做了一次瘦身把协议收敛成两部分一部分是固定不变的“底层沟通原则”大约十行另一部分是“任务模板”每个模板只有每次需要的核心项。多余的细节全部删掉只留下那些曾真正导致失败的问题描述。这个动作让协议重新变得好用起来。我的体会是任何一套方法论如果不能被频繁使用就会从工具变成摆设。人机交互协议也一样它的最终目标不是让我们每次对话前都背诵规则而是让我们在关键任务上熟悉一种更清晰的表述方式。等这套表述方式成了本能协议本身就可以退居幕后只在偶尔跑偏时再翻出来对照。这才是V2.00留给我最有价值的东西。