• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 生成式人工智能/大語言模型

    構建由 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

     

    0

    標簽

    人人超碰97caoporen国产