昨天(第 3 天)我们聊了大模型怎么"想"、怎么"说"、怎么"炼"出来。知道它脑子怎么转了,接下来最关键的一件事其实是——你到底会不会跟它说话。
很多人用 AI 的真实体验是:同一个问题问十次十个样;让它写代码,格式乱七八糟;让它分析日志,它给你编数据。这真不是模型笨,十有八九是——你没给它写"接口文档"。
今天这篇聊 Prompt 提示工程。别被"工程"俩字吓到,它其实就是:怎么把话说清楚,让模型乖乖按你的意图干活。全程我用 Java / 后端开发的视角对照,懂 Spring 的你看着会特别顺。
一、Prompt 到底是啥?为啥要专门学?
一句话:你喂给大模型的指令或上下文文本,就叫 Prompt;而"提示工程"就是系统化设计这些指令的方法。
类比一下:Prompt 就是你给新同事发的"需求文档"。需求写清楚,他干活就不跑偏;你只甩一句"帮我优化一下",他大概率交给你一堆用不上的东西。
那写好 Prompt 到底图啥?四个硬指标:
这四个目标,就是你平时调大模型 API 时最头疼的四个问题。
那为啥先学 Prompt,不学微调? 因为成本差太多了:
本质就一句:你不用训练模型,只要学会"说话的方式",模型就能按你的意图工作。这跟你带新团队一模一样——写清楚需求文档,比招一个完全对口的人容易得多。
二、6 大构成要素:每个好 Prompt 的"骨架"
这是今天最核心的部分。每个要素我都给你:错在哪、对咋写、对应你的实际场景。

1. 角色设定(Role Assignment)
一句话:告诉模型"你是谁",它会自动调整语气、专业度和视角。
❌ 笼统写法: 帮我写一段设备告警说明✅ 角色写法: 你是一位有 10 年经验的 IoT 运维工程师,精通网关协议(MQTT/CoAP)、传感器数据分析和故障排查。回答简洁、给命令不给废话、优先给可执行方案。
为啥有效?训练数据里包含大量"运维工程师怎么说话"的文本,你指定角色,它就激活那部分知识子集。
⚡ Java 思维对照:就像 Spring 的
@Profile("prod")——同一个 Bean 在不同环境有不同行为。角色设定就是给模型加"环境配置"。
2. 指令明确性(Clear Instruction)
一句话:别说"帮我…",要说"请做…,输出格式是…,不要…"。
❌ 模糊: 帮我看一下这个日志有什么问题✅ 明确: 分析以下 IoT 设备日志,完成:1) 找出所有 ERROR 级别日志及时间戳 2) 判断根因(超时/断连/硬件故障/其他)3) 按优先级给修复建议 4) 输出 Markdown 表格,列:时间戳|级别|设备ID|问题类型|建议
明确性三个检查清单:
动词具体吗?("分析"比"看一下"好) 有输出格式要求吗?(表格/JSON/代码/列表) 有约束条件吗?(不超过 200 字 / 不要价格 / 用中文)
3. 上下文构建(Contextualization)
一句话:模型不知道你在做啥项目,背景得你自己塞进去。
❌ 无上下文: 这个接口报错了怎么办?✅ 有上下文:带上技术栈(Spring Boot 2.7 + MyBatis + MySQL + K8s)、哪 个接口、已排查到哪一步。
⚡ Java 思维对照:上下文就是方法的参数。参数越完整,方法越不容易猜错逻辑。
4. 输出格式控制(Output Formatting)
一句话:别让它自由发挥,你要什么格式就明说。
输出为 JSON 格式 | ||
使用 Markdown 表格 | ||
只输出代码,不要解释 | ||
按以下模板输出 |
💡 实战技巧:如果你用 Java 解析模型返回,强烈建议强制 JSON 格式,配合
jackson.ObjectMapper直接转成 Java 对象,省掉大量文本解析的脏活。
5. 多轮对话管理(Conversational Flow)
一句话:每次请求都要带上必要的上下文,因为模型没有"记忆"。
❌ 每轮独立问:第1轮"什么是 RAG"→ 第2轮"它有什么优点"(模型可能以为"它" 是别的概念)→ 第3轮"用 Java 怎么实现"(它早忘了你在说 RAG) ✅ 维护一个 messages列表,每轮把历史都带上(OpenAI 兼容接口都支持这种格式)
⚡ Java 思维对照:这就是 HTTP 无状态协议。每次请求独立,Session 信息客户端自己维护(Cookie / Token / 这里就是 messages 数组)。你在 Spring Boot 里处理 JWT 过期也是同样的道理。
6. 思维链前置(CoT Trigger)
一句话:在复杂问题前加一句"请一步步思考",准确率会暴涨。
❌ 直接问: 以下三个设备平均在线率是多少?设备A 95% / B 87% / C 92%✅ 加 CoT: 请一步步计算:先列出每个数值,再求和,再除以 3,最后给出结果。
📊 为什么有效:斯坦福 2022 年研究显示,仅加 "Let's think step by step" 就让 GPT-3 数学推理从 17% → 79%。这不是玄学——模型在生成推理过程时会"看到中间结果",从而纠正自己的错误路径。明天(第 5 天)会深入讲 CoT。
三、Zero-Shot 与 Few-Shot:最实用的两种模式
3.1 Zero-Shot(零样本)
适用:通用任务(翻译、总结、改写、解释概念)。
模板结构:[角色] + [任务描述] + [约束条件]
比如把技术术语翻译成业务语言:你是一位 IoT 产品经理,把下面这段技术描述翻译成客户能看懂的话:原文"设备通过 MQTT 协议保持长连接,QoS 级别为 1,心跳间隔 30 秒…" 要求:不出现 MQTT/QoS 等技术词、用类比、控制在 3 句话内。
3.2 Few-Shot(少样本)
适用:需要特定格式 / 风格 / 领域的任务。这是你工作中最高频使用的模式——给几个例子,模型照着做。

🔥 实战案例:日志分类器
## 任务根据 IoT 设备日志内容,判断其问题类型。## 示例示例 1:输入: "[ERROR] gw-007: Connection timed out after 30000ms"输出: {"type": "network_timeout", "severity": "high", "device": "gw-007"}示例 2:输入: "[WARN] sensor-042: Temperature exceeds threshold: 85°C"输出: {"type": "sensor_threshold", "severity": "medium", "device": "sensor-042"}示例 3:输入: "[INFO] auth-service: Token expired for user_id=10888"输出: {"type": "auth_failure", "severity": "low", "device": "N/A"}## 待分类日志输入: "[ERROR] gw-003: MQTT broker refused connection, code 0x05"输出:模型会照格式输出 {"type": "connection_refused", "severity": "high", "device": "gw-003"}。
💡 直接可用:这个 Prompt 你包成一个 Spring Boot 的 REST 接口,接收日志字符串、返回分类结果就行。不需要任何训练、不需要 ML 知识,今天就能上线。
🔥 另一个高频:自然语言生成 SQL(明天实战项目的前置)
## 任务:根据自然语言生成 MySQL 查询## 表结构 iot_devices(id, device_name, device_type,## status ENUM('online','offline','alarm'), last_heartbeat, region)## 示例输入: "查询所有离线设备" → SELECT * FROM iot_devices WHERE status = 'offline'输入: "统计各区域在线设备数量,按数量降序" → SELECT region, COUNT(*) AS cnt FROM iot_devices WHERE status = 'online' GROUP BY region ORDER BY cnt DESC## 待生成输入: "查询华东地区当前告警状态的网关设备" →Few-Shot 三个关键原则:
四、今日小结
Prompt 工程不是"话术",是接口设计:角色设定 = @Controller,指令明确性 = 方法签名,上下文 = 请求体,格式控制 =@ResponseBody。想清楚这几点,模型就不会给你返回 500 了。6 个要素按场景组合,比"随便问"强十倍。 Few-Shot 是落地最快的杀手锏——零训练、今天就能集成进你的 Spring Boot 接口。
互动:你平时用得最顺手 / 最翻车的一个 Prompt 是啥?评论区贴出来 👇
夜雨聆风