Prompt Engineering是迭代的实证科学
参考:Anthropic 官方文档中的大量示例Applied AI team的分享Prompt Caching 的正确使用方式Agent 场景下的提示工程技巧一、Prompt Engineering什么是Prompt Engineering提示工程是与语言模型沟通、引导其完成目标任务的实践方法具体包括为模型编写清晰的指令提供任务完成所需的上下文信息思考如何组织信息排列顺序以获得最佳结果以一个真实的瑞典汽车保险理赔分析案例如何构建高效的 prompt。提示工程是一门迭代的实证科学需要不断测试和改进。背景场景设定瑞典保险公司汽车理赔审查系统输入数据左侧汽车事故报告表单17个复选框瑞典语右侧人工绘制的车祸现场草图目标让 Claude 准确判断事故责任方二、推荐的 Prompt 结构框架序号组成部分说明1任务描述Task Description明确 Claude 的角色和任务目标2内容Content需要分析的数据、图像、文档3详细指令Detailed Instructions分步骤的操作指南4示例ExamplesFew-shot 演示5重要信息强调Key Reminders关键要点回顾6执行命令Action让 Claude 开始执行任务三、迭代优化V1 - 基础版本问题仅提供最基本的指令告诉 Claude 这是一个事故报告审查任务结果Claude 错误判断为滑雪事故发生在一条瑞典街道上原因分析缺乏足够的场景上下文Claude 只能靠猜测V2 - 添加任务上下文和语气上下文新增内容# 任务上下文 - AI 系统角色帮助人工理赔员审查汽车事故报告表单 - 表单语言瑞典语 - 分析内容人类绘制的车祸现场草图 # 语气上下文 - 要求 Claude 保持**事实性**和**自信** - 如果无法确定不要猜测 - 评估结论必须清晰明确结果改进正确识别为汽车事故非滑雪识别出车辆 A 勾选了第 1 项车辆 B 勾选了第 12 项仍表示无法完全确定责任方V3 - 添加背景信息和数据文档核心策略将不变信息放入 System PromptSystem Prompt 包含的内容form_backgroundform_type瑞典汽车事故表单/form_typelanguage瑞典语/languagetitle特定表单标题/titlestructurecolumnscolumn_left车辆A/column_leftcolumn_right车辆B/column_right/columnsrows17个检查项目/rows/structurefilling_guidelinesnote人类填写存在不规范性/notepossible_marks- 圆圈 - 涂鸦 - X 标记 - 各种可能的标记类型/possible_marks/filling_guidelinespurpose确定事故责任方/purpose/form_background为什么使用 System Prompt表单结构永远不会改变只有填写内容会变化可以利用Prompt Caching优化性能Claude 不必每次都重新理解表单结构结果改进处理速度更快不再重复解释表单给出明确结论车辆 B 有责任V4 - 添加详细分步指令和重要提醒关键发现Claude 分析信息的顺序非常重要人类思维方式先看表单 → 理解事故背景再看草图 → 用表单信息解读草图最终判断 → 综合两者得出结论添加的指令task_instructionsstep_1action仔细检查表单/actionrequirements- 逐一检查每个复选框 - 列出所有已勾选的项目 - 确保不遗漏任何信息/requirements/step_1step_2action分析草图/actioncontext结合表单中获得的信息/context/step_2step_3action形成最终评估/action/step_3/task_instructionsimportant_guidelines- 只回答**非常确定**的内容 - 做出事实性声明时必须引用表单依据 - 例如车辆B右转基于第2项被勾选 - 如果草图无法理解应明确说明/important_guidelines结果Claude 展示详细分析过程逐项检查每个复选框提供 XML 格式的结构化输出给出明确的最终判决V5 - 添加输出格式控制output_requirements- 摘要清晰、简洁、准确 - 只包含必要信息用于后续数据存储 - 将最终判决包裹在final_verdictXML 标签中/output_requirements结果输出更简洁便于程序解析和数据存储可直接对接 SQL 数据库或后续 API 调用四、技巧1. 示例Few-shot Learning适用场景复杂或边缘案例实现方式examplesexampleinput!-- Base64 编码的图像示例 --/inputoutput!-- 期望的解析结果 --/output/example/examples价值将人类判断标准蒸馏到 prompt 中处理灰色地带案例持续积累反馈形成迭代改进2. Prefix Responses作用强制 Claude 以特定格式开头示例# 要求 Claude 以 JSON 格式响应 response_format: { # 或要求以 XML 标签开头 response_format: final_verdict用途生成结构化 JSON 输出便于后续 API 调用简化解析逻辑3. Extended Thinking机制启用后 Claude 会在thinking标签中展示推理过程可以分析推理日志了解 Claude 的思维模式可将有效的推理模式固化到 prompt 中优势处理复杂推理任务提高正确率理解模型如何看待数据五、信息组织最佳实践使用分隔符Delimiters推荐格式XML 标签user_preferences!-- 用户偏好信息 --/user_preferencescontent!-- 待分析内容 --/content优势结构清晰Claude 容易理解各部分关系可指定标签含义便于 Claude 后续引用为什么 Claude 喜欢结构化与 Claude 的**微调训练方式**一致减少歧义提高信息检索效率六、完整 Prompt# System Promptrole你是专业xx助手/roleform_backgroundform_typexx表单/form_typelanguagexx语/languagestructurex列布局A/B/C分区共xx项目描述xx/structurefilling_notes注释/filling_notes/form_background# User Prompttask分析x文件内x图判定x/taskcontentimage/contentinstructions1.逐项核验x、确认状态 2.结合信息解读内容 3.输出最终结论/instructionsoutput_formatanalysis_summary摘要/analysis_summarysketch_interpretation图文分析/sketch_interpretationfinal_verdict最终结果/final_verdict/output_formatconstraints- 仅陈述有依据事实 - 存疑需明确标注 - 所有结论依托证据/constraints示例:# System Promptrole你是一个专业的汽车保险理赔分析助手/roleform_backgroundform_type瑞典汽车事故表单/form_typelanguage瑞典语/languagestructure两列布局分别代表车辆A和车辆B 共17个检查项目描述事故发生时的各种情况/structurefilling_notes表单由人工填写可能存在各种非标准标记圆圈、涂鸦、非X标记/filling_notes/form_background# User Prompttask分析附件中的汽车事故报告表单和现场草图 确定事故责任方/taskcontent[表单图像] [草图图像]/contentinstructions1. 仔细检查表单逐一确认每个复选框的状态 2. 结合表单信息解读草图 3. 形成最终的责任判断/instructionsoutput_formatanalysis_summary分析摘要/analysis_summarychecked_items勾选项目列表/checked_itemssketch_interpretation草图解读/sketch_interpretationfinal_verdict最终判决/final_verdict/output_formatconstraints- 只陈述有充分依据的事实 - 无法确定时必须明确说明 - 判决必须基于表单和草图中的证据/constraints附录要点说明上下文至关重要缺乏上下文会导致模型产生幻觉或错误判断顺序决定效果Claude 分析信息的顺序应模拟人类思维方式不变信息放 System Prompt可利用缓存提高性能结构化输出使用 XML/JSON 便于程序处理自信但诚实只陈述确定内容不确定时要承认迭代改进通过测试发现问题持续优化 prompt利用扩展思考分析推理过程固化有效模式