提示工程(Prompt Engineering)是指通过精心设计和优化输入提示(prompt),以引导人工智能模型(如大型语言模型)生成更符合预期的输出。
明确任务目标
设计提示结构
请根据以下产品参数生成一段吸引人的广告文案:
产品名称:X1智能手表
功能:心率监测、GPS定位、30天续航
目标用户:运动爱好者
要求:不超过100字,口语化风格
优化措辞与关键词
控制输出风格与格式
以小学老师的口吻,用三个简短的步骤教孩子如何洗手。
格式:
1. [步骤1]
2. [步骤2]
3. [步骤3]
处理模型局限性
请列举三种环保的生活方式,确保建议科学可行,避免提及政治敏感内容。
以“AI在医疗领域的应用”为主题,撰写一篇800字的科普文章。
要求:
- 包含三个具体案例(如影像诊断、药物研发、个性化治疗)
- 语言通俗易懂,适合高中生阅读
- 结尾呼吁合理看待AI的伦理问题
向没有技术背景的老人解释区块链是什么,用比喻和生活化的例子说明其原理和用途。
编写一个高效的Python函数,计算第n项斐波那契数列。
要求:
- 使用迭代而非递归
- 处理n为负数或非整数的情况
- 添加注释说明关键步骤
赛博朋克风格的机械猫,霓虹灯光环绕,站在未来城市的雨夜街道上,4K超清细节。
Few-shot Learning(少样本学习)
示例1:
输入:这家餐厅服务很好,但食物一般。
输出:正面评价:服务态度优秀;负面评价:菜品质量普通。
输入:手机续航强,但屏幕容易划伤。
输出:
链式思考(Chain-of-Thought)
问题:如果3个人3天喝3桶水,9个人9天喝几桶水?
要求:分步骤解释计算过程。
角色扮演
你是一名资深营养师,为糖尿病患者设计一周食谱,要求低糖高纤维。
提示工程是连接人类意图与AI能力的桥梁。通过明确目标、结构化设计、持续优化,可以显著提升模型的实用性和可靠性。其核心在于:用最精准的语言,让模型理解并执行复杂任务。
接下来讲讲提示工程应用在哪个阶段,是预训练阶段、还是微调阶段、还是用户输入问题,如果是用户输入问题,需要用户懂得提示工程,这个要求太高,因为普通用户并不知道什么是提示工程
提示工程主要应用于 模型使用阶段(即用户输入问题阶段),而非预训练或微调阶段。具体原因如下:
阶段 | 是否涉及提示工程 | 说明 |
---|---|---|
预训练阶段 | 否 | 模型通过海量无标签数据学习通用语言模式,不涉及特定任务的提示设计。 |
微调阶段 | 间接相关 | 微调可能调整模型对特定提示的响应方式,但提示工程本身是应用层的输入优化技术。 |
用户输入阶段 | 是(主战场) | 用户通过设计提示词引导模型生成所需结果,这是直接影响输出质量的关键环节。 |
典型失败案例:
为让普通用户无需精通提示工程也能高效使用AI,开发者可通过以下方法优化系统设计:
[广告文案生成器]
产品名称:________
核心卖点:________(如:续航长、价格低)
目标人群:________(如:学生、上班族)
风格要求:________(下拉选择:幽默/正式/科技感)
def enhance_prompt(raw_input):
# 调用小模型分析用户意图
intent = analyze_intent(raw_input)
# 生成优化建议选项
return generate_suggestions(intent)
设计一份适合厨房新手的减脂食谱,要求:
- 包含3道家常菜
- 每道菜烹饪时间≤30分钟
- 标注热量和蛋白质含量
针对愿意学习基础技巧的用户,可提供轻量级培训资源:
工具类型 | 示例 |
---|---|
提示词库 | 分类整理优质提示模板(如“小红书爆款标题生成器”“代码调试助手”)。 |
交互式教程 | 通过案例演练教学,如:“尝试修改下方提示中的红色部分,观察输出变化”。 |
实时反馈系统 | 对用户输入的提示进行质量评分,并给出优化建议(如“添加具体字数要求可提高输出稳定性”)。 |
核心结论:提示工程主要用于 用户输入阶段,但通过产品设计可将技术复杂性封装在系统后端,用户只需自然交互即可获得高质量输出。
实现路径:
未来趋势:随着AI系统智能化程度提升,提示工程将逐渐从“用户显式技能”转变为“系统隐式功能”,最终实现“所想即所得”的自然交互体验。
现在大模型具备深度思考和推理能力,是否还需要提示工程?
尽管当前的大语言模型在逻辑推理、多步骤问题解决等任务上展现出接近人类的表现,提示工程(Prompt Engineering)仍然是不可或缺的关键技术。其必要性源于大模型的底层原理与人类思维的差异,以及实际应用场景的复杂性。
根据2024年最新财报数据,分析特斯拉Q1的营收增长趋势。
[附:特斯拉2024Q1财报摘要链接]
场景 | 模糊提示 | 优化提示 |
---|---|---|
学术论文 | “写一段量子计算的介绍” | “以APA格式撰写量子计算研究综述,涵盖超导与光量子路线,引用2020年后顶刊论文” |
儿童教育 | “解释光合作用” | “用比喻和简笔画步骤向6岁孩子说明植物如何利用阳光制造食物” |
列举三种环保的生活方式,要求:
- 基于中国国情
- 不涉及政治议题
- 避免宗教相关建议
随着模型能力提升,提示工程并未消失,而是向更高级的形态演进:
任务:产品对比
对象:iPhone 15 vs. 华为Mate 60
对比维度:主摄像头参数(传感器尺寸、像素)、夜景模式效果、变焦能力
输出格式:表格形式,包含技术参数和样张分析
[广告文案生成模板]
产品名称:________
核心卖点:________(最多3个关键词)
目标人群:________(如:Z世代、职场妈妈)
情感基调:________(下拉选择:温馨/科技感/幽默)
用户:写一封求职信
模型:请提供目标岗位名称、您的核心技能及过往成就关键词。
用户:申请数据分析师,擅长Python和SQL,曾通过优化模型提升转化率20%
模型:生成定制化求职信...
阶段 | 提示工程形态 | 用户感知 |
---|---|---|
早期 | 简单指令(如“翻译这段文字”) | 需手动调整关键词和格式 |
当前 | 结构化提示 + 交互式引导 | 部分自动化,需基础设计技巧 |
未来 | 自然语言交互 + 场景自适应 | 完全无感,系统自动优化交互逻辑 |
下面介绍使用轻量级模型进行意图解析和提示重写,使用 Python 开发一个例子,实现意图解析和提示重写、调用大模型生成内容的过程,比如用户输入“我要一个减肥食谱,做的过程不要太难”。
输入层 → 意图解析层 → 提示模板层 → 大模型层 → 输出层
组件 | 功能描述 | 关键技术 |
---|---|---|
意图分类器 | 识别用户意图领域(饮食/文案/编程等) | 轻量级文本分类模型(FastText) |
语义解析器 | 提取关键参数和约束条件 | 规则引擎 + 小样本NER模型 |
模板调度器 | 根据意图匹配合适模板 | 模板元数据管理(JSON/YAML) |
约束校验器 | 确保生成内容符合安全/合规要求 | 敏感词过滤 + 逻辑规则校验 |
# -*- coding: utf-8 -*-
from typing import Dict, Any
import yaml
import dashscope
from fasttext import load_model
class UniversalPromptSystem:
def __init__(self, config_path: str):
# 加载配置文件
with open(config_path) as f:
self.config = yaml.safe_load(f)
# 初始化组件
self.intent_classifier = load_model(self.config['intent_model_path'])
self.templates = self.config['templates']
def parse_intent(self, text: str) -> str:
# FastText预测意图类别
labels, _ = self.intent_classifier.predict(text)
return labels[0].replace('__label__', '')
def extract_params(self, text: str, intent: str) -> Dict[str, Any]:
# 获取领域专用解析规则
rules = self.config['param_rules'].get(intent, {})
params = {}
# 执行正则匹配
for key, pattern in rules.get('regex', {}).items():
match = re.search(pattern, text)
if match:
params[key] = match.group(1)
# 此处可扩展接入NER模型
return params
def build_prompt(self, intent: str, params: Dict) -> str:
# 获取模板
template = self.templates.get(intent, self.templates['default'])
# 动态填充参数
return template.format(**params)
def generate(self, text: str) -> str:
# 完整流程
intent = self.parse_intent(text)
params = self.extract_params(text, intent)
prompt = self.build_prompt(intent, params)
# 调用大模型
response = dashscope.Generation.call(
model="qwen-max",
prompt=prompt
)
return response.output.text
# 示例配置文件(config.yaml)
"""
intent_model_path: ./intent_model.bin
templates:
diet_advice: |
你是一名专业营养师,请根据以下要求设计健康食谱:
目标人群:{target_group}
禁忌食材:{avoid_ingredients}
烹饪难度:{difficulty}
输出格式:
- [餐别] 菜名
• 热量:{calories}
• 食材:{ingredients}
• 步骤:{steps}
marketing_copy: |
你是一名资深广告文案专家,请为{product_name}撰写宣传文案:
核心卖点:{selling_points}
目标人群:{target_audience}
风格要求:{tone}
附加要求:{additional_requirements}
param_rules:
diet_advice:
regex:
target_group: '目标人群:(.+?)[,。]'
avoid_ingredients: '不要(.+?)[,。]'
marketing_copy:
regex:
product_name: '为(.+?)撰写'
selling_points: '卖点:(.+?)[,。]'
"""
# 初始化系统
system = UniversalPromptSystem("config.yaml")
# 使用示例
user_input1 = "我需要一个减脂食谱,目标人群是上班族,不要鸡胸肉"
output1 = system.generate(user_input1)
user_input2 = "请为X1智能手表写宣传文案,卖点是长续航和健康监测,目标人群是运动爱好者"
output2 = system.generate(user_input2)
1. 减肥食谱场景
# 用户输入
input_text = "想要一个素食减脂餐方案,不要豆制品,操作要简单"
# 自动解析
intent = "diet_advice"
params = {
"target_group": "素食者",
"avoid_ingredients": "豆制品",
"difficulty": "简单"
}
# 生成提示词
"""
你是一名专业营养师,请根据以下要求设计健康食谱:
目标人群:素食者
禁忌食材:豆制品
烹饪难度:简单
输出格式:
- [餐别] 菜名
• 热量:{calories}
• 食材:{ingredients}
• 步骤:{steps}
"""
2. 产品文案场景
# 用户输入
input_text = "给Y2蓝牙耳机写广告文案,卖点是降噪和30小时续航,目标用户是通勤族"
# 自动解析
intent = "marketing_copy"
params = {
"product_name": "Y2蓝牙耳机",
"selling_points": "降噪和30小时续航",
"target_audience": "通勤族"
}
# 生成提示词
"""
你是一名资深广告文案专家,请为Y2蓝牙耳机撰写宣传文案:
核心卖点:降噪和30小时续航
目标人群:通勤族
风格要求:科技感与生活化结合
附加要求:突出地铁通勤场景
"""
1. 新增领域三步骤
定义意图类别
在配置文件中添加新意图标识:
templates:
tech_support: |
你是一名IT技术支持专家,请解决以下问题:
用户问题:{issue_description}
设备类型:{device_type}
已尝试操作:{tried_actions}
期望输出格式:
1. 可能原因分析
2. 分步骤解决方案
配置参数提取规则
param_rules:
tech_support:
regex:
device_type: '设备类型:(.+?)[,。]'
issue_description: '问题描述:(.+)'
训练意图分类模型
收集标注数据后更新FastText模型:
fasttext supervised -input train.txt -output intent_model
2. 效果优化策略
优化方向 | 具体方法 | 效果提升点 |
---|---|---|
意图识别 | 使用Sentence-BERT代替FastText | 小样本场景准确率+15% |
参数抽取 | 接入PaddleNLP的ERNIE-M模型 | 复杂句式解析能力提升 |
模板管理 | 建立版本化模板库,支持A/B测试 | 多版本效果对比优化 |
安全校验 | 接入阿里云内容安全API | 违规内容拦截率99.9% |
动态模板加载
class TemplateManager:
def __init__(self, template_db_url):
self.conn = create_engine(template_db_url)
def get_template(self, intent: str) -> str:
return self.conn.execute(
f"SELECT content FROM templates WHERE intent='{intent}'"
).fetchone()[0]
混合解析策略
def extract_params(self, text: str, intent: str) -> Dict:
# 优先使用规则引擎
params = self._rule_based_extract(text, intent)
# 不足时调用模型
if len(params) < self.config['min_params']:
params.update(self._model_based_extract(text, intent))
return params
持续学习机制
def online_learning(self, user_feedback: Dict):
# 当用户手动修正结果时,记录到训练集
if user_feedback['corrected_output']:
self.save_to_training_data(
user_feedback['original_input'],
user_feedback['corrected_output']
)
# 定期触发模型重训练
if time.time() - self.last_retrain > 3600*24:
self.retrain_model()
即使是完全不同的场景(如从食谱生成切换到广告文案),也只需要: