跳转到主要内容

随着大型语言模型(LLM)的实现在深度和广度上的扩展,出现了一些要求:

  1. 对LLM进行编程并创建可重复使用的提示的能力&将提示无缝地合并到更大的应用程序中。
  2. 创建链以对大型应用程序的LLM交互进行排序。
  3. 通过一个可以在工具范围内自主行动的代理,自动进行即兴的思维链提示。
  4. 创建可扩展的提示管道,可以从各种来源收集相关数据,所有这些都基于用户输入并构成提示;并将提示提交给LLM。

“任何足够先进的技术都与魔术难以区分。”

-阿瑟·C·克拉克

对于LLM相关的操作,显然需要自动化。目前,这种自动化是以所谓的代理的形式出现的。

提示链接是指执行一系列预先确定的动作。

Agent的吸引力在于Agent不遵循预先确定的事件序列。代理可以保持高度的自主权。

考虑到下图,代理可以访问一组工具,并且代理可以处理这些工具范围内的任何请求。执行管道为代理提供了自主权,在代理达到最终答案之前可能需要多次迭代。

代理执行的操作包括:

  1. 使用工具
  2. 观察其输出
  3. 循环到另一个工具
  4. 将输出返回给用户

下图显示了如何访问和循环不同的操作类型。

“男人已经成为他们工具中的工具。”

-亨利·大卫·梭罗

有一个观察,有一个思考,最终有一个最终的答案。该图显示了在没有得到最终答案的情况下如何调用另一种操作类型。

下图中截取的输出显示了代理是如何执行的,以及链是如何以自主的方式创建的。

以LangChain为参考,Agent有三个概念:

工具

如本文前面所示,有许多工具可以使用。工具可以被视为执行特定任务的功能

工具包括谷歌搜索、数据库查找、Python REPL,甚至调用现有的链。

在LangChain框架内,工具的接口是一个预期具有以下功能的函数:

  • 字符串作为输入,
  • 和字符串作为输出。

LLM

这是为代理提供动力的语言模型。以下是如何在代理中定义LLM的示例:

代理类型

代理使用LLM来确定要采取的操作以及顺序。代理通过分解用户请求来动态创建思想链序列。

代理涉及LLM决定采取哪些行动,采取该行动,查看观察结果,并重复该观察结果直到完成。-来源

即使在问题不明确并且需要多跳方法的情况下,代理也是有效的。这可以被认为是一个将复杂的问题或指令分解为思维链过程的自动化过程。

下图很好地说明了问题的分解,以及如何在一个零碎的思维链过程中回答问题:

以下是LangChain环境中的代理类型列表。有关代理类型的完整描述,请在此处阅读更多信息。

考虑到下图,对代码所做的唯一更改是AgentType描述。在这张图中可以清楚地看到响应的变化,使用了完全相同的配置,只是使用了不同的AgentType。

有关LangChain代理的完整工作代码示例,请在此处阅读更多信息。

文章链接