Prompt工程
1. 引言为什么需要学习 Prompt 工程在当今以大型语言模型LLM为核心的人工智能浪潮中Prompt提示词已成为连接人类意图与模型能力的核心桥梁。那么什么是 Prompt简单来说就是你向 AI 发起的对话内容或指令。比如当你问 ChatGPT “帮我写一首诗”这句话就是一条 Prompt。一个精心设计的 Prompt 可以显著提升模型输出的准确性、相关性和创造性而一个模糊的指令则可能导致结果南辕北辙。举个直观的例子❌模糊 Prompt写个总结✅清晰 Prompt请用 100 字以内总结下面这段科技新闻突出核心数据和时间节点面向普通读者同样的模型同样的输入材料仅仅因为 Prompt 的写法不同输出的质量可能天差地别。因此掌握 Prompt 工程技巧不再是少数专家的专利而是每一位希望高效利用 AI 的开发者和内容创作者的必备技能。本指南旨在为你提供一套系统、可操作的 Prompt 工程深度学习路径并辅以详细的代码 Demo帮助你将理论转化为实践。2. 核心概念与术语在深入技巧之前我们先明确几个核心概念Prompt提示词 你输入给语言模型的指令或问题是模型生成内容的“种子”。Completion补全 模型根据你的 Prompt 生成的输出内容。Temperature温度 控制模型输出随机性的参数。值越低如 0.2输出越确定、保守值越高如 0.8输出越多样、有创造性。Top-p核采样 另一种控制随机性的方法从累积概率超过 p 的最小 token 集合中采样。Few-shot Learning少样本学习 在 Prompt 中提供少量示例引导模型模仿示例的格式和风格来完成任务。Chain-of-Thought思维链CoT 在 Prompt 中引导模型“逐步思考”展示推理过程从而提升复杂问题如数学、逻辑推理的解答准确性。3. 基础 Prompt 构建技巧3.1 清晰明确角色、任务、上下文、格式一个有效的 Prompt 应尽可能包含以下要素角色Role 指定模型扮演的角色。任务Task 清晰、具体地描述需要完成的工作。上下文Context 提供必要的背景信息或约束条件。格式Format 明确期望的输出格式如 JSON、Markdown、列表。示例 Prompt你是一位资深软件架构师。请根据以下用户需求设计一个微服务架构方案。 需求一个电商平台需要支持用户注册登录、商品浏览、购物车、订单管理和支付。 请以 Markdown 列表形式列出核心服务及其职责并简要说明服务间的通信方式。3.2 结构化与分步指令对于复杂任务将指令分解为清晰的步骤。示例 Prompt请完成以下任务 1. 总结下面这段关于机器学习的文本。 2. 从总结中提取三个关键词。 3. 基于关键词生成一个可能的后续研究问题。 文本[此处插入文本] 请将最终答案以 JSON 格式输出包含 summary、keywords 和 research_question 字段。4. 高级 Prompt 工程技巧4.1 少样本学习Few-shot Prompting通过提供输入-输出示例让模型“照葫芦画瓢”。# 代码 Demo使用 OpenAI API 进行少样本情感分析importopenai clientopenai.OpenAI(api_keyyour-api-key)few_shot_prompt 请判断以下评论的情感倾向正面/负面/中性 示例1: 评论“这部电影太精彩了演员演技炸裂” 情感正面 示例2: 评论“产品一般般没有宣传的那么好。” 情感中性 示例3: 评论“物流慢客服态度差非常失望。” 情感负面 现在请判断 评论“这款手机的电池续航令人印象深刻但屏幕有点暗。” 情感 responseclient.chat.completions.create(modelgpt-4o-mini,messages[{role:user,content:few_shot_prompt}],temperature0.1# 低温度确保稳定遵循示例格式)print(response.choices[0].message.content)# 预期输出正面4.2 思维链Chain-of-Thought Prompting引导模型展示推理步骤适用于数学、逻辑问题。# 代码 Demo使用 CoT 解决数学问题cot_prompt Q: 一个篮子里有15个苹果。小明拿走了3个小华又放进去比现在篮子里苹果数多2倍的苹果。最后篮子里有多少个苹果 让我们一步步思考 1. 最初有15个苹果。 2. 小明拿走3个后剩下 15 - 3 12 个苹果。 3. “比现在篮子里苹果数多2倍”意思是放进去的苹果数量 当前数量 (12) * 2 24 个。 4. 小华放进去24个苹果后总数为 12 24 36 个。 5. 所以最后篮子里有36个苹果。 A: 36 Q: 一个房间里有4张桌子每张桌子有4条腿。另外有3把椅子每把椅子有3条腿。房间里所有家具总共有多少条腿 让我们一步步思考 responseclient.chat.completions.create(modelgpt-4o-mini,messages[{role:user,content:cot_prompt}],temperature0)print(response.choices[0].message.content)# 预期输出包含推理步骤和最终答案4*4 3*3 16925条腿。4.3 自我一致性Self-Consistency与投票通过多次采样并选择最一致的答案来提高可靠性。# 代码 Demo自我一致性采样简化版importcollections question“如果一本书放在桌子上桌子在房间里那么书在房间里吗请只回答‘是’或‘否’。” answers[]for_inrange(5):# 采样5次responseclient.chat.completions.create(modelgpt-4o-mini,messages[{role:user,content:question}],temperature0.7# 适当提高温度以产生多样性)answerresponse.choices[0].message.content.strip()answers.append(answer)print(f采样{_1}:{answer})# 统计最常见答案countercollections.Counter(answers)final_answer,countcounter.most_common(1)[0]print(f\n最终答案通过自我一致性投票: {final_answer} (出现{count}次))5. 实战项目构建一个智能邮件分类器我们将综合运用以上技巧构建一个能自动将客户邮件分类如“咨询”、“投诉”、“表扬”、“其他”并提取关键信息的系统。# 代码 Demo智能邮件分类与信息提取器importjsondefclassify_and_extract_email(email_content): 使用高级 Prompt 对邮件进行分类和信息提取。 system_prompt“你是一个专业的客户服务AI助手。请严格按照指令操作。” user_promptf 请处理以下客户邮件 邮件内容 \\\{email_content}\\\ 请执行以下步骤 1. **分类**判断邮件属于哪一类选项咨询、投诉、表扬、其他。 2. **提取实体**从邮件中提取以下信息如果存在 - 客户提及的产品/服务名称 - 订单号或参考号 - 关键日期如问题发生日期 3. **总结核心诉求**用一句话总结客户的主要需求或问题。 4. **生成回复要点**为该类邮件生成2-3条回复要点。 请以以下 JSON 格式输出结果 {{ \classification\: \分类结果\, \entities\: {{ \product\: \产品名\, \order_id\: \订单号\, \date\: \日期\ }}, \summary\: \核心诉求总结\, \reply_outline\: [\要点1\, \要点2\] }} 如果某项信息不存在请用空字符串 \\ 表示。 responseclient.chat.completions.create(modelgpt-4o-mini,messages[{role:system,content:system_prompt},{role:user,content:user_prompt}],temperature0.1,response_format{type:json_object}# 强制 JSON 输出)resultjson.loads(response.choices[0].message.content)returnresult# 测试邮件test_email“” 主题关于订单#ORD-2024-7890 的物流问题尊敬的客服 我于7月20日下单购买了“智能音箱X1”订单号ORD-2024-7890。系统显示7月22日发货但至今7月27日仍未收到任何物流更新信息。我非常着急因为这是准备送人的礼物。请尽快核实物流状态并告知预计送达时间。 谢谢。 李华 “” resultclassify_and_extract_email(test_email)print(json.dumps(result,indent2,ensure_asciiFalse))# 预期输出结构# {# classification: 投诉,# entities: {# product: 智能音箱X1,# order_id: ORD-2024-7890,# date: 7月20日# },# summary: 客户投诉订单ORD-2024-7890智能音箱X1物流信息长时间未更新要求核实状态并告知预计送达时间。,# reply_outline: [# 对物流延迟表示歉意,# 承诺立即核实订单ORD-2024-7890的物流状态,# 告知客户具体的预计送达时间或下一步处理方案# ]# }6. 工具与框架推荐LangChain: 用于构建LLM应用的强大框架内置大量Prompt模板、链Chains和代理Agents。LlamaIndex: 专注于数据连接的框架便于为LLM构建基于私有数据的问答系统。PromptLayer: Prompt版本管理、实验和协作平台。OpenAI Playground / ChatGPT: 交互式测试和迭代Prompt的绝佳环境。7. 总结与最佳实践清单迭代优化Prompt 工程是一个迭代过程。从简单开始根据输出结果不断调整和细化。具体胜于笼统避免“写得好一点”这种模糊要求改为“将这段文字改写得更加正式且面向技术管理者”。利用系统指令在对话开始时通过系统消息role: system设定模型的角色和行为基调这比在用户消息中重复更有效。分隔指令与数据使用分隔符如\\\、---、清晰地区分指令和待处理的内容防止模型混淆。指定输出长度如果需要特定长度的输出可以明确要求例如“用大约100字总结”。善用温度参数创造性任务写诗、生成创意调高温度确定性任务分类、提取调低温度。测试与评估建立测试集定量评估不同Prompt版本的效果。掌握这些技巧你将能更自如地驾驭大型语言模型将其潜力转化为解决实际问题的强大生产力。现在就开始你的 Prompt 工程实践吧