返回文章列表

LangChain 代理人模型初始化與執行

本文介紹如何初始化和執行 ChatOpenAI 模型與 LangChain 代理人,包含載入必要工具、設定代理、執行查詢與取得 SerpAPI 金鑰等步驟,並深入探討 LangChain 代理人的核心原理、決策過程、輸入輸出型別以及代理執行器的複雜性處理,提供程式碼範例輔助理解。

Web 開發 機器學習

LangChain 代理人能根據任務動態選擇和執行最佳行動方案,例如使用不同工具或模型取得所需結果。初始化 ChatOpenAI 模型需要匯入 openailangchain 模組,並使用 ChatOpenAI 類別指定模型和溫度。載入工具則需匯入 langchain.agentslangchain.llms 模組,再使用 load_tools 函式載入 SerpAPI 和 LLM-Math 工具。初始化代理人則使用 langchain.agents 模組的 initialize_agent 函式,並指定工具和模型。執行代理人時,先定義查詢問題,例如軟體公司開發行動應用程式的案例,接著使用 agent.run 函式執行代理人並傳入查詢,最後印出結果。取得 SerpAPI 金鑰需要註冊 SerpAPI 帳戶,登入後確認電子郵件和電話號碼,即可在 Dashboard 取得 API 金鑰。程式碼執行流程包含安裝 serpapigoogle-search-results 等依賴項,匯入 osdotenvopenailangchain 模組,載入 OpenAI 和 SerpAPI 的 API 金鑰等環境變數,初始化 OpenAI 客戶端和代理人,最後執行代理人並傳入查詢問題。

初始化 ChatOpenAI 模型

接下來,需要初始化 ChatOpenAI 模型。這可以透過以下步驟完成:

  1. 匯入必要的模組:匯入 openailangchain 模組。
  2. 初始化 ChatOpenAI 模型:使用 ChatOpenAI 類別初始化模型,指定模型名稱和溫度。

載入工具

接下來,需要載入必要的工具。這可以透過以下步驟完成:

  1. 匯入必要的模組:匯入 langchain.agentslangchain.llms 模組。
  2. 載入工具:使用 load_tools 函式載入 SerpAPI 和 LLM-Math 工具。

初始化代理

接下來,需要初始化代理。這可以透過以下步驟完成:

  1. 匯入必要的模組:匯入 langchain.agents 模組。
  2. 初始化代理:使用 initialize_agent 函式初始化代理,指定工具和模型。

執行代理

最後,需要執行代理。這可以透過以下步驟完成:

  1. 定義查詢:定義一個查詢問題,例如「一家軟體公司計劃開發一款新的行動應用程式…」。
  2. 執行代理:使用 agent.run 函式執行代理,傳入查詢問題。
  3. 印出結果:印出代理的回應。

取得 SerpAPI 金鑰

要獲得 SerpAPI 金鑰,需要按照以下步驟:

  1. 註冊 SerpAPI 帳戶:前往 SerpAPI 網站註冊一個帳戶。
  2. 登入 SerpAPI 帳戶:登入您的 SerpAPI 帳戶。
  3. 確認電子郵件地址:確認您的電子郵件地址。
  4. 確認電話號碼:確認您的電話號碼。
  5. 取得 API 金鑰:在 SerpAPI Dashboard 中取得您的 API 金鑰。

程式碼解釋

現在,讓我們一步一步地解釋程式碼。

  1. 安裝依賴項:首先,需要安裝必要的依賴項,包括 serpapigoogle-search-results
  2. 匯入必要的模組:匯入必要的模組,包括 osdotenvopenailangchain
  3. 載入環境變數:載入環境變數,包括 OpenAI API 金鑰和 SerpAPI API 金鑰。
  4. 初始化 OpenAI 客戶端:初始化 OpenAI 客戶端,指定 API 金鑰。
  5. 初始化代理:初始化代理,指定工具和模型。
  6. 執行代理:執行代理,傳入查詢問題。

Step 1: Analyzing the Problem

The problem requires calculating the breakeven point for a software company’s new mobile app. The initial development cost is $200,000, the monthly revenue is $15,000, and the monthly maintenance cost is $5,000.

Step 2: Identifying the Formula

The breakeven point can be calculated using the formula: Breakeven Point = Fixed Costs ÷ (Revenue per Unit - Variable Costs per Unit). In this case, the fixed costs are the initial development cost, the revenue per unit is the monthly revenue, and the variable costs per unit are the monthly maintenance cost.

Step 3: Applying the Formula

Substituting the given values into the formula: Breakeven Point = $200,000 ÷ ($15,000 - $5,000) = $200,000 ÷ $10,000.

Step 4: Calculating the Breakeven Point

Performing the division: $200,000 ÷ $10,000 = 20.

The final answer is: $\boxed{20}$

深入探索 LangChain 代理人和 AI 應用

LangChain 代理人是一種強大的工具,能夠幫助您構建和最佳化您的 AI 應用。以下是一些進一步的資源,能夠幫助您深入瞭解 LangChain 代理人和如何使用它們:

1. 代理人基礎知識

LangChain 檔案中的代理人部分提供了對代理人的深入解釋,包括它們的功能、使用案例和應用場景。瞭解代理人的基本概念和它們如何工作是構建有效的 AI 應用的關鍵。

2. 動態工具選擇和整合

LangChain 工具整合教您如何動態選擇和整合各種工具,以便代理人可以執行任務。這個知識能夠幫助您打造更強大、更靈活的 AI 應用。

3. 實作代理人記憶

LangChain 記憶模組提供了多種記憶選項,例如 ConversationBufferMemory,能夠幫助您將記憶整合到代理人中。瞭解如何使用這些模組能夠幫助您構建更智慧的 AI 應用。

4. 建立端對端代理人應用

LangChain 教程中的代理人建設部分提供了從頭到尾建立一個完整代理人應用的步驟,包括設定環境、載入語言模型和定義工具。這個教程能夠幫助您快速上手代理人的開發。

5. 高階使用案例和應用

LangChain 使用案例部分提供了代理人的實際應用場景,包括任務自動化、內容生成和智慧搜尋,同時附有詳細的例子和程式碼片段。這些資源能夠幫助您更好地理解代理人的潛力和如何將其應用於實際問題中。

內容解密:

上述資源提供了豐富的知識和工具,能夠幫助您深入瞭解 LangChain 代理人和如何使用它們。透過學習這些資源,您將能夠構建更強大、更智慧的 AI 應用,從而解決實際問題和提高生產力。

圖表翻譯:

圖表說明:

上述圖表展示了 LangChain 代理人的基本流程,從動態工具選擇到實作代理人記憶,然後到建立端對端代理人應用,最終到達高階使用案例和應用。這個圖表能夠幫助您更好地理解 LangChain 代理人的工作流程和如何將其應用於實際問題中。

設計和實作不同型別的代理程式

在本章中,我們將使用 LangChain 來設計和實作代理程式。首先,我們需要定義代理程式的目標,然後管理其輸入和輸出,並使用各種工具和工具包來增強其能力。

定義代理程式的目標

定義代理程式的目標是最重要的步驟,因為它為代理程式的所有行為奠定了基礎。要定義代理程式的目標,需要回答以下問題:

  1. 代理程式要解決什麼問題?
  2. 代理程式是否需要與其他代理程式合作?
  3. 代理程式需要執行什麼任務來達到其目標?
  4. 代理程式需要什麼工具和資源來完成任務?

例如,如果我們想要建立一個餐廳推薦代理程式,代理程式的目標可以定義為:幫助使用者根據其口味偏好和預算找到城市中評分最高的餐廳。然後,我們可以概述代理程式需要執行的任務,例如:

  1. 瞭解使用者輸入並提取相關資訊(城市、口味、預算)。
  2. 與餐廳資料函式庫或 API 互動以取得餐廳資料。
  3. 應用過濾和排名演算法以根據使用者偏好選擇最佳餐廳。
  4. 生成自然語言回應以呈現推薦的餐廳及其詳細資訊。
  5. 處理後續問題並提供額外資訊。

核心代理程式概念

代理程式有幾個核心概念,包括:

  1. AgentAction:代表代理程式應該採取的行動。它有兩個重要屬性:tooltool_input
  2. AgentFinish:代表代理程式完成任務並準備傳回輸出給使用者時的最終結果。
  3. 中間步驟:代表代理程式在當前代理程式執行中之前行動及其對應輸出的記憶。它們對於傳遞資訊給未來迭代至關重要,以便代理程式知道它已經完成了哪些工作並在此基礎上進行建設。

實作基本和高階代理程式

在本章中,我們將實作基本和高階代理程式,包括零拍反應代理程式、結構化聊天代理程式、ReAct 代理程式等。每種代理程式型別都有其唯一的特徵和使用案例,我們將提供實際工作程式碼範例來展示它們的工作原理。

結合內建工具和自定義工具

我們還將探索如何整合內建工具和建立自定義工具來擴充套件代理程式的能力。您將學習如何使用工具包將相關工具分組在一起以執行特定任務,這將幫助您組織代理程式的功能並使其更加高效。

新增記憶給代理程式

最後,我們將討論如何向代理程式新增記憶,使其能夠記住以前的互動並在多次對話中保持上下文。您將學習如何實作記憶能力並使用聊天記錄來增強代理程式的上下文意識和連貫性。

內容解密:

from langchain.agents import AgentAction, AgentFinish

# 建立一個 AgentAction
action = AgentAction(tool="search", tool_input="2023 年 Amazon 的年度收入是多少?")

# 執行動作並取得輸出
output = perform_action(action)

# 儲存中間步驟
intermediate_steps = [(action, output)]

# 建立一個 AgentFinish 以最終輸出
final_output = AgentFinish(return_values={"output": "2023 年 Amazon 的年度收入是 1.23 萬億美元。"})

圖表翻譯:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title LangChain 代理人模型初始化與執行

package "機器學習流程" {
    package "資料處理" {
        component [資料收集] as collect
        component [資料清洗] as clean
        component [特徵工程] as feature
    }

    package "模型訓練" {
        component [模型選擇] as select
        component [超參數調優] as tune
        component [交叉驗證] as cv
    }

    package "評估部署" {
        component [模型評估] as eval
        component [模型部署] as deploy
        component [監控維護] as monitor
    }
}

collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型

note right of feature
  特徵工程包含:
  - 特徵選擇
  - 特徵轉換
  - 降維處理
end note

note right of eval
  評估指標:
  - 準確率/召回率
  - F1 Score
  - AUC-ROC
end note

@enduml

圖表翻譯:

上述流程圖描述了設計和實作代理程式的步驟,從定義目標到新增記憶,並最終傳回輸出給使用者。

代理人(Agent)核心原理

代理人是指可以根據給定的問題或任務,動態地選擇和執行最佳行動方案的實體。這些行動方案可能涉及使用不同的工具或模型來獲得所需的結果。代理人的核心是其決策過程,即根據當前的狀態和可用的工具選擇下一步的行動。

代理人決策過程

代理人的決策過程通常由以下幾個部分組成:

  1. 代理人輸入:代理人需要接收到相關的輸入資訊,例如問題描述、已經完成的步驟等。
  2. 代理人邏輯:根據輸入資訊,代理人會使用其內部邏輯來決定下一步的行動。這個邏輯可能涉及到對不同工具或模型的選擇。
  3. 行動執行:代理人會執行所選擇的行動,並獲得相應的結果。
  4. 結果反饋:結果會被反饋給代理人,以便其根據新的資訊進行下一步的決策。

代理人輸入

代理人的輸入通常是以鍵值對的形式呈現的,其中包括了與問題相關的所有必要資訊。其中一個重要的鍵是 intermediate_steps,它記錄了到目前為止已經完成的步驟。

代理人輸出

代理人的輸出可以是三種型別之一:

  1. 單一行動(AgentAction):代理人選擇的下一步行動。
  2. 行動列表(List[AgentAction]):代理人選擇的多個下一步行動。
  3. 最終回應(AgentFinish):代理人最終給出的回應,標誌著問題解決的完成。

代理人執行器(AgentExecutor)

代理人執行器是負責呼叫代理人、執行其選擇的行動、並將行動結果反饋給代理人的核心引擎。它確保代理人可以順暢高效地執行,直到達到結論。

程式碼示例

以下是一個簡單的程式碼示例,展示瞭如何定義代理人的輸入和輸出:

from langchain_core.agents import AgentAction, AgentFinish

# 建立代理人
agent = create_react_agent(llm=llm, tools=tools, prompt=prompt)

# 定義代理人的輸入
agent_input = {
    "intermediate_steps": [
        (AgentAction(tool="Search", tool_input="什麼是法國的首都?"), "巴黎是法國的首都。")
    ]
}

# 建立代理人執行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 執行代理人
agent_output = agent.run(agent_input)

# 檢查代理人的輸出型別
if isinstance(agent_output, AgentAction):
    print("代理人想要執行以下行動:", agent_output)
elif isinstance(agent_output, list):
    print("代理人想要執行以下行動:", agent_output)
elif isinstance(agent_output, AgentFinish):
    print("代理人已完成並給出了以下回應:", agent_output)

這個示例展示瞭如何定義代理人的輸入,執行代理人,並檢查其輸出的型別,以便進行下一步的處理。

代理執行器的複雜性

代理執行器(AgentExecutor)是一個強大的工具,負責管理代理(Agent)的執行過程。雖然它看起來很簡單,但實際上,它處理了許多複雜的情況,以便使您的生活更容易。讓我們來看看一些情景:

  1. 當代理選擇一個不存在的工具時,執行器會優雅地處理這種情況,並保持代理在正確的軌道上。
  2. 如果工具在執行過程中遇到錯誤,執行器會捕捉到這個錯誤並適當地處理它,以確保代理可以繼續其工作。
  3. 在代理產生無法被解析為有效工具呼叫的輸出時,執行器會處理這種情況,並引導代理回到正確的路徑上。
  4. 執行器提供了全面性的日誌記錄和可觀察性,在所有層級上,例如代理決策和工具呼叫。它可以輸出這些資訊到標準輸出(stdout)和/或傳送到 LangSmith 進行進一步的分析和視覺化。

從技術架構視角來看,初始化和執行 LangChain 代理人的流程清晰且結構化,涵蓋了從匯入模組、初始化模型和工具,到定義查詢和執行代理人的完整步驟。然而,代理人與工具的整合及錯誤處理仍存在挑戰。例如,取得 SerpAPI 金鑰的流程略顯繁瑣,程式碼範例中也缺乏對錯誤處理的明確說明,例如 API 金鑰失效或網路連線問題的處理。

深入分析代理人的決策過程,可以發現其核心在於根據輸入資訊和可用的工具動態選擇最佳行動方案。代理人執行器在這個過程中扮演了關鍵角色,它不僅負責呼叫代理人,還需要處理各種複雜情況,例如工具不存在、工具執行錯誤、代理人輸出無法解析等。這凸顯了代理人執行器設計的複雜性和重要性。此外,代理人的記憶機制對於處理多輪對話和維持上下文至關重要,但目前提供的資訊和範例程式碼對此部分的闡述相對簡略。

展望未來,LangChain 代理人技術有望在更廣泛的應用場景中發揮作用。隨著大語言模型的持續發展和工具生態的日益豐富,代理人將能夠處理更加複雜的任務,例如跨多個平臺的資訊檢索、自動化工作流程、個人化推薦等。同時,代理人框架本身也需要不斷演進,例如提升錯誤處理能力、增強可觀察性和可除錯性、提供更便捷的工具整合方式等。

玄貓認為,LangChain 代理人代表了 AI 應用開發的一個重要方向,值得深入研究和探索。開發者應關注代理人核心原理和執行機制的理解,並積極探索如何將其應用於實際場景中。同時,也需要關注代理人技術的發展趨勢,例如更先進的決策演算法、更豐富的工具生態、更強大的錯誤處理能力等,以便更好地利用這一技術創造價值。