结构化Prompt撰写方法
在使用大模型进行生文的过程中,有不少同学可能会对写prompt产生疑惑,不清楚如何写一个准确、效率高、以及生文效果好的prompt,本文将会结合大模型自身的工作原理来设计一个结构化的prompt的撰写模板;
大模型工作原理
既然想得到不错的生文效果,那么就必须先知道大模型的工作原理,这里我罗列了以下几点
大模型本质上只执行一种任务:文本对齐
当我们输入一个prompt时,模型首先会对prompt进行分词处理。
不同的模型采用不同的分词方法,不同的分词方法会影响到模型对文本的理解深度和消耗token数量。
比如我们熟悉的gpt模型,就采用了子词分词法
输入:Advanced articial intelligence techniques are amazing.
分词:Ad/van/ced/art/ificial/int/elligence/techni/ques/are/am/azing.
Prompt解决方案专业名词解释
zero-shot:零样本,就是在prompt中不加任何和任务相关的示例。
举例:输入”这个任务要求将中午翻译成英文。销售->"
few-shot:在prompt中加入和推理任务相同的推理样例。
举例:输入"这个任务要求将中文翻译成英文。你好->hello,再见->goodbye,销售->"
思维链(COT):是一种解决问题的方法,这种方法设计逐步、逻辑地思考问题,以便更好地理解和解决它。
这个过程可能包括定义问题、分解问题、逐步解决子问题,最后综合所有的信息得出最终的答案。通过这种方式,模型不仅提供了一个解决方案,还展示了如何通过逐步的逻辑推理来解决问题,使得其答案更加透明,可理解、更具深度。
ToB和ToC场景下的撰写方式
ToC场景:
用户:帮我写一个关于校园追忆的歌词,主题是青春和友谊,这是一首抒歌,一定要包含会议校园生活的点点滴滴,朋友之间的友谊永存心间的内容,可以参考一下xxx歌曲的模板,仿照其格式句式输出240字左右字数的歌词。
ToB场景:
你是以为富有诗意与想象力的创作歌手,请根据以下要求参考歌词模板创作一首歌的歌词歌曲主题:(用户输入的歌曲主题)
歌曲风格:(用户输入的风格歌词)
要表达的情感:{用户输入的歌词要表达的情感}
歌词字数:{用户输入的字数}字左右
歌词模板:“…”
(根据用户输入的风格匹配的歌词模板)
”…“
ToB的话就表示接下来的相似撰写很多,我们可以将上述描述做成一个配置文件。
Prompt框架
结构化prompt-Elavis Saravia 框架:
Instruction(指令):明确模型需要执行的特定任务,如生成文本、翻译语言或创作不同类型的内容。
Context(上下文):为模型提供理解请求所需的背景信息。例如,在要求模型生成特定主题的文本时,提供有关主题的信息。
Input Data(输入数据):模型处理的具体数据。例如:在翻译任务中,提供要翻译的英文句子。
Output Indicator(输出指示):指示期望的输出类型或格式。例如,在文本生成任务中,指定输出为一段文字。
结构化prompt-Elavis Saravia 框架:
Capactity and role(能力和角色):定义模型应扮演的角色,如专家、创意作家或喜剧演员。
Insight(洞察):提供模型理解请求所需的背景信息和上下文。
Statement(声明):明确模型执行的特定任务。
Personality(个性):定义模型回答请求时的风格或方式。
Experiment(实验):通过提供多个答案的请求来迭代,以获得更好的答案。
结构化Prompt-简化框架:
明确任务,直接指出你需要模型做什么。
设定角色和风格,简短的描述模型应采用的角色和风格。
提供背景信息,给出足够的信息,让模型了解任务的上下文。
指定输出的格式,告诉模型你期望的回答形式。例如:“一段文字”,“列表”,“步骤说明”。
就比如说我们写prompt的时候可以参照以下的格式:
#Role:设置角色名称,设置为一级标题,作用范围为全局
Rules:设置规则,下面可以分点描述细节
1.细节1
2.细节2Shot: 案例;
(可以引入一些案例来辅助我们的出文。)
Format 格式
可以是文本格式,也可以是json,xml等格式
Initialzation 设置初始化步骤;
强调prompt个内容之间的作用和联系,定义初始化行为。
例子:作为角色< Role >,严格遵守< Rules >,充分学习< shot >,最终按照< format >输出。
结构化prompt的书写方式
意图识别
意图识别主要应用于自然语言理解场景,尤其是在构建对话系统(如客服助手、客户聊天机器人)、语音识别系统、搜索引擎查询处理等领域中至关重要。
其核心目的是为了理解用户通过文本或语音形式提出的需求和目标,并据此做出适当的响应或执行响应的动作。通过准确的意图识别,系统能够提供给更加个性化、精确和高效的服务,从而极大地提升用户体验。
如这张图所示:
就以上图为例,无数个用户会对微信提问无数个不同的问题,这些问题会给到大模型。
每个人同样的目的有不同的提问方式,所以有无数种表达意图给到LLM。
大模型需要把这些分类成有限个意图,原因是大模型需要在有限个意图中去做业务
例如:某电商平台希望通过大语言模型对客户反馈进行意图识别,以此为依据将用户进行初步分流。有三种后续流程:
- 接入销售人员,进行商品销售
- 接入售后人员,进行订单查询或投诉
- 接入大语言模型,与用户进行一般性的闲聊
然后需要我们根据以上需求,撰写意图识别prompt:
- 第一种:开门见山
存在的问题:
模型没有合理的对用户进行意图识别,反而引导用户直接表达分流意图;
分析:
1.未给出具体的任务定义与描述;
2.未给出各意图的判定标准。
- 第二种:定义任务
后者是正确的前者是错误的。
问题:
用户输入“你好”,应当分流至闲聊大模型;
分析:
未给出各意图的判定标准,人机认知未对齐。
- 第三种:更多定义
分析:
基本符合预期
思维链(COT)
思维链: 指在处理任务时,模型能够生成一系列逻辑上链接、相互关联的思考步骤或解决方案的过程。这通常用于解决复杂的问题,其中简单的一步推理不足以得到答案。通过COT,模型能够模 拟人类的思维过程,逐步构建答案,这样不仅提高了解决问题的准确性,也使结果更加可解释。
首先我们来看这样一个问题:
村民要么是小孩要么是大人,大人话是假的,小孩话是真的,那么我们不难推测出这个村子里存在九个大人,一个小孩。
那么你肯定有自己的一套逻辑来推出自己的答案。那么思维链就是让机器能够模仿人类思考推理的一个过程。
- 第一种:开门见山
结论:回答的没有逻辑
- 第二种:思维链
无奈的是以现在的技术其实让模型去做推理其实蛮离谱的。
模型生成的逻辑是根据你之前所有生成的Token,然后结合向量空间去判断下一个位置上生成的哪个Token概率大。并不存在推理的“大脑”。
结构化输出
结构化prompt是一种prompt的书写方式,在一定的格式约束下prompt书写方式。可以帮助模型更好的理解如何利用prompt,消除不必要的歧义和矛盾;除此之外,结构化的书写方式也能提升prompt的可维护性,以及各部分的可复用性。
这里我分享两种格式的prompt给大家,希望大家多多点赞!
在实际应用中,结构化输出意味着将用户的自然语言输入转换成机器易于处理的结构化数据格式,如标记用户意图的JSON对象,该对象详细描述了用户的查询意图以及相关的关键信息。这样,其他应用程序可以基于这些结构化的信息做出响应或采取动作,从而以更加智能的方式满足用户的需求。
- 第一种:开门见山
问题:
模型输出结果符合json格式,但是每次输出的格式不一致,无法稳定解析。
分析:
还需要进一步约束json格式的结构。
- 第二种:严格的约束式
分析:
1.基本符合预期
2.可使用更多测试用例,测试输出稳定性;
思考:
如何要求模型以其他格式进行输出?
- 第三种:更多格式:
分析:
1.替换要求的输出格式。
2.替换给定的输出模板。