背景痛点:为什么你的 Prompt 总像“薛定谔的猫”
第一次把需求甩给 ChatGPT,往往会出现两种极端:要么返回一堆正确的废话,要么直接跑题到火星。
我踩过的坑总结成三句话:
- 指令模糊:一句“帮我写个脚本”能让 AI 生成从 bash 到 Lua 的 800 行代码,却不是你想要的 Python 爬虫。
- 上下文缺失:不给背景、不给数据格式,AI 只能“猜盲盒”,结果当然随缘。
- 角色缺位:没有告诉它“你是谁、我是谁”,对话就像两个陌生人互相试探,效率低到怀疑人生。
如果你也曾被“看似有用、实则难用”的输出折磨过,下面的原则与模板可以立刻上手改命。
核心原则:让 AI 一次听懂人话
- 清晰性:一句话只承载一个任务,禁止“并”“还”“顺便”。
- 具体性:把边界条件、数据格式、长度限制写死,不给 AI 自由发挥空间。
- 角色设定:用“你是一位……”开头,瞬间把模型拉进对应场景,减少跑题概率。
- 示例驱动(Few-shot):给 1~2 组“输入→输出”样例,比描述一百句都管用。
- 迭代思维:先跑通 60 分版本,再基于 bad case 把 Prompt 拆成多句、逐句加权。
记住口诀:**“角色+任务+格式+例子+边界”**五件套,缺一项就多一次返工。
实战示例:3 大场景模板直接复用
以下模板均经过实测,把“Bad”与“Good”放一起,一眼看懂差距。
1. 信息查询:让 AI 做“秒回”百科
Bad
告诉我 React 最新特性。Good
你是一位前端技术博主,面向 2 年经验开发者。用 200 字以内介绍 React 18 相比 17 的三大新特性,并给出每条特性的官方链接。输出格式:1. 特性名 2. 一句话解释 3. 链接。2. 创意生成:批量产出“不尬”的文案
Bad
帮我想几个咖啡品牌 slogan。Good
你是一位创意总监,为精品咖啡品牌“BeanJoy”想 5 条中文 slogan。要求:不超过 8 个字,押韵,突出“手工烘焙”卖点。按“编号. slogan”格式输出,不要解释。3. 代码辅助:直接跑通业务脚本
Bad
写一段 Python 爬取豆瓣电影 Top250。Good
你是一名 Python 工程师,使用 requests + BeautifulSoup 爬取 https://movie.douban.com/top250 的电影名称与评分。要求:1) 带随机 User-Agent 2) 数据保存为 csv(两列:title, rating)3) 代码加中文注释。只返回可运行的完整代码,不解释步骤。进阶技巧:把一次性问答玩成“多轮剧本”
多步对话设计
把复杂任务拆成 3 步,每步都让 AI“自我引用”:- Step1:生成大纲→
- Step2:基于大纲写正文→
- Step3:用 checklist 自检并输出最终版。
关键是在每轮 Prompt 里把上一步结果原样贴回去,形成链式记忆,避免“失忆”。
知识库结合方法
先让 AI 总结一段你的私有文档,再提问:以下是内部接口文档:{text} 请用 3 句话总结其鉴权流程,然后回答我接下来的问题。这样把外部知识临时注入,比 fine-tune 更快更省钱。
输出格式控制
在结尾加一句“返回纯 JSON,不要 markdown 包裹”,就能把随机闲聊压成可解析字段;再给出 JSON 样例,可一步到位对接前端。
避坑指南:5 个高频错误与速效解药
| 错误 | 现象 | 修正方案 |
|---|---|---|
| 1. 指令堆砌 | 输出前后矛盾 | 一条 Prompt 只解决一个主任务,拆多轮 |
| 2. 角色冲突 | 前言“你是律师”,后文要求写代码 | 一个会话只保留一个角色,新建对话切换 |
| 3. 格式模糊 | 有时返回列表、有时返回段落 | 在结尾用正则式可解析的“格式脚镣” |
| 4. 缺少负面提示 | 输出带多余解释、礼貌废话 | 显式写“不要解释”“不要道歉” |
| 5. 长度失控 | 回答被截断或超长 | 用max_tokens参数 + “不超过 N 字”双重限制 |
代码示例:把 Prompt 结构化成“可调参数”
下面这段 Python 示例把“角色、任务、格式、例子”拆成字段,方便后期维护。
import openai def build_prompt(role: str, task: str, fmt: str, examples: str = "") -> str: """ 把 Prompt 五件套模板化 """ prompt = f""" 你是一位【{role}】。 任务:{task} 格式要求:{fmt} """ if examples: prompt += f"参考示例:\n{examples}\n" prompt += "请严格按上述要求输出,不要额外解释。" return prompt.strip() # 调用示例 prompt = build_prompt( role="Python 自动化测试工程师", task="为以下函数编写 2 条 pytest 用例,覆盖正常与异常场景", fmt="只返回代码,不要文字说明,每条用例加中文注释", examples="def add(a, b): return a+b\n# 用例 1:assert add(1,2)==3" ) resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0 ) print(resp.choices[0].message.content)把 Prompt 拆成参数后,改需求只改调用处,再也不用满屏找字符串。
小结:从“会说”到“会写”只差一套模板
新手阶段最忌贪多求全,先把角色+任务+格式+例子+边界五件套练成肌肉记忆,就能让 ChatGPT 从“猜题大师”变成“靠谱外包”。
等你跑通 80% 常见任务,再去折腾多轮对话、知识库外挂、结构化输出,边际收益才会线性增长。
想亲手把“对话设计”落地到实时语音场景?
我最近在 从0打造个人豆包实时通话AI 动手实验里,把上述 Prompt 技巧嵌进了 ASR→LLM→TTS 全链路:当麦克风一句“帮我查天气”进来后,LLM 的 Prompt 模板就是按本文套路拼的,结果 500ms 内返回自然语音,几乎零废话。
整套实验对小白友好,火山引擎的密钥申请、代码仓库、前端页面都配好了,跟着 README 半小时就能跑通。如果你已经厌倦纯文本调试,不妨去试试“边说话边迭代 Prompt”的爽感。