LLM 中的 prompt 工程
1. 什么是 prompt
英文本意是 “提示词”, 它是用户输入的一段文字,用来 引导大模型 生成想要的回答或完成特定任务.
prompt 的构成如下:
role 角色设定
- system. 设定LLM的身份职责, 开发者注入, 对用户不可见.
- user . 用户真正自己输入的部分.
- assistant. 用于存储 多轮对话中模型先前的回答记录. 因为模型自身是无记忆的, 得靠 assistant 机制让模型知道 当前对话已经进行到哪一步,避免重复或断层. 示例见下个段落.
LLM 调用的无状态性
大语言模型(如 GPT、Llama、Qwen)每次推理都是独立的。它无法记住你上一次问了什么 —— 除非你主动把历史对话作为输入传给它.
这就需要 server 工程, 将历史会话记录下来(如记录至 内存、Redis、DB). 用户第二次提问 msg2 时, Server 取出历史,构造如下的信息:
[
{"role": "user", "content": msg1},
{"role": "assistant", "content": resp1},
{"role": "user", "content": msg2}
]
2. prompt 工程
Prompt Engineer(提示工程师) 是一种新兴的技术岗位, 职责是 设计、优化和管理大语言模型(LLM)的输入提示(prompt),以引导模型生成高质量、可靠、符合业务需求的输出。
区别: 普通用户闲聊, 对LLM输出无格式要求, 人能看懂即可. 而 LLM 用于工作流时, 输出得可靠合规.
数据驱动(Data-Driven)
数据驱动的提示工程, Data-Driven Prompt Engineering.
一句话理解: 小明整理 用户数据/线上日志 给到 LLM, 让它总结规律后写成 prompt 给LLM自己, 用于后续对新样本点预测. (类比于 LLM 自己给自己布置工作).
举例: 客服对话意图识别
收集 10,000+ 条历史客服对话记录 -> LLM 总结规律(模式挖掘) -> 生成意图分类 Prompt (提示生成)
-> 部署服务, 对新记录作分类
生成的 Intent Prompt 示例:
┌─────────────────────────────────────────────────────────────┐
│ 根据历史数据分析,用户咨询主要分为以下 8 类: │
│ 1. 订单查询(32%)2. 退款申请(18%)3. 物流问题(15%)... │
│ 请根据用户输入判断意图类别,并提取关键信息(订单号、时间等) │
└─────────────────────────────────────────────────────────────┘
few-shot 示例构造
- zero-shot 零样本
定义:模型从未见过该任务的训练样本,仅靠 Prompt 中的指令完成任务。
核心:模型靠预训练中学到的通用语言能力“猜”出任务意图 - few-shot 少样本
定义:在 Prompt 中提供几个输入-输出示例,模型通过“模仿”完成新任务。
核心:不是微调,而是上下文学习(In-Context Learning)
# few-shot 示例
句子:我爱这部电影! 情感:正面
句子:这太无聊了。 情感:负面
# input
句子:还不错,但一般。 情感:\_\_中性\_\_
链式推理(Chain-of-Thought)设计
引导模型分步思考,提升复杂任务准确率.
自我反思(Self-Reflective)
自我反思式提示.
模型先生成一个初步答案或排序结果, 然后通过一个反思型提示(self-reflective prompt),引导它:
- 审视自己之前的判断是否有遗漏或错误;
- 给出更准确、更一致的最终结果。
这类似于人类“做完题再检查一遍”的过程。
领域知识注入
将行业术语、规则、黑话库动态嵌入 prompt
评测与部署
- 评估与迭代. 设计评测集,用指标(准确率、合规率、token 成本)驱动优化.
- 工程化落地, 将 prompt 模板化、参数化,集成到生产系统(如 RAG、Agent)
3. prompt template 用于预训练
预训练的兴起, 让 NLP 模型有了 “pre-train, fine-tune, and predict” 三阶段范式. 这里的 fine-tune 需要:1) 增加新的模型参数 (无论lora 还是 最后加一层全连接); 2) 根据下游任务来构造不同的 loss.
prompt template 思路与此相反, 它将下游任务重新组织成完形填空 或 文本续写的形式, 使其更接近于原始预训练任务, 不需引入新的参数和 loss. 视角由 模型适配下游任务 -> 下游任务适配模型.
T5: Text-to-Text Transfer Transformer (Google, 2019) 这项工作, 首次系统性地将 Prompt Template 用于训练阶段.
Template 设计
通过 prompt 函数将原始输入作转换 x ′ = f p r o m p t ( x ) x' = f_{prompt}(x) x′=fprompt(x). 而函数中会用到模板, 上例中的 template 就是:
[X] Overall, it was a [Z] movie.
- [X]: 表示原始输入 x 的占位符.
- [Z]: 模板中的一个 slot (槽位), 用于放入答案.
当 [Z] 被填充后, 就称为 filled prompt, 填充函数描述为 f fill ( x ′ , z ) f_{\text{fill}}(x',z) ffill(x′,z) .
图. 适用不同任务的多种 prompt 方法
参考
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)