意图
用户输入
: 我想预订7月4日飞往上海的机票。
意图
: 预定机票
有多种方式可以表达用户预订从一个地方到另一个地方的机票的意图。 它们可以被归类为“预订票”意图。 为了帮助Rasa或LLM理解“预订票”,建议举多个例子。 当然越多(多样化)越好。 意图示例:
- 我计划在这周日飞往上海。
- 你能帮我查一下7月份从杭州飞往上海的航班吗?
槽位
为了查询航班数据库,需要提取用户正在查看的航班信息。 这些信息称为槽,每个槽由类型、名称和值组成。 例如,查询航班至少需要三个时段:日期、出发城市、到达城市。 槽填充使用实体(例如城市名称)或其他数据(例如一段文本)的特定信息。 槽Slot 在 PromptDialog 中也称为变量 variable。
实体
实体是具有名称的“事物”,例如人、地点、产品等。这些事物可以用来填充槽位。 比如:水果类型
的变量填充了苹果
,即变量具体的值。
槽值填充
槽值可以在会话期间的任何位置填充,它可以从用户输入中提取或手动设置。以下是进行槽值填充的几种方法:
1.实体识别
实体识别是槽位填充中最常用的方法。 PromptDialog有以下三种方式进行实体识别:
- 包含一组预定义实体,例如日期、数字、电话和序数词,无需注释、训练和识别。
- PromptDialog支持实体识别模型,例如DIET form Rasa,它需要设计者提供一组训练示例来识别实体。 通过提供多种话语并在例句中显示不同的实体词,可以提高实体识别的准确性。 众所周知,由于可能没有足够的训练数据,准确性会有所不同。
- PromptDialog即将推出基于大型语言模型(例如chatGPT)的实体识别方法,以改进意图分类和实体识别的易用性和准确性。
2. 整段话语
整段用户输入可以用于填充到槽值中。 一个常见的场景是收集用户反馈,这需要使用整段话语而不是从中提取特定短语。 需要注意的是,虽然我们不关心提取的具体值,但我们仍然需要添加不同的示例,以确保模型准确地进行意图分类并理解当前的话语将用于槽填充。
3. 用户定义值
在这种情况下,选择特定值来填充槽。 例如,在预订机票时可能会询问用户是否喜欢靠窗的座位。 槽变量“windows”的值应为“true”或“false”。无论用户是否说“是”或“我想坐在窗户旁边”,“windows”变量应设置为“True”。
4.重置
有时需要重置槽值。 例如,用户可能想要清除先前输入的信息,或者在对话开始时为槽分配初始值。 也可以在填写同一实体类型的不同槽位时使用,例如数字:给出订单标识符时填写订单号码,提供电话号码时填写电话号码。
机器回复
系统会根据用户的话语发送不同的响应。 PromptDialog目前支持五种响应:
- 文字
- 图片
- 附件
- Webhook
- Action
列表(模板)
意图列表
意图列表的存在是为了重用意图。对话设计中有一些标准意图,例如确认、否认和赞赏。 重复构建相同类型的意图既耗时又容易出错。 意图列表 Intent Template 就是为了解决这个问题而设计的。 我们可以保存一个要重复使用的意图作为模板并将其添加到意图列表中。
实体列表
出于同样的原因,存在不同项目中常用的标准实体。 系统中存储了一组预定义实体以供快速参考。
回答列表
回答列表的存在是为了重用机器回答。 我们经常在对话中遇到重复的回复,例如再见、调用同一个 webhook、以及感谢。 我们可以将要重复使用的响应保存为回答列表并将其添加到回列表中。 当我们需要在项目的其他地方使用这个响应时,我们可以直接引用保存的响应。 强烈建议您尽可能使用回答列表。
经常问的问题 (FAQ)
用户可能就特定主题提出的典型问题列表,每个常见问题回答包含三个组成部分:(问题、类似问题、答案)。
PromptDialog 通过三种方式支持常见问题解答:
- Rasa 原生常见问题解答,使用 Rasa 自己的例程来回答问题。 在这种情况下,用户需要为每一个问题给出几个相似的问题(越多越好),以便Rasa 能够通过学习正确识别出问题。
- ChatGPT/GPT4 启用检索增强生成 (RAG) 来回答问题。 PromptDialog 采用Embedding和检索方法来显着提高准确性。 如果用户没有提供类似问题,我们建议采用这种方法。 然而用户需要访问OpenAI/ChatGPT, 需要花费一些成本。
- 具有对比学习的定制BERT模型。 PromptDialog还提供了自己的模型,可以本地部署,其性能介于Rasa FAQ和ChatGPT之间(接近ChatGPT)[它需要训练例句]。
知识库
除了FAQ之外,PromptAI还可以将CSV、PDF、Doc、Text、HTML等多种形式的企业文档转化为一个知识库,并利用检索增强生成(RAG)直接基于这些非结构化文档回答问题。 该功能由talk2bits.com支持,并且可以通过PromptDialog与Rasa 集成。
表单信息收集
信息收集用于收集机票预订、酒店预订、订单查询等多项信息。在PromptDialog中,只需要进行一些配置就可以完成曾经相当复杂的表单设计:
信息列表
槽列表声明了表单需要收集的几个槽值,机器人如何询问这些槽值,以及如何从用户回复中填充槽位。 机器人将按顺序询问用户,直到所有槽位都被填满。用户其他请求
用户可能不会按照我们期望的方式回答。 如果用户说“我不想继续”,则表单填写将退出。收集成功
当所有槽位都填写完毕后,表格将要求用户最后确认完成。