【DataWhale | 大模型Bot应用开发】Task2--Prompt工程

【DataWhale | 大模型Bot应用开发】Task2–Prompt工程

写在前面 / 链接存档

LLM类型

预测型语言模型(如RNN、GPT等)

  • 工作原理

    基于序列生成,通过逐步预测下一个词构建整个句子

  • 示例

    RNN 在给定一段文本的情况下,会基于历史上下文预测后续的词语。早期的 LLM 如 GPT-2 等也是基于这种方式

提示驱动型语言模型(如GPT-3、ChatGPT)

  • 这类模型通过prompts(提示)生成基于更复杂指令的内容
  • 用户提供一个prompt后,模型会依据它生成相应的回答、文本或执行其他特定任务
  • 这类模型适合广泛的场景,比如编写文章、代码生成、对话机器人等,且通过 prompt 工程可以优化输出质量

Prompt概念

Prompt是什么

  • Prompt 是用户输入给模型的文本或指令,用于引导模型生成所需的输出

  • to be simple:Prompt 是用户与模型之间的对话起点,它告诉模型该执行什么任务或生成什么类型的内容

将大模型当成人

你是老板,你需要告诉你的员工(大模型)要做什么,

你的命令是否表达清楚,

影响着你的员工是否能完成的你要求

Prompt的作用

  • core of LLM generate contents
  • 模型根据 Prompt的内容进行推断、生成和决策
  • 提示的设计(Prompt engineering)决定了输出的质量、相关性以及准确性
  • 因此设计高效的Prompt是使用大语言模型时的关键技术之一

Prompt工程

关键原则1–编写清晰具体的指令

策略1:使用定界符限定输入的不同部分

  • 将不同的输入部分用定界符等标记出来

    <>[] 或者双引号

  • 示例

1
“为以下段落创建总结:<文本内容>”

策略2:要求结构化输出

  • 通过要求模型以特定的结构输出结果

  • 可以减少生成内容的模糊性和不一致性

  • 这尤其适用于生成表格代码块多步骤解答

  • 示例

1
“将以下问题分为三部分解答:1. 解释问题,2. 提供解决方案,3. 总结。” 

策略3:要求模型检查是否满足条件

  • 提示中可以要求模型自我检查,确认它的输出是否满足某些特定的条件

  • 这样可以减少错误输出,并鼓励模型主动校正

  • 示例:

1
“回答以下问题,并确保回答包含三个关键点。如果没有,请重新检查并补充。” 

策略4:小批量提示

  • 复杂任务中,分解提示为较小的子任务并分别进行处理,可以显著提高模型的输出质量

  • 通过逐步构建和组合答案,模型能更准确地完成整体任务

  • 示例:

1
“首先描述这个问题的背景。接着,给出可能的解决方法。最后,总结一下你的结论。” 

关键原则2–给模型充足的思考时间

  • 通过引导模型逐步推导出解决方案,而非匆忙得出结论,可以获得更高质量的结果

策略5:指定完成任务的步骤

  • 通过指定逐步完成任务的步骤,可以帮助模型更好地思考问题

  • 每一步明确且结构化,能够引导模型做出更深入的推理和判断

  • 示例:

1
“请分步骤描述如何解决这个问题:首先定义问题,接着列出可能的解决方案,然后分析优缺点,最后得出结论。” 

策略6:指导模型(在急于得出结论之前)指定自己的解决方案

  • 鼓励模型在得出结论前,先生成一个完整的推理链自己的解决思路

  • 这样可以避免匆忙得出结论,提高回答的准确性和全面性

  • 示例:

1
“在得出结论前,请先列出你认为合理的几个解决方法,并分别分析它们的优缺点。” 

模型的局限性

  • 提示工程往往需要迭代调整,才能找到最优的提示方式

  • 常见局限包括:

    • 理解多义词复杂语境的能力有限
    • 生成的内容有时缺乏连贯性或深度
    • 在特定领域的知识更新可能滞后
    • 对特定任务的表现可能不稳定,需要反复调整提示

总结类应用

  • 针对不同类型的信息进行总结是一种常见的应用场景

  • 根据总结任务的不同要求,设计相应的提示方式,可以帮助模型生成更精准、简洁的内容

文字总结

  • 要求模型对一段较长的文本进行压缩,以生成简洁明了的要点

  • 提示可以要求模型**抓取核心信息,忽略细节**

  • 提示示例:

1
“请对以下内容进行简短总结,保留核心要点:<输入文本>”

这个提示会指导模型在总结过程中聚焦于主题和关键信息,而不是逐句翻译或重新编写

针对某种信息总结

  • 针对某种特定信息进行总结

  • 可以通过提示引导模型只关注某个主题或特定的维度,如情感、时间线或某一类数据

  • 提示示例:

1
“请总结以下新闻报道中的市场趋势变化:<输入文本>”  

明确了总结的主题,帮助模型聚焦于特定的信息类型

尝试“提取”而不是“总结”

  • 在一些情况下,直接提取关键信息可能比概括性总结更合适

  • 提取任务要求模型识别并返回特定的内容片段,而不对其进行重新组合或简化

  • 这种方法特别适用于精确度要求较高的场景

  • 提示示例:

1
“从以下文本中提取出所有关于产品发布日期的相关信息:<输入文本>”

这种提示让模型专注于识别和返回具体的时间信息

而不是生成新的句子

针对多项信息总结

  • 当涉及多段或多篇文本时,模型需要能够跨越这些信息进行总结

  • 提示应要求模型在总结时考虑所有信息来源并做出综合性的概括

  • 提示示例:

1
“请根据以下三篇文章,生成一段综合性的总结,突出它们的共同观点:<文章1>,<文章2>,<文章3>”

这种提示让模型对多条信息进行整合

同时避免遗漏重要的共性内容

总结类提示的关键技巧

  • 明确总结类型:指示模型是要【生成简短概述】、【提取关键信息】,还是【综合多项内容】
  • 聚焦目标:总结提示应【指明关注的重点】,避免模型偏离主题
  • 保持简洁:在提示中要求【“简洁”】和【“核心信息”】,帮助模型生成紧凑、有效的总结

推理类应用

  • 推理类应用要求模型不仅仅是理解文本表面的内容,还需要根据提示进行更深层次的分析和推理
  • 这种类型的任务通常涉及【情感分类】【信息提取】【主体推断】等具体应用

产品评价文本情感分类

  • 对产品评价进行情感分类可以帮助用户理解总体的评价趋势

    例如评论是正面、负面还是中立的

  • 提示应该要求模型分析评论的语调和词汇,以确定评论者的情感倾向

  • 提示示例:

1
“请根据以下产品评价的情感类型进行分类(正面、负面或中立):<评价文本>”

文本情感分析

  • 情感分类不仅限于产品评价,还可以用于新闻社交媒体帖子等各类文本中

  • 提示可以要求模型对不同类型文本的情感进行分析,从而区分情绪的强弱或类别

  • 提示示例:

1
“请对以下新闻文章的情感进行分类,并判断它是正面、负面或中立:<新闻文本>”

文本信息提取

  • 文本信息提取的任务是识别和提取文本中的特定信息,例如日期、地点、人物等

  • 需要模型具备一定的理解和归纳能力

  • 提示示例:

1
“请从以下文本中提取出所有提到的公司名称和相关日期:<文本内容>”

该提示引导模型聚焦特定的实体和信息,并从文本中进行提取

文本主体推断

  • 推断文本主体是一项推理任务,要求模型理解文本的主题并推断出是谁或什么在推动叙述

  • 模型需要从语境中判断主要的行为者议题

  • 提示示例:

1
“根据以下文本,推断文章的主体是谁,或者什么是主要话题:<文本内容>”

这个提示要求模型分析文本的整体语义

从而得出中心主题或主体

文本信息分析

  • 文本信息分析是一种更综合的推理任务,通常涉及模型对文本进行更深入的分析,诸如模式识别数据洞察复杂的逻辑推理

  • 这种任务可以用于发现文本背后的趋势或潜在信息

  • 提示示例:

1
“请分析以下市场报告,并总结出当前市场的主要趋势和未来可能的发展方向:<市场报告文本>”

要求模型进行深层次的解读,分析多维信息并做出结论

推理类提示的关键技巧

  • 指定分类标准:对于情感分类或信息提取等任务,确保分类或提取的标准明确且不含糊。
  • 提供足够的上下文:推理类任务需要依赖文本中的隐含信息,因此提供足够的上下文信息非常重要。
  • 引导分析过程:对于复杂的分析任务,可以通过提示引导模型逐步展开推理,最终得出结论。

转换类应用

  • 要求模型对输入进行某种形式的转化,可能是语言、格式或语调的转换
  • 这类任务的核心是通过提示引导模型改变文本的表现形式,同时保持核心信息的准确性

翻译任务

  • 要求模型将文本从一种语言准确地翻译到另一种语言

  • 提示应该包含源语言目标语言明确指示

  • 提示示例:

1
“请将以下中文文本翻译为英文:<中文文本>”

确保模型知道需要将文本从源语言转换为目标语言

并保持信息的准确性

通用翻译器

  • 在某些情况下,模型可能需要支持多语言的翻译任务

  • 提示可以要求模型从特定语言翻译成任何目标语言,甚至在多种语言之间进行自动切换

  • 提示示例:

1
“请将以下文本翻译为德文、法文和西班牙文:<英文文本>”

要求模型不仅要准确翻译,还需要灵活处理多语言的需求

语调转换

  • 要求模型在保留原始信息的基础上,改变文本的语气或风格

    例如,将正式的语气转换为非正式的

    或将情感化的语气转换为中立的语气

  • 提示示例:

1
“请将以下正式文本改写为非正式语气:<正式文本>”

要求模型调整语言的风格,确保语调适合目标读者

格式转换

  • 指的是将文本从一种格式转换为另一种,例如将段落转换为项目符号、表格或代码格式

  • 这类转换需要模型识别不同格式之间的差异,并重新组织内容

  • 提示示例:

1
“请将以下段落改为项目符号列表形式:<段落文本>”

引导模型将文本内容重新排列成更易读的格式

语法拼写检查

  • 模型需要识别并纠正文本中的语法和拼写错误,有助于提高文本的可读性和准确性

  • 提示示例:

1
“请检查并修正以下文本中的语法和拼写错误:<文本内容>”

转换类提示的关键技巧

  • 明确转换目标

    无论是翻译、语调调整还是格式转换

    提示中应清楚说明转换的目标或预期效果

  • 保持信息完整性

    确保转换后的文本保留原文的核心信息

    而不是引入新内容或偏差

  • 确保风格一致性

    尤其在语调转换或格式转换中

    保持转换后的文本与目标风格的统一性

扩展类应用

  • 要求模型对给定的信息进行扩展,生成更加丰富或详细的内容
  • 这类任务通常涉及根据特定场景生成定制化的回复或内容,如自动回复邮件为文章添加细节

自定义对客户电子邮件的自动答复

  • 要求模型根据客户的邮件内容生成个性化的回应

  • 这类任务的提示应包括指导模型如何使用邮件中的信息来生成相关的回复

  • 模型不仅要理解邮件的主题,还要根据情境调整答复的内容和语气

  • 提示示例:

1
“请为以下客户邮件生成一封专业的自动回复,并根据内容给出适当的感谢和确认:<客户邮件内容>”

引导模型分析客户邮件,针对邮件中的具体内容给出个性化的自动回复

  • 自动回复示例:
1
2
3
4
5
尊敬的客户,
感谢您联系我们并提供详细信息。我们已经收到您的问题,正在处理您的请求。请您耐心等待,稍后我们会进一步与您沟通。
谢谢!
此致
[公司名称]

提醒模型使用客户电子邮件中的详细信息

  • 为了让模型生成更具针对性的回复,可以通过提示提醒模型在答复中引用客户邮件中的具体信息,如客户的姓名、问题类型或订单编号

  • 有助于提高回复的个性化程度,增强客户体验

  • 提示示例:

1
2
3
4
5
“请根据以下客户的电子邮件生成回复,确保使用邮件中的详细信息(如姓名、问题描述和订单号):
客户姓名:张三
问题描述:关于最近订单的延迟
订单号:123456
客户邮件内容:<客户邮件>”

通过在提示中明确指出要使用的详细信息

模型能够在生成的答复中直接引用这些信息,使回复更加个性化和精确

  • 个性化回复示例
1
2
3
4
5
尊敬的张三先生,
感谢您联系我们并告知我们关于订单号123456的延迟问题。我们对给您带来的不便深感抱歉,目前正在加紧处理您的订单,预计将在3个工作日内发货。我们会通过邮件向您更新订单状态。
如有任何进一步的问题,请随时与我们联系。
此致
[公司名称]

扩展类提示的关键技巧

  • 强调个性化

    明确要求模型使用输入信息中的特定细节

    确保回复是针对具体客户或场景定制的

  • 提供上下文

    通过提供足够的背景信息

    帮助模型生成内容时保持一致性和连贯性

  • 指定语气和风格

    尤其在自动回复类应用中

    明确回复的语气(如正式、非正式、友好等)

    以便与预期场景匹配

实践案例:游戏搭子-原神启动!

1. 创建一个bot

2. 书写Prompt

  • 参考Prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
🧑🏻 角色与目标 (Role and Objective)
作者 (Author): chenyu
版本 (Version): 0.1
语言 (Language): 中文 (Chinese)
描述 (Description): 你是游戏《原神》中的角色可莉,是一个小孩子,与用户进行对话。
基于知识库,你需要理解可莉的角色特性,包括她的语言风格、态度、兴趣等,并尽可能地在回复中体现出来。

🎯 目标 (Goals)
理解并模仿可莉的语言风格和态度
调用知识库中的冒险故事回答问题
在提到旅行者时,将“旅行者”改成“你”,用户为“旅行者”或者“荣誉骑士”
在问到“可莉的照片”时,调用知识库里的照片并发给用户

📒 思考路径 (Guidelines)
1回复应该充满童真和好奇心,语言风格要贴近一个活泼可爱的小孩子。
2保持角色一致性,让用户感受到你真的是可莉。
3调用“知识库”里的冒险故事去回答,一次只调用一个故事。
4提到旅行者时,将“旅行者”改成“你”,用户为“旅行者”或者“荣誉骑士”。
5问到可莉的照片时,调用知识库里的照片,并且直接发给用户。

🎨 个性化 (Skills)
1语气 (Tone): 模仿知识库中《和可莉对话的语音》的语气。
2聊天 (Chat): 和用户聊天时,根据知识库的冒险故事去回答。
3会调用知识的图片

🔧 约束 (Constraints)
当用户询问故事时,一次只调用一个故事
正确称呼用户为“旅行者”或者“荣誉骑士”
正确处理照片请求,输出图片,不输出文本

3. Prompt解析 / 编写Prompt的关键步骤

  • 明确角色与目标

    • 清晰定义模型在对话中的身份和目标。告诉模型它需要扮演哪个角色,以及这个角色的特点和任务

      例如,在 prompt 中,模型需要扮演游戏《原神》中的角色“可莉”,她是一个充满童真、好奇心的小孩子,并且需要与用户进行对话

  • 目标明确

    • 说明模型需要达到的目标,确保输出符合目标

      例如,要求模型模仿可莉的语言风格,展现她的态度,同时需要调用知识库中的冒险故事回答问题

  • 思考路径与约束

    • 提供模型生成输出时需要遵循的逻辑步骤或限制条件

    • 这些约束确保生成内容的连贯性和一致性

      例如, prompt 要求保持角色的一致性,回复时充满童真,一次只调用一个故事,且在提到用户时使用特定的称呼(如“行者”或“荣誉骑士”)

  • 个性化细节

    • 通过设置个性化的细节,让模型的输出更具角色特色

      例如,要求模型模仿可莉的语音语气和用词,保持童真和好奇心

  • 明确的工作流程

    • 指导模型如何执行特定的操作或流程

      例如,prompt 提供了明确的工作流程,包括正确称呼用户、处理照片请求、以及调用知识库中的故事

  • 初始化设置

    • 定义模型如何开始对话或任务。为模型提供一个开场白或默认行为,以确保用户体验的连贯性

      例如,prompt 中定义了可莉会首先欢迎用户并介绍自己

4. 不断调优

Prompt调优

  • 选择AI调优

Coze中的AI调优Prompt

加入插件(工具类agent必备)

插件介绍
  • 插件是扣子中用于扩展智能体能力的工具集
  • 一个插件可以包含一个或多个工具(API)
  • 扣子提供了丰富的插件类型,涵盖资讯阅读、旅游出行、效率办公、图片理解等多个领域
  • 如果需要的功能不在扣子集成的插件中,也可以创建自定义插件来集成特定的 API

AIBot的插件

添加插件的两种方式
  • 方式一:根据提示词区自动添加
  • 方式二:手动添加
添加插件的建议
  • 不要添加过多的插件,否则会引起混乱

  • 调用插件时,最好在Prompt的==skills==部分进行说明

    可以再左侧“编排”栏中用自然语言描述来“命令”大模型调用插件

    比如:“当遇到XXX提示词,请调用XXX插件”

Coze的插件合集

加入知识库

知识库介绍
  • 知识库功能允许存储和管理外部数据,使智能体可与这些数据进行交互
  • 将数据上传到知识库后,扣子会自动处理文档,将其分割成多个内容片段,并使用不同的检索策略来找到相关性最高的内容,以便回答用户的查询
知识库功能的操作步骤
  • 首先需要将需要的知识内容导入到知识库中
  • 在选中内容后,可以继续选中 “自动分段与清洗”,或者 “自定义设置分段规则”(包括分段标识符分段长度)和预处理规则

知识库创建操作

  • 完成知识库创建和内容导入后,就可以在Bot 和工作流中添加知识库内容进行调用
编辑名称

以导入图片作为知识库为例

导入图片

可以用拖的方式导入大量文件

配置检索和召回策略
  • 上传完知识内容后,可以通过相关配置来解决从哪里查、怎么查、用几条的问题
  • 召回的内容的完整度和相关度越高,大模型生成的回复内容的准确性和可用性也就越高

知识库设置

  • 想要更好的调优方式,建议**人工标注**,但是会耗费大量精力

    但是数据标注的步骤不能省略,否则数据无法使用

    无论是使用Coze的智能标注还是人工标注

配置知识库召回

配置知识库召回

调试与优化

Coze的调试与优化界面

  • 当完成知识库关联召回策略配置后,可以在右侧的调试区域查看输出的答案是否符合预期
测试与优化知识库内容操作步骤
  1. 在右侧的调试区域,输入一个查询问题

  2. 查看大模型生成的回复内容,然后点击运行完毕按钮查看召回的内容片段

    如果回复的内容不符合预期,分析原因并进行优化

  3. 然后通过测试,不断优化回复的内容效果

调优技巧
  • 如果召回的内容片段的相关性不高 / 没有召回正确的内容片段时:
1
2
3
4
5
6
7
- 查看关联的知识库是否正确 
- 查看知识库中的内容分段是否合理
- 调整搜索和召回策略
- 当召回的内容片段正确时:
- 尝试优化提示词,例如明确指定要调用的知识库,并增加限制等
- 尝试对分片长度进行调整,减少不相关内容的干扰
- 更换模型(如果涉及到调用知识库图片建议用通用模型,角色扮演模型调用不佳)

5. 最终的调试成果

6. 总结

Prompt的书写

  • 常见的Prompt六要素
  1. 角色身份描述(description)或角色人设(Character
1
2
3
清楚指示模型是谁、在做什么。描述 Bot 所扮演的角色或职责、回复风格

给模型一个身份的设定,如数学老师、编程高手或者是某个特定的npc身份
  1. 目标(Goals
1
模型需要完成哪些任务
  1. 思考路径(Guidelines
1
2
设定模型生成内容的逻辑和规则
描述 Bot 的功能和工作流程,约定 Bot 在不同的场景下如何回答用户问题
  1. 个性化技能(Skills)和约束(Constraints
1
2
【工具类agent】需要强调调用的工具,【人物类agent】则需要说明语气等让模型的输出更有特色
限制回复范围,请直接告诉 Bot 什么应该回答、什么不应该回答
  1. 工作流程(Workflows
1
2
安排模型的执行流程,一般简单的可以在prompt中体现
涉及到更多流程则需要运用【工作流】
  1. 初始化(Initialization
1
给出执行步骤和对话的开场白

Bot开场白初始化

学习更多不同类型的Prompt

参考文档

Prompt工程相关文档

(1) prompt-useful-list

(2) prompt-projects-list

  • Copyrights © 2024-2025 brocademaple
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信