判断先说:提示词工程这几年名字没变,内核已经从"怎么把话说得更巧"变成了"怎么把该给的信息给全"。多数效果差不是措辞问题,是上下文和约束没给够。网上那些"三个万能句式""五个必加咒语"之类的清单,多半是同一批内容换皮,抄了也没用。这篇不列奇技淫巧,只讲误区和对策,最后落到一套能复用的结构化写法。

误区一:把提示词当成一句"更聪明的提问"

最常见的做法是反复换措辞,指望换个说法模型就开窍。实测里这类微调的收益最低,因为同一个意图换了十种说法,模型收到的信息量几乎没变。要提升的是信息量:你是谁、要解决什么、约束是什么、输出长什么样。加了具体场景的提问,命中率明显高于泛泛地问——"哪个数据库最好"和"高并发电商网站选哪个数据库"是两回事。再比如"总结这份文档",不如"总结这份文档,面向不懂技术的业务方,200 字以内,突出风险和结论"——受众、长度、重点都交代了,模型不用猜。

误区二:不指定输出格式

问"列一下优缺点",模型可能给你一段散文,也可能给你表格,还能是编号列表。格式不确定,意味着下游没法稳定解析。正确的做法是把格式写死,比如"输出 JSON,字段为 name 和 reason",模型的可解析性会大幅提升,也省掉后续一堆清洗逻辑。写死格式还有个附带好处:方便自动化,JSON 或固定字段的输出能直接进下游流程,不用再写解析补丁。

误区三:一次性写好就扔

提示词不是代码,但它同样需要版本和回归。模型版本一换、业务上下文一变,原来好用的提示词可能就失效。把提示词当资产管起来——存进仓库、记变更、对一组固定用例跑回归——比每次现改要稳得多。至少存两份:当前生效版和上一版,出问题能回退;再配一组固定用例,每次改完跑一遍,看有没有退化。

误区四:temperature 想当然

temperature 管的是采样的随机性。结构化、事实性的任务要低,创意发散的任务要高。两头都在 0.7 以上跑,要么事实任务输出不稳定,要么创意任务千篇一律。这个值按任务类型定,不是凭手感:事实抽取、代码生成往低走,文案、起名往高走。

误区五:few-shot 示例给得越多越好

给示例(few-shot)能让输出更稳,但示例不是越多越好。示例的作用是让模型看清格式和边界,两三个好的就够,给十个八个反而把上下文挤满、把关键约束冲淡。而且示例必须和当前任务同构——拿分类示例去配生成任务,等于没给;示例之间互相矛盾更糟,模型会无所适从。

一套能复用的结构化写法

把提示词拆成固定几块,比写一大段自然语言更可控。下面是一个可以套用的模板和它的落地写法:

def build_prompt(task, context, constraints, output_format):
    parts = [
        f"角色:{task.get('role', '你是一名工程师')}",
        f"任务:{task['goal']}",
    ]
    if context:
        parts.append(f"背景:{context}")
    if constraints:
        parts.append("约束:" + ";".join(constraints))
    if output_format:
        parts.append(f"输出格式:{output_format}")
    return "
".join(parts)

prompt = build_prompt(
    task={"role": "你是一名数据库工程师", "goal": "解释这条慢查询慢在哪"},
    context="查询涉及表 orders 和 order_items,order_items 缺索引",
    constraints=["结论放在第一句", "不推荐具体索引值,只说方向"],
    output_format="三个要点,每条不超过 40 字",
)

角色、任务、背景、约束、输出格式这五块分开写,改的时候只动一块,也方便拿同一套模板对不同任务复用。模板的价值不在"写得漂亮",在于把隐性信息显式化——背景和约束很多人心里有,但没写出来,模型自然就靠猜。写出来之后,效果的下限会明显抬高。

更值得投入的是上下文工程

如果提示词本身没问题、效果还差,问题往往不在措辞,在喂进去的上下文。检索回来的文档不准、工具调用结果没给全、历史对话没截断好,这些才是大头。与其在提示词上抠字眼,不如把精力放在"给模型喂什么"上:检索质量、工具描述、示例选择,这些对最终效果的影响远大于句式。

具体说,检索增强(RAG)场景里,文档的相关性排序和去重比 prompt 措辞重要;带工具的场景里,工具的 name 和 description 写清楚,模型才知道什么时候该调、怎么传参;长对话里,把无关历史截掉、把关键结论保留,比把整段聊天记录都塞进去更有效。这些都属于上下文工程,是提示词之外更大的一块。

一句话收尾:提示词工程的下半场是上下文工程,先保证信息给全给准,再谈措辞。