把「和AI对话」从玄学变成工程学
"同样用GPT-4,为什么别人10分钟做完的工作,我要一个小时?"
这是我经常听到的抱怨。答案往往出在Prompt上。
好的Prompt和差的Prompt,输出的质量差距是数量级的。Prompt Engineering不是玄学,而是一门可以学习和复制的工程技能。
这篇文章从我半年多的实践出发,从基础到高级,系统性地分享Prompt Engineering的方法论和实战技巧。
一个高质量的Prompt通常包含几个要素:
[角色] → 你是一个资深Java开发工程师
[任务] → 请审查以下代码,找出潜在问题
[上下文] → 这段代码是订单服务的核心方法
[约束] → 只关注安全和性能问题,不要管代码风格
[输出格式] → 用表格输出,包含:问题描述、严重程度、行号、修改建议
[示例] → 最好给一个输出样例角色 + 任务 + 上下文 + 约束 + 格式 = 高质量输出实战对比:
❌ 差的Prompt:
帮我写一段Python代码做数据清洗。✅ 好的Prompt:
你是一个数据清洗专家。我需要一个Python函数,用于清洗电商订单数据。
任务:清洗包含以下问题的原始数据
- 空值和缺失值处理
- 日期格式统一(统一为YYYY-MM-DD)
- 金额格式清洗(去除货币符号,转为浮点数)
- 去除完全重复的行
上下文:原始数据是CSV格式,约有5万行,包含字段:order_id, amount, date, status, customer_name
约束:
1. 使用pandas库
2. 内存敏感,不要一次性加载全部数据
3. 保留清洗日志,记录每步处理了多少条数据
4. 返回清洗后的DataFrame和清洗报告
输出格式:完整的Python函数,包含详细的注释和docstring给AI一个明确的角色,能大幅提升输出质量。
# 弱
帮我优化一下这段SQL
# 强
你是一个有10年经验的DBA,擅长MySQL性能优化。
请审查以下SQL,从索引使用、执行计划、锁竞争三个维度给出优化建议。AI没有"常识"——你认为显而易见的事情,AI不知道。
# 弱
帮我看看这段代码有什么问题
# 强
这段代码是用户注册接口的核心逻辑,运行在生产环境。
当前问题:偶尔出现注册成功后无法登录的情况。
语言:Java 17
框架:Spring Boot 2.7
数据库:MySQL 8.0
请从并发安全、事务管理、异常处理三个角度审查。告诉AI什么不该做,比告诉它该做什么更有效。
请审查以下需求文档。
注意:
- 不需要评估技术可行性
- 不要讨论UI/UX设计
- 只关注业务逻辑的完整性和一致性对于复杂任务,引导AI分步思考:
请逐步分析这个问题:
第一步:列出所有参与的服务和组件
第二步:分析正常情况下的数据流
第三步:分析可能的故障点
第四步:给出根因假设
第五步:验证假设的方法对于格式有要求的输出,给1-3个示例能让AI更快理解你的需求:
请将以下用户反馈进行分类,类别包括:技术问题、产品建议、投诉、其他。
示例:
输入:"APP打开就闪退,根本用不了"
输出:{"category": "技术问题", "sentiment": "负面", "priority": "高"}
输入:"建议增加夜间模式,晚上看太刺眼了"
输出:{"category": "产品建议", "sentiment": "中性", "priority": "中"}
现在请分类:
输入:"你们客服电话打不通,等了半小时没人接"需要特定格式时,明确指定:
请用JSON格式输出,包含以下字段:
{
"summary": "摘要(50字以内)",
"issues": ["问题1", "问题2"],
"recommendations": ["建议1", "建议2"],
"risk_level": "high/medium/low"
}
不要输出任何其他内容,只输出JSON。不要期望一次Prompt就得到完美结果。好的Prompt是迭代出来的:
# 第一轮
请写一篇关于微服务的文章
# 第二轮(优化)
请写一篇面向技术管理者的微服务文章,重点讨论迁移成本和收益
# 第三轮(继续优化)
请把第三段"迁移成本分析"展开,包含:
- 团队培训成本(按15人团队估算)
- 基础设施改造成本
- 迁移期间的业务风险
- ROI计算模型对于需要创意的任务(头脑风暴、文案),用高温度(0.7-0.9) 对于需要精确的任务(代码、数据分析),用低温度(0.1-0.3)
# 严谨分析
response = client.chat.completions.create(
model="gpt-4",
temperature=0.1,
messages=[...]
)
# 创意写作
response = client.chat.completions.create(
model="gpt-4",
temperature=0.8,
messages=[...]
)适合需要推理的复杂问题:
请一步步推理以下问题:
阿里云某ECS服务器的CPU利用率持续在95%以上,
但监控显示该服务器上只运行了一个Nginx进程,
Nginx的CPU使用率只有20%。
请分析可能的原因。
过程(逐步推理):
1. 首先...
2. 其次...
3. 然后...
4. 结论...让AI自己检查自己的输出:
请先回答上面的问题,然后:
1. 审查你的推理过程,是否有遗漏的可能性?
2. 你的结论有多少把握(百分比)?
3. 如果需要更多信息来确证,需要什么信息?让AI扮演不同角色,从多角度分析同一个问题:
请你先扮演"安全工程师",再扮演"产品经理",最后扮演"架构师"。
分别从这三个角色角度,评估"增加用户头像上传功能"这个需求,
并给出各自的意见和理由。
最后请作为项目经理,综合三个角色的意见,给出最终决策建议。复杂的任务分解成多个子任务,每个子任务用一个专门的Prompt:
def ai_article_generator(topic):
# Step 1: 生成大纲
outline_prompt = f"生成一篇关于{topic}的技术文章大纲,4-6个章节"
outline = call_llm(outline_prompt)
# Step 2: 逐章展开
full_article = ""
for chapter in outline:
chapter_prompt = f"基于以下大纲,撰写'{chapter}'章节的内容:\n{outline}"
chapter_content = call_llm(chapter_prompt)
full_article += chapter_content
# Step 3: 润色合并
polish_prompt = f"请润色以下文章,确保段落连贯、风格统一:\n{full_article}"
final_article = call_llm(polish_prompt)
return final_article区别对待系统指令和用户输入:
messages = [
{"role": "system", "content": """
你是一个代码审查助手。
规则:
- 只审查安全性和性能问题
- 用中文回答
- 用表格输出结果
- 不确定的问题标记为"待确认"
"""},
{"role": "user", "content": f"请审查以下代码:\n{code_snippet}"}
]角色:资深{语言}工程师
任务:实现{功能描述}
上下文:
- 项目架构:{架构说明}
- 已有代码:{相关代码}
- 依赖框架:{框架名}
约束:
- 遵循{命名规范}命名规范
- 包含完整的异常处理
- 添加充分的日志输出
- 编写单元测试
输出:完整的代码文件角色:数据分析专家
任务:分析以下数据,发现规律和异常
数据样本(前5行):
{数据}
分析要求:
1. 数据质量评估
2. 关键趋势分析
3. 异常值检测
4. 相关性分析
5. 业务建议
输出格式:Markdown报告角色:资深{系统}运维专家
现象:{错误描述}
环境:{系统版本/配置}
日志:{关键日志}
排查要求:
1. 可能的原因列表(按可能性排序)
2. 每个原因的验证方法
3. 修复建议(按风险排序)
4. 预防措施像管理代码一样管理Prompt:
PROMPT_VERSIONS = {
"v1.0": "初始版本",
"v1.1": "增加了格式约束",
"v1.2": "优化了角色设定",
"v2.0": "改为JSON输出格式",
}对同一个任务,用不同的Prompt版本测试效果:
def ab_test_prompt(task, prompt_a, prompt_b):
result_a = call_llm(prompt_a.format(task=task))
result_b = call_llm(prompt_b.format(task=task))
# 让AI自己评价哪个更好
eval_prompt = f"比较以下两个回答,哪个更好?为什么?\nA: {result_a}\nB: {result_b}"
evaluation = call_llm(eval_prompt)
return evaluation建立团队的Prompt模板库,新成员直接复用:
prompt_templates/
├── code_review.yaml
├── bug_analysis.yaml
├── meeting_minutes.yaml
├── api_design.yaml
└── data_analysis.yamlPrompt Engineering是一项需要刻意练习的技能,跟写代码一样需要:
记住:AI的能力上限 = 模型的潜力 × 你的Prompt质量
你有什么好的Prompt技巧?欢迎分享!