一、Prompt设计的四个关键要素:
任务描述、输入数据、上下文信息、提示风格
(1)任务描述 :描述想要让LLM遵循的指令。描述应详细清晰,可进一步使用关键词突出特殊设置,从而更好地指导LLM工作。
(2)输入数据 :对于非结构化数据可用文本描述的方式输入,对于非结构化数据(知识图谱、表格、代码等)采用一种合适的方式,例如:文本化、线性化转换函数。
(3)上下文信息 :上下文和背景信息。有助于更好地描述任务范例、任务目标、特殊的输出格式以及输入和输出之间的映射关系。
(4)提示风格:设置合适的提示风格,有助于激发LLM解决特定任务的能力。例如,角色设定、添加相关前后缀:"Let us think step by step"、拆解为子任务。
二、Prompt设计的四个准则:
任务描述目标清晰、分解为简单的子任务、提供少量示例、使用友好的格式
(1)任务描述目标清晰 :避免莫能两可的描述,导致不精确的返回结构。一个清晰而详细的描述应该包含解释任务的各种元素,例如:任务目标、输入/输出数据、约束要求(字数等信息)
(2)分解为简单的子任务 :将困难任务分解为多个子任务更容易解决问题。可用编号形式列出子任务,例如:1. ... 2. ... 3. ... 。让LLM可以更专注于解决子任务,最终解决整个复杂的任务。
(3)提供少量示例 :提供一些输入输出示例对有助于LLM学习输入和输出之间的语义映射关系。
(4)使用友好的格式 :合适的prompt格式有助于LLM更好的理解指令。例如:OpenAI相关的模型适合使用###
或"""
作为分隔符。训练语料主要为应为的LLM用英语提问的效果更好。
三、Prompt的一些使用技巧
1、任务描述
(1)描述详细
(2)以一个专家角色作为前缀信息
(3)多告诉模型应该做什么,而不是不做什么(否定词)
(4)避免输出长文
2、输入数据
(1)检索相关文档和prompt拼接在一起
(2)使用特殊标记突出重要部分
3、上下文信息
(1)对于复杂的任务,详细描述中间步骤
(2)对于打分的任务,提供打分标准
(3)对于文本生成任务,指导LLM对于上下文上乘的结果进行解释
(4)类似于思维树的方式:多专家讨论,记录每个专家的思考步骤并共享思考步骤,如果有一个专家思考出错,则让他离开,剩下的专家继续思考。如果没出错继续留下来思考。
4、示例
(1)提供良好格式的上下文示例
(2)思维链(一步一步思考),示例用分隔符标注。例如:\n
(3)检索相似的示例,先用示例获取答案,然后再将这个答案和我们的问题拼接
(4)示例多样化,问题或解决方案多样化
(5)使用基于聊天的LLM时,可以将上下文示例分解为多回合信息。同理,可将示例的推理过程分解为多回合对话。
(6)复杂和信息丰富的上下文示例
(7)符号示例分解为多个片段,将前面的片段作为上下文示例,引导LLM预测后面的片段。
(8)示例、提示和问题在prompt中的位置很重要。
(9)没有上下文示例时,可以让LLM生成一些
5、其他设计
(1)让LLM自己检查一下结果是否正确
(2)调用外部工具进行辅助
(3)prompt独立,上下文中减少代词的使用
(4)比较多个示例时,顺序对性能影响较大
(5)角色分配
(6)OpenAI的模型用英文提问更好
(7)做多选题时,限制输出对性能有所帮助。用更详细的解释描述,对逻辑进行限定。
(8)对于基于排序的任务,可以不让LLM直接输出排序后的文本,而是对每个文本段分配一个编号标识符(例如:ABCDE),然后指导LLM输出排序后的编号。