无意图的大模型对话系统CALM

CALM

CALM是Rasa的最新技术,仅用于商业版本Rasa Pro中(开源版本仍然为旧的基于意图的设计)。

Conversational AI with Language Models,是一个原生大模型的对话方案,包括:

  • 业务逻辑(Business Logic)
  • 对话理解 (Dialogue Understanding)
  • 对话修复 (Automatic Conversation Repair)

大模型负责理解用户的整篇对话,输出贴合业务流程的内部命令语言。

由于大模型并不是直接输出文字给用户,而是保证DM流程图的执行,因此,它不会产生幻觉,在商业领域中可以可靠的运行。

业务逻辑(Business Logic)
流程(Flow)

流程的描述很重要,这是让大模型找到目标的关键。

流程也支持条件满足。流程如果有FlowGuard,则LLMCommandGenerator在一个Flow的FlowGuard不满足条件时,不会选择这个Flow。

步骤(Steps)
  • 动作step(action)
  • 为了填槽而收集信息step(collect)
  • 填写槽位(set slots)
  • 跳转另一个流程(link)

(大模型的输入长度限制,会影响flow的描述和槽位数量等信息的总信息量)

对话理解(Dialogue Understanding)

用户对话 -》 业务逻辑

和传统NLU相比

  1. 不仅仅是一句话的理解,而是整通对话的理解(会加入 业务逻辑的理解)。
  2. 不再是输出意图和实体。而是用户要继续业务流程所需要的一系列的命令(内部语言)。

使用DU最大的收益就是从意图中释放出来。

传统NLU将用户文字转为预定义的N个桶里,这种简化会影响拓展性。例如,新增的意图是否会和已存在的意图太相似了,以至于会搞砸现有的东西。

CALM可以将复杂的用户文字转为可以让业务流程跑下去的简单语法

对话修复

如果用户回复的不是我们需要的信息,对话修复就会介入。

对话修复本身会有一些默认的Flow来应对一些常见的异常场景。

Digressions:  从一个Flow切换到另一个Flow时触发

Corrections: 纠正或更新输入数据触发,Flow会retrace

Cancellations: 取消一个正在进行的任务

Chitchat: 闲聊,但不会影响Flow

Completion: 完成了用户要求或用户放弃

Clarification: 不明确用户请求或有多个Flow匹配时

Internal Errors: 内部错误

Human Handoff: 挂机

如果自定义上面的pattern(FLow里取一个相同的名字即可覆盖),需要重新训练

FAQ

是否会有大模型的幻觉问题?

不会,因为不会直接输出文字给用户,而是流程图的标准响应给用户。

开发速度如何?

CALM不需要将用户的各种情况变成意图,而只需要建立业务逻辑的关键部分,就能跑起来。

是否可以用上大模型的生成能力?

可以,rephrase功能。就是Flow配置的固定回复话术太呆板,可以加入大模型做rephrase,不会千篇一律,尤其在多次重复时。

同时,大模型可以结合用户的上文或结合用户的画像,进行rephrase

参考

https://rasa.com/blog/how-to-put-next-generation-ai-assistants-in-production-today-with-calm/

https://rasa.com/blog/calm-rasa-s-answer-to-spooky-ai-hallucinations/

Conversational AI with Language Models

.

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个更改CALP和CALM的校准RTC程序的示例代码: ```c #include <Wire.h> #include "RTClib.h" // RTC对象 RTC_DS3231 rtc; void setup() { // 初始化串口 Serial.begin(9600); while (!Serial); // 等待串口连接 delay(3000); // 等待3秒钟以便用户有足够的时间打开串口监视器 // 初始化I2C总线 Wire.begin(); // 检查RTC是否存在 if (!rtc.begin()) { Serial.println("无法找到RTC模块"); while (1); } // 打印当前RTC的时间 DateTime now = rtc.now(); Serial.print("当前时间: "); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(' '); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); // 设置CALP和CALM的值 rtc.writeSqwPinMode(DS3231_OFF); // 关闭输出脚 uint8_t calp = 0x81; // 设置CALP为129 uint8_t calm = 0x7F; // 设置CALM为127 rtc.writeRegister(DS3231_CONTROL, (rtc.readRegister(DS3231_CONTROL) & 0x3F) | (calp << 2)); rtc.writeRegister(DS3231_CONTROL, (rtc.readRegister(DS3231_CONTROL) & 0xC3) | (calm << 0)); rtc.writeSqwPinMode(DS3231_SquareWave1Hz); // 打开输出脚 Serial.println("CALP和CALM已成功设置为129和127"); } void loop() { // 不需要执行任何操作 } ``` 这个程序使用了RTClib库来与RTC模块进行通信。在`setup()`函数中,它初始化了I2C总线和RTC对象,并检查RTC是否存在。然后,它打印当前RTC的时间,并设置CALP和CALM的值。最后,它打印一条消息,表示CALP和CALM已成功设置。 请注意,CALP和CALM的值是根据您的实际需求而定的。在上面的示例中,它们被设置为129和127,但您可能需要使用不同的值。您可以根据RTC模块的规格表来确定正确的CALP和CALM值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值