Prompt使用总结

提示词工程实践总结 - 像写代码一样写提示词

近期在尝试使用提示词来实现一个周报摘要的生成。在处理过程中,不同的提示词带来的效果区分明显。 本次博客记录Prompt的优化总结。

Prompt使用原则

基本原则:

  1. 编写清晰具体的指令
  2. 给模型充足的思考时间

编写清晰具体的指令:

避免提示注入。所谓提示注入,是指如果允许用户向提示中添加一些输入,它们可能会向模型提供一些冲突的指令,从而使模型遵循用户的指令而不是执行你所期望的操作。

策略1 - 使用定界符清楚地限定输入的不同部分,定界符可以是任何明显的标点符号,可以将特定的文本从提示的其余部分分隔开来。如定界符可以是三个反引号,也可以是引号、XML 标签、节标题或任何能够使模型明确知道这是一个独立部分的东西。使用定界符也是一种有用的技术,可以尝试避免提示注入。

策略2 - 要求结构化输出,便于后续的程序自动化处理,可以要求如JSON格式输出。

策略3 - 要求模型检查是否满足条件,如果任务有假设条件并且这些条件不一定被满足,那么我们可以告诉模型首先检查这些假设条件,如果不满足则指示出来,并停止完全的任务完成尝试。因此需要追加的提示是,如果文本包含一系列指示,请将这些指示重写为以下格式,然后写出步骤说明。如果文本不包含一系列指示,则只需写下“未提供步骤”。

策略4 - 小批量提示,典型的例子是,先给出一个输入样例和期望的输出样例,然后让模型按照这个例子,给出一个类似的回答。

给模型充足的思考时间:

第二原则是给模型充足的思考时间。如果模型由于急于得出错误的结论而出现了推理错误,您可以尝试重新构造查询,要求模型在提供最终答案之前进行一系列相关推理。另一种思考方式是,如果您给模型一个时间太短或用太少的字数来完成的任务,它可能会猜测答案,这个答案很可能是错误的。

策略5 - 指定完成任务的步骤,将任务分解成多个步骤,让模型一步步的实现。

策略6 - 指导模型(在急于得出结论之前)制定自己的解决方案,指导模型在作出结论之前自行解决问题。有时,我们明确指导模型在做出结论之前自行推理出解决方案,会得到更好的结果,这和之前提到的给模型时间思考问题,不要急于下结论的概念相同。

信息来源:提示词基本原则

简单的撰写 - 清晰的指令

Prompt 样例:

以下是一个周报内容的样例:
“一、本周重点工作存在问题及对策
重点工作1:问题项描述标题
存在问题:xxx
问题原因:xxx
对策:xxx。
预计解决时间:2023年xx月xx日 责任人:xxx
二、下周重点工作
1、xxxxxx (时间:2023年xx月xx日 责任人:xxx)”

参考以上样例的格式,撰写一个本周的周报。
周报的内容需要结合已经提供的工作速记内容:“{0}”生成

该样例首先给出了一个样例,然后要求LLM参考以上的格式,撰写一个本周的周报。 同时还给出了工作的速记总结内容。 期望输出一个按照标准模板格式输出的周报总结。

实际结果如下:

一、本周重点工作存在问题及对策
1、外部数据按场景计算需要列明场景码值,但是当前各系统不统一,需要统一场景码值。需要明确真正的业务数据使用方来确认具体的场景清单。
2、消费金融在月末最后一天临时提要求更改相关业务的统计口径,存在数据重复导致的数据不准确问题。临时性的需求破坏了数据加工的稳定性。
3、大模型RAG技术应用存在短板,目前来看,短板体现在信息检索的准确性上,导致增强生成内容质量不够理想。
对策:针对外部数据场景码值不统一的问题,需要明确业务数据使用方来确认具体的场景清单,以实现统一。对于消费金融临时更改统计口径导致的数据不准确问题,需要在数据加工过程中加强稳定性,避免临时性需求对数据质量的影响。对于大模型RAG技术应用存在的短板,需要进一步优化信息检索的准确性,以提高增强生成内容的质量。
预计解决时间:2023年xx月xx日 责任人:xxx

二、下周重点工作
1、推广数据分析师培训计划,第一批100人左右,优先由各部门数据分析师分别带2-3个人参加培训。
2、新BI平台提供办公网络访问权限,为数据分析师培训做好准备。
3、渠道费用统计项目,梳理包括数据源、数据处理、数据分析等。
4、RAG技术应用完善优化(AI)相关。
责任人:xxx 时间:2023年xx月xx日

点评:显然LLM是照搬了样例中的格式,在总结的最后给出了预计解决时间以及责任人等信息, 它没有实际了解速记内容中每一项是独立的一个重点工作的反馈项。

增加步骤描述 - 分解步骤

Prompt 改进版:

以下是一个周报内容的样例:
“一、本周重点工作存在问题及对策
重点工作1:问题项描述标题
存在问题:xxx
问题原因:xxx
对策:xxx。
预计解决时间:2023年xx月xx日 责任人:xxx
二、下周重点工作
1、xxxxxx (时间:2023年xx月xx日 责任人:xxx)”

参考以上样例的格式,撰写一个本周的周报。
周报的内容需要结合已经提供的工作速记内容:“{0}”来生成。

生成内容请按照下面的步骤来逐步构建:
“1. 速记内容按序号顺序生成多个重点工作问题描述。请基于每个问题描述总结出一个‘本周重点工作’。
2. 在生成 ‘本周重点工作’ 后,创建第一部分:一、本周重点工作存在问题及对策
3. 第一部分的内容按照速记内容中的顺序,依次生成多个重点工作问题描述。
4. 每个重点工作问题描述,需要包括:
    ‘本周重点工作’
    存在问题:
    问题原因:
    对策:
    预计解决时间: ,责任人:
5. 每个重点工作生成后, 空一行,再生成下一个重点工作。
6. 速记的内容中,可能包含问题描述和原因以及后续的计划, 可以尝试先解析直接使用。在解析的过程中,如果发现存在问题描述和原因以及后续的计划,需要将其分开。
7. 周度总结问题原因不能用“可能”这样模棱两可的描述,问题原因的描述需要和问题表现有逻辑关联性,请根据存在问题的现状,结合已知的知识库辅助信息,延伸扩展出问题原因。一句话总结问题原因即可。
8. 在生成完重点工作问题描述后,创建第二部分:二、下周重点工作
9. 第二部分的内容按照速记内容中的顺序,依次生成多个下周重点工作计划。
10. 每个单独占一行,格式为: 1、xxxxxx (时间:2023年xx月xx日 责任人:xxx)。”

生成完整结果后,请再次自我检查一下, 每项是否符合上述步骤的要求。如果存在不符合要求的部分,请按对应步骤要求进行重新的修改更新。

该提示词,在第一版的基础上,补充了输出的步骤要求,细化的内容的生成过程。

结果如下:

一、本周重点工作存在问题及对策
1、外部数据按场景计算需要列明场景码值,但是当前各系统不统一,需要统一场景码值。问题原因:各系统不统一,需要明确真正的业务数据使用方来确认具体的场景清单。对策:与业务数据使用方进行沟通,明确具体的场景清单。预计解决时间:2023年1月10日,责任人:数据分析师小张。
 2、消费金融在月末最后一天临时提要求更改相关业务的统计口径,存在数据重复导致的数据不准确问题。问题原因:临时性的需求破坏了数据加工的稳定性。对策:在数据加工过程中,应避免临时性的需求,以保证数据加工的稳定性。预计解决时间:2023年1月15日,责任人:数据分析师小李。
 3、大模型RAG技术应用存在短板,目前来看,短板体现在信息检索的准确性上,导致增强生成内容质量不够理想。问题原因:大模型RAG技术应用的信息检索准确性不足。对策:对大模型RAG技术应用进行优化,提高信息检索 的准确性。预计解决时间:2023年1月20日,责任人:AI工程师小王。

 二、下周重点工作
 1、推广数据分析师培训计划,第一批100人左右,优先由各部门数据分析师分别带2-3个人参加培训。时间:2023年1月17日,责任人:数据分析师小张。
 2、新BI平台提供办公网络访问权限,为数据分析师培训做好准备。时间:2023年1月20日,责任人:IT工程师小李。
 3、渠道费用统计项目,梳理包括数据源、数据处理、数据分析等。时间:2023年1月25日,责任人:数据分析师小王。
 4、RAG技术应用完善优化(AI)相关。时间:2023年1月28日,责任人:AI工程师小王。

对比一第一版的输出结果, 明显每个问题项,都有了固定的预计解决时间和责任人信息,但是责任人信息是大模型随机补充的内容工程师小王、小张等,没有严格按照格式要求来。

详细的步骤描述 - 伪代码方式

Prompt:

已知本周的工作简要总结如下:"{0}"。
周报内容请按照下面的步骤来逐步构建:
    1.  第一步:创建 ‘一、本周重点工作存在问题及对策’
    2.  第二步:读取问题清单,按照问题清单的顺序,依次生成多个重点工作问题描述。
        每个重点工作问题描述包括:‘本周重点工作项目’,‘存在问题’,‘问题原因’,‘对策’,‘预计解决时间’,‘责任人’六个部分。
        ‘本周重点工作项目’ 是基于每行速记内容生成的摘要。‘存在的问题’则保留问题清单的描述。‘问题原因’需要基于现状描述进行合理的逆向推理,但不能出现诸如‘可能’这样的猜测描述。‘对策’是对‘存在问题’的解决方案总结,需要进行合理推导。‘预计解决时间’固定为‘202x年x月x日’,‘责任人’固定为‘xxx’。
    3.  第三步:重复步骤2, 直到所有问题清单均处理完成。
    4.  第四步:创建 ‘二、下周重点工作’
    5.  第五步:读取下周工作计划清单,按照清单的顺序,依次生成多个下周重点工作计划。
        每个下周重点工作需要包括:‘工作项描述’ 和 ‘预计解决时间’,‘责任人’三个部分。
        ‘工作项描述’直接使用下周工作计划清单的描述。‘预计解决时间’固定为‘202x年x月x日’, ‘责任人’固定为‘xxx’。
    6.  第六步:重复步骤5, 直到所有下周工作计划清单均处理完成。
生成完整结果后,请再次自我检查一下, 每项是否符合上述步骤的要求。如果存在不符合要求的部分,请按对应步骤要求进行重新的修改更新。

第三版的提示是将模板的生成过程按照伪代码的形式,逐步构建,并在构建过程中明确说明格式要求。

输出结果:

一、本周重点工作存在问题及对策
 1. 本周重点工作项目:统一场景码值
 存在问题:当前各系统不统一,需要统一场景码值。
 问题原因:各系统场景码值不统一,导致数据处理和分析存在困难。
 对策:明确真正的业务数据使用方来确认具体的场景清单,统一场景码值。
 预计解决时间:202x年x月x日
 责任人:xxx

 2. 本周重点工作项目:消费金融统计口径更改
 存在问题:临时性的需求破坏了数据加工的稳定性,数据重复导致数据不准确。
 问题原因:消费金融在月末最后一天临时提要求更改相关业务的统计口径。
 对策:重新调整数据处理流程,确保数据准确性。
 预计解决时间:202x年x月x日
 责任人:xxx

 3. 本周重点工作项目:大模型RAG技术应用
 存在问题:信息检索的准确性不足,导致增强生成内容质量不够理想。
 问题原因:大模型RAG技术应用存在短板。
 对策:优化信息检索算法,提高增强生成内容质量。
 预计解决时间:202x年x月x日
 责任人:xxx

 二、下周重点工作
 1. 工作项描述:推广数据分析师培训计划,第一批100人左右,优先由各部门数据分析师分别带2-3个人参加培训。
 预计解决时间:202x年x月x日
 责任人:xxx
 2. 工作项描述:新BI平台提供办公网络访问权限,为数据分析师培训做好准备。
 预计解决时间:202x年x月x日
 责任人:xxx
 3. 工作项描述:渠道费用统计项目,梳理包括数据源、数据处理、数据分析等。
 预计解决时间:202x年x月x日
 责任人:xxx
 4. 工作项描述:RAG技术应用完善优化(AI)相关。
 预计解决时间:202x年x月x日
 责任人:xxx

生成的结果符合预期。

总结

Prompt的设计上,需要遵照几个基本原则来处理:

  1. 编写清晰具体的指令 - 明确说明格式要求,而不仅仅是让其参考范例。 对于小模型(本例中14B的千问模型),它的理解能力不足以支撑深度的指令要求理解时,需要将任务拆解。

  2. 给模型充足的思考时间 - 将任务拆解,并逐步实现的过程,实际也是牵引模型重构加工的过程,这个过程的指令再详细一些,就是给了模型的思考和加工的实践。


comments powered by Disqus