Claude脚本配置化:提示词精准控制改动范围
谈谈如何精准设计提示词,让Claude这类大模型在脚本重构时,只改动你指定的部分,而不是把整个函数结构全盘重写,导致后续集成测试一团混乱。
这个问题的核心,实际上只有三条:明确禁止修改的边界,指定允许灵活调整的范围,以及强制保留所有注释和空白行结构。
精确划定“不可触碰”的禁区
第一步,也是决定成败的一步,是在提示词的最前端,用极其明确的语气声明三类禁止修改项。
第一,原始函数签名。你不能让Claude自作主张把timeout参数提升为类属性,所以需要写清楚:“【原始 def process_order(order_id: str, timeout: int = 30) → dict 不得更改签名,返回字典中必须含 'status' 和 'trace_id' 字段,且 'status' 只能是 'success'/'failed'/'pending' 三者之一】”。
第二,外部调用方已经依赖的返回字段名。这一点一旦漏掉,Claude可能会把status映射成一个新的code字段,后续联调全崩。
第三,那些硬编码但被下游服务强约定的枚举值。比如上面的'success'、'failed'、'pending',这些不是随便能改的配置项,而是接口契约的一部分。
指定配置项提取规则:两种策略
边界划清后,再告诉Claude哪些地方是可以自由发挥的。
先说第一种方式,用符号标记法。
要求Claude把所有待配置的值用{{ }}包裹起来,并在文末附上一张说明表。比如把 “max_retries = 3” 改成 “max_retries = {{RETRY_COUNT}}”,然后生成一行注释:RETRY_COUNT: int = 3 # 重试次数,生产环境建议设为2。这样结构一目了然,改起来也方便。
另一个思路是按作用域分层标注。
在提示词里写清楚:“仅提取以下位置的字面量为配置项:① 函数内顶层赋值语句右侧的数字/字符串/布尔字面量;② logging.getLogger() 中的模块名字符串;③ requests.post() 的 url 参数中 host 部分”。
这一步非常关键,不加这条,Claude可能会把正则表达式里的\d+、f-string中的{name}全标成可配置项,导致配置表失控,反而更麻烦。
强制保留原注释与空行结构
这部分最烦人,因为Claude经常在不该动的地方删掉你的注释或空行,导致代码可读性断崖式下跌。
我的办法是三步走。
第一步,在提示词末尾加一句硬约束:“输出代码中,每一处原始注释(# 开头)必须原样保留,不得合并、删减或改写;相邻逻辑块之间的空行数量必须与原文完全一致”。
第二步,给它一个微型样例。 提供一个带典型空行和注释的3行代码片段,在后面注明:“请严格按此格式对齐注释与空白”。这比单纯用文字描述高效得多。
第三步,增加校验要求。 要求Claude在改动后自动校验:若某处原注释被移动或空行少了一行,必须在响应开头用【⚠️结构偏移】标出具体行号。这步能有效拦住它把config.py的导入语句塞进函数体里,还顺手删掉两个空行的惯常操作。
