生成式人工智能

构建由 LLM 提供支持的 API Agent 来执行任务

长期以来,开发者一直在构建 Web 应用程序等界面,使用户能够利用正在构建的核心产品。要了解如何在您的大型语言模型(LLM) 应用程序中实现这一点,请参阅之前的博文,为数据分析构建由 LLM 提供支持的数据代理。在本文中,我将讨论一种将自由形式对话添加为具有 API 的另一个接口的方法。该方法有助于实现与任何 API 进行细致入微的对话式交互的解决方案。

如果您想了解关于 LLM 代理的基本知识以及如何构建它们,请阅读LLM 智能体简介构建您的首个 LLM 智能体应用

什么是 API 代理?

API 或执行代理是为执行目标而设计的。这些代理通过使用一组预定义的执行函数来执行用户请求的任务或一组任务。基于数据源回答用户的问题是其中的一个重要部分。另一个重要部分是执行用户(人类)或另一个代理(机器)的需求。

传统上,这是通过 API 和某种形式的应用逻辑和交互层(例如 Web 应用程序或页面)完成的。用户必须决定执行流程、使用按钮访问 API 或编写代码。

现在,可以添加卸载部分推论的功能,以及与 API、SDK 或软件“通信”的媒介,以便智能体了解交互的细节。

构建 API 代理

为了探索这一主题,我将构建一个“创意副驾驶”,帮助营销组织利用 API 代理开始头脑风暴,为营销活动提供灵感。

选择 LLM

首先,选择您要使用的 LLM。在这个例子中,我们使用了Mixtral 8x7B LLM,它可以在 NVIDIA NGC 目录中找到。这个模型可以加速各种模型的使用,并且以 API 的形式提供。每个模型的前几次API调用是免费的,用于实验目的。

请注意,如果您使用的模型未经过调整以处理代理工作流,可以将以下提示重新表述为一系列选择题 (MCQ)。这应该有效,因为大多数模型都经过指令调整以处理 MCQ。详细了解微调

选择用例

接下来,选择一个用例。您可以在 NGC 目录中(图 1)探索 NVIDIA AI 基础模型

出于本讨论的目的,我将尝试将 NVIDIA AI 基础模型 API 关联起来,以创建“头脑风暴副驾驶”。您可以对任何其他 API 执行同样的操作,以构建面向执行的代理。我将在此用例中使用以下三个模型:

Screenshot of NVIDIA AI Foundation Models in the NGC catalog
图 1.NGC 目录中提供的 NVIDIA AI 基础模型

构建智能体

一个AI 智能体由四个组件组成:工具、内存模块、规划模块和代理核心。

工具

在本用例中,工具是对模型的单独函数调用。为了简化讨论,我为模型的每个 API 调用都创建了类(图 2 和图 3)。

Screenshot of Python script to ping the Mixtral 8x7B model.
图 2.Mixtral 8x7B 模型的 Python 脚本
Screenshot of API structure used for the agent.
图 3.代理所用 API 的一般结构

规划模块和代理核心

在之前的文章中,我展示了不同的规划算法。有关使用递归求解器的显式问题分解模块的示例,请参阅LLM 智能体简介。有关贪婪迭代执行计划的示例,请参阅构建您的首个 LLM 智能体应用

在这里,我将介绍如何使用Plan-and-Execute融合规划模块和代理核心的方法。这是一种高级实现,它实际上是在执行前编译计划。对于更多详细信息,请参阅用于并行函数调用的 LLM 编译器

由于“计划到执行 (Plan-to-Execute)”在开始时生成完整的计划,因此无需对每个步骤进行跟踪,并且对于单回合对话案例,也不需要内存模块。请注意,您仍然可以选择迭代计划生成。我在此处采用静态生成来简化解释。

何时使用 LLM 编译器式方法以及融合规划和核心

API 是确定性的。因此,预先规划是可能的,因为您可以对单个工具的行为和结果相当自信。您可以节省为迭代或动态灵活规划模块生成的其他令牌。此外,对于需要多个步骤来解决问题的情况,此计划步骤有助于为 LLM 保持更简洁的上下文。此外,融合两个模块可以简化通用架构。

何时不使用 LLM 编译器式方法以及融合规划和核心

计划与执行 (Plan-and-Execute) 是一种很棘手的技术。如果计划因工具问题而失败,或者生成的计划不正确,则无法恢复。此外,为融合模块提供动力的 LLM 必须经过有效调整,以处理生成包含工具用途的计划的复杂逻辑。

提示如下所示。由于此示例使用 Mixtral 8x7B 模型,因此也可以使用模型训练所用的函数调用模式。它将生成一个计划,然后可按顺序执行该计划以获得最终结果。

prompt = """Your task is to generate a plan for the problem user gave using FUNCTIONS. Just generate the plan. Do not solve.

[
    {
        "function": "ImageGenerator",
        "description": "Generates an Image based on a prompt description",
        "arguments": [
            {
                "name": "prompt",
                "type": "string",
                "description": "Describe what is the key subject of the image, followed by the background."
            },
            {
                "name": "negative_prompt",
                "type": "string",
                "description": "what shouldn't be in the image. Fill none if not specified."
            }
        ]
    },
    {
        "function": "CodeGenerator",
        "description": "Generates python code for a described problem",
        "arguments": [
            {
                "name": "prompt",
                "type": "string",
                "description": "description of the problem for which the code needs to be generate"
            }
        ]
    },
    {
        "function": "TextGenerator",
        "description": "Generates well reasoned text for questions. Requires the full complete context.",
        "arguments": [
            {
                "name": "prompt",
                "type": "string",
                "description": "Describe in detail about the question that requires an answer"
            }
        ]
    }
]


User: <user’s question="">.

Assistant: ```json
"""
</user’s>

函数调用指南

虽然 Mixtral 8x7B 针对函数调用进行了优化,但它仍然可能生成不符合语法格式的详细输出。为了确保输出的语法正确性,我建议使用输出令牌限制技术,而不仅仅是微调大型语言模型(LLM)以实现语义正确性。其他相关库包括 local-LLM-function-callinglm-format-enforcer

一个复杂的示例用例

为了提供一个复杂的示例,我将尝试以与人交谈的方式“漫游”请求。

问题:为我的广告活动撰写一篇社交媒体帖子,介绍如何销售更多的清洁剂。该产品的名称是 WishyWash,现在采用新的 UltraClean 公式,售价为 4.99 美元。此外,还可以生成与之搭配的图像。实际上,当您在研究时,还可以添加新产品在社交媒体帖子中具有 softner。除了社交媒体帖子之外,还可以头脑风暴一些其他营销想法。

生成的计划:

{
    "function": "ImageGenerator",
    "arguments": {
        "prompt": "A bright and clean laundry room with a large bottle of WishyWash detergent, featuring the new UltraClean formula and softener, placed prominently on a shelf.",
        "negative_prompt": "No clutter, no other brands, only WishyWash."
    }
},
{
    "function": "TextGenerator",
    "arguments": {
        "prompt": "Compose a tweet to promote the new WishyWash detergent with the UltraClean formula and softener at $4.99. Make sure to highlight its benefits and competitive pricing."
    }
},
{
    "function": "TextGenerator",
    "arguments": {
        "prompt": "Generate ideas for marketing campaigns to increase WishyWash detergent sales, specifically focusing on the new UltraClean formula and softener."
    }
}

制定的计划包括三个步骤:

  • 生成图像
  • 撰写社交媒体帖子
  • 为营销活动产生更多想法

接下来,为最终输出触发各个工具。

使用 Stable Diffusion XL 生成图像

虽然 Stable Diffusion XL 生成的图像并非最佳(图 4),但它是与专家编辑器进行头脑风暴的绝佳起点。也就是说,如果您的用例依赖于具有正确词语的能力,则可以进一步微调模型以解决此问题。

 Image of laundry detergent and a pile of folded towels generated by Stable Diffusion XL.
图 4.Stable Diffusion XL 生成的图像

使用 Mixtral 8x7B 生成文本

由 Mixtral 8x7B 生成的社交媒体帖子和其他营销理念分别如图 5 和图 6 所示。在这种情况下,客服人员能够分解一个复杂的问题,并通过一系列杂乱的指令提供解决方案。

Image of social media post generated by Mixtral 8x7B
图 5.Mixtral 8x7B 生成的社交媒体帖子
Screenshot of generated ideas to build a marketing plan.
图 6.Mixtral 8x7B 生成的营销计划想法

请注意,此特定示例旨在激发 copilot 的灵感,其中输出是专家的起点。对于具有更确定性输出的 API (例如用于与股票市场交互的 SDK 或天气应用程序),可以直接执行函数调用。核心价值是能够通过请求推理,并使用面向执行的工具来完成请求。

构建 API 代理应用时的主要注意事项

在构建 API 代理应用时,请谨记以下主要注意事项。

扩展 API

在这个示例中,使用了三个 API.扩展方法需要构建一个检索增强生成(RAG) 系统,用于根据用户的问题寻找最相关的五大工具。由于无法持续添加所有可执行的 API 来解决任务,因此这种方法有一定的局限性。

更好地规划

此示例使用了 Compiler/Plan 和 Execute 样式解决方案,但使用了更好的规划器,例如 ADaPT,该规划器可用于链接不同的 API。更好的规划算法可以帮助处理计划中更复杂的情况和故障实例。

开始使用

本文介绍了如何构建由 LLM 提供支持的 API 执行代理的基础知识。本文的讨论与任何热门开源框架无关,有助于您更熟悉构建代理背后的概念。我强烈建议您探索开源生态系统,为您的应用选择最佳代理框架。

如需详细了解如何为生产环境中的 API 代理构建可靠、可扩展的组件,请查看采用检索增强型生成工作流程的 AI 聊天机器人。如果您想为 LLM 应用程序试验生产级 RAG 工作流,请访问在 GitHub 上发布的 NVIDIA/GenerativeAIExamples

 

Tags