文章建议把模型视作缺少项目背景的新承包者,用明确的输入格式、边界条件、歧义规则和失败行为替代模糊指令。日期解析示例说明,模型表现不稳往往源于需求信息只存在于开发者脑中。
隔几天就会有人问我,有没有什么 prompt 能让模型乖乖听话:一句秘密的开场白,或一段神奇的 system message。以前我也寻找过这样的东西。它根本不存在,而寻找它这件事,反而让我在原地困得比本该有的时间更久。
真正改善效果的,是把模型当成一个小时前才雇来的承包商:速度快、严格按字面执行,对我的代码库毫无背景知识;而且它会完全照着我写下来的内容去做,包括那些我只是随口一提、并非真想让它做的部分。
假设我想从某个混乱的用户字段中解析出日期。偷懒的写法是:
Parse the date from this string.
模型确实会返回一些结果。它可以正确处理 2024-03-01,却会悄无声息地栽在 1/3/24、March 1st 或空单元格上。这并不是因为它笨,而是因为「解析日期」没有说明可能出现哪些格式、两位数年份代表什么,也没有规定完全找不到日期时该怎么办。这些问题的答案其实都在我脑子里,只是我从未把它们写下来。于是模型只能猜,而它的猜测来自互联网内容的平均值,不是我的数据。
下面是将同一个任务写成 brief 后的样子:
Write a function parseDate(s) that accepts these formats:
YYYY-MM-DD, D/M/YY, and "Month Dth".
Two-digit years are 2000-2099.
Return null if the string has no recognizable date. Don't throw.
Return a Date object, UTC, time set to midnight.
Example: parseDate("1/3/24") -> 2024-03-01T00:00:00Z
还是同一个模型,但现在的输出已经是我真正能够检查的东西了,因为我明确说明了什么叫「完成」,也列出了那些特殊输入。诀窍就这么简单,而且它根本算不上什么诀窍。
每当输出令我失望时,我几乎总能追溯到某个只在心里做出、却没有明说的决定。因此,在发送任何内容之前,我会检查以下四件事:
输入是什么,以及它最糟糕的形态:空值、超大数据、错误类型、错误编码。
缺少某些内容时该怎么办:明确报错、直接跳过,还是用默认值代替。
哪些东西绝对不能改变:函数签名、现有行为,或者我没有提到的文件。
什么样才算完成:给出一个具体输入,并配上我期望的输出。
最后一点的分量,比前面三点加起来还重。一个完整的示例,足以钉死你的真实意图;而一整段形容词也做不到这一点。
真正代价高昂的错误,不是模型拒绝执行,也不是它输出一堆垃圾——这些问题你马上就能发现。真正昂贵的是,模型热心地「修复」了你从未要求它碰的东西。你说「给这个表单增加一个字段」,它顺手整理了验证逻辑。两天后,另一个流程坏了,而你完全不知道原因是什么。
只需一句话就能避免这种情况:明确说出哪些东西必须保持不变。
Add the phone field. Leave the email validation, the submit
handler, and the styles exactly as they are.
模型很积极。但如果不限制这种积极,它看起来一直都很有帮助,直到它重写了一个原本运行正常的东西。点名哪些内容不能碰,只需要五秒钟,却能省下一整个调试过程——不用再对比两个文件,苦苦寻找究竟哪里发生了变化。
另一个习惯是:别再一次性要求它完成整个功能。不是因为模型做不出来,而是因为你检查不过来。一个边界清晰的函数,你一分钟内就能读完并运行。「整个 auth 流程」返回的则是一大堵看似合理的代码,验证它所花的时间,甚至比自己动手写还长。你得到的不是杠杆,而是一个无法检查的东西。
把工作拆成足够小的步骤,让每一步都能明显判断通过或失败。先把一步做对,再在它的基础上继续推进。这样打字时会慢一些,但完成任务要快得多,因为你不必再拆解一个已经埋进三层代码深处的错误假设。
如果你试过这些工具,得到的只是一团糨糊,于是把问题归咎于模型,不妨先检查自己的要求。大多数时候,上限来自 brief,而不是模型。如今真正重要的能力,不是措辞有多巧妙,而是更深入一层地思考自己究竟想要什么,然后按顺序说明:输入、约束、绝对不能改变的东西,以及一个代表「完成」的示例。
挑一个让你头疼的任务,用这种方式把它写清楚。输出会发生变化,但并不是因为工具突然变聪明了。
本文由 AGINE Academy 团队撰写。AGINE Academy 是 AGINE AI 旗下的独立产品,与 Anthropic 没有关联。我们通过亲自动手实践,而不是观看课程讲座,来教授如何使用 Claude 进行构建。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。