人工智能 频道

使用语义内核构建人工智能代理

  微软的LLM编排工具可能最终兑现了三十年来自主软件代理的承诺。

  早在20世纪90年代初,我在一个大型电信研究实验室工作,作为高级本地环路小组的一部分。我们的问题领域是“最后一英里”——为人们的家提供服务。我的研究领域之一是思考当网络从模拟服务转向数字服务时可能会发生什么。

  我在实验室的图书馆里花了很多时间,思考未来通用带宽的计算会是什么样子。让我着迷的概念之一是无处不在的计算,即计算机消失在后台,软件代理成为我们的代理,代表我们与网络服务进行交互。这个想法激发了苹果、IBM、General Magic和许多其他公司的工作。

  软件代理概念的先驱之一是麻省理工学院教授Pattie Maes。她的工作跨越了网络、编程和人工智能之间的界限,并专注于两个相关的想法:智能代理和自主代理。这些是自适应程序,可以为用户查找和提取信息,并在这样做时改变他们的行为。

  软件行业花了30多年才赶上这项开创性研究,但随着基于变压器的大型语言模型(LLM)和自适应编排管道的混合,我们终于能够开始实现这些雄心勃勃的原创想法。

  语义内核作为代理框架

  微软的语义内核团队正在构建OpenAI的助理模型,以提供一种智能代理,以及一套管理调用多个功能的工具。他们还提供了一种方法来管理发送到和从OpenAI API发送的消息,并使用插件将通用聊天与使用RAG的接地数据驱动集成集成。

  随着最近的1.01版本,该团队开始超越最初的类似LangChain的编排模型,现在正在考虑将语义内核作为上下文对话的运行时。这需要对对话进行更多的管理和使用的即时历史记录。所有交互都将通过聊天功能,语义内核管理输入和输出。

  这里发生了很多事情。首先,我们看到一个向人工智能堆栈的运动。微软的Copilot模型也许最好被认为是现代代理堆栈的实现,以该公司对人工智能就绪基础设施(用于推理和培训)的投资为基础,其基础模型库,一直支持在微软和OpenAI平台上工作的插件。

  语义内核插件的作用

  语义内核最近更新的一个关键方面简化了使用LLM用户界面的聊天,因为不再需要显式管理历史记录。现在,一旦您定义了将用于应用程序的人工智能服务,语义内核就会处理。结果是代码更容易理解,从底层模型中抽象出来。

  通过为您管理对话状态,语义内核成为您的代理的上下文代理。接下来,它需要一种与外部工具交互的方式。这就是插件向方法添加LLM友好描述的地方。只需将此元数据添加到您的代码中,无需再做更多。一旦在那里,聊天可以通过API触发操作,例如使用家庭助理等智能家居平台调高热量。

  当您向语义内核对象添加插件时,它将可用于基于聊天的编排。底层LLM提供了运行与最可能的插件描述相关的操作所需的语言理解。这确保了运行您的代理的用户不需要繁琐的准确性。插件描述“设置室温”可以通过“使房间更暖和”或“将房间设置为17C”触发。两者都表示相同的意图,并指示语义内核调用适当的方法。

  或者,您将能够使用OpenAI插件,该插件目前是实验性的。这些插件使用OpenAPI规范来访问外部API,调用与语义描述相关联。API调用的语义描述允许OpenAI的LLM根据提示的内容进行适当的调用。语义内核可以使用自己的插件和OpenAI插件来管理对一系列API的整体上下文和链式调用。语义内核甚至可以混合模型,并将其与自己的语义记忆一起使用,使用矢量搜索将LLM扎根于现实世界数据中。

  微软在这里的工作采用了LLM的语言功能,并将其包装在用户、数据和API的上下文中。这就是可以开始将语义内核称为构建智能代理的工具的地方,因为它使用您的提示和用户聊天来动态编排针对数据源和互联网托管资源的查询。

  基于LLM的代理可以自主吗?

  另一组语义内核函数开始实现一种自治形式。这就是事情变得非常有趣的地方,因为通过管理上下文,我们的语义内核代理可以从其当前库中选择适当的插件来提供答案。

  在这里,我们可以利用语义内核的规划器来创建工作流程。最近发布的手柄规划器可以动态生成包含循环和条件语句的编排。当用户在聊天中创建任务时,规划器会根据这些说明创建编排,根据需要调用插件来完成任务。语义内核仅利用内核代码中定义的插件,使用一个提示,确保只使用这些插件。

  自主运行的代码存在问题。你如何确保它仍然有根据,并避免不准确和错误?一种选择是使用Azure AI Studio中的Prompt Flow工具来构建一个测试框架,以评估您的规划器和插件的准确性。它能够使用大量基准数据来确定您的代理如何处理不同的用户输入。您可能需要生成合成查询来获取足够的数据,使用LLM生成初始请求。

  微软的Copilots是智能代理在行动的一个例子,很高兴看到语义内核团队使用该术语。通过对软件代理的30多年研究,可以挖掘大量经验来评估和改进语义内核编排的结果,并指导开发人员构建这些代理可以提供的用户体验和框架。

  智能代理30年

  需要注意的是,语义内核的代理模型在一个重要方面与原始代理概念不同:您不会发送智能代码来在远程平台上运行查询。但在过去的30年左右,我们看到了分布式应用程序开发的重大革命,它改变了支持代理技术所需的大部分内容。

  这种新开发方法的结果是,不再需要在远程服务器上运行不受信任的任意代码。相反,我们可以利用API和云资源将代理视为跨越分布式系统的编排工作流程。此外,该代理可以根据之前和当前的操作智能地重组该编排。现代微服务是实现这一点的理想平台,以面向服务的架构概念为基础,具有自我记录的OpenAPI和GraphQL描述。

  这似乎是语义内核正在采用的模型,通过提供一个框架来托管这些动态工作流。将API调用、矢量搜索和OpenAI插件与相对简单的编程脚手架混合,为您提供了一种构建原始代理前提的现代替代方案的方法。毕竟,我们如何区分良性代理和恶意软件?1994年,计算机病毒很少发生,网络攻击是科幻小说。

  今天,我们可以使用OpenAPI定义来教LLM如何从受信任的API中查询和提取数据。进行这些连接所需的所有代码都由底层AI提供:您只需要一个提示和用户问题。语义内核提供提示,并在原始问题的上下文中以自然语言提供答案。

  您可以将此视为实现这些早期代理概念的现代方法,在云中的一个地方运行代码,而不是在许多不同的系统上运行代码。使用API可以减少向代理提供信息的系统的负载,并使过程更加安全。

  随着这些技术的发展,重要的是不要把它们视为全新的东西。这是几十年研究工作的结果,这些工作最终满足了其预期用户。这项研究中有很多东西可以帮助我们提供可靠、用户友好、智能的代理,作为我们在下一代网络中的代理——就像那些最初的研究人员在20世纪90年代打算的那样。

0
相关文章