prompt engineering
开始prompt engineering 之前,请确认你是否已经有如下概念:
1、为你的用例明确的 成功标准定义
2、一些根据这些标准进行 经验测试的方法
3、你想要改进的 第一个prompt
针对1、2如果没有的话,请看博主的上一篇blog。 评价指标
针对3,对于第一个prompt ,如果你针对自己的任务,并没有想法,如何写,可求助llm。即:将任务表述给llm,询问他是否清晰,有什么需要增加的细节,按照llm,增加细节。请他生成初版prompt。
1. prompt 生成
有时候,使用 AI 模型最困难的部分是如何有效地提示它。对于第一个prompt的生成,两种方法:
1 将任务表述给llm,询问他是否清晰,有什么需要增加的细节,按照llm,增加细节。请他生成初版prompt。
2 查找prompt library 根据任务查找,仔细阅读,在针对性修改。可以查找的网站包括:langchain hub、openai prompt 、https://docs.anthropic.com/en/prompt-library/library等
2.清楚、直接、详细
在与 llm互动时,将其视为一个非常聪明但非常新的员工(有失忆症),他需要明确的指示。像任何新员工一样,llm 不了解你的规范、风格、指南或偏好的工作方式。你解释得越精确,llm 的回应就会越好。
tips: 将你的prompt展示给不了解你的任务的同事,看他对此有什么疑问,并且按照他的疑问加以修改。往往他们感到困惑的地方,也就是llm感到困惑的地方。
如何做到清晰、有上下文和具体
1、给 llm提供上下文信息:就像如果你知道更多上下文,你可能会更好地完成任务一样,llm 如果有更多上下文信息,表现也会更好。一些上下文信息的例子:
----任务结果将用于什么
----输出的目标受众
----任务所属的工作流程,以及该任务在该工作流程中的位置
----任务的最终目标,或成功完成任务的样子
2、具体说明你希望llm做什么:例如,如果你希望 llm 只输出代码而不输出其他内容,请明确说明。
3、提供按顺序的步骤说明:使用编号列表或项目符号,以更好地确保 llm按照你希望的方式执行任务。
3.使用示例(多示例提示)-即少样本技术
通过在提示中提供几个精心设计的示例,你可以显著提高 llm输出的准确性、一致性和质量。这种技术,被称为少样本或多示例提示,对于需要结构化输出或遵循特定格式的任务特别有效。
为什么要使用示例?
准确性:示例减少了指令的误解。
一致性:示例强制统一的结构和风格。
性能:精心选择的示例提高了llm处理复杂任务的能力。
制作有效的示例
为了最大限度地提高效果,请确保你的示例是:
相关性:示例反映了实际用例。
多样性:示例涵盖了边缘情况和潜在挑战,并且足够多样化,以避免 llm无意中遵循不希望的模式。
清晰性:示例用 标签包裹(如果有多个,嵌套在 标签内)以保持结构。
4.让llm思考(chain of thought, cot)
当面对复杂任务,如研究、分析或问题解决时,给llm 空间思考可以显著提高其性能。这种技术,被称为思维链(Chain of Thought, CoT)提示,鼓励 llm逐步分解问题,从而产生更准确和细致的输出。
why
实施 CoT 之前
为什么要让 llm思考?
准确性:逐步解决问题可以减少错误,特别是在数学、逻辑、分析或一般复杂的任务中。
连贯性:结构化思考导致更连贯、组织良好的响应。
调试:看到llm的思考过程有助于你确定提示可能不清晰的地方。
为什么不让 llm思考?
增加的输出长度可能会影响延迟。
并非所有任务都需要深入思考。明智地使用 CoT,以确保性能和延迟之间的适当平衡。
如何让llm思考
以下思维链技术按从简单到复杂的顺序排列。较简单的方法在上下文窗口中占用的空间较少,但通常效果较弱。
cot tips: 在让llm使用cot时候,要求他输出思考过程,因为不输出就不会思考。
基础prompt:在提示中包括“think step by step”,这里并不需要包括如何一步步思考。例如:
为捐赠者撰写个性化电子邮件,请求他们对今年的“关爱儿童”计划进行捐赠。
计划信息:
<program>{{PROGRAM_DETAILS}}
</program>
捐赠者信息:
<donor>{{DONOR_DETAILS}}
</donor>
在撰写电子邮件之前,请逐步思考。
引导性prompt:为llm的思考过程概述具体步骤。缺乏结构化,使其难以剥离和分离答案与思考。例如:
为捐赠者撰写个性化电子邮件,请求他们对今年的“关爱儿童”计划进行捐赠。
计划信息:
<program>{{PROGRAM_DETAILS}}
</program>
捐赠者信息:
<donor>{{DONOR_DETAILS}}
</donor>
在撰写电子邮件之前,请思考。首先,思考什么样的信息可能会吸引这位捐赠者,考虑到他们的捐赠历史和他们过去支持的哪些活动。然后,思考“关爱儿童”计划的哪些方面会吸引他们,考虑到他们的历史。最后,根据你的分析撰写个性化的捐赠者电子邮件。
结构化提示:使用XML标签,像是、将推理和最终结果分开,例如:
为捐赠者撰写个性化电子邮件,请求他们对今年的“关爱儿童”计划进行捐赠。
计划信息:
<program>{{PROGRAM_DETAILS}}
</program>
捐赠者信息:
<donor>{{DONOR_DETAILS}}
</donor>
在撰写电子邮件之前,请在 <thinking> 标签中思考。首先,思考什么样的信息可能会吸引这位捐赠者,考虑到他们的捐赠历史和他们过去支持的哪些活动。然后,思考“关爱儿童”计划的哪些方面会吸引他们,考虑到他们的历史。最后,根据你的分析,在 <email> 标签中撰写个性化的捐赠者电子邮件。