1. LangChain Agent 的核心概念與運作原理 [0]

thumbnail LangChain Agent 結合了大型語言模型、記憶模組和工具模組,使其能自主思考、記憶並運用工具來達成目標。

1.1. LangChain Agent 的定義與組成 [0]

  1. Agent 的核心在於大語言模型(LLM)的決策能力 [0]
    1. LangChain Agent 所採取的一系列行為,都是由大語言模型來決定的,這與傳統程式的預設行為不同 [2]
    2. Agent 的所有行為及其順序,都是基於大語言模型的推理機制來決定 [3]
  2. Agent 是三個核心模組的組合體 [5]
    1. 大型語言模型(LLM):負責思考、推理和決策 [6]
    2. 記憶模組(Memory):主要負責上下文的記憶,以支援 LLM 的判斷 [6]
    3. 工具模組(Tools):定義了一系列可用的工具,讓 Agent 能根據目標選擇合適的工具 [6]

1.2. 傳統程式與 LangChain Agent 的差異 [12]

  1. 傳統程式的控制流程是預先定義的 [12]
    1. 傳統程式的行為是「硬編碼」(hard code)的,所有步驟都已寫好並預先定義 [3]
    2. 舉例來說,一個讓老鼠吃起司的程式會永遠按照預設順序(例如「一二三四」)吃起司,即使有更好的路徑也不會改變 [13]
    3. 傳統程式缺乏自主思考能力,所有業務流程都由開發者控制,程式碼中充滿大量的 if/else 判斷語句 [17]

1.3. LangChain Agent 的進化與自主決策 [19]

  1. Agent 的進化過程 [19]
    1. 最初,Agent 就像一個沒有思考和行為能力的原始人 [20]
    2. 隨著時間推移,它的大腦逐漸發育,獲得了思考和記憶的能力,這在 LangChain 中對應於配置了「大語言模型」和「記憶模組」 [21]
    3. 為了讓 Agent 能完成具體目標,還需要提供「工具」,例如匕首、魚鉤、弓箭等 [27]
  2. Agent 具備三要素後能自主決策 [28]
    1. 當 Agent 具備大模型(決策)、記憶模組(支援決策)和工具模組後,它就能根據目標自主判斷並選擇工具來完成任務 [28]
  3. Agent 自主決策的案例 [30]
    1. 情境一:打獵捕魚 [31]
      1. Agent 餓了想吃飯,看到魚後,透過記憶模組知道魚可食用 [31]
      2. 經過大模型推理,它從工具箱中選擇了魚鉤和釣竿,並決定先用魚鉤再用釣竿來捕魚 [33]
    2. 情境二:打獵捕兔 [35]
      1. Agent 遇到兔子,記憶模組確認兔子可食用 [35]
      2. 由於兔子跑得快,Agent 推理後選擇了弓箭來捕獵 [36]
    3. 情境三:應對威脅 [38]
      1. Agent 遇到來搶食物的壯漢,它將「吃飯」的目標轉化為「消滅壯漢」 [38]
      2. 經過推理,它選擇了最具殺傷力的工具作為武器 [41]
    4. 結論:Agent 的所有決策並非預設,而是根據環境變化、對工具的理解和判斷自主決定 [45]

2. LangChain Agent 的實作與程式碼解析 [48]

thumbnail

本節將透過一個實際專案的程式碼講解,展示如何在 LangChain 中初始化 Agent、配置其三要素,並編寫工具集來實現自動資料收集和論文整理。

2.1. Agent 的初始化與基本配置 [48]

  1. 專案目標:AI 資料收集與論文整理助手 [49]
    1. 該專案旨在讓 Agent 根據問題自動收集資料,並生成一篇相對完整且高品質的小論文 [49]
    2. 透過 Demo 演示,Agent 能自主思考、推理並調用工具來完成任務,最終給出高品質的結果 [100]
  2. 初始化 Agent 的三要素 [51]
    1. 大語言模型(LLM):負責決策 [51]
    2. 記憶模組(Memory):支援決策 [51]
    3. 工具集(Tools):Agent 可使用的工具 [51]
  3. Agent 的類型與角色描述 [53]
    1. Agent 類型:選用 OpenAI Functions,因為它經過優化,適合資料收集和論文匯聚的專案目標 [53]
    2. Agent 角色描述:將 Agent 定義為「研究員」,負責上網收集資料、總結,並強調必須基於事實和數據,不能編造 [57]
    3. 參數設定:將 temperature(隨機性)設為 0,確保嚴謹性;限制研究輪數不超過 5 輪,以控制成本 [57]
  4. 大模型的配置 [60]
    1. 隨機性:將 temperature 設為 0,確保 Agent 的輸出嚴謹且學術性,避免發揮創意 [60]
    2. 模型選擇:選用 GPT-3.5 Turbo 16K 的 0613 版本,因其 Token 限制較大,且能配合 OpenAI Functions 類型的 Agent [61]
  5. 記憶模組的配置 [69]
    1. 選用 Conversation Summary Buffer Memory,使其具備上下文記憶能力 [69]

2.2. Agent 工具集的編寫與配置 [72]

  1. 工具集的核心功能 [72]
    1. 搜尋(Search):調用 Google Search API,用於在網路上收集資料 [73]
    2. 抓取網站內容(Web Scraping):使用 Browserless API 抓取指定 URL 的網站內容,該 API 免費且適合 Demo 使用 [76]
    3. 內容切片與總結(Summarization):
      1. 如果抓取內容過大,會進行切片處理,以符合 GPT 的 Token 限制,便於總結 [78]
      2. 切片時會設定重疊部分(例如 200 字),確保上下文連續性,避免總結內容生硬 [80]
      3. 採用「Map Reduce」模式進行總結,將文章切塊、分別總結要義,再匯總成整體要義 [83]
  2. 工具的描述與 Agent 的選擇機制 [87]
    1. 工具描述的重要性:每個工具都必須有清晰的描述,讓大語言模型能根據描述判斷是否應選用該工具來執行任務 [87]
    2. Agent 的推理過程:Agent 會根據任務目標和工具的定義,自主推理並選擇合適的工具來完成工作,最終生成高品質的短文 [90]
  3. 程式碼總結 [93]
    1. 程式碼主要分為兩部分:初始化 Agent 並配置其三要素(大模型、記憶、工具),以及編寫自定義的工具集 [93]
    2. 提供給 Agent 的工具越多,它能完成的任務也就越多 [96]

3. LangChain Agent 實戰演示 [101]

thumbnail

本節將透過兩個實際案例演示 LangChain Agent 如何自主判斷並運用工具來完成任務。

3.1. Demo 1:介紹 SpaceX [101]

  1. 任務:讓 Agent 介紹 SpaceX [104]
  2. Agent 的判斷與執行 [105]
    1. Agent 經過大模型判斷後,認為其現有知識結構已足以回答此問題 [107]
    2. 因此,它沒有調用任何工具(如搜尋或網站爬蟲),直接根據自身知識給出了答案 [107]
    3. 這顯示 Agent 能根據任務和自身能力,自主決定是否需要調用外部工具 [107]

3.2. Demo 2:詳細介紹 NVIDIA [108]

  1. 任務:讓 Agent 詳細介紹 NVIDIA [112]
  2. Agent 的判斷與執行 [109]
    1. Agent 判斷需要外部資訊,因此開始調用工具 [109]
    2. 執行步驟:
      1. 調用「搜尋」工具獲取相關資訊 [109]
      2. 調用「網頁爬蟲」工具抓取網頁內容 [109]
      3. 調用「總結」工具對抓取到的內容進行總結 [109]
    3. 結果:Agent 總結出了詳細的內容,並提供了爬取的連結 [112]
    4. 結論:Agent 完全自主地判斷並調用工具庫中的工具來完成任務,而非預先定義的流程 [113]

3.3. 未來展望與程式碼分享 [114]

  1. 多 Agent 互動:未來將介紹多個 Agent 之間如何進行配合、工作、甚至遊戲和娛樂的專案 [114]
  2. 程式碼分享:所有程式碼將上傳至 GitHub,供使用者下載、運行和體驗 [98]