天天看点

初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架

作者:AI应用实践

上周,微软的typescript之父发布了一个有趣的开源项目:TypeChat(名字就可以看出和TypeScript与ChatGPT相关)。在官方介绍上,给出了该项目的一句话介绍:帮助获得大语言模型(LLM)的结构化响应,以用来构建应用程序的自然语言交互界面。简单地说,就是将自然语言通过大模型(LLM)翻译成自定义的类型(通过TypeScrip语言)输出,从而能够更好地与自己的应用程序相连接。

初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架

自然语言:LLM时代的交互界面

如何理解构建“自然语言交互界面“呢?我们用一个买咖啡的例子来说明:

我们现在使用在线买咖啡的应用(比如小程序),其交互方式是传统的图形界面输入:选择咖啡类型,选择冷热程度,选择糖粉多少,然后下单,此时应用软件根据您的选择,比如【拿铁、一杯、冰、半糖、大杯】,然后生成订单交付后续操作。

那么如果我们需要用自然语言(Natural Language)作为交互方式呢?你所需要的就是用自然语言说出:“给我来一杯大杯的拿铁,半糖加冰,就这样”。对于这样的一句“自然语言”的输入,很显然,应用软件是无法直接处理的。这其中有着AI应用最大的鸿沟也是难点之一:自然语言的语义理解。

应用软件的订单系统只能处理“结构化的输入”,简单的说,也就是有着规定格式的输入信息,比如一个订购信息有着简单的如下结构(类型):

{

"type":"LatteDrinks", //类型

"name":"latte", //名称

"temprature":"iced", //温度

"quantity":"1", //数量

"options": {...} //其他选项

}

TypeChat就是做这个工作的:将自然语言借助于AI大模型翻译成应用软件系统擅长处理的结构化数据。当然,TypeChat只是一个“指挥官”,其核心的任务仍然是由大语言模型来完成,比如chatGPT。

来自官方的例子程序,把你的自然语言的请求转换为结构化的类型良好的数据:

初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架
初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架

传统AI方法的比较

在大语言模型广泛应用之前,其实你可能已经体验过类似的“自然语言UI”的应用,比如AI电话订餐,AI电话订购火车票,也可以通过自然语言,比如“查询一下今晚从南京到上海的高铁火车票”来实现与订票系统交互,那么他们是怎么实现的呢?

传统AI方案一般是通过后端AI技能的配置,以及大量样本的标注与训练来完成。首先定义用户意图(比如订票)、意图的词槽/参数(比如出发地、时间)、意图澄清的话术(比如‘请问从哪里出发?’)、意图处理方法(查询方法的结构化输入输出);然后针对该意图提供大量的自然语言样本并进行标注(即提供大量的对话样例);然后交给算法进行机器学习,最后才能投入使用。

一个AI订购咖啡的意图可能是这样定义的:

初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架

相对于传统的基于大量样本标注与训练的AI意图识别,现在借助于大语言模型来理解自然语言的输入,具备的主要优势为:

  • 复杂度降低,节约大量的工作量。样本标注与学习已经由大语言模型帮你完成,无需自行完成。“有多少人工智能,就有多少人工在背后”的现象不再出现。
  • 极强的语义理解能力,意图识别能力指数级上升。传统的意图识别一个简单的意图可能也需要几百上千的对话样本进行标注和学习,否则很容易出现意图识别准确率低、相互干扰等“人工智障”的结果。特别是在中文这样的歧义性较大的语境下,自然语言处理的准确性一直是AI领域的拦路虎。

TypeChat的工作原理

大语言模型能够胜任将人类自然语言进行“类型化”与“结构化”的工作,原因在于其天然就具有这样的能力,比如,我直接要求chatGPT转换我的自然语言请求:

初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架

我们知道,大模型是可以反复交互实现优化调校的。那么,如果我们对此加以引导与约束,大语言模型就可以生成更加严格的输出格式:

初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架

所以,可以看到有了非常不错的效果!利用大语言模型,我们成功的通过提示词和调教,将自然语言的输入转换成应用程序更擅长处理的、类型良好的、结构化的信息输入,这样,我们可以很轻松的将自然语言作为应用的交互的界面。这就是TypeChat背后的原理:

初探微软TypeChat:给你的应用增加自然语言交互界面的实验框架

TypeChat工作原理,来自网友整理

用户只需要定义你的应用程序支持的结构化信息类型。这可以是简单的语言情感分类,也可以是更复杂的结构化类型,比如一个购物车内信息的类型、一个音乐播放请求的类型等。你也可以将多个类型组合成更加复杂的意图类型。定义类型后,TypeChat 将通过以下流程对你的自然语言输入进行处理(通过LLM):

  1. 使用你定义的类型构建大语言模型需要的提示词(Prompt)
  2. 获得大模型的响应,验证响应是否符合定义的类型结构。如果验证失败,则通过进一步的大模型交互,修复不合格的输出
  3. 总结结果,并将符合类型定义的结构化信息输出

接下来,你就可以把结构化的、严格遵循你的类型要求的输出,交给你的应用程序进行处理!

Github地址:

https://github.com/microsoft/TypeChat

继续阅读