
来源:A16Z
Z Highlights
-
我们现在使用 LLM 来处理所有的理解工作,并确保我们不会向用户发送任何生成文本,这样我们就可以完全自信地说,我们没有幻觉的风险,没有提示注入和劫持等风险。
-
LLM 是将自由形式的自然语言转换为结构化数据的非常强大的组件,反之亦然。
-
我们的方法是将对话中发生的事情翻译成一小组动词,这些动词表示用户希望如何推进对话。这并不意味着这就是将要发生的事情,但这表示用户想要做什么。
Alan Nichol是开源对话式AI领域领军者Rasa的联合创始人兼CTO,本文为他与a16z普通合伙人Martin Casado在“AI + a16z”节目中的访谈实录。
NLP早期:分类和意图识别的局限性
Derek Harris(主持人):欢迎回到 a16z AI 播客,新年快乐!我是 Derek Harris,本周我们有另一期节目,深入探讨 AI agent、客户支持,特别是聊天机器人和其他与业务数据交互的自然语言界面的话题。本期节目的嘉宾是 a16z 普通合伙人 Martin Casado 和 Rasa 联合创始人兼 CTO Alan Nichol,他在自然语言处理领域工作了十多年,并探索了将 NLP 应用于业务问题的多个角度。他们回顾了失败方法的历史,以及 LLMs 的前景和风险。然后,Alan 解释了为什么他解决这个难题的方法是将 LLMs 的自然语言理解与更传统的技术相结合,以执行用户的请求。他的目标是循序渐进并建立信心,而不是急于进入一个 LLMs 做出业务决策并即时创建自己的业务逻辑的世界。
Alan Nichol:我的背景最初是物理学,我的博士学位是机器学习在物理学中的应用。我认为从物理学到机器学习是一条很常见的道路。但不管怎样,我对它越来越感兴趣,我开始研究第一个创业想法是一个搜索引擎。所以是从机器学习到搜索。然后从搜索开始,我对如何不仅仅是回答一个问题产生了兴趣,如何不仅仅是搜索某些东西?因为实际上我当时正在开发的第一个产品之一就是英语到 SQL。当时我们必须为每个模式训练一个模型。而现在你可以把模式放在上下文中,比如把它放在提示词中,它就会弄清楚事情。所以我们必须为特定的模式训练一个模型。我们发明了这个产品,我们把它卖给营销团队。这样他们就可以说,我现在在 Facebook 广告上花了多少钱,然后我们会把它转换成 SQL,要么显示一个图表,要么显示一个表格之类的。你可以问这些非常复杂的问题。你可以问,过去三周我在所有国家的广告系列的投资回报率是多少。当然,你很快就会意识到营销团队不会那样问问题。会提出这样问题的人,他们会自己写 SQL,所以人们会和这个聊天机器人说话。它在 Slack 中,是最早的 Slack 聊天机器人之一。人们会和它说话,他们会说,Facebook 怎么样?所以你必须进入这种有趣的多轮问答。
Derek Harris:我知道我们还在介绍你的背景,但我实际上想在这里快速深入探讨一下,因为这是我一直想知道的事情,即形式语言之所以是形式的,是因为它们是非歧义的,需要保持精确。所以我一直想知道,自然语言中的无代码和低代码真的是一回事吗?如果你想做的事情需要形式语言,那么随着时间的推移,你是否必须收敛到形式语言?就像在无代码世界中,你给我方框和箭头,但在某个时刻,我需要创建子程序,我需要考虑基本上发生的固定的延迟。
Alan Nichol:在自然语言中,我必须使用一个没有歧义的子集。例如,让我给你一个句子。“狗给我拿来了球,我踢了它。”从语义上讲,也许我踢了球,但也许我踢了狗,谁知道呢?在我看来,我们尝试将自然语言映射到形式语言都是很奇怪的。你认为这值得继续下去吗?你认为这里真的有一个美好的结局吗?我认为这是一个非常值得探讨的问题。很长一段时间以来,我对无代码对话式 AI 一直持悲观态度。
假如你发布了其中一个产品,然后一个客户进来说,你知道,这里我们需要比较两个整数。你会说,这里我们需要检查一个字符串。然后正如你所说,在你意识到之前,你已经在你的 UI 中构建了一个通用编程语言,然后你挠头,一切都出错了,对吧?我喜欢我们现在解决问题的方式,我们就不那样做,我们不说它是无代码的,我们为你提供了一个很好的 UI 来指导你的业务逻辑。而且,如果你还有其他事情需要做,你可以跳出框架,你不必为给你访问代码而道歉,你可以去做,在子类中做一些事情或者在某个地方写一些代码。
Derek Harris:我们稍后会回到这个问题。我们先来谈谈你的背景。所以你当时尝试用自然语言做 SQL,为每个模式创建一个模型?
Alan Nichol:是的,我在 2016 年写了这篇文章,中间有一段我谈到了深度学习和刚性规则为何不匹配,以及如何向基于深度学习的系统注入一些额外的逻辑和其他东西。如果我回到 2016 年,我会对自己说这个问题的解决方案是训练一个非常大的 RNN,然后用英语解释一下,然后从那里开始采样 token。不管怎样,我们正在研究这个问题。实际上进行多轮对话是一个非常有趣的问题。讽刺的是,我发现很多关于这个主题的研究都发生在我攻读博士学位的同一栋大楼里,就在我下面的那一层。我当时并不知道那些人的存在,但我后来才发现了那些文献,这是第一次有聊天机器人的炒作。
2016 年代的聊天机器人炒作,那是一次真正的炒作,因为技术上没有进步,所以并非是我们现在看到的由技术驱动的发展。Messenger 作为一个平台开放了,这非常令人兴奋,人们为它构建应用程序。我们只是环顾四周,看,我们已经使用了所有可用的工具来构建聊天机器人,但它们都很糟糕。
就像有一百种工具可以用来构建 hello world,但没有工具可以用来构建在 hello world 之后你想构建的任何东西。这就是我们的旅程的开始。然后我们做的第一件事是开源了一个 NLP 库,专门用于聊天机器人。用于对人们所说的内容进行分类,然后进行一些命名实体识别,提取一些实体之类的。
第一个版本的算法非常简单,那是 Word2Vec 和 GloVe 的时代。它的工作方式是,无论句子是什么它都会把词向量加起来,我们只是在这个表示上训练了一个分类器。我对在 Word2Vec 上训练分类器的看法是它就像一个主力军,它让很多人走了很远并被如此广泛地采用,它实际上是一个很难被击败的基线。
我想对 NLP 的一大群人来说,我们真的有了一个很好的方法,我们想让计算机处理自然语言,但计算机不知道如何表示自然语言。你没有办法用它做事情,用它做数学,对它进行排序,比较它,看看它与其他东西的相似之处。然后 Word2Vec 是第一个方法,我们给每个词一个数字表示,一个词变为一个向量。现在你就可以做数学元算了,对吧?一个经典的例子让每个人都大吃一惊,那就是你可以采用国王的表示,减去男人的表示,加上女人的表示,你就会得到女王的表示(ZP注:词向量)。
这是非常革命性的,所以我们有了一种用词语做数学的方法。Word2Vec 是什么时候出现的?我想这篇论文大概是 2013 年。然后是 GloVe,也许是 2014 年。所以我的历史观是,很多聊天机器人都是在 Word2Vec 之后出现的。这感觉上是技术驱动的,但对我来说,Word2Vec 就像一个灵感来源。但如果你想想 2012 年左右构建聊天机器人的范式,这让我非常恼火,以至于我们开始研究这个问题。
你知道,用户发送一条消息,我们要把它归类到这些预定义的类别之一,他们要么说你好,要么说再见,要么要求收据,要么退款,或者其他什么。你有你的预定义类别,你只需要对事物进行分类。这就是理解部分,对吧?它只是选择正确的类别。Word2Vec 真的是一个很大的进步吗?我说不准,但它当然对我以及许多人来说都是一个灵感来源。
Derek Harris:我们谈到你开始 Rasa 的那段历史了吗?
Alan Nichol:差不多了。所以当我们开放,当我们创建那个 NLP,NLU 库时,我们开源的那个东西叫做 Rasa。当时每个人都在使用这些 API 进行自然语言理解。就像微软有一个,谷歌有一个。处于这样一种情况,即你与你的应用程序的每一次交互都要经过第三方,然后你才知道它是什么,这是非常不靠谱的。如果在你不知道有人点击了你应用程序中的哪个按钮之前,每次点击按钮都必须经过一个提供商,那将是一个多么危险的情况。这是这个东西的开源替代品,它很酷,人们喜欢它。然后突然之间,聊天机器人世界中的每个开发人员都知道 Orazio 是谁,认为我们很酷,认为我们很合法,并想使用这个工具。
我开始了成立 Rasa 公司的旅程。我做一个粗略的草图,说明人们如何使用 Rasa 以编程方式为聊天机器人做 NLU 会很有用,然后我们将讨论 LLMs 是如何改变这一点的,以及现在这种范式是如何演变的。所以一切的原因就是我刚才谈到的分类问题。范式是你把用户所说的内容分类到这些桶中的一个。然后你有一堆 if 语句。这就是你的聊天机器人,这听起来像是编程。
Derek Harris:确实如此。
Alan Nichol:而且我会告诉你,大多数广泛使用的企业级对话式 AI 平台,你只要稍微深入一点,就会发现这就是正在发生的事情。有一些东西对用户消息进行分类,然后根据你在对话中的位置以及目前发生的事情,使用一堆规则来决定该做什么。因此,多年来一直朝着这个方向前进,接受这种范式,然后尝试构建一个非常聪明的对话系统,以应对这种方法的所有局限性。花了很多时间,写了一堆论文,做了很多工作,比如,如何构建一个上下文引擎,可以重新解释那种误解。
也许可以举一个更具体的例子来说明为什么仅仅将所有内容表示为分类问题是如此贫乏。这是我们一个客户的例子,这是一家航空公司,他们问用户,您是否要乘坐经济舱?这个人说,很遗憾。对于任何阅读这句话的人来说,这意味着什么都是非常清楚的,我们当然知道这意味着“是”。但并不是说“很遗憾”这个词通常意味着“是”,对吧?
所以如果你有这种非常幼稚的理解语言的方式,你只是查看一条消息并对其进行分类,那么你能做的就有限了。我们围绕处理这种歧义构建了很多机制,比如重新解释事物之类的。当然,在 LLMs 的世界里,所有这些都感觉非常古老,在 LLMs 的世界里,你可以打开任何这些广泛可用且易于使用的工具。你只需要与它们进行非常流畅、自然的对话。
显然,后台并没有进行分类,没有分类器。正在发生一些非常不同的事情。当然,所有的技术都必须随着这一点而发展。只是未来的圣诞节幽灵,但它们也引入了一系列全新的问题。所以在我们即将进行的对话中,我们将从旧问题转到新问题。不,绝对是这样。我记得构建了所有这些东西,这些聪明的对话管理器和聪明的上下文内容。然后它给构建聊天机器人的人增加了大量工作,让他们变得非常聪明,做一堆聪明的事情,收集数据,做评估工作。
人们真正想要的是一个完美的理解引擎,然后他们想要一个非常简单的引擎来管理他们的业务逻辑,所以他们实际上希望对话部分是愚蠢的,而理解部分是无限聪明的。我认为这更接近我们今天的情况,所以我们从错误的一边解决了这个问题,但是,我想你会随着时间的推移发现这一点。
2020 年,我们开始构建第一个完全不依赖于这个分类问题的对话引擎。那是 2020 年,我们发表了那篇论文,并发布了与之配套的功能之类的,一些端到端的工作。
Derek Harris:我假设 Rasa 和你正在做的很多工作都是基于这种分类方法。你在 LLMs 之前改进了这种方法吗?
Alan Nichol:2019 年,我写了一篇博文说,是时候摆脱意图了。换句话说,是时候摆脱这种分类范式了。它再次引起了人们的共鸣,因为每个人都觉得当你构建其中一个东西时,你实际上是在构建一个纸牌屋,而纸牌屋,纸牌就是意图,就像 if 语句所基于的条件一样。这就是当你在与团队一起构建时无法扩展的东西,你会想,这条消息真正适合放在哪里。所以,我们在 2020 年左右开始以有意义的方式打破这种范式。我想现在,现在每个人都同意了,没有人想再构建基于意图的聊天机器人了。显然,我认为从 ChatGPT 开始,零点是聊天。
Derek Harris:也许值得谈谈它是如何与现有的聊天机器人一起落地的,因为实际上并不是直接将其改造成现有的程序,对吧?
Alan Nichol:完全不是。OpenAI 正在做这个很酷的事情,你可以和这个 LLM 聊天,但我需要一个客户服务agent。我该如何调和这一点?这些东西落地了,但只是意识到它们可能很好,也许不是那么容易使用。从供应商的角度来看,它极大地改变了游戏规则。作为一个构建平台的人,每个人都想,我们的聊天机器人什么时候可以变成那样?这也使这成为每个公司的 C 级话题,这显然对我们有好处,对我们有帮助。也产生了大量的噪音和其他东西。但是,你知道,我的思考方式和你说的完全一样。它实际上与我在 2016 年提出的观点相同,即你如何将这种模糊系统与非模糊系统结合起来。然后你构建一些有用的东西,做一些事情,但仍然利用你从这些模型中获得的东西。
我们知道企业想要构建和关心的对话类型,以及他们需要为客户自动化的事情。所以我们实际上建立了一个庞大的数据库,其中包含对话模式、对话类型,以及我们希望能够做的确切事情。所有微妙的事情,所有在旧范式中从未真正实现过的困难的事情。我们有了一个新的模型类别。我们知道系统,它需要做什么,让我们把一切都扔掉,然后重新构建。所以我们只是深入研究,构建了一个全新的范式和一个完全的分类无关、意图无关的方法来构建这些东西。我对它的结果非常满意。
Derek Harris:也许让我们退后一步,谈谈LLMs 后的变化,假设 X 航空公司想将LLMs 用于订票系统。在我看来,LLMs 经历了五个阶段,似乎很容易集成,但实际上并非如此。我是一家航空公司,我想用一个基于 LLM 的agent与客户交谈来订票。我在后端有开放的 AI 或其他什么。所以首先,它必须了解航空公司背景下的系统,对吧?你可以介绍一下人们是如何考虑集成这些东西的。
Alan Nichol:我确实觉得整个行业都学会了如何去集成LLMs ,但是也有很多错误的路径。例如,我最近最喜欢的一条推文是一条客户支持推文,客户问,你是一个 LLM 吗?回复说,不。客户说,你能给我创建一个反应组件吗?然后它吐出了所有这些。你需要做一些其他事情才能让这些东西真正发挥作用。
LLM的挑战:从’提示和祈祷’到可靠的对话系统
Derek Harris:你能介绍一下你如何将 LLMs 融入到这些东西中的认知的演变吗?
Alan Nichol:可以。起初存在一种较为幼稚的方法,某些超大规模企业会向你承诺,只需一个大型基础模型,然后公开所有 API,就能获得理想效果。我认为听众和许多人一样,会疑惑:如果尚未拥有这些,该如何实现?以及那些对公司而言独具特色的内容,比如产品相关知识,又该如何处理?当然,这是需要支持的。所以我认为最初级、最基本的方法是:你列出所有拥有的 API 及其接受的参数,然后告知 LLM,这是用户的表述,你填写提示词并说明这是用户所说的,这是一个可供使用的 API 列表。
如果看起来你需要这些 API 之一的答案,那么制定一个请求或只是表明你需要它。随后有一段代码实际上会调用那个 API,诸如此类的操作。你只是将这些 API 的原始存在公开给 LLM,然后让 LLM自己搞清楚怎么用,去试一试。你必须给 API 取个非常好的名称之类的。
假设有人想获得产品的支持,就像 LLM 必须以某种方式了解该产品,最简单的方法是你在一大堆文本中写入大量相关信息。这就是你的提示词。这就是我们所做的。整个公司的知识库都在提示中呈现。这使得演示效果非常出色,只需 10 分钟的工作,它就能为你完成 80% 的任务,而且看起来超级有说服力。
所以我认为这是问题的一部分,或者挑战的一部分。我最近看到一张图表,说明了这一点,使用 Gen AI 构建东西的体验与使用传统软件构建东西的体验正好相反。从前,你花了一周时间构建后端和身份验证系统,但你仍然没有任何东西可以展示。然后慢慢地,逐渐地,你开始展示一些你有点兴奋的东西。而用上Gen AI 构建后,你在前 10 分钟就获得了所有的多巴胺。这实际上是一个绝妙的观察。
为什么不把所有东西都放进去呢?我会试着把它简化一点。这些 LLMs 的工作方式是你说些什么,然后它会用英语给你一个答案。你输入的东西是一个提示词,你只需接受提示词,然后附加上所有信息。比如这是一个来自用户的客户支持请求,你是一个 LLM,是一个客户支持agent。
那么,把所有东西都放在提示词中的缺点是什么?我把这种方法称为提示和祈祷。因为你真的无法控制输出,对吧?如果对此有一个修改,也许不是所有的提示词都有所有内容,而是一个模板,根据相关内容或用户提出的问题之类的,动态地提取一些内容。所以在你调用 LLM 之前,它就组装好了,你提取了一些相关的上下文。人们称之为 RAG,检索增强生成。
通常情况下,你获取信息,把它放在一个向量数据库中,然后你以某种方式把它提取出来并填充提示词。我认为最简单的情况是你有一大堆常见问题解答。当用户提出问题时,你首先查询并提取问答对,与用户提出的问题最相似的内容。然后你把它添加到提示词中,并说如果答案在这里,就用它。这是一种引导它的方法。
在许多情况下,创建提示词的初始数据查询需要推理,对吧?你必须知道要查找什么。假设你正在问一个问题,比如我必须知道哪些 PDF 是相关的,通常情况下,RAG 只是基本的相似性搜索,比如余弦相似性。所以它不像 LLM 那样进行推理。所以在我看来,这总是一种非常不精确的方法。
采用经典的 RAG 应用程序,提出问题,得到答案,然后说,告诉我更多,你不会得到一个好的答案,因为它只会查询告诉我更多,然后它会提出所有旧的垃圾。这是一个入门示例,但它不是全部,也不是最终的。这种方法有几个问题,你对输出的控制非常有限,它会说一些合理的东西,但不一定是你希望它说的。当你更改提示词时,了解该更改将产生的影响的唯一方法是运行它并查看。
所以这也是一个令人沮丧的试错过程,这就是为什么我称之为提示和祈祷。而且因为这些模型,特别是你知道的,经过指令调整的模型,这是你通常倾向于使用的模型,这些模型是根据人类反馈进行训练的,它们非常渴望取悦,因为它们在训练期间通过取悦获得了某种奖励。所以它们会提供它们无法做到的东西,因为它们认为这会让你高兴。这就是经典的情况,你构建了第一个版本的聊天机器人,然后它们会说,你还想让我做这个吗?或者你想让我比较一些产品吗?就像它们只是提供它们认为会让你高兴的东西,而这些东西是没有根据的。
所以我们现在处于一个尴尬的境地。我们有 LLMs,你不能把所有东西都放在提示中,所以你做了RAG 。它在一个向量数据库或其他什么地方在做检索,但这还不够。让我告诉你,作为一个程序员,我定期使用 LLMs 进行编程。我只是为了那些愚蠢的应用程序而做这件事。根据我的经验,将这些东西映射到形式语言非常困难,因为你无法预测它们会说什么。
Derek Harris:即使你尝试告诉它,也很难。LLM 以 JSON 格式返回对象,而我的问题只是为了让它获得正确的 JSON,实际上就像 JSON 的停止标记和格式,我必须不断地改进它。即使是这样,每 10 次中就有一次,它就是不这样做,或者它决定添加一些东西,那么,你如何看待将这些你不知道它们会说什么的 LLMs 与我们将要讨论的如何构建一个正式的程序结合起来呢?
Alan Nichol:这是可以做到的事情吗?当然可以。我认为我们现在真的要深入探讨这个问题了。这就是如何构建一个融合这两个世界的系统的问题。我不知道我是否有一个通用的解决方案,但我可以从构建对话式 AI 的角度来谈谈这个问题。特别是对于那些正在构建语音或聊天机器人的企业来说,这些机器人正在自动化一些东西,比如客户支持。
也许让我先明确一下问题领域,然后准确地说出你之前要说的内容,即我们一直在谈论使用 LLM 来进行实际的对话。首先你显然会想要限制它所说的内容,其次如果它要做任何事情,比如订票之类的,它必须与正式的系统对接。因此它既能以有意义的方式说话,又能影响系统。
Derek Harris:好吧,实际上,我们甚至还没有谈到第一个问题,那就是你如何确保不会对客户说一些愚蠢的话。让我们先来谈谈这个问题。你如何确保它不会说一些愚蠢的话?第二个问题是,你如何将其映射到正式的系统?我们与很多受监管的行业合作,你知道,我们有很多大银行作为客户等等。
Alan Nichol:我们总是告诉他们,告诉你的合规团队,Rasa 永远不会产生幻觉。然后人们会说,哇,你有什么秘诀?我说,默认情况下,我们只发送模板化的答案,没有机会生成回复,但当然你可以,你可以引入这一点。我认为我思考所有这些问题的方式是,LLM 的释义就像一点点秘诀,让事情变得更好一点。LLMs 是非常强大的组件,可以将自由形式的自然语言转换为结构化数据,反之亦然。所以这就是正式系统的意义所在。如果你要代表用户做一些事情,就像如果你只是要获取一些数据,你只是要调用一个 API,然后获取他们最近的订单之类的。
这就像一个单回合的事情,大多数事情都不是这样的。大多数情况下,都有一些多回合的交互在进行。所以对我们来说,这只是把用户所说的内容翻译成在这种情况下这意味着什么,这对于推进对话、推进任务、进入下一步等等意味着什么。回到这个“很遗憾”的例子,当你问用户,你是否要乘坐经济舱?然后这个人说,很遗憾。LLMs 非常聪明,能够理解这一点,对吧?我们表示的方式是,我们输出,嘿,你把这个变量设置为 true。所以经济舱变量设置为 true。总的来说,我们的方法是将对话中发生的事情翻译成一小组动词,这些动词表示,我们称之为命令,它们只是说,这是用户希望如何推进对话,这并不意味着这就是将要发生的事情,但这表示用户想要做什么,这是他们所说的意思。然后你有一个非常简单的确定性引擎,它说,好吧,我知道步骤,我知道如果他们想这样做,我需要他们提供这些信息。我需要从 API 获取这些信息,我有这些决策点,我会再问他们几个问题,然后我们就会到达那里。
我们这种方法的好处是,所有关于进行对话的混乱、令人困惑的事情、LLM回复离题、人们纠正自己或提出后续问题、改变主意以及从一件事切换到另一件事等等,所有这些复杂性都由 LLM 处理。而任务逻辑只是简单地、确定地写下来。这是一个非常非常高效的系统,无论从开发的角度来看,还是从持续维护的角度来看。因为另一种方法是,你让另一个系统做所有事情并弄清楚。关于这种方法最令人恼火的事情是,回到提示和祈祷的事情上。当它没有按照你的意愿行事时,你无法系统地影响它,让它按照你的意愿行事。我知道我发现了一个错误。我没有预先确定的一组步骤可以为我解决这个问题,所以这就是你开始头疼的地方,试图让这个东西可靠,当你发现另一个边缘情况时,你就会玩打地鼠游戏。我理解你如何处理 LLM 在涉及人类时出错的问题。所以假设你,无论如何。LLM 没有捕捉到一些口语表达。所以不是说“很遗憾”,而是另一种只有在一个小范围内才有人知道的口语表达,然后它出错了。
Derek Harris:所以我可以理解你如何处理这个问题,你只需要问,这是否正确?然后用户会说,不,这是不正确的。然后实际上可能会说得更清楚一些。我明白你如何构建这个。假设你正在尝试订票,所以你获取用户信息,然后你预订座位,然后你进行信用卡交易,信用卡交易被拒绝了,所以你必须以某种方式取消预订座位。
所以你实际上是在尝试执行一组有状态的步骤。LLM 正在尝试执行一组有状态的步骤,这些步骤需要我们进行交易,如果你中途停止,还有更多的事情要做。如果它在这期间不准确,就像,如果它在这期间以某种方式产生了幻觉,你最终会遇到状态不一致和部分交易的问题。就像,如果你要构建一个正式的系统,你要保持一致的状态,而这种情况正在发生,这是非常非常困难的。再说一次,我理解用户的问题。我只是不理解机器的问题。你如何构建一个这样的系统?
Alan Nichol:你不让另一个系统去做。所以他只是说,这是用户告诉我的,对吧?就像我想订票,我需要用户提供这三条信息。所以你有一些流程,或其他什么,但你有一些步骤要为用户执行这些步骤。每当你到达一个说“我需要用户提供信息”的步骤时,你就会去问他们。但在那之间,就像当你在做事情的时候,你只是在执行操作,对吧?然后你到达一些决策点,你有类似 if else 的东西,然后你去执行之类的。所以你只会停下来向用户寻求输入。但在这些步骤之间,它只是代码,它是确定性的,只是被写下来。
有趣的是,有一种非常流行的观点认为 LLM 应该对此进行推理,应该这样做,它应该是动态的,它应该是有多少用例实际上是这样的,即每次用户与之交互时,该逻辑都是动态的,它都可能发生变化?你的观点是,任何多步骤和事务性的东西都由传统系统处理,然后你只需将其公开为执行此操作,它要么执行,要么不执行,但你永远不会遇到一些奇怪的不一致状态。对。然后当你到达一个你返回自然语言的点时,你会说,我们正在进行对话,我们要问你一些事情,然后你回到自然语言世界,对吧?
所以你从系统中获取输出,这可能是一些结构化数据,你使用一些魔法以人类友好的方式很好地格式化它,以便人们可以理解和推理它。让我反驳一下。当我和一个人交谈以订票时,他们会预订一个座位,然后继续交谈,这样座位就不会消失。在这种情况下,LLM 将无法在你进行对话时预订座位。
Derek Harris:我想说的有点不同,那就是,你必须预订座位,但如果交易没有完成,你必须以某种方式取消预订座位,所以你正在做这些有状态的事情。这正在改变你以后可能必须撤消的系统。然后 LLM 是否必须弄清楚如何做到这一点,如果它没有正确地撤消它,那么你最终会得到一个没有人填补的预订座位。
Alan Nichol:如果 LLM 涉及首先预订座位,获取更多信息,也许像进行付款交易,那么让 LLM 做一些像订票这样的事情是一个非常棘手的问题。如果失败,那么取消预订座位或更改座位,或者像所有有状态的事情似乎都很难从 LLM 中完成。我同意。如果你知道逻辑,你知道当你必须取消预订座位时该做什么,通过 LLM 来传递这些信息,然后希望它能按照这些说明执行,而不是说,你知道,我有一个系统可以做到这一点,并且可以处理所有的边缘情况,并且可以在需要时撤消它,这是从根本上来说非常愚蠢的。但是你也要在对话中保持状态。
至少在 Rasa 内部,我喜欢对话本身也保持状态,它维护了一些关于你知道的,这里有一些我知道的关于用户的事情。这里有一些我到目前为止从 API 中检索到的东西,我听到我们一直在谈论的事情,并且可能会回过头来参考它,诸如此类的事情。所以如果你有一些待处理的事情,需要在对话结束时进行清理,或者如果对话被打断,你就有了那个状态,这就是你的整理和总结类型的操作。所以基本上每次对话都是一个大事务,要么它一直进行到底,如果它没有进行到底,你必须有能力回滚和撤消。
Derek Harris:我明白了。所以这是一种非常直接的工具,你可以将事务与对话联系起来。好处是你可以在你可能做的不同任务中进行任意组合,你可能会在完成和预订之前检查一下,你可能会去询问回程航班的可用性之类的,或者询问是否有升级可用,对吧?
Alan Nichol:可能会有各种各样的小插曲和事情发生。这就是 LLM 的魔力发挥作用的地方,处理所有你可以偏离的复杂性。而且你不必再映射出所有对话可能进行的方式,这很好。你可以写下并可靠地执行业务逻辑片段。
CALM:帮助建立语言模型使用信心
Derek Harris:在我们结束之前,我很想让你谈谈那些已经采用 LLMs 并将其投入使用的公司的真实案例,以及它是如何运作的,因为我觉得让 LLMs 在生产中用于有用的系统仍然是一个非常难以想象的事情。提供一些关于它在实际客户的生产中是如何完成的见解会更棒。
Alan Nichol:是的,当然。我一直在谈论的这个系统,将严格的逻辑与 LLM 相结合用于所有的理解部分。我们称之为CALM,即具有语言模型的对话式 AI(Conversational AI with Language Models)。一年前,我在纽约做了一个关于它的演讲。我们组织了一次聚会,有一位来自美国三大银行之一的医学博士参加了。就像他说的那样,他说,我绝对 100% 确信我们不允许使用 LLM。他说,现在我看到了这个未来的系统,唯一的限制是我能获得多少 GPU。所以我们在 12 个月前发布了 Calm 系统的第一个正式 GA 版本。
去年 12 月。我们现在有两位数的大型企业在他们的客户服务、语音和聊天交互中运行它。我不得不说,我必须对整体势头以及 C 级管理层对做这些事情的支持给予很多肯定,对吧?就像人们普遍相信事情可以做得更好。如果我们只是在真空中发明了这个东西,它不可能以这种速度发展。通常的做法是,让我们从只使用模板化回复开始。我们将使用 LLM 进行所有的理解工作,但我们知道我们不会向用户发送任何生成的文本。我们可以完全自信地说,我们没有产生幻觉的风险。我们没有提示注入和劫持等风险。我们不会因为错误的原因登上《华尔街日报》的头版。然后,随着你建立起这种信心,你就会开始稍微开放一些。比如你可能会引入一些 RAG,你可能会引入一些改述,一些释义之类的。所有这些东西都增加了很多价值,对吧?这意味着你可以处理更多的长尾问题。这意味着你可以定制和个性化事物,听起来更自然。所以这是一个建立信心的过程,它感觉上非常熟悉,感觉与熟悉的旧世界并不遥远。
然后你就可以逐渐开放它,而不是一开始就让 GPT-4 代表我们说话。老实说,’护栏’这个词,它真的让我很生气。人们所说的,人们描述为 LLM 护栏的东西,根本不是那样的。我们有一些输出过滤,检查输出中的脏话,我认为你低估了这个问题。或者当人们提供一些可观察性的东西,你可以看到正在发生的一切,然后承诺是,现在可以发布强大的生成式 AI。我说,你可以让一个蹒跚学步的孩子接听你的客户服务热线,然后听所有的电话。这并不能使它变得强大。这只是意味着你会知道你的系统有多糟糕,对吧?实际上是提供一些你可以调试的东西。你可以编写端到端测试,从而建立信心。
我可能会鼓励人们更批判性地思考,特别是当你正在处理一个 LLM 并且你正在构建一个更大的应用程序时,你正在构建一个基础设施,而 LLMs 是其中的一部分。思考哪些部分是真正动态的,那些真正动态、模糊和不可预测的部分你可以用 LLM 来处理它们。而其他一切,只使用有效可控的技术。
Derek Harris:太棒了。
原播客:From NLP to LLMs: The Quest for a Reliable Chatbot
https://a16z.com/podcast/from-nlp-to-llms-the-quest-for-a-reliable-chatbot/
编译:Richard
请注意,本文编译自文末载明的原始链接,不代表Z Potentials立场。如果您对本文有任何想法或见解,欢迎在评论区留言互动探讨。
Z Potentials将继续提供更多关于人工智能、机器人、全球化等领域的优质内容。我们诚邀对未来充满憧憬的您加入我们的社群,与我们共同分享、学习、成长。
(文:Z Potentials)