We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode From NLP to LLMs: The Quest for a Reliable Chatbot

From NLP to LLMs: The Quest for a Reliable Chatbot

2025/1/10
logo of podcast AI + a16z

AI + a16z

AI Deep Dive AI Insights AI Chapters Transcript
People
A
Alan Nichol
M
Martin Casado
总合伙人,专注于人工智能投资和推动行业发展。
Topics
Martin Casado: 我认为构建可靠的聊天机器人应该采取循序渐进的方式,从使用模板回复开始,逐步过渡到使用大型语言模型生成文本。这样可以降低风险,例如避免模型产生幻觉或被恶意利用。 我们应该从小处着手,避免一开始就完全依赖大型语言模型,例如GPT-4。应该先构建一个熟悉的、可靠的系统,然后再逐步扩展其功能。 Alan Nichol: 我最初的创业想法是构建一个搜索引擎,后来发展到将自然语言转化为SQL查询。在这个过程中,我发现营销团队的语言表达方式与正式的SQL语句差异很大,这促使我开始研究多轮对话系统。 我们创建了Rasa,一个开源的自然语言理解库。最初我们使用简单的Word2Vec模型,其效果出奇的好。但基于分类的自然语言理解方法难以处理自然语言的歧义性和隐含意义,因此我们开始探索不依赖于分类问题的对话引擎。 大型语言模型的出现为解决自然语言处理与严格规则难以结合的问题提供了新的思路。我们现在的方法是将复杂的对话处理交给大型语言模型,而将任务逻辑用确定性引擎处理,从而提高系统的效率和可靠性。 完全依赖大型语言模型处理所有逻辑会带来难以调试和维护的问题。在涉及状态变化和事务处理的场景中,应该使用传统的确定性系统来处理,而大型语言模型只负责处理自然语言交互。 在生产环境中部署大型语言模型需要循序渐进,从使用模板回复开始,逐步增加LLM生成文本的比例。简单的输出过滤并不能解决大型语言模型的可靠性问题,需要更全面的方法来确保系统的可靠性。构建大型应用时,应区分哪些部分需要动态处理,哪些部分可以使用确定性方法处理,并根据实际情况选择合适的技术。

Deep Dive

Key Insights

Why is it important to start with templated responses when integrating LLMs into chatbots?

Starting with templated responses ensures that no generated text is sent to users, minimizing risks like hallucinations or prompt injections. This approach builds confidence in the system before gradually introducing more dynamic elements.

What is the role of Word2Vec in the evolution of chatbots?

Word2Vec provided a numerical representation of words, enabling mathematical operations like similarity comparisons. It revolutionized NLP by allowing systems to handle natural language more effectively, serving as a foundational tool for early chatbot development.

How does Rasa approach the integration of LLMs with traditional business logic?

Rasa combines the natural language understanding of LLMs with deterministic business logic. The LLM handles the complexity of conversations, while a simple, rule-based system manages tasks and state, ensuring reliability and scalability.

What are the challenges of using LLMs for multi-step, transactional tasks like booking a ticket?

LLMs struggle with maintaining consistent state in transactional tasks, such as reserving and unreserving seats. These tasks require deterministic systems to handle edge cases and ensure state consistency, which LLMs alone cannot reliably manage.

Why is the 'prompt and pray' approach problematic for integrating LLMs into enterprise systems?

The 'prompt and pray' approach lacks control over LLM outputs and requires trial and error to adjust prompts. It is inefficient and unreliable for enterprise systems, where predictable and accurate responses are critical.

What is Retrieval-Augmented Generation (RAG) and how does it improve LLM integration?

RAG dynamically retrieves relevant information from external sources to augment LLM prompts, improving accuracy and relevance. It addresses the limitations of static prompts by incorporating up-to-date and context-specific data.

How does Rasa ensure LLMs do not hallucinate or produce incorrect outputs in regulated industries?

Rasa uses templated responses by default, eliminating opportunities for LLMs to generate incorrect outputs. This approach ensures compliance and reliability, especially in regulated industries like banking.

What is the significance of maintaining state in conversational AI systems?

Maintaining state allows conversational AI systems to track user interactions, retrieve relevant information, and handle multi-turn conversations effectively. It ensures continuity and context-awareness in dialogues.

How do enterprises typically adopt LLMs for customer service?

Enterprises start with LLMs for understanding user inputs while using templated responses to minimize risks. As confidence grows, they introduce dynamic elements like paraphrasing and RAG to enhance personalization and naturalness.

What is the difference between dynamic and deterministic systems in LLM integration?

Dynamic systems, like LLMs, handle unpredictable and fuzzy aspects of conversations, while deterministic systems manage structured, rule-based tasks. Combining both ensures flexibility for natural language interactions and reliability for business logic execution.

Chapters
Alan Nichol's background in physics and machine learning led him to create a search engine and then explore natural language processing (NLP) for more complex tasks. He discusses early challenges in mapping natural language to formal languages like SQL and the limitations of early NLP approaches like using a separate model for each database schema.
  • Alan Nichol's background in physics and machine learning.
  • Early challenges in mapping natural language to formal languages.
  • Limitations of early NLP approaches.

Shownotes Transcript

通常的入门方法是,让我们从只使用模板响应的场景开始。我们将使用LLM来处理所有理解方面的工作,但我们知道不会向用户发送任何生成的文本。我们可以充满信心地说,我们不会面临幻觉风险,也不会面临提示注入和劫持之类的风险。我们不会因为错误的原因而登上《华尔街日报》的头版。然后,随着你逐渐建立信心,你就可以开始更多地开放一些。

所以这是一种建立信心的练习,它让人感觉非常熟悉,感觉不像离熟悉的旧世界有百万英里远。然后能够将其打开,而不是仅仅以GPT-4代表我们发言作为起点。

欢迎回到A16Z AI播客,新年快乐。我是德里克·哈里斯,本周我们又有一期节目深入探讨AI代理、客户支持,特别是聊天机器人和其他用于与本质上是业务数据的系统交互的自然语言界面的主题。

本期节目邀请了A16Z的普通合伙人马丁·卡萨多和Rasa的联合创始人兼首席技术官艾伦·尼科尔,他从事自然语言处理领域已有十多年,并探索了将NLP应用于业务问题的众多角度。他们回顾了失败方法的历史,以及LLM的承诺和风险。然后,艾伦解释了为什么他解决这个难题的方法包括将LLM的自然语言理解与更传统的执行用户请求的技术相结合。

目标是循序渐进地建立信心,而不是急于进入LLM做出业务决策并即时创建自身业务逻辑的世界。在这些免责声明之后,您可以听到他们的完整讨论。

提醒一下,请注意,此处的內容仅供参考,不应被视为法律、商业、税务或投资建议,也不应被用于评估任何投资或证券,并且并非针对A16Z任何基金的任何投资者或潜在投资者。更多详情,请访问a16z.com/disclosures。

我的背景最初是物理学。我的博士学位是应用于物理学的机器学习。我认为物理学到ML是一种比较常见的路径。但无论如何,我对它越来越感兴趣,然后开始研究第一个创业想法,那就是搜索引擎。所以是从ML到搜索。然后从搜索中,我开始对如何做到不仅仅是回答问题感兴趣?如何做到不仅仅是搜索某些东西?因为实际上,我当时正在研究的第一个……

产品,这是一种创业想法,就像英语到SQL。当时,我们必须为每个模式训练一个模型。现在你可以直接将模式放入上下文中,将其放入提示中,它就会弄清楚。所以我们必须为特定的模式训练一个模型。我们有这个产品,我们把它卖给了营销团队。因此他们可以说,我现在在Facebook广告上花了多少钱?然后,我们将它转换成SQL,然后,你知道,显示图表或表格之类的东西。

你可以问这些非常复杂的问题。你可以说,“过去三周,我所有按国家/地区的广告系列的投资回报率是多少?”当然,你很快就会意识到,营销团队不会那样说话。能够提出这样问题的人,他们会自己编写SQL,对吧?所以人们只会和这个聊天机器人对话。它在Slack上。它是第一个Slack聊天机器人之一。人们只会和它对话,他们只会说,“哦,Facebook怎么样?”所以你必须进入这种有趣的多次提问。

我知道我们还在回顾你的背景,但我实际上想在这里快速深入一下。我一直想知道的一件事是,形式语言之所以是形式化的,是因为它们是明确的,你需要精确。所以我一直想知道,无代码和低代码的自然语言实际上是不是一回事?例如,如果你试图做一些需要形式语言的事情,那么随着时间的推移,你是否必须最终收敛到一种形式语言,例如,

在这个无代码版本中,你给我方框和箭头是很棒的,但在某个时间点,我需要创建子程序,我需要思考,基本上我们称之为延迟递归。在自然语言中,我必须使用一个不含糊的子集。例如,让我给你举个句子。狗把球带给了我,我踢了它。

嗯,从语义上讲,也许我踢了球,也许我踢了狗,谁知道呢?而且,你知道,我觉得我们甚至试图将自然语言映射到形式语言,这对我来说很奇怪。你认为这值得去做吗?你认为这里真的有一个令人满意的结果吗?

我认为这是一个非常有效的问题。很长一段时间以来,我一直对无代码对话式AI持悲观态度。让许多人感到不满的是,与我在这个领域仰慕已久的人交谈,就像你发布其中一个东西,然后一个客户进来,说,好吧,这里我们需要将其与整数进行比较。你会说,哦,好吧。就像,哦,这里我们需要检查一个字符串。你会说,哦,好吧。然后正如你所说,在你意识到之前,你已经在你的UI中构建了一个通用的编程语言,你挠着头,想知道,

哪里出错了,对吧?我喜欢我们现在解决问题的方式在于我们根本不做那样的事情。我们不说它是无代码的。我们为你提供一个很好的UI来指定你的业务逻辑。如果你需要做其他事情,你只需要跳出来,你知道,你突破界限,并且不会因为让你访问代码以便你可以去子类化某些东西或在某个地方编写一些代码而道歉。好吧,

我喜欢它。好的,我们稍后会回到这一点,但我们会回到你的背景。所以你试图将自然语言转换为SQL,为每个模式创建一个模型。是的。我在2016年写了一篇论文,其中中间有一段话,我谈到了深度学习和严格规则是如何不和谐的伙伴,以及你如何将一些额外的逻辑注入到基于深度学习的系统中等等。我有点想知道……

你知道,如果我回到2016年的我,说,哦,实际上,解决这个问题的方法是训练一个非常大的RNN,然后用英语解释它,然后开始从那里采样标记。无论如何,我们正在研究这个问题。我只是说对话是一个非常有趣的问题。是的。对。实际上,进行多次对话是一个非常有趣的问题。而且

具有讽刺意味的是,我发现关于该主题的大量研究发生在我攻读博士学位的楼里,在我楼下。当时我根本不知道那些人的存在,但我后来发现了那篇文献。这是第一次聊天机器人热潮,对吧?2016年左右的聊天机器人热潮,尽管技术缺乏进展,但仍然很热,这与我们现在看到的不同,现在显然是由技术驱动的。Messenger作为一个平台开放了。这非常令人兴奋。人们正在为它构建应用程序。

我们只是环顾四周,然后说,看,我们已经使用了所有可用于开发人员构建聊天机器人的工具。它们非常糟糕。你可以用一百种方法来构建Hello World,但你没有任何方法可以在构建Hello World之后构建你想要构建的任何东西。所以这就是,你知道,让我们踏上这段旅程的原因。然后我们做的第一件事就是开源了一个NLP实时

专门用于聊天机器人的库。用于对人们所说的话进行分类,然后进行一些命名实体识别,提取一些实体等等。我的意思是,第一个版本的算法非常简单,对吧?那是Word2Vec和Glove的时代。所以它的工作方式是,它会获取任何句子,它会将词向量加起来,我们只是在这个表示上训练了一个分类器,对吧?我喜欢把它想象成,你知道,我曾经遇到过一位非常著名的鼓手,他说,我最喜欢的鼓点是……

他说,我用这个鼓点赚了所有的钱。你们所有人认为你们演奏这些花哨的东西很聪明。我演奏这个节拍赚了所有的钱。你们都认为自己可以做到,但他们仍然会打电话给我,并支付给我巨额报酬。这就是我对在Word2Vec上训练分类器的看法。它是一匹如此勤奋的马,……

让很多人走得这么远,并且被广泛采用。它实际上是一个很难被击败的基准,对吧?- 也许只是为了听众,也许是对Word2Vec的更多描述。- 我想对许多人来说,至少对我来说,我认为对NL中的一大群人来说,这是我们第一次真正有一种很好的方法来说,好吧,我们想做NLP。我们想让计算机处理自然语言,但计算机实际上并没有,它们不知道如何表示自然语言。你没有办法像

那样处理它,用它做数学运算,对它进行排序,比较它,看看它与其他事物有什么相似之处。然后Word2Vec是一种我们说,好吧,实际上,我们将为你提供一个数值表示,而不是每个单词,

我的意思是,单词到底是什么?但就像一大群单词。现在你可以做数学运算了,对吧?让每个人都感到震惊的经典例子是,你可以取king的表示,减去man,加上woman,你就会得到queen的表示。这非常具有革命性,对吧?所以我们想,哦,我们有办法用单词做数学运算。WordEvec是什么时候出现的?我认为论文大概是2013年。是的,没错。也许吧。然后是Glove,也许是2014年,诸如此类。

所以我对历史的看法是,许多聊天机器人方面的事情是在Word2Vec之后出现的。所以这感觉适度地由技术驱动。

我会这么说,但我的意思是,对我来说,Word2Vec是一种灵感来源。但如果你考虑一下大约2012年构建聊天机器人的范例,这让我非常恼火,以至于我们开始研究这个问题,你知道,用户发送一条消息,我们将将其分类到这些预定义类别中的一个。他们要么说你好,要么说再见,要么索要收据,要么进行退款,或者其他什么。你知道,你有你的预定义类别,你只需要对事物进行分类。这就是

这就是理解的部分,对吧?只是选择正确的类别。WordSafec与没有……的东西相比,真的是一个很大的进步吗?这取决于你拥有多少统计数据,我猜。但这对我以及许多人来说肯定是一种灵感。我们是否到达了你开始使用Rasa的历史阶段?是的,是的。所以当我们打开时,当我们创建那个NLP平台时,

NLU库。我们开源了那个东西。它被称为Rasa。然后我们就酷了,对吧?因为当时每个人都在使用这些用于自然语言理解的API。微软有一个,谷歌有一个。处于这种情况非常草率,在这种情况下,

与你的应用程序的每一次交互都必须经过第三方才能知道它是什么。如果每一次点击按钮都必须经过提供商才能知道有人在你的应用程序中点击了哪个按钮会怎样?对于一家初创公司来说,这是一种非常危险的境地。好的,这是一个这个东西的开源即插即用替代品。而且,你知道,这很酷。人们喜欢它。然后突然之间,聊天机器人世界中的每个开发人员都知道

知道Rasa是什么,认为我们很酷,认为我们是合法的,并想使用该工具。这开始了一家成为Rasa的公司之旅。我认为对传统上使用Rasa的程序进行NLU的粗略草图将非常有用。然后我们将讨论LLM如何改变了这一点,以及现在这如何改变了范例。

所以一切的原罪都是我刚才谈到的这个分类问题,这个分类问题。所以范例是你将用户所说的话分类到这些桶中的一个。然后你添加一堆if语句。这就是你的聊天机器人。就是这样。这听起来像编程。确实如此。我会告诉你,大多数广泛使用的企业级对话式AI平台

你仔细观察一下,这就是正在发生的事情,对吧?就像有一些东西正在对用户消息进行分类,然后是一堆规则来决定该做什么,你知道,这取决于你在对话中的位置以及到目前为止发生了什么。所以多年来,我一直坚持这个方向,好吧,接受它作为范例,然后尝试构建一个非常聪明的对话系统,来处理这种方法的所有

局限性。我的意思是,花了很多时间,写了很多论文,做了一堆关于如何构建上下文引擎的工作,这种引擎可以重新解释这种误解。一个经典的例子,也许可以使这个更具体,就是为什么仅仅将所有内容表示为分类问题是如此贫乏,例如,我们一位客户的例子,这是一家航空公司,他们问用户,你将乘坐经济舱旅行吗?

这个人说,悲伤地。对任何阅读的人来说,这都很清楚,对吧?这是一种含义,对吧?我们当然知道这意味着是的。但这并不是说悲伤这个词通常意味着是的,对吧?所以如果你有这种

这种非常幼稚的理解语言的方式,你只是查看消息并对其进行分类。你可以做的事情是有限的。所以我们在处理这种歧义方面构建了很多机制,例如重新解释事物等等。当然,在LLM的世界中,这感觉非常神秘,在那里你可以打开任何这些工具,你知道,这些工具非常容易获得和使用。你只是和他们进行非常流畅、自然的对话,对吧?显然没有像……

背景中进行少量分类,一个小的分类器。正在发生的事情非常不同,对吧?所以当然,所有技术都必须随着它而发展。只是圣诞节未来的幽灵,但它们也引入了一系列全新的问题。所以在对话的弧线中,我们就是这样。我们将从旧问题转向新问题。

不,绝对的。我还记得构建所有这些东西,这些聪明的对话管理器和聪明的上下文内容。然后它让构建聊天机器人的那个人做很多聪明的事情,收集数据并进行评估等等。我还记得我一直都在脑后想着,我当时想,人们真正考虑这个问题的方式,人们真正想要的是一个报价,就像一个完美的理解引擎。然后他们想要一个非常简单的引擎来管理他们的业务逻辑。

所以他们实际上希望对话部分很愚蠢,而理解部分无限聪明。我认为这更接近我们今天所拥有的东西,你只需要……所以我们从错误的一面解决了这个问题,但我猜你最终会发现这一点。好的,这就是大约2019年的世界状态?诸如此类?

是的,诸如此类。2020年,我们开始构建第一个真正不依赖于此分类问题的对话引擎。2020年,我们发表了那篇论文,并发布了相应的特性等等。所以某种端到端的工作。

我认为Rasa和你们所做的大部分工作都是这种分类方法。只是提供一些很好的工具来做到这一点。你在LLM之前是否发展了这种方法?2019年,我写了一篇博客文章,说该摆脱意图了。换句话说,该摆脱这种分类范例了。

而且,你知道,它确实引起了人们的共鸣,因为每个人在构建这些东西时都会感觉到,你实际上是在构建纸牌屋,纸牌就是意图。就像if语句所依赖的东西一样。当你与团队一起工作时,这件东西根本无法扩展,你会说,好吧,这条消息到底适合哪里等等。所以,是的。所以我们,我们开始以有意义的方式打破这种范例,大约在2020年左右,然后我

我认为现在每个人都同意了。没有人再想构建基于意图的聊天机器人了,对吧?显然,我认为从Chat GPT来看,起点是聊天。

也许值得讨论一下这对现有聊天用户的影响,因为如何将其改造到现有的程序、问题或公司中并不明显,对吧?所以就像,一点也不。Open AI正在做这个很酷的事情,你可以与这个LLM聊天,但我需要一个客户服务代理。我该如何协调这个?所以也许讨论一下,你知道,这些东西是如何实现的,然后意识到它们并不是。

它们会很棒,但可能不太容易使用。是的,我的意思是,从供应商的角度来看,它极大地改变了目标。作为构建平台的人,每个人都会说,我们的聊天机器人什么时候会像那个一样?这也使这成为每个公司的高管层话题,这显然对我们有利,对我们有帮助。也会产生很多噪音等等。但是,你知道,你思考的方式,正如你所说,这确实与我在2016年提出的观点相同,好吧,你如何结合……

这种模糊系统与非模糊的东西。你构建了一些有用并能做事情的东西,但仍然利用了从这些模型中获得的东西。所以我的意思是,我们解决这个问题的方法是,

看,我们现在有六七年经验了。我们知道企业想要构建和关心什么样的对话,以及他们需要为客户自动化哪些事情。所以我们实际上构建了一个庞大的对话模式数据库,各种类型的对话,我们想要能够做到的确切事情。所有细微的方面,所有困难的方面,在旧范例中实际上从未真正实现过。

然后我们只是说,好吧,我们有新一类模型。我们知道系统需要做什么,让我们把所有东西都扔掉,然后重新构建。所以我们直接进入战壕,构建了一个全新的范例,以及一种完全没有分类、没有意图的方法来构建这些东西。是的,对最终的结果非常满意。也许让我们稍微回顾一下,谈谈,好吧,所以LLM出现了。

然后假设X公司,X航空公司想用它预订机票。我觉得对LLM来说有五个悲伤阶段,就像,哦,它似乎很容易集成,但实际上并非如此。所以LLM出现了,我是一家航空公司,我想用这个LLM与客户交谈以预订机票,对吧?我的后端有OpenAI或其他什么东西。所以首先,它必须理解所有内容。

航空公司的系统上下文,对吧?所以什么,所以你如何介绍人们如何考虑集成这些东西。所以我觉得整个行业都学会了如何去做。有很多漫长的道路。我最近最喜欢的推文之一是客户支持推文,客户说,你是一个LLM吗?然后支持,你知道,回复不是。而且,

客户说,你能为我创建一个React组件吗?然后它吐出所有这些。所以显然你需要做一些事情来让这些东西真正发挥作用。所以你能介绍一下如何将LLM整合到这些东西中的认识的演变吗?

是的,有一种天真的方法。这就是,你知道,某些超大规模公司会向你承诺,这就是世界,你只需要一个大型基础模型。然后你只需要公开所有API,它就会很棒。甚至都不明显。我认为听众和许多人一样,如果你没有,你该如何做到这一点?就像我公司独有的东西一样,你甚至怎么知道我的产品来支持?是的,是的,当然。所以我认为第一级,基本方法是,

你列出你拥有的所有API以及它们接受的参数。是的。然后你告诉LLM,用户说了什么。所以你填写提示,然后说,用户说了什么。然后你说,这是一个你可以潜在地使用的API列表。如果看起来你需要来自这些API之一的答案,那么

形成性请求或只是说你需要它,然后有一些代码实际上调用该API,诸如此类。你只是将这些API的原始存在暴露给LLM,然后说,弄清楚,尝试一下,做一个最好的猜测。但是,你必须像命名良好的API一样。我的意思是,我只是,我只是想让它更实用。假设有人想获得产品的支持,对吧?LLM必须

必须了解该产品,对吧?- 是的,最简单的方法是,你在一大块文本中写下大量信息。这就是你的提示。你说,“看,我们是这家公司,这就是我们所做的。这些是我们的政策。始终保持礼貌。”不要提供东西。- 提示中的整个公司知识库。- 正确。但问题是,这会做一个令人难以置信的演示。这是10分钟的工作。

它很好地完成了80% 的工作,而且看起来非常非常令人信服。所以我认为这是问题的一部分。或者挑战的一部分是,我最近看到一张图表,它在某种程度上说明了这一点,使用Gen AI构建东西的体验与使用传统软件构建东西的体验完全相反,你花一周时间构建后端和身份验证系统,你仍然一无所获。然后慢慢地,逐渐地,你开始展示一些你有点兴奋的东西,对吧?在这里,你在前10分钟获得了所有多巴胺

然后从那里开始下坡。- 这实际上是一个精彩的观察。完全正确。为什么不把所有东西都放进去,我会尽量简化一点。我的意思是,这些LLM的工作方式是你继续说些什么,然后它会给你一个答案,对吧?用英语。

对。你输入的东西是一个提示。所以你所说的意思是,好吧,你只需要获取提示,然后附加所有信息。所以这是一个来自用户的客户支持请求,

你是一个LLM,是一个支持机构。代表这家公司。Acme公司。Acme公司是一家硬件公司。它有这些产品。它有这些人,你知道,你只是在其中解释了关于公司的一切。那么仅仅将所有内容都放入提示中的缺点是什么?好吧,我称这种方法为提示和祈祷,因为你真的无法控制输出,对吧?好的。所以对此有一个修改,那就是也许它不是,

整个提示包含所有内容,但它是一个模板,有些内容会根据相关内容或用户询问的内容动态提取。所以它是在你调用LLM之前组装的,你引入了一些相关的上下文,人们称之为RAG,对吧?所以就像检索增强生成。也许让我们快速了解一下RAG。所以你没有将所有内容都放入提示中的原因是因为你做不到。提示中包含的信息太多了,而且一直在变化,这太愚蠢了,对吧?好的。

你无法描述你曾经需要知道的一切,并将其放入提示中。所以相反,我们有传统的系统,这些传统的系统会存储状态,无论是什么。然后希望提示,以某种方式你将这些信息从这些系统中提取出来,然后将其添加到提示中,该提示具有这些内容的模板,对吧?这就是rag。通常,你获取信息,将其放入向量数据库中。对。

在本期AI + a16z节目中,a16z普通合伙人Martin Casado和Rasa联合创始人兼首席执行官Alan Nichol讨论了AI代理和聊天机器人的过去、现在和未来。Alan分享了他利用传统的自然语言处理(NLP)解决这个问题的经历,阐述了大型语言模型(LLM)如何帮助减少自然语言交互中的诸多难题,并解释了将LLM与不灵活的业务逻辑相结合是一种绝佳的组合。了解更多信息:基于上下文的学习的任务型对话GoEX:自主LLM应用程序运行时的视角和设计CALM峰会在X上关注所有人:Alan Nichol Martin Casado在此查看a16z在人工智能方面所做的一切,包括文章、项目和更多播客。</context> <raw_text>0 然后你不知怎么地把它提取出来并填充提示。是的,我认为最容易想象的情况是你有一个大型的常见问题解答集合。当用户提出问题时,你首先查询并提取与用户提问最相似的问题和答案对。然后你将其添加到提示中,并说,顺便说一句,如果答案在这里,那就直接用它。这是一种更有效地引导它的方法。

在许多情况下,创建提示的初始数据查询需要推理,对吧?就像你必须知道要寻找什么一样。假设你正在提问,例如我必须知道哪些PDF文件是相关的,对吧?通常,RAG只是基本的相似性搜索,例如余弦相似性。因此,它不像LLM那样具有推理能力。所以它一直感觉是一种非常不精确的方法。

对我来说是一种方法。公平吗?哦,完全公平。我的意思是,以经典的“你好,世界”RAG应用程序为例,提出一个问题,得到一个答案,然后说,“告诉我更多”。你会得不到好的答案,因为它只会查询“告诉我更多”,然后它会想出任何旧的垃圾。所以,我的意思是,是的,这是一个“你好,世界”,但它并不是最终极的解决方案,对吧?但是,我的意思是,这种方法有几个问题。我的意思是,其中一些问题更根本,对吧?因为,我的意思是,你可以解决很多这些问题。你对输出的内容控制非常有限,对吧?是的。

是的。因此,它会说一些似是而非的话,但不一定是你想让它说的。当你更改提示时,唯一知道更改将产生什么影响的方法是运行它并查看结果。这也是一个令人沮丧的反复试验过程,这就是为什么我称之为“提示祈祷”,因为你只是在把东西扔到墙上。因为这些模型,特别是指令微调模型(通常是你倾向于使用的模型),

这些模型是在人类反馈的基础上进行训练的,它们非常渴望取悦你,因为在训练期间,它们会因为取悦你而获得奖励。所以它们会提供一些它们无法做到的事情,因为

因为它们认为这会让你高兴,对吧?所以这是经典的案例。你构建了你的聊天机器人的第一个版本,他们会说,“哦,你还想让我做这个吗?”或者“你想让我比较一些产品吗?”或者“你想让我提供给你吗?”就像他们只是提供一些他们认为会让你高兴的东西。这没有任何依据,对吧?好吧。所以我们现在处于一个拥有LLM的阶段。你不能把所有内容都放在提示中。所以你会做这个RAG的事情。所以它在向量数据库或你正在进行检索的任何地方,但这,你知道,是不够的。

让我告诉你,作为一个程序员,我定期使用LLM进行编程。我只是为了创建一些愚蠢的应用程序。根据我的经验,将这些映射到形式语言非常非常困难,因为你无法预测它们会说什么。即使你试图告诉它……我在一个愚蠢的视频游戏中工作。LLM

返回JSON中的对象。而我的问题只是为了让它正确获取JSON,这实际上就像JSON的停止标记和格式一样。我的意思是,我必须一直改进它。即使那样,每10次中就有一次,它就是决定不做,或者决定添加一些东西。对。那么,你怎么才能考虑将这些你不知道它们会说什么的LLM与正式程序结合起来呢?这甚至是一件可以做到的事情吗?当然可以。但是,我的意思是,

我认为我们现在真的正在深入研究这个问题。这就是如何构建一个融合这两个世界系统的难题,对吧?没错。我不知道我是否有通用的解决方案,但我可以从构建对话式AI的角度来谈谈这个问题。太好了。特别是对于那些正在构建用于自动化某些事情(例如客户支持)的语音或聊天机器人的企业。让我先指定问题领域,然后再说你之前要说的内容,那就是,

所以我们一直在讨论使用LLM进行实际对话。你显然会,A,想要限制它所说的内容,然后,B,如果它要执行任何操作(例如预订机票),它必须与正式系统交互,对吧?所以有人使用LLM

并使其成为有效的对话式AI的挑战。因此,它既能以有意义的方式说话,又能影响系统,这需要你解决这个问题:如何将其映射到,好吧,第一个问题,我们甚至还没有讨论过,那就是,如何确保你不会对客户说蠢话?让我们先解决这个问题。你怎么确保它不会对客户说蠢话

给客户。第二个问题是,你怎么才能真正地将其映射到一个正式系统?所以我们可以说,我的意思是,我们与受监管的行业合作很多,而且,你知道,我们有很多大型银行作为客户等等。我们总是告诉他们,“你可以把手放在心上,并告诉你的合规团队,Rasa永远不会产生幻觉。”

然后人们会说,“哇,你们有什么秘密武器吗?”所以,默认情况下,你只发送模板和答案。因此,没有机会生成响应。但当然,你可以引入它。我认为我对所有这些事情的看法是,LLM释义就像一点秘密武器,一点魔法粉末,可以让事情变得更好一些。所以我想我对这些事情的看法是,LLM是令人难以置信的强大组件,用于

将自由格式的自然语言转换为结构化数据,反之亦然,因此这有点进入正式系统的要点。好吧,如果你要代表用户做一些事情,对吧?就像你只是获取一些数据一样,你只需调用一个API并获取他们的我知道他们的最新订单或类似的东西,这就像是一种单轮对话。大多数事情并非如此,大多数事情都是这样的:存在某种状态,存在某种多轮交互,所以对我们来说

这只是将用户所说的话翻译成在这种情况下这意味着什么。对于推进对话、推进任务、进入下一步来说,这意味着什么,诸如此类的事情。所以回到悲伤的例子,当你问用户,“你乘坐经济舱旅行吗?”而这个人说,“悲伤地”,LLM足够聪明地理解这一点,对吧?所以我们表示它的方式是,我们

我们输出的是,“嘿,你正在将此变量设置为true”。因此,经济舱变量设置为true。因此,总的来说,我们的方法是,我们把对话中发生的事情翻译成一小组动词,我们称之为命令,它们只是说,这是用户想要推进对话的方式。这甚至并不意味着这就是将会发生的事情,但这是用户想要推进对话的方式。这就是他们试图实现的目标。这就是他们所说的话在这种情况下意味着什么,以及我们将如何继续前进。然后你只需要一个非常简单的确定性引擎,它会说,“好吧,我知道步骤。我知道如果他们想这样做,我需要从他们那里获得这些信息。我需要从API那里获得这些信息。我有这些决策点。我将问他们几个问题,然后我们将到达那里。”我们这种方法的好处是,你会说,“看,

围绕进行对话、进行流畅的对话以及处理诸如离题、人们自我纠正、提出后续问题、改变主意以及从一件事切换到另一件事等所有复杂性,都由LLM处理。而任务逻辑只是简单地确定性地完成。你把它写下来,对吧?从开发角度来看,这只是一个非常非常高效的系统,而且,呃,

从持续维护的角度来看也是如此,对吧?因为另一种方法是,你只是让MLM做所有事情并弄清楚。

而关于这种方法最令人恼火的事情是回到“提示祈祷”这件事。当它没有按照你想要的方式去做时,你无法系统地影响它,让它按照你想要的方式去做,对吧?所以你有点,我知道我发现了一个错误。我没有预先确定的一套步骤可以遵循来修复它,对吧?所以这就是你开始抓狂的时候,试图让这个东西变得可靠,当你发现另一个极端情况时,你发现另一个极端情况时,玩打地鼠游戏。是的。

你有点在浪费时间。我理解你如何处理LLM出错的情况,这种情况涉及到人类。所以假设,无论如何,LLM没有理解某种口语。所以不是说,“悲伤地”,

你知道,还有另一种口语,没有人知道,就像在一个小区域一样,它弄错了。是的。所以我理解你如何处理这个问题,那就是你只需问,“这是对的吗?”然后用户会说,“不,不对。”然后实际上可能会说得更清楚一些或其他什么。我知道你可以如何构建这样的系统。是的。

假设你正在尝试预订机票。所以你获得了用户信息,然后你预留了座位,然后你进行了信用卡交易,而信用卡交易被拒绝了。所以你必须以某种方式取消预留座位。所以你实际上是在尝试执行一系列有状态的步骤。LLM正在尝试执行一系列需要事务的有状态步骤。如果你中途停止,还有更多事情要做。在增值税期间,它是不准确的。

如果它在增值税期间以某种方式产生幻觉,你最终会遇到状态不一致和部分事务的问题。如果发生这种情况,构建一个试图拥有持续状态的正式系统非常非常困难。再说一次,我理解用户方面的问题。我只是不明白机器方面的问题。你如何用这种方式构建系统?你不让另一个系统来做。

所以你只需要说,“这是用户告诉我的。好的,我想预订一张机票。我需要从用户那里获得这三条信息。”所以你有一些——我们称之为流程,无论如何。但是你有一些步骤要为用户执行。每当你到达一个步骤说,“我需要用户的输入信息”时,你就会去问他们。但在两者之间,当你正在做事情时,你只是在执行操作。然后你到达某个决策点,你有一些if-else语句。然后你去执行所有这些东西。所以你只暂停一下来询问用户的输入。

但在这些步骤之间,它只是代码。它是确定性的,对吧?它只是写下来的。这很有趣,因为有一种非常流行的想法,认为LLM应该对此进行推理,并且应该这样做。它应该是动态的。有多少用例真正需要在每次用户与之交互时运行时逻辑都是动态变化的?你的观点是……

任何多步骤和事务性的内容都由传统系统处理。然后你只需将其公开为“执行此操作”。它要么执行,要么不执行,但你永远不会让它处于某种奇怪的不一致状态。对。然后当你到达返回自然语言的点时,你会说,“我们正在

进行对话,我们将向你索取一些东西。”然后你回到自然语言世界,对吧?所以,你获取系统的输出,这可能是某些结构化数据,你使用一些LLM魔法以用户友好的方式对其进行格式化,以便人们可以理解和推理它。让我继续讨论这个问题。当我与人类交谈以预订机票时,他们会预留座位,然后继续交谈,这样它就不会消失。

在这种情况下,LLM将无法在你进行对话时预留座位,对吧?好吧,我的意思是,现在你正在讨论口语对话和书面对话的区别。不,不,不。你只是等到它做出回应。不,不,不。我想用不同的方式说一些东西,那就是,听着,你必须预留座位,但如果交易失败,你必须以某种方式取消预留座位,对吧?所以你正在做这个有状态的东西。

这正在改变你以后可能需要撤销的系统。然后将是LLM必须弄清楚如何做到这一点,对吧?如果它没有正确地撤销它,那么你最终会得到一个没有人填写的预留座位。这是一个

让LLM做一些事情(例如预订机票)非常困难的问题,如果它涉及首先预留座位、获取更多信息,也许像进行付款交易一样。如果失败,则取消预留座位或更改座位,或者所有有状态的东西似乎都很难从LLM中完成。我的意思是,我同意。如果你知道……

你知道那个逻辑,你知道当你必须取消预留座位时该怎么做,并且通过LLM清洗这些信息然后希望它按照这些指令执行,这从根本上来说是非常愚蠢的,而不是说,“我有一个系统可以做到这一点,并且可以处理所有极端情况,如果需要,它会撤销它。”但是你也在对话中维护状态。至少在Rasa中,对话本身也维护状态。我维护一些关于“这里有一些我了解用户的事情”的信息。

这里有一些我迄今为止从API中检索到的东西。以及我们一直在谈论的,他们可能会参考的东西,以及这些类型的事情。因此,如果你有一些待处理的事情需要在对话结束时清理,或者如果对话被打断,你就会有那个状态。这就是你的清理和收尾类型的操作。MARK MANDEL:所以基本上,

每次对话都是一个大型事务,要么它一直进行下去,如果它没有,你必须有能力进行回滚和撤销。是的,是的。清理和撤销等等。我明白了。所以这对你来说是一种非常笨拙的工具,可以将事务绑定到对话。好吧,我的意思是,好的一面是,你可以任意组合你可能执行的不同任务,对吧?所以你可能在之前检查

中间,你知道,在你完成和预订之前,你可能会去询问回程航班的可用性或类似的事情。或者询问是否有升级可用,对吧?就像可能会有各种各样的,比如,小侧边栏和发生的事情。所以,这又是,比如,LLM魔法发挥作用的地方,处理所有你可以偏离的方式的复杂性。你不再需要,比如,绘制出所有对话可能进行的方式,这很好。是的。

但是你知道,你可以把业务逻辑片段写下来并可靠地执行。好吧,在我们结束之前,我希望你能谈谈

也许是公司将LLM投入实际应用并取得成功的真实案例,因为我觉得让LLM投入生产以用于有用的系统仍然是一片蛮荒之地。我认为你可能是世界上在这方面的专家,对它如何在生产中与实际客户一起使用有一些了解会很棒。是的,当然。所以我一直在谈论的系统,这种

将严格的逻辑与LLM结合起来用于所有理解部分的系统。我们称之为COM,即具有语言模型的对话式AI。一年前,我在纽约就此发表了演讲。我们进行了一次聚会,其中有一位来自美国三大银行之一的匿名人士。就像他之前说的那样,他说,“哦,我绝对100%确信我们不允许使用LLM。”然后他说,“现在我已经有了机构系统,唯一的限制是我能获得多少GPU?”

我说,“不错。好吧,我们开始吧。”所以我们在12个月前发布了COM系统的第一个正式GA版本。所以是的,去年12月。我们现在有两位数的大型企业将其用于生产环境中,用于他们的客户服务语音和聊天交互。我必须说,我必须对整体势头和C级管理人员对这些事情的认可表示感谢,对吧?而且像到处都相信

事情可以做得更好,而且如果我们只是在真空中发明了这个东西,它不可能以这种速度发展,是的,但是入口通常是这样的:让我们从只使用模板响应的地方开始,我们将使用LLM来处理所有理解方面的事情,但我们知道我们不会向用户发送任何生成的文本,并且我们有充分的信心,我们不会面临产生幻觉的风险,我们不会面临诸如

提示注入和劫持之类的风险,我们不会因为错误的原因而登上《华尔街日报》的头版,诸如此类的事情,对吧?然后,然后当你建立这种信心后,你就会开始逐渐开放更多,也许你会引入一些RAG,比如你会引入一些改写,一些释义,诸如此类的事情,所有这些事情都会增加很多价值,对吧?这意味着你可以处理更多长尾问题,这意味着你可以定制和个性化内容,听起来更自然,所以这是一种

建立信心的练习,这种感觉非常熟悉,不像与熟悉的旧世界相差百万英里。然后能够逐渐开放它,而不是仅仅

起点是,好吧,GBT4代表我们发言。我的意思是,说实话,这个词“护栏”真的让我很生气。人们所说的话,人们将LLM护栏描述为的东西根本不是那样。就像,“哦,我们有一些输出过滤。检查输出中的脏话。恭喜你。我认为你低估了这个问题。”或者当人们只是

提供一些类似可观察性的东西时,对吧?你可以看到正在发生的一切。然后承诺是,“你现在可以发布强大的生成式AI了。”我说,“听着,你可以把一个蹒跚学步的孩子放在你的客户服务热线,并收听所有电话。这并不能使其变得强大。这只是意味着你会知道你的系统有多糟糕,对吧?所以是的,这实际上是关于提供一些你可以调试的东西,你可以编写端到端测试,你可以建立信心,你可以发布它,并且它会工作。

我可能会鼓励人们更批判性地思考,尤其是在你处理LLM并构建更大的应用程序时。你正在构建一个基础设施,而LLM是其中的一部分。考虑一下哪些部分是真正动态的,哪些部分是真正动态的、模糊的和不可预测的,用LLM处理它们。

其他所有内容,比如,只需使用有效的东西,对吧?问问自己,这对于每个与之交互的用户来说是否会是一段不同的旅程?如果是这样,那就公平合理。如果不行,那么你在做什么?我认为这是一个剖析问题的好方法。太棒了。本期节目到此结束。如果你喜欢它,如果你学到了什么,或者它以其他方式引起了你的共鸣,请在你收听的任何地方对播客进行评分。直到下次,感谢收听。♪