提示词工程这个词听起来很唬人。我自己用下来的感受是:你越把需求写清楚,模型越不容易跑偏。没那么多玄学。
提示词到底在干什么
用户打给模型的指令、问题、上下文,统统都是提示词。图片、PDF 在多模态里也会先变成向量,再按语义参与推理——你可以粗暴地理解成:它们也在「说话」,只是说话方式不一样。
至于模型内部怎么工作,网上有很多精确到 attention 的解释。我平时给自己用的简化版是:把语义想成空间里的点,相近的点更容易被一起捞出来;模型本质上是在做概率预测。提示词写得准,就更容易落到你想要的那片区域。这只是便于上手的比喻,别当成论文结论。
所以提示词工程要解决的,其实就几件事:答得准一点、少幻觉一点、格式别乱跑,偶尔还要抠一下成本和速度。
说到「工程」两个字,我更在意的是能不能重复:有没有一套写法可以复用,测坏了能不能改,边界情况有没有兜底。写得漂亮但只能用一次,那不叫工程。
我常用的拼装方式
不是每次都要写满,但脑子里大概有这些零件:
- 任务:必须有。到底要它干什么。
- 步骤 / 条件逻辑:事情一复杂就得补上,不然它会自己脑补流程。
- 约束和禁止项:告诉它该怎么做、绝对不能做什么。简单时可以写在一段里。
- 格式或模板:要结构化输出时很管用;模板里最好直接填一两个真例子。
- 示例:比形容词管用。给它对齐的样例,比写「请认真、专业、全面」强太多。
- 角色 / 性格:按需。医疗、法务这类需要背景知识时,角色有用;日常抽取就别硬套「你是一位资深专家」。
背景信息也一样——有就写,没有别硬凑。干扰项越少越好,重复的话删掉。信息一多,直接用 Markdown 分段,模型读着也轻松。
几个我用过的例子
1. 只写清目标就够
飞书多维表里跑过这种:
根据 OCR 内容,提取
$开头的美元金额,取绝对值。
输入是 美元:$280.37;人民币:¥1953.73;,输出就是 280.37。没有角色,没有长篇大论,任务本身已经够窄。
2. 条件分支要把规则写对
这类提示词最容易自己埋雷。我见过(也包括早期草稿)写成「进度不是 100% 就算已完成」——跟示例完全对不上。按常识和实测,应该是:
- 任务数 = 0 →
已取消 - 任务数 ≠ 0 且进度 = 0% →
未开始 - 任务数 ≠ 0 且进度 = 100% →
已完成 - 其余 →
进行中 - 只能从给定标签里选一个,别解释
输入 进度 85% / 任务数 12 应得到 进行中;0% / 0 → 已取消;0% / 5 → 未开始。规则写错,模型再听话也帮不了你。
3. 命名助手:规则 + 示例
让模型做中英互译,并给出小驼峰、大驼峰、蛇形(大小写)和缩写,有歧义就说明一下。关键是把输出长什么样用示例钉死,再要求「直接给结果,别写思考过程」。千问、豆包、Kimi 上这类写法都比较稳。
4. 本地小模型靠模板硬控
用本地 qwen2.5-7b 做过中西医诊断分类、病史字段抽取。角色给一点医疗背景,输出强制 TSV,并写明「非 TSV 一律不算合法回复」。模型不大时,模板和禁止项往往比「请你专业一点」更管用。
更成体系的写法可以往 Skill 方向靠——步骤、约束、模板、示例都拆开,稳定输出会再上一个台阶。我有一份内部笔记:如何编写一个可以稳定输出的 Skill。
写到最后
我现在写提示词的顺序很固定:先任务,再条件和约束,最后用示例或模板锁格式。形容词能少就少。
提示词工程没有银弹,但有手感。手感来自一次次把「我以为它懂」改成「我写清楚了它才懂」。