Prompt工程是AIGC应用开发中控制大模型输出质量的关键技术环节。结构良好的提示词能将模型输出准确率显著提升,而随意编写的提示词经常导致幻觉、格式混乱和内容偏离。本文通过操作步骤和配置示例,讲解Prompt工程的核心方法。
结构化提示词的五个组成部分
结构化提示词包含五个模块:角色定义、任务描述、上下文信息、输出格式约束和示例参考。每个模块对应模型理解输入的不同维度,缺少任何一个模块都可能导致输出质量下降。
角色定义告诉模型以什么身份回答问题。任务描述明确模型需要完成的具体工作。上下文信息提供背景知识。输出格式约束规定返回结果的格式。示例参考通过具体案例引导模型行为。
一个完整的结构化Prompt示例:
## 角色
你是一名资深数据库管理员,拥有10年MySQL运维经验。
## 任务
分析给定的慢查询SQL语句,输出优化建议。
## 上下文
数据库版本:MySQL 8.0
表引擎:InnoDB
数据量:约2000万行
当前索引:仅主键索引
## 输出格式
{
"问题诊断": "string",
"优化方案": ["string"],
"优化后SQL": "string",
"预期提升": "string"
}
## 示例
输入:SELECT * FROM orders WHERE customer_id = 1001 AND status = 'paid';
输出:{
"问题诊断": "缺少customer_id和status的联合索引,导致全表扫描",
"优化方案": ["创建联合索引idx_customer_status(customer_id, status)", "避免SELECT *,只查询必要字段"],
"优化后SQL": "SELECT id, order_no, amount FROM orders WHERE customer_id = 1001 AND status = 'paid'",
"预期提升": "查询时间从1200ms降至5ms以内"
}
Few-Shot提示:用少量样本引导模型行为模式
Zero-Shot提示直接给出任务描述,依赖模型自身的理解能力。Few-Shot提示在任务描述后附加若干输入输出对,通过示范引导模型学习期望的行为模式。
实际测试中,3到5个示例通常能取得最佳效果。示例过少模型可能无法准确理解任务,过多则会占用上下文窗口,降低模型对实际输入的注意力。
选择示例时需注意覆盖不同场景。以文本分类任务为例:
## 任务
对用户评论进行情感分类。
## 示例
评论:这款服务器的散热效果非常好,连续跑72小时温度都没超过60度。
分类:正面
评论:物流太慢了,等了一周才到,包装也有破损。
分类:负面
评论:产品功能正常,但说明书太简略,自己摸索了半天才配好。
分类:中性
## 请分类
评论:[用户输入]
分类:
输出格式控制:JSON模式与结构化约束
大模型默认输出自然语言文本,但API集成场景通常需要结构化数据。通过在Prompt中明确指定输出格式,并配合模型的JSON模式参数,可以稳定获得可解析的结构化输出。
OpenAI兼容API的调用示例:
import requests
url = "https://api.example.com/v1/chat/completions"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "你是一个技术文档摘要生成器。将输入的技术文档总结为JSON格式,包含title、summary、key_points三个字段。"
},
{
"role": "user",
"content": "文档内容:..."
}
],
"response_format": {"type": "json_object"},
"temperature": 0.3,
"max_tokens": 2000
}
response = requests.post(url, headers=headers, json=payload)
result = response.json()
print(result["choices"][0]["message"]["content"])
temperature参数设为0.3降低随机性,确保输出格式稳定。max_tokens限制输出长度,避免截断导致JSON不完整。
常见Prompt问题诊断与修复方案
问题一:模型输出偏离主题。原因是任务描述不够具体。修复方法是增加约束条件,明确告诉模型不应该做什么。例如添加”不要输出与数据库无关的内容”。
问题二:输出格式不稳定,时而是JSON时而是纯文本。原因是格式约束不够强。解决方法是在System Prompt和User Prompt中重复格式要求,并使用response_format参数强制JSON输出。
问题三:模型产生幻觉,编造不存在的信息。处理方式是在Prompt中提供充分的上下文信息,并添加”如果信息不足,请回答信息不足”的指令。
问题四:长文本场景下模型遗忘前面的指令。这是上下文窗口限制导致。可将关键指令放在Prompt末尾,利用近因效应增强模型对最后输入内容的关注度。
Prompt版本管理与A/B测试方法
生产环境中Prompt需要持续迭代。建议将Prompt存储为独立文件或数据库记录,通过版本号管理变更历史。每次修改后运行固定的测试用例集,对比不同版本的输出质量。
简单的A/B测试框架实现:
test_cases = [
{"input": "如何优化MySQL慢查询", "expected_keywords": ["索引", "EXPLAIN", "优化"]},
{"input": "K8s Pod频繁重启怎么排查", "expected_keywords": ["kubectl", "日志", "资源"]},
]
def evaluate_prompt(prompt_version, test_cases):
scores = []
for case in test_cases:
output = call_model(prompt_version, case["input"])
hit_rate = sum(1 for kw in case["expected_keywords"] if kw in output) / len(case["expected_keywords"])
scores.append(hit_rate)
return sum(scores) / len(scores)
score_v1 = evaluate_prompt(prompt_v1, test_cases)
score_v2 = evaluate_prompt(prompt_v2, test_cases)
print(f"V1得分: {score_v1:.2%}, V2得分: {score_v2:.2%}")
通过量化评估,可以客观判断Prompt修改是否带来实际提升,避免凭感觉调整导致质量回退。AI模型部署场景下,Prompt工程与代码工程一样需要版本管理和自动化测试。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/da-mo-xing-prompt-gong-cheng-shi-zhan-jie-gou-hua-ti-shi-ci/