这是「近五年 AI 技术演进」系列深挖的第 1 篇。上一部《从 ChatGPT 到 Agent Harness近五年 AI 技术演进全景》用 1.2 万字串起了 13 个概念从这一篇开始我们把每个概念单独拎出来拆到底。第一站是最不起眼、却是一切起点的东西Prompt提示词——用自然语言编程模型的接口。后来的 RAG、Function Calling、Agent、MCP全部建立在能用自然语言给模型下指令这块地基上。全文约 5500 字读完你会知道为什么同一段模型有人用出专家水平有人用出模板水平。一、Prompt 到底是什么一句话Prompt 就是你发给模型的输入文本模型的一切输出都由它决定。要掂量这句话的分量得先知道模型在干什么。大语言模型LLM本质上是一台续写机器它接收一段文本预测接下来最可能出现什么然后一个词一个词地把回答续写出来。你喂进去的那段文本就是 Prompt提示词。一个类比想象你招了一位天才实习生。他读过人类历史上几乎所有的公开书籍上知天文下知地理什么文体都会写、什么语言都能翻。但他有三个致命特点——完全失忆每次对话都是初次见面昨天聊的今天全忘、不认识你的公司没读过你的内部文档和代码、不会读心术你脑子里的需求他一无所知。你交给这位实习生的那份任务说明书就是 Prompt。说明书写得含糊他只能动用通用知识瞎猜写出来的东西放到任何公司、任何岗位都差不多说明书写得清楚——要什么、给什么、别干什么、写给谁——他就能发挥出接近领域专家的水平。同一个模型能力上限出厂时就定死了而你实际拿到手的输出质量下限和上限之间隔着的就是这个 Prompt。二、为什么说它是编程2022 年底 ChatGPT 上线后开发者们逐渐意识到一件以前不可想象的事LLM 是一个可以用自然语言编程的通用接口。编程在这里不是修辞。写代码是用语法精确的语言告诉计算机做什么写 Prompt是用自然语言告诉模型做什么。两者的工作流几乎一模一样传统编程Prompt 编程你写什么代码指定逻辑Prompt指定意图怎么执行编译器 / 解释器逐条执行模型推理逐词生成输出确定性同样输入必得同样输出带随机性温度参数控制出了问题怎么办调试器断点排查改 Prompt 重试区别在容错方向上传统语言精确到写错一个分号都跑不起来自然语言宽容得多——但这份宽容是双刃剑你说得越模糊模型的自由发挥空间越大。再打个比方模型就是那位什么菜都会做的厨师Prompt 就是你的点单。你说来点好吃的厨师只能按自己的理解端一道招牌菜你说水煮鱼微辣少盐不放香菜两人份这道菜十有八九符合预期。同一口锅点单方式不同上桌的东西天差地别。这就是 Prompt Engineering提示词工程在 2023 年火成一整个工种的原因既然输出质量由输入决定怎么写输入就从聊天技巧变成了一门工程学问——有结构、有方法论、可测试、可迭代。三、Prompt 的五要素把无数经过验证的好 Prompt 拆开看绝大多数由五个零件组装而成。角色你是谁、任务做什么、素材给你什么、约束不能做什么、受众给谁看。1. 角色你是谁给模型指定一个身份。模型在不同人设下激活的知识区域和语言风格完全不同——一个被设定为MySQL DBA的模型回答慢查询时会直接进入专业口径而不是泛泛科普。你是一位有 10 年经验的 MySQL DBA擅长慢查询定位与索引优化。2. 任务做什么用动词开头把动作说具体。任务是唯一不可省略的要素且要具体到模型可以直接开工的程度。请把下面的慢查询 SQL 改写为能利用索引的等价写法并逐条解释改动原因。对比一下帮我看看这个 SQL——看什么改成什么样模型只能猜。3. 素材给你什么把模型要用到的原始材料直接贴进去。素材是防止模型瞎编的第一道防线有材料可依据时它会优先用材料而不是调动训练记忆里那些可能过时、可能不属于你们的东西。本周完成事项 1. 完成 CSDN 自动发布工具支持草稿 / 发布 / 删除 2. 修复图片上传偶发超时的问题超时率从 3% 降到 0.2% 3. 调研了三个向量库的选型输出对比文档4. 约束不能做什么给输出装上护栏长度、格式、语气、禁忌。约束写得越硬输出的可控性越强。控制在 300 字内用进展 / 风险 / 下周计划三段式 不要使用赋能抓手这类空话直接给结论不要铺垫。5. 受众给谁看同一份内容写给领导、写给同事、写给客户是完全不同的三样东西。说了受众模型才知道详略怎么取舍、术语能不能用。读者是部门总监只关心进度、风险和需要的支持不关心技术细节。组装模板五个要素拼起来就是一份可以直接复用的结构化模板Python f-string可直接运行PROMPT_TEMPLATE 你是一位{{role}}。 任务{{task}} 素材如下 {{material}} 约束{{constraints}} 受众{{audience}} 现在开始。 prompt PROMPT_TEMPLATE.format( role有 10 年经验的技术写作助理, task根据素材写一份本周工作周报, material1. 完成 CSDN 自动发布工具\n2. 修复图片上传超时3%→0.2%\n3. 输出向量库选型对比文档, constraints300 字内进展/风险/下周计划三段式不用空话, audience部门总监只关心进度、风险和需要的支持, ) print(prompt)四、逐字对比同一个任务两种写法用最真实的场景——写周报——把好与差摆在一起看。差 Prompt帮我写个周报好 Prompt你是我的写作助理。请根据以下本周完成事项写一份周报 1. 完成 CSDN 自动发布工具支持草稿 / 发布 / 删除 2. 修复图片上传偶发超时的问题超时率从 3% 降到 0.2% 3. 调研三个向量库选型输出对比文档 要求面向部门总监突出业务价值和风险控制在 300 字内 用进展 / 风险 / 下周计划三段式不用空话。逐要素对照要素差 Prompt好 Prompt差在哪角色无模型默认自己是通用助手我的写作助理没有角色回答口径默认科普风任务写个周报动词模糊、对象缺失根据以下事项写一份周报动词 对象 依据全部明确素材无全靠模型编三条具体事项带数据没素材模型只能写完善了相关功能这类空话约束无篇幅格式随缘300 字内、三段式、禁空话没约束可能写 800 字散文体受众无部门总监关心价值和风险没受众详略取舍全靠猜差 Prompt 的本质问题不是效果差一点而是把所有决策权都交给了模型重点它替你定、篇幅它替你猜、口径它替你选。最后你拿到一篇放在任何公司都成立的模板填充文还得自己重写一遍——等于活干了两次。好 Prompt 做的事是把这些决策权收回来由你自己定。五、Few-shot给几个例子胜过千言万语是什么Few-shot少样本示例就是在 Prompt 里附上两三个输入 → 输出的完整示例然后让模型照着处理新任务。与之相对不给示例叫 Zero-shot零样本拿成百上千个示例去训练模型则叫 Fine-tuning微调。解决什么问题有些需求用语言描述不清。格式、风格、口吻这类只可意会的东西你说一百句要正式一点但别太僵硬不如直接给一个例子。示例能同时锁死格式和风格——这是语言描述做不到的。为什么有效模型的看家本领就是续写。Prompt 里摆着示例模型会强烈倾向于延续示例的模式——它不是理解了你的要求而是顺着你的模式续写。对使用者来说效果一样。一个直观对比。同样做评论情感分类Zero-shot 的写法是判断下面评论是好评还是差评——模型大概率答对但经常顺手加一句该评论表达了……的情感你还得再清洗一次Few-shot 版本里三个示例的判断字段都只有两个字模型续写出来的也就只有两个字。示例本身就是最高优先级的说明书。顺带划一条边界Few-shot 用的示例是贴在 Prompt 里的每次调用都要重发一遍模型本身没有学到任何新东西这叫上下文学习In-context Learning想让能力沉淀进模型、不用每次重发那就要动 Fine-tuning微调——成本高一个数量级非到万不得已不做。怎么用prompt 判断用户评论的情感倾向只输出好评或差评。 评论物流很快包装完好东西比想象中还好用。 判断好评 评论客服三天才回消息回了也等于没回。 判断差评 评论东西还行吧就是快递送错了一次第二天补送了。 判断模型会续写出差评或好评——注意最后一条故意模糊示例教会了模型只输出标签、不加解释这条隐含规则你一个字都没写。什么时候用输出格式特殊固定句式、表格、标签体系、风格难以言传文案调性、分类打标任务。什么时候不用任务一句话能说清别为 few-shot 而 few-shot、示例本身很长白白挤占上下文窗口。六、Chain-of-Thought让模型先想再答是什么Chain-of-ThoughtCoT思维链指在 Prompt 里要求模型先一步步写出推理过程最后再给答案或者在示例里直接展示带推理过程的解答。触发方式可以简单到加一句话请一步步思考先给出推理过程最后单独给出答案。解决什么问题模型直接输出答案时是凭直觉——所有 token 一次性顺流而下前面错了后面跟着错。复杂推理多步算术、逻辑判断、方案规划的错误率会陡增。让它把中间步骤写出来相当于强制它打草稿每一步的生成都以上一步的结论为前提错误能在中途被自己的推理纠正。生活化类比做数学题时直接报答案和列竖式打草稿的区别。同一个学生报答案靠心算容易错草稿列出来一步一步算准确率立刻上去。模型也一样。看一个典型题目问题小明有 23 个苹果给了小红 8 个又去果园摘了 2 筐、每筐 15 个。 现在小明有多少个苹果请一步步思考后再给答案。 模型输出推理过程23 - 8 1515 × 2 3015 30 45。 答案45 个不加一步步思考时模型经常直接蹦一个数——错多对少展开推理后每一步都摆在那里既不容易错你还能一眼看出它错在哪一步出错时也好定位这一点在调试 Prompt 时极其有用。什么任务必须用多步计算、逻辑推理、需要权衡取舍的规划类问题。什么任务不用分类、翻译、摘要这类直觉型任务——加 CoT 只会多烧 token不涨准确率。它的历史地位2022 年 Google 的论文首次证明这个现象先想再答从此成为复杂任务的标准配置到 2024 年 o1、2025 年 DeepSeek R1 等推理模型出现思维链被直接内化成了训练目标——模型在训练中学会了自主展开长推理你不用再在 Prompt 里求它思考。可以说今天所有推理模型都是 CoT 提示技巧的转正。七、结构化输出让程序能消费模型的话前面六节处理的都是给人看的输出。但真实的工程场景里模型的输出经常要给程序消费——下游代码要拿它入库、判断分支、渲染页面。程序要的是结构化数据不是一段话。解决什么问题自然语言输出没法直接解析。早期开发者用正则从模型回答里抠字段模型措辞稍有变化答案是北京 / 北京。 / 该城市为北京正则就崩了——脆弱到不可用。怎么做把输出格式的约束直接写进 Prompt用 JSON Schema一种描述 JSON 结构的标准字段名、类型、哪些必填告诉模型你必须按这个结构吐出来。配合 SDK 的结构化输出能力模型会直接返回合法 JSON# pip install openai from openai import OpenAI client OpenAI() # 国内模型同理OpenAI(base_url..., api_key...) response client.chat.completions.create( modelgpt-4o-mini, messages[ {role: user, content: 从这段评论中提取信息物流很快包装完好东西比想象中还好用} ], response_format{ type: json_schema, json_schema: { name: review_analysis, schema: { type: object, properties: { sentiment: {type: string, enum: [好评, 差评]}, keywords: {type: array, items: {type: string}} }, required: [sentiment, keywords] } } }, ) import json data json.loads(response.choices[0].message.content) print(data[sentiment]) # 好评 —— 下游代码可直接使用这段代码可以直接跑通模型吐出的永远是{sentiment: ..., keywords: [...]}这种合法 JSONjson.loads永远不会抛异常。对比第五节 Few-shot 里靠示例暗示格式这里是靠 Schema 强制格式——前者是约定后者是合同。为什么说这是通向 Function Calling 的关键一步让模型学会按 Schema 输出结构化意图正是函数调用Function Calling的地基。模型输出的那段{name: get_weather, arguments: {city: 北京}}本质上就是一条被 Schema 约束好的输出——只不过 Schema 描述的不是评论分析而是你想调用哪个工具、参数是什么。这条线索留到系列第 3 篇展开。八、三个常见误区误区一Prompt 是玄学效果全看模型心情。恰恰相反——输出由输入决定这是因果不是玄学。同一个 Prompt 跑十次结果有波动是因为温度参数temperature控制采样随机性的设置引入的随机性但差的 Prompt 稳定产出差的结果这件事本身稳定得像物理定律。效果不好时别急着换模型、更别加请认真思考这类安慰剂按顺序过一遍排查清单**任务动词清不清楚素材给了没有约束是不是可执行写好一点不可执行300 字内才可执行受众说了吗**九成问题能在这一步定位——这和调试代码走读逻辑没有本质区别只不过你看的不是变量是意图。误区二堆砌咒语式赞美。你是一位世界顶级、拥有 100000 智商、获得过无数大奖的专家……——这类堆砌没有作用。角色设定之所以有效是因为它改变了模型激活的知识区域和语言口径而不是因为你夸了它。世界顶级四个字不提供任何可执行的区分度。与其堆十个形容词不如多写一条具体约束字数、格式、禁忌、受众。前者是装饰后者是工程。误区三忽略上下文长度限制。模型一次能看见的文本有上限叫上下文窗口Context Window。它意味着两件事一是塞不下的部分等于不存在——把 50 页 PDF 整个贴进去超长部分直接被截断二是塞得满不等于看得清——研究反复发现位于上下文中部的信息容易被模型忽略所谓 lost in the middle。工程上的正确做法是素材按需给、长文档先检索再截取相关段落——而这个先检索、再喂给模型的思路就是 RAG检索增强生成的出发点正好是下一篇的主角。写在最后回头看Prompt 之所以是整个 AI 技术栈的第一块地基是因为它解决了一个此前从未被解决过的问题让写指令的成本从学会一门编程语言降到会说话就行。而它身后的整条演进链都是对 Prompt 某个局限的回应素材从哪来 → RAG怎么让程序消费输出 → 结构化输出与 Function Calling怎么让指令在循环里自主运转 → Agent。下一篇文章我们讲 RAG怎么让模型开卷考试。Prompt 不是咒语是一份写给天才实习生的任务说明书。说明书越清楚天才越像专家。参考资料OpenAI 官方文档Structured Outputs / Prompt Engineering Guide、Wei et al. 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》(2022)、Brown et al. 《Language Models are Few-Shot Learners》(2020)、Anthropic Prompt Engineering 文档。