We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode Designing Reliable AI Systems with DSPy (w/ Omar Khattab)

Designing Reliable AI Systems with DSPy (w/ Omar Khattab)

2024/8/9
logo of podcast Neural Search Talks — Zeta Alpha

Neural Search Talks — Zeta Alpha

AI Deep Dive AI Insights AI Chapters Transcript
People
O
Omar Khattab
Topics
Omar Khattab:大型语言模型虽然易于构建令人印象深刻的演示,但在构建可靠、可扩展且可用于生产环境的系统方面仍面临挑战。其单体化特性使其难以在构建系统时进行有效控制,因此需要新的方法来构建可靠且可扩展的系统。为了构建可控的AI系统,需要从提示工程等临时方法转向更系统化、更类似于编程的方法。构建AI系统时,应关注系统架构的设计,而非模型的微调等低层次细节。大型语言模型擅长处理其训练数据中包含的标准化任务,因此可以通过构建模块化系统,将模型用于处理明确定义的子任务来提高可靠性。实际应用中成功的AI系统通常是将多个语言模型调用组合在一起的复合AI系统。DSPy 将提示技术视为元编程函数,通过定义模块的输入输出接口来构建模块化系统。DSPy 将构建模块化AI系统视为一个编译过程,将高层次代码编译成低层次的语言模型调用。DSPy 方法与基于Agent的方法不同,它强调由程序员将任务分解成子任务,并定义评估指标,而非直接给LLM一个高层次目标。DSPy 强调构建可信赖的AI系统,需要基于明确的指标和迭代开发,而非依赖于大型语言模型之间的交互。ColBERT 的模块化设计为 DSPy 的开发提供了启发。DSPy 的优化器已经超越了简单的示例选择,可以进行更复杂的优化,例如利用模型生成示例并进行筛选。MiPro 优化器通过分析程序结构和成功的示例,生成更有效的指令来优化语言模型。开源 DSPy 并接收社区反馈,促进了项目的发展方向,使贡献者能够专注于特定模块的改进。未来几年,模块化系统将在AI领域占据主导地位,编程和机器学习将融合在一起。AGI 的炒作将会消退,取而代之的是对 API(人工可编程智能)的关注,即关注构建能够在特定应用中展现智能的程序。

Deep Dive

Key Insights

Why is it challenging to reliably integrate large language models into production systems?

Large language models are powerful but opaque, making it difficult to control their outputs and ensure they fit into a larger system cohesively. Each module in a compound AI system must interact with others, requiring a lot of dependencies and precise tuning.

How does DSPy help in building modular AI systems?

DSPy provides a framework to build modular systems where each module is responsible for a well-scoped subtask. It introduces programming abstractions and optimization techniques to generate and select effective examples and instructions, making the system more controllable and iteratively improvable.

Why did Omar shift his focus from information retrieval to modular AI systems?

Omar's work on Colbert and multi-hop question answering systems like BearQA and Baileyn highlighted the importance of modularity. He realized that modular designs could better leverage the strengths of language models while addressing their shortcomings, leading to more reliable and scalable systems.

What are the key components of the optimization process in DSPy?

The key components include generating initial examples, filtering and selecting the best ones, and using techniques like rejection sampling and best-of-n to iteratively improve the system. DSPy also borrows from hyperparameter optimization to efficiently explore different configurations and optimize the system's performance.

Why is the separation of concerns important in DSPy?

Separation of concerns in DSPy means that the data (inputs and outputs) and the program (system design) are kept distinct. This allows developers to focus on their problem and the system architecture, while the framework handles the optimization and tuning of individual modules.

How does DSPy differ from agentic approaches in AI?

DSPy focuses on building systems that are grounded and controllable, where humans specify the system design, modules, and objectives. Agentic approaches, on the other hand, often rely on a high-level goal and expect the LLM to decompose and execute it, which can be less reliable and harder to trust.

What is Omar's vision for the future of AI and DSPy?

Omar envisions a future where AI models become commodities, and developers use frameworks like DSPy to write programs that exhibit intelligence in specific applications. The focus will be on artificial programmable intelligence (API) rather than artificial general intelligence (AGI), enabling more grounded and iteratively improvable systems.

How does open-sourcing DSPy influence its development?

Open-sourcing DSPy has led to a modular development process where contributors focus on specific components like optimizers, assertions, and internal abstractions. This allows for faster iteration and the integration of powerful ideas without the distraction of multiple use cases, making the framework more robust and adaptable.

Chapters
This chapter explores the challenges of integrating LLMs into production systems, emphasizing the need for reliability and scalability. It introduces DSPy's philosophy as a shift from ad-hoc prompting to more principled, systematic approaches resembling classical software engineering, focusing on building controllable systems that leverage the strengths of LLMs while addressing their shortcomings. The chapter highlights DSPy's paradigm of writing structured natural language programs.
  • Current LLMs are impressive but lack reliability and scalability for production systems.
  • DSPy focuses on building controllable systems through principled, systematic approaches.
  • DSPy enables writing natural language programs in a structured way.

Shownotes Transcript

在本期 Neural Search Talks 中,我们与 Omar Khattab 进行了交谈,他是 ColBERT 和 DSPy 等流行的 IR 和 LLM 框架的作者。Omar 描述了在生产系统中使用 AI 模型的现状,强调了如何利用正确的抽象级别和正确的优化工具来交付可靠的解决方案,从而最大限度地利用当前一代模型。他还阐述了他对未来人工智能可编程性 (API) 的愿景,而不是追逐人工智能通用性 (AGI) 的炒作,其目标是构建能够有效集成 AI 的系统,并具有自我改进机制,使开发人员能够专注于设计和问题本身,而不是底层超参数的优化。

0:00 Omar Khattab 简介 1:14 如何在生产级软件中可靠地集成 LLM 12:19 DSPy 的理念与自主方法的不同之处 14:55 Omar 的 IR 背景如何帮助他转向 DSPy 25:47 DSPy 优化框架的优势 39:22 DSPy 如何重新构想 AI 系统中的模块化 45:45 未来如何使用 AI 模型进行自我改进 49:41 像 DSPy 这样的开源项目如何影响其发展 52:32 Omar 对 AI 未来和他的研究议程的展望 59:12 结束语 </context> <raw_text>0 您好,这里是 Neural Search Talks,CIGIR 会议后,我们从斯坦福大学威廉·盖茨大楼美丽的庭院现场直播。我今天与 Omar Khattab 进行了访谈,他是计算机科学系去年毕业的博士生。欢迎来到节目,Omar。是的,感谢邀请。那么……

Omar 以多方面闻名,事实上,包括 Colbert 和 DSPy 框架。今天我们想深入探讨一下 DSPy 框架及其最近的进展。在华盛顿特区的 SIGIR 会议上,你在大型语言模型日发表了一个非常精彩的演讲。大型语言模型已经占据了 SIGIR,对吧?

你在这个环节中发表了一个关于 DSPI 启动的这种新型范式的精彩演讲,对吧?你能告诉我们演讲要点是什么吗?当然可以。所以,你知道,很多这项工作的背景是

你知道,语言模型使我们能够轻松构建以前无法构建、甚至无法想象构建的东西,是的,但是我们很多人很快意识到,这些只是令人印象深刻的演示,但当涉及到构建我们想要摆在用户面前的系统时,这些系统需要可靠地成为更大架构的一部分,或者具有可扩展性和可靠性的东西,你知道,我们的演示只能做到这一步,它们并没有真正允许我们做到这一点

这在实践中非常重要,因为人们的雄心壮志变得非常高,我们想要构建能够做各种事情的系统。它们实际上是这项新一代技术中最快的从研究到生产的技术,对吧?正是如此。我的意思是,范围令人印象深刻,机会也确实是无限的。

但这里的挑战是,你知道,语言模型本身就如此,你知道,它们一直在改进。我们刚刚推出了 Lama 3.1,你知道,Mistral 也发布了,还会有更多。但从根本上说,发生的事情是这些语言模型非常不透明,它们有点

设计使然,这正是使它们如此强大的原因,它们是如此的整体化,以至于当人们试图构建系统时,以他们需要的方式控制它们非常困难。所以我的工作围绕着我们如何使用这些语言模型构建可靠且可扩展的系统,而 DSPy 已经

从这个角度来看,如果你想构建可控的系统,如果你想构建可以改进和迭代的系统,而这些改进和迭代本质上更像系统工程,那么我们需要摆脱

提示或临时微调或我们使用这项技术的任何方式,转向更原则化或更系统化的方法,这些方法更像编程。更像经典的软件工程。或者更像经典的软件工程,或者更像,你知道,在语言模型出现之前,机器学习工作流程或数据科学工作流程的样子。但当然,你想以利用这些模型优势的同时解决其缺点的方式来做到这一点。

所以我认为 SPI 的核心一方面是这种新的范式,对吧,你可以在结构化的方式下编写自然语言程序。对,对。

这也体现在许多其他框架中,这些框架将不同的代理或模块链接在一起。但我认为 DSPy 方法也很特别,因为它具有这种优化思维模式。对。所以最重要的是

你不想以这种思维模式思考,我该如何强迫这个语言模型完成我的任务?你想这样思考——不要这样做,不要那样做。——其中一些最终可能有用或重要,也可能不重要,但这些都是次要的事情。这些就像你在构建系统后调整的超参数。最重要的是构建你的系统。因此,设置架构,这里的主要思想,或其中一个主要思想是,

这些模型在它们已经见过并且足够标准以至于在其训练数据中的任务上非常强大。

因此,我们可以通过构建模块化系统来利用这一点,在这些系统中,这些模型负责范围明确的单个子任务。我们将这些模块组合成更大的系统,这些系统只是调用模型来近似或单独解决子任务。而某种程度上,

帮助我们从仅仅说做到实际去做的是一系列编程抽象或新算法,这些抽象或算法使整个过程具有凝聚力。所以说你想用语言模型构建模块化系统是一回事,然后你坐下来写五个单独的提示又是另一回事。用语言模型构建一个真正的模块化系统又是另一回事。所以在过去几年中取得的许多进展

如果你看看真正以令人满意的方式投入生产的系统,它们通常是这样的。我们称之为语言模型程序或复合 AI 系统,它们对语言模型进行许多小的调用,并在代码中仔细地将它们组合起来。

而且,你知道,基本上有两种方法可以构建它。标准方法是说,好吧,你知道,这是我的系统架构。这是我的图表。我想构建一个系统,你知道,它将

回答用户的问题,或者自动完成人们编写代码的文本,或者做任何数量的这些事情。所以我有了以下模块。然后对于每个模块,你坐下来说,好吧,我的输入。是的。你使用一个模型。确切地说。像两页纸的说明一样。对。你写两页纸的说明。你迭代每一个提示。而这里的挑战在于。

让模型执行你想要执行的特定任务很难,但在这些复合 AI 系统中,这要难得多,因为这些模块中的每一个都必须与其余代码交互。它提供有效的输出是不够的。它必须提供其他模块期望的输出。是的,有很多依赖关系。这里有很多依赖关系,整个系统必须具有凝聚力。所以实际上,如果你知道自己在做什么,让模型执行特定任务并不难。编写提示

具有挑战性,但并不那么具有挑战性。具有挑战性的是维护几个提示的系统,这些提示应该在一个更大的系统中交互。因此,DSPy 在这个领域引入了一些想法。其中一个想法是提示技术基本上变成了元编程函数或某种

函数生成器。因此,你为它们提供一个签名,就像一个函数签名,它只是定义了输入和输出之间的关系。因此,你说,我想要一个可以接收来自用户的提问并生成搜索查询的模块。或者我想要一个可以接收

目标和一组工具的函数,也许我想选择要调用的正确工具。这就是模块接口的完整描述。现在模块是如何填充的,这只是定义了整个本质,或者定义了一种未指定的空实现,但我们已经定义了接口。你可以用这种方式指定许多模块,你可以说,好吧,对于这个模块,我希望

我希望它以思维链的形式实现。这是一种特殊的提示技术,在实践中,人们通常会坐下来写例子,说明模型应该如何推理这种特定类型的输入以生成这种特定类型的输出。但在这里,我们只是说,好吧,

对于这个特定的签名,对于这个接口,我感兴趣的是让模型进行推理来做到这一点。——对。——对于这个其他模块,我有一个不同的接口。也许接口类似于 RAG。所以接收一个问题,接收以某种方式检索到的上下文段落,然后请相应地给我一个答案。

所以这只是一个接口。你可以说,好吧,我希望通过,你知道,思维程序来处理这个接口。所以思维程序只是意味着这种元流程,模型生成被执行的代码。根据执行结果,模型会相应地生成输出。所以现在我们正在讨论,你知道,这些接口的抽象级别,我们在这个级别上设计这些系统。是的。

你只需编写你的函数,调用这些模块。——然后提示在这个更大的系统中变成了超参数,对吧?——提示在这个系统中变成了参数。但你基本上只是在描述你关于这些模块的控制流。好吧,你可以把它想象成一个普通的计算机程序。你只是在编写 Python,或者它可能是任何其他语言,你只是在调用这些模糊的模块,这些未实现的函数具有这些模糊的接口。现在问题变成了,我们如何,你知道,谁以及如何应该填充这些函数?所以这里应该发生什么过程?最重要的是,好吧,你知道,

我们确实已经有了概念,并且对将高级代码转换为低级代码的过程有很多直觉,也许是通过在下面生成代码或元编程或其他技巧。从本质上讲,这是从高级代码

语言到低级语言的代码编译的概念。除了这里的低级语言是:我如何处理以模糊方式指定的这些模块,并将其映射到实际的语言模型调用中,这通常意味着什么?它通常意味着,好吧,我应该调用哪个模型?权重是如何分配的?就像,你知道,我们是否正在更新权重?我们是否按原样使用它们?我们如何将输入格式化为实际的提示,以便我们可以调用此模型?

通常,当你考虑编译器、元编程或其他此类技术时,程序的行为通常是明确定义的。所以行为就像存在正确行为和不正确行为,并且围绕这种编程语言的语义

保护所有这项工作。对于 DSPy 框架来说,程序员,比如说人类流程设计者,实际上是否将工作分解成这些任务是必要的吗?这与可能更通用的自主方法有何对比,在这种方法中,你有一个高级目标,

你实际上要求 LLM 将其分解成选项卡。——对,让我们先完成一个想法,然后再来讨论这个。所以在正常的编译中,程序足以指定应该发生什么行为。然后你进行编译是因为你想映射到更有效的语言,或者你想从高级语言到低级语言,或者你有什么目标。所以,你知道,

函数的行为是明确定义的,但是你有很多优化空间的地方通常是效率。我们在这里关注的是没有人真正知道如何实现应该生成答案或生成进入搜索引擎的查询的函数的情况,而搜索引擎应该检索高质量的内容。我们不知道正确的实现是什么,因为没有正确的实现。所以这里缺少的元素是询问用户或询问开发人员

你试图最大化的函数是什么?例如,给我一些输入,给我一些你想要回答的输入问题的示例,或者你想要翻译的输入文档,或者你想要总结的输入报告,并给我一个指导指标,某种目标,这种目标可以告诉我

告诉我成功何时发生,或者给我一个奖励,或者给我一个好坏尝试的概念。——一种评估方法。——一种评估方法。所以现在你问了,好吧,现在程序员必须指定三件事。他们必须实际设计这个系统。他们必须将系统分解成模块,即实际的函数。他们必须弄清楚在哪里,

他们期望看到什么类型的输入。现在,在许多情况下,30 个输入或 50 个输入就足够了,但你仍然需要一些。他们需要考虑他们试图最大化的指标是什么。

——你可能会将这与更雄心勃勃的方法进行对比,这些方法本质上是说,只需用英语给我一个目标。例如,我想买一张从旧金山到华盛顿特区的机票。系统只是产生许多代理,它们进行对话和交互。我认为这里的问题是我们希望让人们能够构建他们可以信任的系统。为此,我们需要脚踏实地。语言模型,

与语言模型对话是一种产生巨额账单的令人印象深刻的方式,但这不一定是构建它的可靠方式。——当然现在还不是。我们都见过这些演示,它们可以……——现在总是,你知道,所以这里的重点是我们想要利用人类、开发人员和工程师的优势。所以他们擅长思考他们的问题。我们无法取代这一点。我们不知道如何,

抽象掉一般意义上的问题解决。这是一个更容易管理的机器学习问题,就像,好吧,你坐下来,编写一个简单的初始程序,编写一个简单的初始指标,进行优化,

看看系统给你什么。你可能不会立即满意,就像你构建的任何其他系统一样,但你知道如何迭代,并且你知道如何在前进的过程中逐步增加复杂性。所以我们让人们能够回到迭代开发中,这种迭代开发以指标为基础,以反馈为基础。他们随着时间的推移收集数据。而且,你知道,这非常重要。我看到很多人喜欢 DSPy,他们有时会成功地使用它,但这仍然不是最佳状态,他们会编写一个非常简单的,你知道,思维链程序或 RAG 程序。他们不再考虑它。它基本上变成了一个黑盒代理。他们有点像期望优化器能够神奇地为他们解决问题。这不是它应该被使用的方式。它本质上是一种编程语言。你在解决你的任务,而不是系统。优化是你循环的一部分。确切地说。系统只是确保你

不擅长处理的部分,即弄清楚这些参数,被委托出去,但你仍然是设计系统的人。对。

所以在我们进一步探讨优化理念和 DSPy 最近的发展之前,我想回到很久以前。当然。因为你现在是这里的博士生最后一年。你开始项目时并没有从事 DSPy 的工作,对吧?你实际上是在研究信息检索问题、Colbert 和所有这些东西。那么,你是什么时候想到这个好主意呢?

哇,这是一个很酷的想法。我需要改变方向。我需要开始研究这个。是的,所以这个过程是,我在 2019 年后期,我的第一年,研究了 Colbert,并且

如果你考虑 Colbert,真正酷的是我们正在使用 BERT 作为语言模型。所以一些背景是 Colbert 是一种检索模型,它与神经时代其他检索模型看起来非常不同。大多数使用语言模型或转换器进行搜索的模型,它们有点

你使用转换器作为编码器,你给它一个文档,它会输出一个高维向量,你对查询也这样做。基本上,相似度是点积。这真的很酷,因为我们知道如何将点积扩展到海量数据集。它非常快,但它会在质量上留下很多东西,因为现在你基本上是在要求模型,嗯,

将长文档或长段落(至少几百字)压缩成这个高维向量非常困难。是的,尤其是在

你试图从你训练的领域泛化到你没有训练的领域时。——是的,你用 Colbert 避免了这种情况,但这如何导致 DSPy?——你用 Colbert 避免了这种情况,你通过本质上构建这种模块化结构、模块化系统来避免这种情况,在这个系统中,模型的使用方式是,你知道,产生表示

不仅是原子的,而且实际上分解成捕捉单个标记的片段,系统以有趣的方式使用它们。所以这已经是这种模块化思想的种子了吗?我的意思是,我认为它肯定与之相符,但有趣的是,在研究了 Colbert 并看到了一些模块化之后,尽管我不会说那是……

当时的一个清晰的想法。我接下来研究的是当时被称为开放域问答的东西。现在我们称之为 RAG,但这是一种普遍的问题,即如何回答问题

当答案没有在上下文中提供给你时。也许在一个复杂的跳跃推理框架中。一个非常重要的特殊情况是跳跃推理,基本上这里的问题是你被问到一个问题,为了回答它,你求助于检索。所以模型不会记住所有内容,即使它确实记住过去的所有内容,世界也在不断变化,你想要可以引用其来源的系统,还有很多原因促使我们……

构建现在模块化的系统。所以现在这些系统将首先进行检索,然后将这些检索到的元素用作实际文本,这些文本再次进入模型,下游模型相应地生成答案。所以我构建了一个名为 BearQA 的系统。所以那里的很多工作都考虑了检索和生成,但你在这里可以直接看到模块化的概念,在那里,你知道,你说,

你有一个负责生成答案的模块,你可以针对它进行优化,但你还有一个单独的模块专门用于查找相关来源,你可以针对它进行优化。然后我研究了一个名为 Baileyn 的系统,正如你所说,用于多跳推理。多跳推理,这是一种有趣的问题,这是一种,

这是一种旨在鼓励特定解决方案的问题,但这种解决方案比寻求这种解决方案的特定基准要普遍得多。所以多跳问答基本上是在说,如果你的系统通常基于检索来回答需要组合通常在任何特定上下文中都找不到的信息的问题,该怎么办?所以语言模型,是什么让它们如此强大

超越了我们几十年来一直拥有的谷歌搜索。所以语言模型之所以如此强大,是因为它们可以在其参数和执行期间的激活中综合。

来自不同地方的大量信息。所以如果我们要转向模块化设计,我们有一个检索器和一个生成器,那么我们最好也能够回答这些类型的问题。所以像 Baileys 这样的系统,它所做的是它将复杂的问题分解成更简单问题的表示,它检索内容,

然后它实际上读取这些文档。它返回系统。系统检索更多内容,这些内容可以填补它正在积累的知识空白。它使用所有这些作为中间线索来构建更大的难题。所以这现在确实是真正模块化设计的实例,Baleen 特别是,它至少有七个或八个模型。所以检索模型,本质上,它们是,

生成查询的模型,总结的模型。例如,你知道,你检索了 100 个文档,或者你检索了 20 个文档,但你不可能

你知道,继续积累这些文档。所以你取这 20 个,并生成一个关于这里实际相关内容的摘要。然后你生成更多查询,然后继续。所以,所以像,你知道,这个过程有模块。——所以你尝试了不同的东西,然后你认为,这不是,这不是一个很好的程序员体验。我需要某种语言来声明性地迭代这些不同的系统。——是的,是的。但还有很多其他事情正在发生。所以这是在之前,

这是在 GPT-3 公开访问之前。所以像 GPT-3 一样,你知道,还没有进行指令微调。它与我们可以微调的系统相比,真的没有竞争力。所以 Belene 是一个经过微调的系统。所以它有,我不记得确切的数字,但我不会惊讶如果它是九个,你知道,你必须一起训练九个不同的模型,包括检索器。我认为我们必须训练四个检索器,你知道,

至少一个重新排序器和至少一个摘要模块,然后是一个实际的问答模块。单独地。单独地。但为了使其正常工作,你必须在足够领域的域数据上训练它们。例如,你知道,你不能,

如果你想训练一个重新排序器,你想确保它是在你将要部署的检索器的输出分布上进行训练的。你基本上需要这种端到端优化效果。你想近似端到端优化,但这实际上很难。它太难以实际使其端到端可训练。所以在工作流程中进行了近似。这真的很困难,因为

基本上,这些模块中的大多数都在尝试做一些直观且有意义的事情,但没有人会为你提供这些数据。有一些像 Hotpot、QA 或 Hover 这样的数据集。Hover 真的很酷,它支持多跳问题设置或多跳推理工作流程,但它们当然不会

无法预测你将构建的所有可能的模块。所以没有人会为你提供所有这些单独模块的训练数据。所以构建像 Vailene 这样的系统的难度,我的意思是,事后看来,你想要哪些模块是很清楚的,但是你如何生成允许你将这些模块很好地组合在一起的训练数据呢?所以 Vailene 是一个特定的,你知道,这里有一个,

非常非常强大的但具体的策略来生成数据并使这些模块协同工作。我记得当时我还在考虑模型,而不是程序。当你考虑模型时,你会说,好吧,而这仍然是

绝大多数语言模型社区、NLP 社区以及更广泛社区的普遍方式,你知道,我们思考这些系统的方式是我们有一堆模型。当你这样考虑时,你知道,这真的很困难,因为现在你基本上有所有这些训练模型的脚本,然后你只是在一天结束时将这些模型作为临时事物连接起来。所以 DSP 和 DSPy 的激励模型

目标是基本上说,如果重点从模型转移到系统会怎样?如果我在 Baileyn 中没有构建九个模型,而是构建 Baileyn 系统会怎样?——然后将它们组合在一起,但我将停止。——是的,让我们实际考虑构建系统本身,即 Baileyn 架构本身,然后模块变得非常类似于神经网络中的层。如果你正在构建,如果你正在,

构建 ResNet 或构建 AlexNet 或构建转换器、BERT 或其他东西。它有 12 层注意力。

你不会认为,我的意思是,你只是组合这些层。你想要正确的抽象。你想要正确的抽象,你正在构建,你正在组合这些层,并且你想要指定某种目标,并且你想要一些优化器在幕后做正确的事情,并且,你知道,也许将来会有更好的优化器。但归根结底,这个想法是你想要,

有一种数据驱动的方式来学习如何填补空白或如何更新这些系统的参数。是的。所以像 Baleen 这样的系统,你知道,几千行关于模型的代码可以概括地说成大约 15 行,好吧,我有这些,你知道,九个模块。有很多模块。是的。但它们中的每一个都可以是一行,它只是告诉我,好吧,我应该取这个并给出那个。是的。 并且应该有一个函数,例如,这是一个组合它们的循环,非常简单的 Python。只要我可以指定正确的目标,只要我可以拥有将该目标反映到系统参数中所做选择的优化器,那么我们就可以成功地迭代这些系统。所以你可以进入这样的系统,删除一个模块,放入另一个模块,更改所有这些的基础语言模型并更改它。当时在 Billy 时代这是不可能的。这是不可能的,因为

在这里合成数据很困难。所以这是一个,这是一个手动过程,你需要很多基本上是启发式方法来将系统的各个部分连接在一起。启发式方法非常特定于问题。2021 年底发生的事情是,我们开始获得

实际上有效的语言模型,因为指令微调开始出现,我们得到了像 DaVinci One 和 DaVinci Two 这样的东西。它们非常慢、昂贵且不可靠。但基本上你开始看到少样本提示或指令,你知道,指令提示可以给你提供系统

不可靠,但几乎可以做任何可以用英语描述的事情。少样本提示变得非常重要,对吧?对,对。只需提供一些示例。是的。所以我在这次采访之前与几个人谈过话,他们说,

DSPy,你知道,构建这些类型系统的伟大新范式。很多人仍然认为这是关于选择示例,对吧?这就像最初工作的先有观念,当时的优化器在这方面非常出色。所以很多好处都来自选择正确的示例。

在本期 Neural Search Talks 中,我们与 Omar Khattab 进行了交谈,他是 ColBERT 和 DSPy 等流行的 IR 和 LLM 框架的作者。Omar 描述了在生产系统中使用 AI 模型的现状,强调了如何利用正确的抽象级别和正确的优化工具来交付可靠的解决方案,从而最大限度地利用当前一代模型。他还阐述了他对未来人工智能可编程性 (API) 的愿景,而不是追逐人工智能通用性 (AGI) 的炒作,其目标是构建能够有效集成 AI 的系统,并具有自我改进机制,使开发人员能够专注于设计和问题本身,而不是底层超参数的优化。

0:00 Omar Khattab 简介 1:14 如何在生产级软件中可靠地集成 LLM 12:19 DSPy 的理念与自主方法的不同之处 14:55 Omar 的 IR 背景如何帮助他转向 DSPy 25:47 DSPy 优化框架的优势 39:22 DSPy 如何重新构想 AI 系统中的模块化 45:45 未来如何使用 AI 模型进行自我改进 49:41 像 DSPy 这样的开源项目如何影响其发展 52:32 Omar 对 AI 未来和他的研究议程的展望 59:12 结束语 </context> <raw_text>0 但是你的进步已经远超这个阶段了,对吧?所以关于更近期的工作,我想稍微深入探讨一下这些优化器。是的。那么,你可以优化哪些方面,它又是如何与这些最新的语言模型的能力以及它们遵循指令和对指令非常精确的方式相协调的呢?对。所以

最重要的是,如果你正在构建一个框架,无论是 DSPI 还是其他框架,都需要人们提供这些模块的示例,否则你不会走得太远。原因是,关键在于使人们能够迭代这些系统设计,这意味着他们会移除模块并丢弃它们。他们会添加其他模块,并且希望能够基本上重新编译并查看结果。他们需要能够迭代。现在,所需或必要的示例是

在函数级别上,作为一个黑盒,你将什么作为输入?你期望定义什么输出?内部结构应该完全独立于你正在构建的数据。因为数据是关于任务、问题的,而程序是关于你的解决方案的。所以这里有一些关注点分离。

那么,DSPy 的前身 demonstrate search 中的 demonstrate 步骤的概念是什么呢?我们可以使用你提供给我们的实际程序来生成示例吗?如果我们可以成功地生成这些示例,我们基本上可以查看它们之间的选择吗?这在最初的 DSP 中就是这样。而且,

这比大多数人意识到的要强大得多。我的意思是,我显然会讨论更新的优化器,但是,你知道,这是两年前的事了,但基本上,- 按今天的标准来看已经过时了。- 是的,按今天的标准来看已经过时了。但这非常强大,因为你所说的意思是,我会接受你给我的输入,我会对每个模块的初始配置进行猜测,这意味着我会保持模型的参数不变。我只是猜测一个初始模板,它大致表示,

你给我的签名,我会将其转换为这个提示。基本上,你可以通过运行函数来对你的系统进行采样。每次有语言模型调用时,你可以对输出进行采样,并且可以将它们链接在一起,或者让它们运行你的指标,并基本上执行

诸如拒绝采样之类的操作。例如,如果答案被指标所喜欢,则保留它,保留整个轨迹,否则将其丢弃。或者诸如最佳 n 之类的操作,如果你有很多,你可以运行很多次并保留最佳的一个,如果指标是连续的,诸如之类的。这些轨迹现在为你免费提供的是,你沿途获得了每个模块的示例。问题是,它们正确吗?它们像,你知道,有用吗?它是否像一个实际上……

代表核心分布的测试用例。- 对,很多人看到这一点,然后他们说,好吧,我的意思是,你生成了某种推理,然后你生成了搜索查询,然后该搜索查询导致检索到一些段落。这些段落随后被用于在 RAG 系统中生成答案。这些中间步骤中的任何一个正确吗?

一旦你开始将这些视为参数,它们本身是否正确并不重要。只要它们有用即可。只要它们有用即可。因此,并非每个示例都同样有用。空间变得如此高维,以至于我们的期望

呈指数级爆炸,你实际上不知道哪些是有用的支撑点,对吧?正是如此。因此,第一组优化器都是关于我们如何生成足够的这些示例以及我们如何确定它们的哪些组合应该插入到每个模块中。令人惊讶的是,实际上很难击败随机搜索。因此,如果你生成很多这些示例,并且你尝试这些组合的基本上随机子集,

引导演示是我们所说的,你可以走得很远。因为基本上,你生成的平均轨迹不是很有效。但出于某种原因,一些更极端的轨迹,当你将它们插入时,你会看到平均质量,它非常强大。也许只是为了让我们的观众更容易理解一些。所以

在这种情况下,随机搜索意味着什么?因为你实际上正在使用此搜索过程来调整提示。那么,你能举一个该搜索过程中的一个步骤的例子吗?对。首先,你有一个程序,你在系统中对提示应该是什么样子进行初始猜测。所以这是

有两种方法。基本上,它要么只是一个模板,它接受你的签名并将其插入,要么你询问一个模型,只需给我一个初始的……- 比如说对于 RAG,你有一些类似的东西,这里有一堆检索到的文档,找到它们的答案,坚持事实,仅……- 那样工作量太大。它可能只是如果你的签名是,我会接受一个问题和一些上下文并生成一个段落,你告诉模型,我有上下文,

问题和抱歉,我会接受上下文问题并生成答案。- 是的。- 你让模型根据上下文和问题生成答案。没有像,没有自定义。- 是的。那么你如何将其发展成更复杂的指令呢?- 现在,我们的想法是你可以获取你拥有的问题输入,将它们通过系统运行,这意味着它将通过此提示运行,并通过检索和程序的其余部分运行。- 是的。- 然后你有一种过滤方法,你知道,这实际上正确吗?就像我得到了正确的答案吗?

这允许你将每个模块的这些输入输出保留为演示,如果过程成功的话。因此,随机搜索基本上是说,好吧,我有这么多,如果我随机抓取五个并将它们插入到这个模块中,并将它们插入到那个模块中,然后将此作为底层更新的程序,然后我对其进行评估,我验证整个过程。

我期望它的性能如何?我是否看到它的平均性能相当好,或者我是否看到它的性能甚至比零样本版本更差?因此,你正在插入你生成的那些示例。所以这是为了某种程度上的

最大化你正在构建的示例所给出的函数,你可以做的最简单的事情。这是一个非常可预测的变化维度,对吧?你只是生成所有有效的示例,它们只是以不同程度地工作,然后你选择最佳的一个。当你查看任务时,这可以让你,基本上,这个随机搜索过程在许多情况下可以让你从 20%

到 50% 再到 80% 完成相同的任务。因此,这些不同示例组合的实际含义非常有趣。但令人惊奇的是,现在你已经构建了这些示例,你的工具包就大了很多,这就是许多更复杂的优化器所做的。所以首先很容易做到的是,好吧,如果你生成足够的这些示例,你可以在其上训练模型。就像向模型展示一样

在提示中,你可以基本上转到模型并进行监督微调,你可以在其中说,给定此模块的此输入,这是过去有效的输出,因此你应该生成更多这样的输出。你可以做一些像 DPO 之类的事情。DSPy 中没有这个。目前,有很多相关的正在进行的研究,你可以在其中说,好吧,给定此输入,

此输出的性能优于该输出,并且你基本上可以进行优化。你还可以做的一件事,也就是 Mipro 所做的,就是查看那些……这是你最近的论文,对吧?它是公开的……Mipro 就像……

现在已经有八个月了,但论文比较新。这篇论文是对过去的一些优化器的回顾。因此,vPro 是在开源框架中引入的,然后论文才出来。是的,我们在 12 月引入了 vPro,或者至少在 12 月发布了它,然后我们公开告诉人们。我的意思是,人们成功地使用了它,然后我们在 3 月份发推文并公开告诉人们,然后我们在 6 月份发布了关于它的论文。所以 vPro 做的事情基本上是

它查看这些示例,并说,好吧,

我们如何让模型生成示例,生成说明这些示例(这些成功的示例)所传达的函数?但它实际上走得更远,因为它研究了程序本身。它查看程序的结构,并试图弄清楚这个程序试图实现什么?我的模块在这里是什么?这个模块试图在程序中扮演什么角色?这些示例传达了什么?通过这种方式,它会生成很多,

指令,你知道,所以它就像对整体端到端任务的一种元级别理解,对吧,试图理解端到端任务以及每个特定模块在其中的作用,以便它为每个模块生成的指令,你知道,语言模型非常擅长集思广益,它们非常擅长某种程度上的

有一篇由我这里的一名学生领导的非常酷的论文,我也参与其中,叫做 Storm。Storm 这个名字来源于集思广益的概念。因此,语言模型非常擅长集思广益,但它们需要有根据。他们需要告诉他们围绕什么进行集思广益。另一件事是你需要过滤掉所有这些

低质量的东西,以寻找偶尔出现的高质量的东西。所以 Meeper 正是这样做的。它包含如何将语言模型的建议与程序的实际上下文和成功示例的上下文中联系起来的概念。但是许多提示优化器几乎就此止步。他们基本上有这样的概念:让我们要求模型进行批判,并让我们使用这种批判来生成指令。

在许多情况下,模型生成的指令都比你开始使用的指令更糟糕。所以你想做的是过度生成并进行测试。这里的问题是,当你有一个包含五个模块的程序,并且你试图考虑每个模块中的 20 个潜在指令,并且对于每个指令,都有 20 个我们生成的潜在少量样本集时,

它变成了一个巨大的离散搜索空间。它比所有可能的字符串的搜索空间小得多,但它相当大。所以这里的好处是,我们可以非常成功地做的最简单的事情之一是从超参数优化领域借鉴。基本上说,好吧,你知道,我有一个非常昂贵的函数需要优化。这个函数是将东西插入我的程序中,在一个验证集上运行它,使用一些输入并检查指标,非常昂贵。

所以你想做所谓的基于顺序模型的优化。从某种意义上说,你想基本上训练或优化一些外部小型模型

它告诉你,如果你结合这些选择,你的系统将表现如何。昂贵的评估函数将表现如何。- 所以从某种意义上说,它有点像强化学习,对吧?- 它就像强化学习,但它在离散性和廉价性方面要好得多,因为强化学习就像,如果你正在优化策略,实际上,我认为在这种情况下,

介于强化学习和元学习之间。在这种情况下,这是一个非常昂贵且难以处理的过程。但总的来说,事情正朝着越来越像强化学习的方向发展。当你通过更新来优化 DSPy 程序中的权重时,我想这有点技术性,但基本上 DSPy 优化问题是两个强化学习问题。

一个是,我如何更新策略?我如何更新在模块中做出选择的模型?那么,我如何让语言模型(作为我的代理或策略并采取行动,即生成构成此程序一部分的字符串)来更新它以最大化预期回报,以及我如何让模型

当我提到诸如生成这些示例并进行拒绝采样并在其上进行训练、基于拒绝采样的微调或专家迭代或存储或这些类型的主意时,这基本上是一种

一种简陋的强化学习,可以这样理解,你知道,它与强化学习等类似。但你也可以很容易地看到它的扩展,它也执行 PPO 或 DPO 等。当然,你越接近 PPO 之类的东西,整个过程就越难处理,因为超参数变得非常重要。而且,你知道,总的来说,这是一个目前

通常只有工程师对其进行调整才能实现的过程。我们能否获得开箱即用的强化学习、深度强化学习方法,并使用它们来构建优化器和 DSPI,这是一个悬而未决的问题。坦率地说,我认为我们将能够做到,但这仍然是一个悬而未决的问题。是的,我的意思是,你真的打开了一个全新的盒子,对吧?对,对。

我一直在思考的一件事是这句话。我认为它来自麻省理工学院的某个地方,上面写着,一篇好的论文回答了该领域的一个重要问题。一篇伟大的论文对整个领域提出了新的视角,而一篇优秀的论文则定义了一个全新的研究领域。所以我认为你肯定在这最后两个之间。所以,是的,

你似乎真的开辟了一种关于将这些系统视为某种程度上类似于 Marvin Minsky 的心智社会(不同代理相互作用并以不同的方式表现)的连贯整体的新思维方式。

并且作为一个心智很好地运作,对吧,对吧,但是我们可以在思考它的方式上做到这一点,那么一般来说模块化的缺点是什么呢?我的意思是,许多旧的 AI 都是高度模块化的,并且有一些系统是经过深思熟虑构建的,并且从某种意义上说,它们没有解决深度神经网络解决的相同问题,嗯,这是我经常思考的事情,所以我已经

我认为你应该在正确的抽象级别上进行模块化。当你想到人类,当你想到我们认识到这是一棵好树还是一朵花,或者这是一个危险的地方还是一个安全的地方时,所有这些本能的决定都在没有预先计划或没有分解思想的情况下发生。所以我认为基本上,

模块化必须发生在抽象级别上,就像我们或多或少已经解决了这些本能的系统一型……- 是的,这基本上是单一模型……- 这基本上是单一模型。因此,对于某些问题(并非所有问题),许多模块化尝试都无法走得足够远。如果你把所有时间都花在构建解析树上,

猜猜看,人类说话时并没有想到解析树。这并不意味着解析树……- 我希望这仍然是真的。- 好吧,从某种意义上说,这并不意味着解析树没有用。- 我认为在校园里仍然有一些人会不同意这一点。- 在 CSLI 或类似的地方。- 我认为我们都更加一致,但我并不是说解析树没有用。我的意思是,

成功地获得成功的解析树显然对于成功掌握语言来说并不是必不可少的。从某种意义上说,如果你正在考虑模块化系统,它最终会成为一种干扰。但是能够将复杂的任务(例如撰写研究论文)分解成,好吧,我需要查找资料,我需要先起草,我需要迭代我的草稿,你知道,

基本上进行多次传递和多个步骤是如此基本,以至于没有任何模型会训练出能够撰写关于你可能想到的任何内容的通用开放式文章,而这只需要神经网络的一次正向传递。这些递归方法可能会……可能会泛化,并且结构本身可能会由模型自生成,所以可能会有

它可能正在搭建自己的架构,但归根结底,像神经网络的简单正向传递只能真正学习你需要在其之上组合的东西,你知道,作为

你知道,函数或模块,以便真正最大限度地利用这些系统。所以我,这就是 DSPy 所做的赌注。我的意思是,我还没有在公开场合说过很多次,因为我没有被问到,但是,你知道,我在私人谈话中说过很多次,你知道,

DSPy 的目标不是你指定五个模块,所以我们实际上会优化五个模型。你完全可以说,我想要一个检索模块和一个生成模块,并且我希望检索传递给生成。在底层,优化器或编译器会决定,实际上,我有一个神经网络,一个可以同时执行这两个操作的模型。

因此,它将融合这些调用。这与编译器在你说我想进行加法和乘法运算(在矩阵乘法上下文中)时所做的事情相同。它们实际上将其编译成一个单一的指令,即乘法和加法。所以我认为这里同样的概念是,你知道,模型会给我们提供更大、更粗粒度、更强大的指令集,如果你愿意的话。而且

抽象、我们编写的代码看起来会一样,因为智能编译器会从我们想要描述程序的级别,你知道,到我们想要教导系统更有效的方式。所以我描述了强化学习问题,DSPy 使其变得

更容易,因为它具有这些声明性模块。基本上,你可以在 10 年前就想到同样的强化学习问题,但它之所以如此难以处理的原因是,你无法通过基本上获取签名并猜测初始提示以及从中采样相当成功的模式来预热每个模块。这是一个非常关键的事情。但实际上还有一个单独的学习问题,它有点

更高级别的元学习,它实际上只是优化问题,你并不是试图学习程序内部的策略,你试图学习决定做出哪些选择以优化系统的策略。所以在这里,这是一个更昂贵的问题,因为你不仅从每个数据点获得信号,实际上你从基本上

原则上,你知道,整个验证集或它的样本。但这是一个更强大的空间,因为,你知道,你现在可以看到顶部的整个过程,并且基本上可以跨任务学习,例如,你知道,跨模型学习。嘿,我正在针对 GPT-5 进行优化,但我已经看到了

20 个以前的模型,所以我有点像,好吧,这是一个更大的模型,它是一个更强大的模型,所以我可以推断。你可以让这个系统成为许多不同模型的集合,它们可能具有不同的优势或处于不同的级别,并且可以相互支持等等。对。所以我很想知道你对此的看法,某种程度上

嗯,以及结束学习,主要问题是……嗯,信用分配,对吧?例如,哪个模型会更新。所以最近也有一篇来自这里的论文发表,叫做 text grad,它显然也受到了你的工作的启发。这是否是……的方向。

你认为这件事会发生。我认为这是一种隐喻。它引入了某种梯度反向传播的符号,这在数学上并不准确。

正确。我认为他们肯定在正确的抽象级别上思考。我看到一些人有点不喜欢,你知道,一些杰出的人不喜欢这个类比。我认为这是一个惊人的类比。我认为他们做得很好。我认为抽象很好。让我们看看。

我认为在整个不可微系统中反向传播错误的概念。在语言中。这是一个将持续存在的理念。我认为这是一个好主意。我认为它本身相当薄弱。原因是

要反向传播错误,你需要知道错误是什么,要了解错误是什么,你需要询问模型出了什么问题,我认为问题是模型非常擅长提供罐装的、通用的、原则上(如果它们没有被……如果它们被错误地调整)

建议。他们擅长集思广益。但不是外科手术般的精确。是的,但如果你想精确,并且你想解决实际问题,模型还做不到,而且我

我还没有决定它们是否会做到这一点,或者这是否是某种根本性的限制。我认为某些方面是根本性的,尽管我们可以对它们进行足够的训练,以至于大多数任务最终都能得到足够精确的反馈。所以这里的问题是你受制于语言模型批判正确的事物,并利用这种批判来提出修复的正确建议,并提出要添加到堆栈中的正确建议。

这是非常有限的。你想要什么,你实际上想要什么,我认为未来的方向是,你肯定需要一个组件,让模型积极地集思广益出了什么问题。但是你想要做什么,你知道,我们在这里构建了一些优化器,这些优化器利用了这种洞察力并做了更多的事情。但基本上,你真的需要让事情由实际的实验来驱动。所以,

你正在从这个分布中进行采样,希望得到一些不错的建议,但除非你尝试过它们,否则你无法相信它们。这就是 MePro 非常擅长的地方。它擅长有效地探索许多不同的建议,而无需穷举测试所有内容。我认为一旦你开始意识到这一点,你就会真正想到,好吧,如果你手工构建这些系统,

你根本无法探索这个巨大的空间,例如,我如何构建示例以将其用于我的提示中,然后将其用于微调我的系统,然后将其用于生成指令,并探索这些指令,因为模型会不断出现,而且你总是很新鲜。它真的必须是一个自动化过程。所以我认为……

看到像 text grad 这样的东西非常令人鼓舞,看到你知道,其他人正在解决这个优化问题,并且正在提出有创意的。这是一种范式转变,对吧?对,对,对。而且没有人知道它最终会走向何方。我们不知道,是的。但令人印象深刻的是,你用 DSPy 激发了这种范式转变。我认为这是可以肯定的。我想把谈话稍微转向更实际的东西,对吧?这都是研究。这是……

引人入胜的智力追求。但实际上,当你谈论工程时,代码很重要。所以你已经开源了 DSPy。首先,我对开源它以及从社区获得反馈和对代码的贡献很感兴趣,这如何影响你对这个项目的走向。我认为这之所以易于管理且成功,是因为大多数

大多数贡献者都以高度模块化的方式进行贡献。我的意思是,没有人像在工作一样

在这一点上,甚至包括我自己。所以没有人真正积极地从事 DSPy 的工作。人们正在从事的是 DSPy 的特定部分。所以有 DSPy 优化器团队。我提到了 Krista、Michael、Delora、Josh,还有谁?这是主要的四个人。所以,你知道,这些人,你知道,他们在如何进行问题优化方面绝对是专家?我们如何在 DSPy 中进行权重优化等等。还有一些人负责断言方面。这是一个,

我们在 DSPy 中拥有一个高度复杂的模块。所以那是 Arnav、Shangyan、Manish。他们对断言的了解比我多得多。所以我们有一些人负责 LLM 的核心 API 和内部抽象。所以像 Cyrus、Amir 和 Kyle 以及其他人一样。而且,你知道,

这里和那里与之相关的事情只是来自社区的优秀贡献者。我在想 Thomas 和其他人。所以我认为这里运作良好的是

我认为我们的代码需要进行相当深入的重构,并且需要更简洁,但从概念上讲,它的各个部分非常……关注点分离足够有效,以至于人们可以简单地说,我研究优化。我不做签名,我不做类型,我不做断言,但我将专注于让优化器真正有效地工作。我认为这令人鼓舞,因为你拥有那些拥有所有这些的人

非常有力的想法,而且他们不会被你知道的 10 个超出他们范围的不同用例所分散注意力等等。每个人都非常专注于他们各自的元素,而且你知道,他们都受到他们正在构建的许多成功事物的激励。是的。你对该领域的未来有什么展望?我的意思是,我知道在 AI 领域,任何人的视野都很难

超过三到六个月,对吧,但是……你的研究是什么,你知道,因为我认为你选择在可预见的未来留在学术界,对吧,对吧,那么你想要追求的研究计划是什么呢?我认为我认为……我们

处于一个不是三到六个月,而是三到六年的可见性的地方。除此之外,我真的不知道。但对于三到六年……你非常乐观。对于三到六年,我真的看到了向模块化系统的转变。我真的看到了

很多人会重新诠释他们从诸如那些极具价值的事物(例如“痛苦的教训”)中学到的东西。我认为“痛苦的教训”对于熟悉机器学习和构建可扩展系统理念的人来说是至关重要的。我认为,计算机科学的基本理念是避免过早优化。

过早优化,有人说这是万恶之源,这同样适用于机器学习和其他任何领域。另一件同样适用于机器学习和其他任何领域的事情是,你真的需要模块化系统。你需要关注点分离,你需要快速的迭代周期。

深度神经网络本身并不能提供这三点,但通过DSPy之类的概念以及类似的概念,我认为很明显,它们可以作为我们可以控制的叶子或模块。但归根结底,你的程序就是一个程序,你的控制流是实际的控制流。所以,三到六年内发生的事情是,很多事情实际上会变成:机器学习是一回事,它非常擅长学习,但它不太擅长组合。我认为

机器学习和编程将融合在一起的想法雄心勃勃,但我认为这是一个非常现实的愿景,很少有大型项目会使用本质上不是语言模型程序的任何东西进行编程。因此,大多数大型程序将包含模糊的模块,这些模块来自语言模型

就像一个词可能不存在一样,但它本质上是一种某种深度神经网络,它理解语言以及其他事物。也许基础模型是一个更持久的术语,也许不是,我不确定。但这是一种根本性的方式,

很多人会这样做,甚至不会认为他们在做机器学习。他们只会认为,我只是在编写一个系统。这意味着系统将带有指标,因为优化或编译它的唯一方法是定义目标是什么。因此,系统将有目标。它们可能不是

它们可能是陈述,或者在其他语境中它们被称为什么?它们可能被称为宪法、规则或其他什么,但基本上它们将具有这些目标陈述。系统将有其目的,并将相应地进行优化。另一件事是从另一个极端来看,很少有机器学习系统

项目不会也采取程序的形式。所以,如果你正在构建一个系统,如果你正在发布代理,如果你正在做……它总是……人们会首先想到功能而不是模型,他们会……模型会变成……

我认为所有这些都已经存在了,只是还没有被内化。所以模型已经成为,但它们将更清晰地像芯片一样。如果你考虑英伟达或其他公司,AMD和其他公司生产GPU,我们大多数构建软件或构建模型或进行机器学习的人,我的意思是,一些人和一些学者以及一些其他人对构建更好的芯片感兴趣。我们的一些合作者也这样做,这非常重要。

但对于我们大多数从事机器学习的人来说,这只是你从专家那里购买的东西,他们每年都通过惊人的流程使其变得更好。但这是一种商品,无论是谁生产最好的产品,都可能在一段时间内拥有垄断地位,或者从中赚取大量利润。但归根结底,这个过程是你正在构建软件,你正在考虑软件,你只是购买你能买到的最好的硬件,然后使用它。

语言模型基本上会变得一样,或者基础模型会变得一样,它们实际上是商品。绝大多数学者,绝大多数对机器学习感兴趣的人都会授权它们、购买它们、下载它们或其他什么。由于像DSPy这样的语言,

你知道,你只需要获得最新的版本,你就可以重新编译你的代码,并且你期望它可以正常工作。现在,与GPU类似,有时你的CUDA代码应该在更大的GPU上更快,但实际上会更慢,因为有人……-有点奇怪,下降,打开你的引擎盖然后。-……过早优化还是不好,有什么东西,编译器里有个bug。-不。-是的,我们需要修复它。但归根结底,其模式是模型是一种商品。它们只是设备。软件才是重要的。

编程和机器学习融合在一起,因为我们总是需要学习,我们总是需要组合,它们会越来越接近。我认为围绕通用人工智能的大量炒作,我正要提到这一点。是的,将会开始消退。我希望它不会消散所有对相关事物的兴趣,因为我太经常开这个玩笑了。我认为它现在已经过时了,但我没有从事AGI的研究。

我不工作,我不相信AGI,但我确实从事API的研究,这意味着人工可编程智能。所以我希望人们能够编写代码或程序,这些代码或程序在其关心的应用程序中表现出智能。这就像通用技术

特定智能。这就像通用的工具,用于激励人们。就像我们已经有开发者了。他们已经可以编写代码了。他们已经可以解决问题了。如果他们解决他们关心的问题会怎样?所以他们表达了解决方案的规格或……

声明性解决方案的脚手架。我们只是帮助他们映射或编译到底层的机器学习结构。我认为这就是我看到的未来方向。

太棒了。所以我认为这让你成为一个人文主义者,而不是一个AGI信徒。我认为这很好。我认为我们需要一个未来,在这个未来中,人工智能系统服务于人类,而不是相反。感谢您的这次采访,感谢您开辟了这个新的研究方向。这太迷人了。我们将拭目以待。

感谢您的收看。这是与Omar Khattab一起进行的神经搜索访谈,直播地点是斯坦福大学计算机科学学院的庭院。敬请关注,享受发现的乐趣。