LLM应用开发二、提示词工程
提示词工程是大模型应用开发中最核心、最基础、也是最容易被忽视的工程能力。用更低成本提升模型效果让模型输出可控、可解析、可测试是连接业务与模型的桥梁掌握提示词的结构化设计方法熟悉常见提示词模式建立提示词的工程化体系(模板、版本、测试、监控)持续迭代与优化提示词提示词工程的完整课程大纲企业级提示词工程落地方案提示词模板库针对具体任务(代码、文本、多模态)的提示词设计指南。
内容会尽量覆盖:本质、方法论、模式、工程落地、测试与评估、常见坑与进阶方向。
1. 提示词工程是什么(本质)
从工程角度,提示词工程可以定义为:
通过设计和优化输入文本(提示词),在给定模型能力边界内,稳定、可控、可复现地完成特定任务的一套工程方法。
它的本质包含三层:
-
任务接口设计:把业务任务 “编译” 成模型能理解的接口协议(提示词)。
-
模型能力调度:用提示词去 “激活” 模型的不同能力:推理、记忆、工具调用、生成等。
-
输出控制与质量工程:通过约束、格式、示例等手段,让输出满足业务对正确性、一致性、可解析性的要求。
一句话:
提示词工程 = 模型的 “外部程序”,用文本编程来控制模型行为。
2. 提示词的工程化结构
一个可维护的提示词通常由以下几个模块构成(可按需组合):
-
角色(Role)
- 定义模型的 “系统身份” 和能力范围
- 例:
你是一名资深Python工程师,熟悉FastAPI和异步编程。
-
任务定义(Task Definition)
- 明确要解决的问题类型
- 例:
请你完成一段代码的重构,使其符合PEP8规范,并提升可读性。
-
输入数据(Input Data)
- 业务数据、用户输入、上下文等
- 例:代码片段、文本、对话历史
-
约束条件(Constraints)
- 输出长度、格式、语言、禁止内容
- 例:
输出必须为JSON格式,不得包含解释性文字。
-
输出格式(Output Format)
- 用于下游系统解析
- 例:JSON schema、Markdown 结构、代码块格式
-
示例(Few-shot Examples)
- 提供 “输入 - 输出” 对,让模型学习任务模式
- 例:1-shot、3-shot、5-shot
-
思考引导(Reasoning Guidance)
- 引导模型进行分步推理
- 例:
先分析问题,再给出方案,最后输出代码。
一个结构化提示词示例:
text
你是一名资深Python工程师,擅长写可维护、可测试的代码。
任务:
请你根据以下需求,编写一个FastAPI接口。
需求:
- 路径:/api/users
- 方法:POST
- 请求体:username(str), email(str), age(int, optional)
- 响应:id, username, email, age, created_at
约束:
- 使用Pydantic做数据校验
- 使用SQLAlchemy异步模式
- 输出必须为完整可运行代码,不包含解释。
输出格式:
```python
# 模型定义
...
# 路由定义
...
plaintext
---
## 3. 提示词工程的核心原则
### 原则 1:明确性(Clarity)
- 不要写模糊描述,例如“帮我优化一下代码”
- 要写清楚:优化目标、标准、范围、输出格式
示例:
```text
请你对以下Python函数做性能优化,目标是减少时间复杂度,使其能处理10万级数据。
要求:
- 不改变函数输入输出
- 给出优化前后的时间复杂度对比
- 输出优化后的代码和简要说明
原则 2:结构化(Structure)
- 使用标题、列表、分隔线、代码块
- 结构化提示词能显著提升模型理解度和输出稳定性
原则 3:可复现性(Reproducibility)
- 固定提示词模板
- 避免随机性描述
- 把可变部分参数化(如输入数据、示例数量)
原则 4:可测试性(Testability)
- 为提示词设计测试用例
- 对输出做自动化校验(格式、字段、正确性)
原则 5:渐进式优化(Iterative Refinement)
- 先保证 “能跑”,再优化 “跑好”
- 通过错误案例不断迭代提示词
4. 常见提示词模式(Prompt Patterns)
作为开发工程师,你需要掌握一些可复用的提示词模式。
模式 1:Zero-shot 基础任务
适用于简单任务:
text
你是一名文本分类专家。
请把以下用户评论分类为:正面 / 负面 / 中性。
评论:{text}
输出格式:JSON,字段:label
模式 2:Few-shot 小样本学习
适用于模型需要示例才能理解的任务:
text
你是一名意图识别专家。
请识别用户输入的意图,意图包括:查询天气、预订酒店、投诉。
示例:
用户:今天北京天气怎么样?
意图:查询天气
用户:帮我订一个明天的房间。
意图:预订酒店
用户:我要投诉你们的服务。
意图:投诉
现在请处理:
用户:{text}
意图:
模式 3:Chain-of-Thought(CoT)思维链
适用于需要推理的任务:
text
你是一名数学推理专家。
请按照以下步骤解决问题:
1. 分析题目
2. 列出已知条件
3. 推导过程
4. 给出最终答案
问题:{problem}
模式 4:Self-Consistency(自洽性)
让模型多次推理并选择最一致的答案(适用于复杂推理)。
模式 5:工具调用(Tool Use)
适用于需要外部工具的任务(搜索、数据库、计算):
text
你可以调用以下工具:
- search(query: str) -> str
- calculator(expr: str) -> float
请根据用户问题决定是否调用工具。
格式要求:
如果需要调用工具,请输出:
TOOL: tool_name(arguments)
如果可以直接回答,请输出:
ANSWER: ...
用户问题:{question}
模式 6:结构化输出(Structured Output)
适用于下游系统需要解析的场景:
text
请你从以下文本中抽取信息,并输出JSON格式。
文本:{text}
输出字段:
- name: str
- age: int
- address: str
- phone: str
5. 提示词工程的工程化落地
作为大模型开发工程师,你需要把提示词当成 “代码” 来管理。
5.1 提示词模板化
使用模板引擎(如 Jinja2)管理提示词:
python
运行
prompt_template = """
你是一名{{ role }}。
请你{{ task }}。
输入:{{ input }}
输出格式:{{ format }}
"""
好处:
- 可维护
- 可版本化
- 可参数化
5.2 提示词版本管理
把提示词放入代码仓库:
- prompts/
- classification/
- v1.txt
- v2.txt
- extraction/
- v1.json
- code/
- refactor.txt
- classification/
5.3 自动化测试
为提示词编写测试用例:
python
运行
test_cases = [
{"input": "我喜欢这个产品", "expected_label": "正面"},
{"input": "服务太差了", "expected_label": "负面"},
]
测试维度:
- 格式正确性
- 字段完整性
- 业务正确性
- 稳定性(多次调用是否一致)
5.4 监控与迭代
- 记录提示词版本、模型版本、输入输出
- 对失败案例进行分析
- 定期迭代提示词
6. 常见问题与解决方案
问题 1:模型 “幻觉”
解决方案:
- 加入 “必须基于输入内容” 的约束
- 要求引用来源
- 使用工具调用获取真实数据
- 加入自检步骤
问题 2:输出不稳定
解决方案:
- 结构化提示词
- 固定格式
- 增加示例
- 降低温度(temperature)
问题 3:输出不可解析
解决方案:
- 强制 JSON 输出
- 给出 JSON schema
- 禁止额外解释文字
问题 4:任务太复杂
解决方案:
- 拆分成多个提示词
- 使用 CoT
- 使用工具链(Tool Chain)
7. 进阶方向
7.1 提示词与模型微调的结合
- 先用提示词验证任务可行性
- 再用标注数据做微调
- 最终用提示词做推理控制
7.2 提示词压缩与效率优化
- 长提示词会增加成本
- 可使用:
- 提示词蒸馏
- 缓存机制
- 向量检索 + 提示词组装
7.3 多模态提示词工程
- 图像 + 文本提示词
- 视频 + 文本提示词
- 多模态工具链
7.4 自动提示词工程(Auto Prompt)
- 使用模型自动生成提示词
- 使用强化学习优化提示词
- 提示词搜索与进化算法
8. 总结
提示词工程是大模型应用开发中最核心、最基础、也是最容易被忽视的工程能力。
它的价值在于:
- 用更低成本提升模型效果
- 让模型输出可控、可解析、可测试
- 是连接业务与模型的桥梁
作为大模型开发工程师,你需要:
- 掌握提示词的结构化设计方法
- 熟悉常见提示词模式
- 建立提示词的工程化体系(模板、版本、测试、监控)
- 持续迭代与优化提示词
如果你愿意,我还可以继续提供:
- 提示词工程的完整课程大纲
- 企业级提示词工程落地方案
- 提示词模板库
- 针对具体任务(代码、文本、多模态)的提示词设计指南
更多推荐

所有评论(0)