Prompt,中文可以翻译为提示词,是一种用于引导大模型生成特定内容的文本输入。Prompt的作用是告诉大模型你想要它做什么,以及给它一些必要的信息和约束条件。Prompt的好坏直接影响了大模型的输出质量和效率。
Prompt的写作是一门艺术,也是一门科学。艺术在于如何用简洁、精确、有趣的语言来激发大模型的创造力,科学在于如何用结构化、迭代、优化的方法来提高大模型的准确性、效率和鲁棒性。本文将从这两个方面来介绍一些Prompt的写作技巧,希望能够帮助你更好地利用大模型的强大能力。
通用的Prompt框架
Prompt的写作并不是一件随意的事情,而是需要遵循一定的规则和逻辑的。为了让Prompt更加清晰、有序、易于理解,我们可以采用一种通用的Prompt框架,来组织和呈现我们的Prompt内容。这种框架包括以下几个部分:
- Role: 这个模块用于指定大模型的角色,例如教师、翻译、作家等。指定角色可以让大模型聚焦在对应的领域和任务上,从而提高输出的相关性和专业性。
- Profile: 这个模块用于记录Prompt的作者、版本和描述等信息,以便于我们追踪和管理Prompt的来源和变化。
- Goals: 这个模块用于描述Prompt的目标,即我们希望大模型通过这个Prompt来实现什么功能或效果。这个模块可以用一句话来概括,以便于大模型把握Prompt的主旨和方向。
- Constrains: 这个模块用于描述Prompt的限制条件,即我们不希望大模型在输出时做什么或包含什么。这些限制条件可以是一些格式、长度、语言、风格、内容等方面的要求,以帮助大模型进行剪枝,减少不必要或不合适的输出分支的计算。
- Skills: 这个模块用于描述Prompt所需的技能,即我们希望大模型在输出时展现什么样的能力或知识。这些技能可以是一些专业领域、语言、逻辑、创意等方面的技能,以强化大模型在对应领域的信息权重和输出质量。
- Workflow: 这个模块用于描述Prompt的工作流,即我们希望大模型按照什么样的步骤和顺序来进行输入和输出的交互。这个模块是Prompt的核心部分,它可以用一些简单的语句来描述大模型的工作流程,例如欢迎用户、获取用户输入、处理用户输入、输出结果、结束对话等。
除了这些模块,我们还可以在Prompt的结尾添加一个Initialization的部分,用于定义大模型在第一次启动时的对话内容,以便于和用户建立联系和信任,以及强调一些注意事项和重点。
图片
不熟悉的小伙伴,可以在公众号后台回复“TSC”获取数百条精编提示词.
以上就是一个通用的Prompt框架,它可以帮助我们快速地搭建一个基本的Prompt,然后根据不同的场景和需求进行定制和优化。下面,我们将介绍一些面向场景的Prompt定制技巧,以及如何用示例强化Prompt的效果。
面向场景的Prompt定制技巧
在上一部分,我们介绍了一个通用的Prompt框架,可以帮助我们快速构建一个基本的Prompt,让GPT能够理解我们的目标、限制、技能和流程。但是,这个框架并不是一成不变的,我们还可以根据不同的场景和需求,对它进行一些定制和优化,让我们的Prompt更加高效和精准。在这一部分,我们将分享一些面向场景的Prompt定制技巧,希望能够为你提供一些灵感和参考。
让ChatGPT提建议
有时候,我们可能不太清楚如何写一个好的Prompt,或者想要寻找一些新的灵感和创意。这时候,我们可以利用ChatGPT的强大的自然语言生成能力,让它为我们提供一些建议和反馈。具体的方法是,使用我们的Prompt框架中,并在该结构块中写上一些问题或请求,让ChatGPT给我们回答或满足。例如:
图片
这样,ChatGPT就会根据我们的问题或请求,生成一些有用的建议和示例,帮助我们改进和完善我们的Prompt。当然,这些建议和示例并不一定都是正确或合适的,我们需要自己判断和筛选,取其精华,去其糟粕。
固定测试用例
在写好一个Prompt后,我们需要对它进行测试,看看它的输出结果是否符合我们的预期。为了方便测试和对比,我们建议选择三到五个固定的测试输入用例,每次迭代后都用这些用例来检验我们的Prompt的效果。这样,我们就可以更清楚地看到我们的Prompt在不同版本之间的变化和优化,避免因为输入的随机性而导致的误判或混淆。在我们的Prompt框架中,我们可以增加一个结构块:## Test Cases:,并在该结构块中列出我们选择的测试输入用例。例如测试:
## Test Cases:
- 输入1: 中国人口最多的省份是?
- 输入2: 中国有哪些滨海的城市?
这样,我们就可以用这些输入来测试我们的Prompt,观察它的输出结果是否满足我们的目标、限制、技能和流程。如果不满足,我们就可以根据输出结果的问题,对我们的Prompt进行相应的修改和优化。
损有余而补不足
在测试和迭代我们的Prompt时,我们需要仔细观察我们的Prompt的输出结果,分析它的优点和缺点,找出它的问题和改进空间。我们可以用一个简单的原则来指导我们的优化过程:损有余而补不足。也就是说,我们要减少或消除我们的Prompt输出结果中多余或不必要的信息,增加或补充我们的Prompt输出结果中缺失或不足的信息。具体的方法是,在我们的Prompt框架中,增加一个结构块:## Feedback:,并在该结构块中写上我们对我们的Prompt输出结果的评价和反馈,指出它的优点和缺点,以及需要改进的地方。例如:
## Feedback:
- 优点: 输出结果格式清晰,翻译准确,提供了日语假名
- 缺点: 输出结果没有标点符号,没有换行,没有区分英文和日文的输出
- 改进: 在 constrains 环节,增加标点符号和换行的要求,在 output 环节,增加英文和日文的标签
这样,我们就可以根据我们的反馈,对我们的Prompt进行相应的修改和优化,使得我们的Prompt输出结果更加完善和符合我们的需求。在这个过程中,我们建议每次只修改一处或少数几处,这样可以更清楚地看到修改的效果,避免一次修改过多而导致的混乱或错误。
用示例强化Prompt
在写Prompt时,有一个非常实用的技巧就是利用示例,通过提供少数(1-3个)的输入->输出示例,让GPT可以学到样本的共性,从而提升下一个输出结果的质量。这种技巧叫做few-shots,指的是训练机器学习模型时只使用极少量的标注样本。它的目标是使机器学习模型在只有少量标注样本的情况下也能达到良好的性能。
我们可以在通用的Prompt框架的基础上,增加一个结构块:## Examples:,在该结构块举1-3个示例,从而进一步提升Prompt带来的输出结果提升。例如,我们想要写一个Prompt,让GPT可以将汉字翻译成英文和日语,并提供日语假名。我们可以参考以下的Prompt:
图片
通过提供两个示例,我们可以让GPT更好地理解我们的目标和格式,从而提高翻译的准确性和一致性。当然,示例的数量和质量也会影响GPT的输出,所以我们需要选择有代表性和多样性的示例,避免过于简单或复杂的示例。我们也可以根据GPT的输出来调整示例,以达到最佳的效果。