1. 从零开始理解Prompt工程的核心思想
第一次接触大语言模型时,我犯了个典型错误——以为AI能读懂我的心思。记得当时我直接输入"写份产品分析报告",结果得到的是一篇泛泛而谈的废话。后来才明白,想让AI输出高质量内容,关键在于如何设计prompt(提示词)。这就像教新人干活,光说"做个PPT"远远不够,得明确主题、格式要求,最好还能给几个参考样例。
1.1 两种基础设计范式
在prompt工程领域,最基础的两种方法是Few-Shot和Zero-Shot,它们对应着完全不同的使用哲学:
**Few-Shot(少样本提示)**就像手把手教学。去年我做金融文本分类项目时,先给模型看了5个标注好的新闻案例,包括标题、正文和对应的分类标签。结果模型在新文本上的分类准确率直接比Zero-Shot提高了32%。这印证了一个道理:对于复杂任务,给例子比给描述更有效。
**Zero-Shot(零样本提示)**则像直接下指令。简单如"把这段中文翻译成英文"的任务,Zero-Shot完全够用。但要注意,指令必须明确具体。有次我写"总结这篇文章",得到的是摘要;改成"用200字以内,列出本文三个核心观点",输出立即符合需求。
1.2 选择策略的黄金法则
经过半年实践,我总结出一个决策框架:
- 任务复杂度高 → 用Few-Shot(给3-5个典型示例)
- 输出格式严格 → 用Few-Shot(展示标准格式)
- 简单明确任务 → Zero-Shot(直接下指令)
- 测试模型能力 → Zero-Shot(看基线表现)
比如生成会议纪要,Few-Shot效果更好。我会先给2-3个标准纪要样例,注明需要包含"决议事项"、"责任人"、"时间节点"等要素。而查询事实类问题如"Python的GIL是什么",Zero-Shot足矣。
2. Few-Shot设计的实战技巧
2.1 示例选择的门道
不是随便给几个例子就行。去年做客服问答系统时,我发现示例的质量直接影响效果。好的Few-Shot示例应该:
- 覆盖主要场景类型(如退货、投诉、咨询)
- 包含边缘案例(如模糊查询)
- 展示理想的回答格式和深度
python复制# 优质示例结构示例
examples = [
{
"query": "订单12345还没收到",
"response": "经查询,您的订单已于2023-05-20发货,物流单号SF123456789,预计2日内送达。"
},
{
"query": "想退换货怎么办",
"response": "退换货需满足:1) 收到商品7天内;2) 未拆封使用。请提供订单号和商品照片至service@xxx.com"
}
]
2.2 上下文设计的艺术
系统消息(System Message)是Few-Shot的关键部分。它应该:
- 明确角色定位(如"你是有10年经验的金融分析师")
- 定义任务边界(如"仅回答与A股相关的问题")
- 说明输出格式要求(如"用Markdown表格呈现")
python复制system_prompt = """你是某券商首席分析师,负责A股上市公司研究。用户提供公司名称后,你需要:
1. 列出最近3年主要财务指标(营收、净利润、毛利率)
2. 指出关键风险因素
3. 给出投资建议(买入/持有/卖出)
输出格式:
## [公司名称]分析
### 财务表现
- 2022年:营收xx亿(+x%),净利润xx亿...
### 风险提示
1. 行业政策风险...
### 建议
[买入/持有/卖出],目标价xx元"""
实践发现,带编号的指令列表比段落描述更有效,能让模型更好遵循复杂要求。
3. Zero-Shot的进阶用法
3.1 指令设计的核心要素
有效的Zero-Shot指令应包含:
- 动作动词("生成"、"列出"、"比较")
- 内容范围("关于新能源汽车电池技术")
- 格式规范("分点论述"、"表格对比")
- 附加条件("不超过300字"、"包含数据来源")
糟糕指令:"说说特斯拉"
优质指令:"用中文分三点概述特斯拉的核心竞争优势,每点不超过20字,包含具体数据支持"
3.2 思维链(Chain-of-Thought)技巧
对于推理类任务,在prompt中加入"逐步思考"要求,效果显著提升。比如:
code复制请逐步分析当前是否适合投资光伏行业:
1. 首先列出影响光伏行业的三大关键因素
2. 然后分析每个因素的现状
3. 最后综合给出投资建议
实测显示,这种结构使分析深度提升40%以上,且更少出现事实错误。
4. 金融场景实战案例解析
4.1 文本分类优化方案
原始代码中的金融文本分类案例,有几个关键改进点:
- 示例覆盖度:应确保每个类别都有代表样本
- 负样本:添加"不清楚类别"的明确示例
- 差异强化:突出类别间的区分特征
python复制# 改进后的示例数据
examples_data = {
'财务报告': '2023年报显示,公司营收同比增长15%至50亿元,净利润率达20%...',
'公司公告': '【重大事项公告】本公司拟以每股10元价格回购不超过5%股份...',
'不清楚类别': '今日食堂菜单:红烧肉、清炒时蔬、紫菜蛋汤' # 明确非金融文本示例
}
4.2 信息抽取的prompt工程
金融信息抽取的关键在于:
- 明确字段含义(如"开盘价"是否含货币单位)
- 处理缺失情况(如未提及成交量)
- 统一输出格式
python复制# 优化后的schema描述
schema = {
"日期": "交易发生时间,格式YYYY-MM-DD",
"股票名称": "包含市场标识,如'腾讯控股(HK)'",
"开盘价": "数字+货币单位,如'102.5港元'",
"收盘价": "若未明确提及,标记为'原文未提及'"
}
5. 高频问题解决方案
5.1 模型不遵循格式怎么办
当模型忽略输出格式要求时,可以:
- 在系统消息中强化格式说明
- 提供更详细的Few-Shot示例
- 使用分隔符强调(如"===以下必须使用JSON格式===")
python复制# 格式强化示例
system_prompt = """必须严格按以下JSON格式输出:
{
"analysis": [分析点1, 分析点2],
"risk_factors": [风险1, 风险2],
"recommendation": {
"action": "买入/持有/卖出",
"target_price": "数字"
}
}"""
5.2 处理模糊查询的策略
对于模糊问题,两种处理方式:
- 追问澄清:设置模型在信息不足时主动要求补充
- 概率性回答:给出可能性分析而非确定结论
python复制# 模糊处理示例
user_query = "苹果公司值得投资吗?"
good_response = """需要更多信息:
1. 您指苹果公司(AAPL)还是其他苹果相关企业?
2. 您的投资周期是短期(1年内)还是长期?
3. 您更关注哪个市场(美股/A股/港股)?
请补充上述信息后我将给出针对性分析"""
6. 效果评估与迭代优化
6.1 量化评估指标
建立评估体系很重要,我通常跟踪:
- 任务完成率(输出符合基本要求的比例)
- 准确率(金融场景需人工复核)
- 格式合规率(自动检查格式规范)
python复制# 简易评估代码示例
def evaluate_response(response, criteria):
score = 0
if check_format(response): score += 0.3
if check_content(response): score += 0.5
if check_style(response): score += 0.2
return score
6.2 持续迭代方法
建议每周做一次prompt优化:
- 收集错误案例
- 分析失败模式(格式问题/内容错误/理解偏差)
- 针对性调整prompt
- A/B测试新旧版本
我发现经过3-4轮迭代后,任务完成率通常能提升50%以上。关键是要建立系统化的优化流程,而不是随意调整。
