提示词工程完全指南
提示词工程完全指南Prompt Engineering Complete Guide来源参考OpenAI 官方指南、DAIR.AI Prompt Engineering Guide、IBM、Google Research、斯坦福 CS224N整理用于学习交流目录什么是提示词工程六大核心策略OpenAI 官方基础技巧进阶技巧高级推理技术结构化输出提示词框架资源推荐一、什么是提示词工程提示词工程Prompt Engineering是一门与大型语言模型LLM有效交互的技术学科涵盖提示词的设计、优化和管理。其核心目标是引导 AI 模型准确、高效地完成各类任务。AI 时代的关键技能 Prompt提示词 AGI 时代的「编程语言」 Prompt Engineering AGI 时代的「软件工程」 提示工程师 AGI 时代的「程序员」提示词的四大核心要素┌─────────────────────────────────────────┐ │ 完整的 Prompt 应包含 │ ├─────────────────────────────────────────┤ │ 1. Instruction指令—— 必须 │ │ 你希望模型执行的具体任务 │ │ │ │ 2. Context上下文—— 可选 │ │ 背景信息、额外知识、参考资料 │ │ │ │ 3. Input Data输入数据—— 可选 │ │ 需要模型处理的内容 │ │ │ │ 4. Output Indicator输出指示器—— 可选 │ │ 期望的输出格式、类型、风格 │ └─────────────────────────────────────────┘二、六大核心策略OpenAI 官方OpenAI 官方发布的提示词工程指南推荐所有学习者优先阅读。原文https://platform.openai.com/docs/guides/prompt-engineering策略一写出清晰的指令模型无法读懂你的心思写得越清晰输出越符合预期。1.1 在 prompt 中包含详细信息# 差模糊 总结一下这份文件。 # 好具体 总结这份产品需求文档包含核心功能不超过3点、 用户体验改进、主要风险每点用一句话说明。1.2 要求模型扮演专家角色你是一位有10年经验的高级软件架构师 擅长设计高可用、可扩展的系统架构。 请评审以下架构设计...1.3 使用分隔符清晰地划分不同部分 请分析以下内容按照要求输出 内容开始 {article_content} 内容结束 分析要求 1. 提取核心论点3点 2. 判断作者立场支持/反对/中立 3. 找出最主要的论据 你的分析 1.4 明确指定完成任务所需的步骤请按以下步骤处理这段文本 Step 1: 识别文本中提到的所有人名 Step 2: 提取每个人名的职位信息 Step 3: 用表格形式输出结果列为【姓名 | 职位】 文本{text} 策略二提供参考文本RAG 思想来源让模型基于你提供的内容回答而非凭记忆。基于以下参考资料回答问题。如果资料中没有相关信息请直接回答资料不足 不要编造内容。 参考资料 {reference_text} 问题{question}策略三将复杂任务分解为简单步骤# 不要让模型一步到位完成复杂任务 写一个完整的电商系统 # 分解为多个简单任务 帮我开发一个电商系统请按以下顺序进行 Step 1: 列出核心功能模块和优先级 Step 2: 设计数据库表结构 Step 3: 给出 API 接口设计 请先完成 Step 1等我确认后再进行下一步。策略四指定输出的结构格式# 要求模型输出 JSON 请以 JSON 格式返回用户的等级信息 { user_id: 用户ID, level: 等级铜/银/金/钻, points: 当前积分, next_level: 距离下一等级还需多少积分 } # 要求表格输出 将以下数据整理为 Markdown 表格 商品名称 | 原价 | 折扣价 | 节省金额 # 要求分点输出 用 Markdown 列表格式输出不超过5点每点不超过20字策略五使用最具体的指令# 差笼统 让代码更好。 # 好具体 优化这段 Python 代码 1. 减少时间复杂度目前是 O(n^2) 2. 添加类型注解 3. 添加 docstring 4. 确保通过 PEP8 检查策略六系统性地测试变化# 测试不同 prompt 版本的效果prompts[简洁回答,详细回答包括利弊分析,用专业术语回答适合技术人员]results{}forpromptinprompts:responsellm.generate(prompt)scoreevaluate(response)# 自定义评估函数results[prompt]{response:response,score:score}# 选择得分最高的 promptbest_promptmax(results,keylambdax:results[x][score])三、基础技巧3.1 零样本提示Zero-shot Prompting不给任何示例直接下达指令。# 直接指令responseclient.chat.completions.create(modelgpt-4o,messages[{role:user,content:将以下句子分类为积极、消极或中立今天天气真好}])# 输出积极适用场景简单任务、模型已具备的能力、指令足够清晰时。3.2 少样本提示Few-shot Prompting通过提供少量示例让模型理解任务模式和输出格式。# 无示例可能输出不统一翻译苹果# 有示例输出格式稳定responseclient.chat.completions.create(modelgpt-4o,messages[{role:user,content:将中文水果名翻译为英文。 示例 - 香蕉 - Banana - 葡萄 - Grape - 橙子 - Orange 请翻译 - 苹果}])# 输出AppleFew-shot 的核心要点要点说明示例示例数量1-5 个为宜过多反而降低效果翻译任务3-5 个水果示例覆盖覆盖常见情况和边缘情况包含阳性/阴性/中性情感格式一致Input 和 Output 格式保持统一都用 “中文 - 英文” 格式正负示例必要时提供负示例帮助模型理解边界“苹果不是 Apple Watch”动态 Few-shot从知识库选取最相关示例fromsklearn.metrics.pairwiseimportcosine_similaritydeffind_similar_examples(query:str,examples:list,k:int3)-list:根据语义相似度选取最相关的 few-shot 示例query_embeddingembedding.embed_query(query)example_embeddings[embedding.embed_query(e[input])foreinexamples]similaritiescosine_similarity([query_embedding],example_embeddings)[0]top_k_idxsimilarities.argsort()[-k:][::-1]return[examples[i]foriintop_k_idx]# 构建动态 promptrelevant_examplesfind_similar_examples(user_query,few_shot_examples,k3)promptbuild_few_shot_prompt(relevant_examples,user_query)3.3 角色扮演提示Role Prompting赋予模型特定身份提升回答的专业度和适配度。responseclient.chat.completions.create(modelgpt-4o,messages[{role:system,content:你是一位资深律师擅长合同审查和风险评估。 你的回答风格 - 语言严谨使用法律术语 - 先说结论再说依据 - 指出潜在风险点},{role:user,content:请审查这份劳动合同中的竞业限制条款}])角色描述的黄金结构[专业背景] 你是一名[职业][年限]年经验 [擅长领域] 擅长[具体领域]尤其是[细分技能] [回答风格] 你的回答风格[描述风格] [输出格式] 请按以下格式回答[描述格式] [限制条件] 注意[重要约束]3.4 使用分隔符Delimiters防止提示词注入攻击同时帮助模型理解结构。# 使用 XML 标签作为分隔符promptinstruction 你是新闻编辑负责改写文章标题使其更吸引人。 /instruction rules 1. 标题不超过20个字 2. 使用数字开头效果更好 3. 避免标题党保持真实性 /rules article {article_content} /article output_format 直接输出标题不要解释。 /output_format# 使用 Markdown 代码块作为分隔符prompt请分析以下代码 { def bubble_sort(arr): n len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] arr[j1]: arr[j], arr[j1] arr[j1], arr[j] } 分析维度 1. 时间复杂度 2. 空间复杂度 3. 优化建议四、进阶技巧4.1 思维链提示Chain-of-Thought, CoT核心思想让模型在给出最终答案之前先展示推理过程。# 普通推理容易出错小明有5个苹果小红给了他3个小明吃了2个还剩几个# 模型可能直接答错# CoT 推理分步思考cot_prompt问题小明有5个苹果小红给了他3个小明吃了2个还剩几个 请按以下步骤思考 Step 1: 小明最初有几个苹果 - 5个 Step 2: 小红给了他几个 - 3个现在有 538个 Step 3: 小明吃了几个 - 2个现在有 8-26个 Step 4: 最终答案6个 答案6个responseclient.chat.completions.create(modelgpt-4o,messages[{role:user,content:cot_prompt}])Zero-shot CoT自动触发# 在问题后加一句请一步一步思考prompt问题一个商店上午卖了30件商品下午比上午多卖了10件。 一天总共卖了75件商品。下午卖了多少件 请一步一步思考responseclient.chat.completions.create(modelgpt-4o,messages[{role:user,content:prompt}])CoT 的适用场景场景效果原因数学推理显著提升需要多步计算逻辑推理显著提升需要因果链分析代码调试显著提升需要定位问题根源常识问答一般提升简单问题无需拆解情感分类无需使用单步判断即可4.2 自我一致性Self-Consistency核心思想让模型生成多条推理链选择出现最多的答案。defself_consistency(query:str,n_samples:int5)-str:自我一致性从多条推理路径中选择最一致的答案# 让模型生成多个答案answers[]for_inrange(n_samples):promptf{query}请一步一步思考responsellm.generate(prompt)# 提取答案如从响应中解析数字结果answerextract_answer(response)answers.append(answer)# 多数投票fromcollectionsimportCounter most_commonCounter(answers).most_common(1)[0]returnmost_common[0]# 示例resultself_consistency(一个书店进了60本书第一天卖了1/3第二天卖了剩下的1/2还剩多少本,n_samples5)4.3 生成知识提示Generated Knowledge核心思想让模型先生成相关知识再基于知识回答。defgenerated_knowledge_prompt(query:str)-str:先生成相关知识再回答问题# Step 1: 生成相关知识knowledge_promptf关于{query}请列出5个最相关的事实或背景知识。 格式每条一行简明扼要。knowledgellm.generate(knowledge_prompt)# Step 2: 基于知识回答answer_promptf基于以下知识回答问题 知识{knowledge}问题{query}回答引用知识来源answerllm.generate(answer_prompt)returnanswer4.4 自动思维链Auto-CoT核心思想让模型自动生成带推理链的示例再用于 few-shot。defauto_cot(dataset:list[dict],k:int5)-list[str]:Auto-CoT从数据集中自动生成带推理的示例# 1. 对每个问题生成推理demonstrations[]foritemindataset[:k]:promptf{item[question]}请一步一步思考给出详细推理过程。reasoningllm.generate(prompt)demonstrations.append(fQ:{item[question]}\nA:{reasoning})returndemonstrations# 2. 用生成的示例构建最终 promptdefbuild_cot_prompt(query:str,demonstrations:list[str])-str:returnf请参考以下示例的推理方式回答新问题{chr(10).join(demonstrations)}新问题{query}请一步一步思考五、高级推理技术5.1 ReAct 模式Reasoning Acting核心思想让模型在推理过程中调用外部工具形成「思考 - 行动 - 观察」的循环。ReAct Thought思考 Action行动 Observation观察 循环 ┌─────────────┐ │ Thought │ 模型思考我需要知道... │ (推理) │ └──────┬──────┘ ▼ ┌─────────────┐ │ Action │ 调用工具如搜索、计算 │ (行动) │ └──────┬──────┘ ▼ ┌─────────────┐ │ Observation │ 获取结果喂回给模型 │ (观察) │ └──────┬──────┘ │ └──────► 继续下一轮循环直到得出答案ReAct Prompt 模板SYSTEM_PROMPT你是一个能使用工具的智能助手。 可用工具 - search(query): 搜索互联网获取信息 - calculate(expression): 计算数学表达式 - get_weather(city): 获取城市天气 请按以下格式推理 Question: 用户的问题 Thought: 我需要思考下一步该做什么 Action: tool_name(arguments) 或 finished Observation: 工具返回的结果或 final answer 的解释 当问题已经解决时 Question: [重复问题] Thought: 我已经知道答案了 Action: finished Observation: [最终答案]defrun_react(question:str,max_steps:int10)-str:messages[{role:user,content:SYSTEM_PROMPTf\n\nQuestion:{question}}]for_inrange(max_steps):responsellm.generate(messages)messages.append(response)# 解析格式ifAction: finishedinresponse:# 提取最终答案returnextract_final_answer(response)# 执行工具并添加观察结果tool_name,argsparse_action(response)observationexecute_tool(tool_name,args)messages.append({role:user,content:fObservation:{observation}})return达到最大步数限制ReAct vs CoT vs Act方法核心优势劣势CoT推理过程在内部简单API 调用少无法获取外部信息ReAct推理 工具调用实时信息 可解释Prompt 复杂Act让模型决定工具灵活推理链可能混乱5.2 思维树Tree of Thoughts, ToT核心思想将问题分解为多步推理路径像树一样探索评估每条路径最终选择最优解。IO Prompting一步到位: 输入 - 输出 CoT线性推理: 输入 - 思考1 - 思考2 - 思考3 - 输出 ToT树状探索: 输入 ┌────┼────┐ 思考A 思考B 思考C ┌─┴─┐ │ ┌─┴─┐ 延伸A 延伸B 延伸C 延伸D │ 最优解 每个节点评估是否有前途是否回溯ToT 实现框架fromtypingimportCallableclassTreeOfThoughts:def__init__(self,llm,num_candidates:int3,max_depth:int5):self.llmllm self.num_candidatesnum_candidates self.max_depthmax_depthdefgenerate_thoughts(self,state:str,prompt:str)-list[str]:生成多个候选思考generate_promptf{prompt}当前状态{state}请提出3个不同的思考方向每个一行 responseself.llm.generate(generate_prompt)return[line.strip()forlineinresponse.split(\n)ifline.strip()]defevaluate_state(self,state:str)-float:评估当前状态的质量0-1eval_promptf评估以下方案的质量从0到10打分并说明理由。 方案{state}评分只需输出数字和理由responseself.llm.generate(eval_prompt)returnextract_score(response)defsolve(self,initial_prompt:str)-str:ToT 主循环广度优先搜索# 初始状态队列queue[(initial_prompt,0)]# (状态, 深度)best_stateinitial_prompt best_score0whilequeue:current,depthqueue.pop(0)ifdepthself.max_depth:scoreself.evaluate_state(current)ifscorebest_score:best_scorescore best_statecurrentcontinue# 生成多个思考方向thoughtsself.generate_thoughts(current,initial_prompt)forthoughtinthoughts:new_statecurrent\nthought scoreself.evaluate_state(new_state)# 剪枝只保留有前途的路径ifscore0.5:queue.append((new_state,depth1))ifscorebest_score:best_scorescore best_statenew_statereturnbest_state# 使用示例totTreeOfThoughts(llm)solutiontot.solve(如何将一个创业公司从0做到IPO)print(solution)ToT 的适用场景场景ToT 效果说明复杂规划极佳多种方案可选创意写作佳多角度发散数学证明佳探索多条证明路径代码优化较好多版本对比简单问答无需杀鸡焉用牛刀六、结构化输出6.1 指定 JSON Schemaresponseclient.chat.completions.create(modelgpt-4o,messages[{role:user,content:f提取以下文本中的关键信息以 JSON 格式返回{text}JSON 格式 {{ title: 文章标题, author: 作者名, date: 发布日期YYYY-MM-DD, key_points: [要点1, 要点2, 要点3], sentiment: positive | neutral | negative }} 如果某字段无法提取设为 null。}])6.2 使用 OpenAI Structured OutputsfrompydanticimportBaseModel,FieldclassUserProfile(BaseModel):name:strField(description用户全名)age:intField(description用户年龄,ge0,le150)email:strField(description用户邮箱)interests:list[str]Field(description用户兴趣标签最多5个)# 使用 response_format 强制结构化输出responseclient.chat.completions.create(modelgpt-4o,messages[{role:user,content:f从以下文本中提取用户信息{text}}],response_formatUserProfile# 模型输出严格遵循 schema)profileUserProfile.model_validate_json(response.choices[0].message.content)print(profile.name,profile.interests)6.3 Markdown 表格输出# 格式要求 请以 Markdown 表格格式输出包含以下列 | 电影名称 | 上映年份 | 导演 | 评分 | 一句话评价 | 数据从以下列表中提取 {text}七、提示词框架7.1 CRISPE 框架角色约束意图风格示例CRISPE Capacity/Role角色 Insight洞察 Statement陈述 Personality人格 Experiment实验 示例 ┌──────────────────────────────────────────────────────────────┐ │ [Role] 你是一名资深产品经理10年互联网经验 │ │ [Insight] 擅长从用户痛点出发设计产品功能 │ │ [Statement] 你的任务是评估需求文档的可行性和市场价值 │ │ [Personality] 回复风格严谨专业带有建设性批评 │ │ [Experiment] 提供2-3个可选方案每个方案列出优缺点 │ └──────────────────────────────────────────────────────────────┘7.2 BROKE 框架BROKE Background背景 Role角色 Objective目标 Key Results关键结果 Evolve演化 作为[BROKE] Background: [背景描述] Role: [角色] Objective: [目标] Key Results: [期望达成的具体结果] Evolve: [如何迭代优化]7.3 通用的提示词模板库模板一专家问答【角色】你是一名 [职业][年限] 年经验专注于 [领域]。 【你的优势】 - [技能1] - [技能2] - [技能3] 【回答规则】 1. [规则1] 2. [规则2] 3. [规则3] 【输出格式】 [描述输出格式] 【开始】 用户问题{user_question}模板二内容转换【输入类型】[描述输入内容] 【输出类型】[描述期望输出] 【转换要求】 1. [要求1] 2. [要求2] 3. [要求3] 【示例】 输入[示例输入] 输出[示例输出] 【开始转换】 {content}模板三多版本生成请生成 [数量] 个版本的 [内容类型] 要求 1. [要求1] 2. [要求2] 3. [要求3] 版本 1[风格1] [内容] 版本 2[风格2] [内容] ... 你最推荐哪个版本为什么八、资源推荐官方文档来源内容链接OpenAI官方提示词工程指南6大策略https://platform.openai.com/docs/guides/prompt-engineeringAnthropicClaude 提示词最佳实践https://docs.anthropic.com/claude/docsGoogleGemini API 提示工程https://ai.google.dev/docs/promptingDeepSeek模型提示词指南https://platform.deepseek.com学习资源资源说明Prompt Engineering Guide(DAIR.AI)最全面的提示词工程知识库涵盖所有主流技术GitHub: dair-ai/Prompt-Engineering-Guide开源项目包含论文、教程、代码示例斯坦福 CS224NLLM 提示工程课程部分IBM: Chain of ThoughtCoT 技术官方解释进阶阅读论文核心贡献Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Google, 2022)提出 CoT 技术Self-Consistency Improves Chain of Thought Reasoning (Google, 2023)自我一致性提升推理ReAct: Synergizing Reasoning and Acting in Language Models (ICLR 2023)提出 ReAct 范式Tree of Thoughts: Deliberate Problem Solving with Large Language Models (Princeton, 2023)提出 ToT 框架Generated Knowledge Prompting for Commonsense Reasoning生成知识增强推理PAL: Program-Aided Language Models程序辅助语言模型附录提示词反推法学习他人优秀 Prompt当遇到优秀的 AI 输出时可以反推背后的 Prompt反推模板 以下是一个优秀的 AI 输出请反推可能使用的提示词。 优秀输出开始 {excellent_output} 优秀输出结束 请分析并重建这个提示词包含 1. 角色设定 2. 核心指令 3. 格式要求 4. 约束条件 5. 可能的 few-shot 示例如果有附录常见错误及解决方案错误原因解决方案输出格式不稳定格式要求不明确使用 JSON Schema 或更详细的格式说明模型幻觉缺乏参考资料提供 RAG 知识或明确要求不知道就说不知道输出过长/过短没有明确字数限制“不超过X字”、“至少包含X点”角色扮演效果差角色描述不够具体补充专业背景、回答风格、输出格式复杂任务失败任务粒度太大分解为多个简单步骤Few-shot 效果差示例不够多样确保覆盖主要场景包括边界情况工具调用失败工具描述不清晰明确参数类型、范围、含义整理用于学习交流 | 最后更新2026-03-25参考来源OpenAI、Anthropic、DAIR.AI、Google Research、IBM
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2450410.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!