【本書特色】
★模型的輸入與輸出
★檢索增強生成(RAG)技術
★代理(Agent)技術
★提示詞工程
★載入器、轉換器、向量儲存、檢索器、鏈及記憶
★代理(Agent)技術
★LangGraph多智慧體
★回呼、安全與隱私、評估、
★追蹤偵錯平臺LangSmith
★部署框架LangServe
★應用範本商店LangChain Templates
★零程式AI應用建構平臺Flowise
【書籍內容】
AI時代在ChatGPT之後正式進入「iPhone」年代。
人工智慧的普及化已經開始,尤其是大型語言模型和AI繪圖工具如Stable Diffusion與Midjourney,成為當前的焦點。大型語言模型被視為智慧的「大腦」,廣泛應用於日常生活中。
在此背景下,LangChain的出現使得AI應用的快速開發成為可行,其影響力持續擴大。LangChain不僅提供了豐富的開發工具,還因其龐大的使用者基礎而擁有許多頂級工具,開發人員能夠利用成熟資源和最新技術來開發應用,成為大型語言模型應用開發的關鍵框架,目前並演變成開發、偵錯、部署及應用商店的完整生態系統。LangChain社群的快速成長,越來越多的開發者對如何利用LangChain構建AI應用需求與日俱增。
本書提供LangChain的詳細開發指導,並深入探討其背後的原理,是目前市面上唯一探討ReACT技術的書籍。 作者
王浩帆
從事影視及遊戲相關流程開發十餘年,長期關注並探索大語言模型及其他人工智慧技術在影視及遊戲行業的應用落地。作為開源技術愛好者,不僅積極為LangChain等開源項目貢獻力量,也致力於開發個人的開源項目。
目錄
第1 章 大型語言模型及LangChain 介紹
▌1.1 大型語言模型介紹
1.1.1 大型語言模型總覽
1.1.2 大型語言模型的發展歷史
1.1.3 大型語言模型的優勢
1.1.4 大型語言模型的發展趨勢
1.1.5 總結
▌1.2 LangChain 介紹
1.2.1 LangChain 是什麼
1.2.2 為什麼使用LangChain
1.2.3 LangChain 的應用場景
1.2.4 如何使用LangChain
第2 章 LangChain 開發前的準備
▌2.1 建立OpenAI API Key
▌2.2 使用雲端Colab 進行互動式程式設計
2.2.1 什麼是Colab
2.2.2 如何使用Colab
▌2.3 使用本地Anaconda + JupyterLab 進行互動式程式設計
2.3.1 什麼是Anaconda
2.3.2 安裝與使用Anaconda
2.4 安裝LangChain 函式庫
第3 章 Model(模型)
▌3.1 Model 簡介
▌3.2 LLM 類模型
3.2.1 簡介
3.2.2 程式講解
▌3.3 Chat 類模型
3.3.1 簡介
3.3.2 程式講解
▌3.4 OpenAI 與ChatOpenAI 的區別
▌3.5 OpenAI API
3.5.1 什麼是Token
3.5.2 文字補全API:Completion
3.5.3 對話補全API:Chat Completion
3.5.4 常用參數講解
3.5.5 函式呼叫
▌3.6 自訂LangChain 模型類別
3.6.1 自訂大型語言模型
3.6.2 自訂聊天模型
▌3.7 快取
3.7.1 標準快取
3.7.2 串流式輸出
3.7.3 語義化快取
3.7.4 GPTCache
▌3.8 其他
3.8.1 非同步呼叫大型語言模型
3.8.2 模型配置序列化
3.8.3 使用Hugging Face
第4 章 大型語言模型及Prompt(提示)
▌4.1 Prompt 專案
4.1.1 組成Prompt 的要素
4.1.2 Prompt 的書寫技巧
4.1.3 Prompt 的生命週期
▌4.2 提示詞範本
4.2.1 PromptTemplate
4.2.2 PartialPromptTemplate
4.2.3 PipelinePromptTemplate
4.2.4 FewShotPromptTemplate
4.2.5 自訂提示詞範本
4.2.6 提示詞範本的序列化和反序列化
4.2.7 ChatPromptTemplate
4.2.8 MessagesPlaceholder
4.2.9 FewShotChatMessagePromptTemplate
▌4.3 範例選擇器
4.3.1 LengthBasedExampleSelector
4.3.2 SemanticSimilarityExampleSelector
4.3.3 MaxMarginalRelevanceExampleSelector
4.3.4 NGramOverlapExampleSelector
4.3.5 自訂範例選擇器
▌4.4 輸出解析器
4.4.1 CommaSeparatedListOutputParser
4.4.2 DatetimeOutputParser
4.4.3 EnumOutputParser
4.4.4 XMLOutputParser
4.4.5 StructuredOutputParser
4.4.6 PydanticOutputParser
4.4.7 OutputFixingParser
4.4.8 RetryWithErrorOutputParser
4.4.9 自訂輸出解析器
第5 章 Data Connection(資料連接)
▌5.1 檢索增強生成
5.1.1 什麼是檢索增強生成
5.1.2 檢索增強生成的工作流程
5.1.3 什麼是Embedding(嵌入)
5.1.4 重要的文字前置處理
▌5.2 Document Loader(文件載入器)
5.2.1 CSV 載入器
5.2.2 檔案目錄載入器
5.2.3 HTML 載入器
5.2.4 JSON 載入器
5.2.5 Markdown 載入器
5.2.6 URL 載入器
5.2.7 PDF 載入器
5.2.8 自訂載入器
▌5.3 Document Transformer(文件轉換器)
5.3.1 文字分割
5.3.2 文字中繼資料提取
5.3.3 文字翻譯
5.3.4 生成文字問答
▌5.4 Embedding 與Vector Store(嵌入與向量資料庫)
5.4.1 Embedding
5.4.2 本地向量儲存
5.4.3 雲端向量儲存
▌5.5 Retriever(檢索器)
5.5.1 基礎檢索器
5.5.2 多重提問檢索器
5.5.3 上下文壓縮檢索器
5.5.4 整合檢索器
5.5.5 父文件檢索器
5.5.6 多向量檢索器
5.5.7 自查詢檢索器
5.5.8 檢索內容重排
第6 章 Chain(鏈)
▌6.1 Chain 簡介
▌6.2 LLM Chain(LLM 鏈)
▌6.3 Sequential Chain(順序鏈)
6.3.1 SimpleSequentialChain
6.3.2 SequentialChain
▌6.4 Router Chain(路由鏈)
▌6.5 Transform Chain(轉換鏈)
▌6.6 Summarize Chain(總結鏈)
▌6.7 API Chain 與LLMRequestsChain
6.7.1 API Chain
6.7.2 LLMRequestsChain
▌6.8 SQL Chain(資料庫鏈)
6.8.1 SQLDatabaseChain
6.8.2 SQL Agent
▌6.9 QA Chain(問答鏈)
6.9.1 ConversationChain
6.9.2 RetrievalQA
6.9.3 ConversationalRetrievalChain
▌6.10 LangChain Expression Language(LCEL)
6.10.1 管道操作符號
6.10.2 在鏈中設置參數
6.10.3 配置
6.10.4 設置備用方案
6.10.5 獲取輸入並執行自訂函式
6.10.6 路由鏈
第7 章 Memory(記憶)
▌7.1 Memory 簡介
▌7.2 將歷史對話直接儲存成Memory
7.2.1 ConversationBufferMemory
7.2.2 ConversationBufferWindowMemory
7.2.3 ConversationTokenBufferMemory
▌7.3 將歷史對話總結後儲存成Memory
7.3.1 ConversationSummaryMemory
7.3.2 ConversationSummaryBufferMemory
▌7.4 透過向量資料庫將歷史資料儲存成Memory
▌7.5 多Memory 組合
▌7.6 實體記憶及實體關係記憶
7.6.1 透過記錄實體進行記憶
7.6.2 透過知識圖譜進行記憶
▌7.7 在使用LCEL 的鏈中增加記憶體元件
▌7.8 自訂Memory 元件
第8 章 Agent(代理)
▌8.1 簡介
▌8.2 ReAct 和Plan and Execute(計畫與執行)
8.2.1 ReAct
8.2.2 Plan and Execute(計畫與執行)
▌8.3 Agent 初探
▌8.4 Agent 類型
8.4.1 Chat ReAct
8.4.2 ReAct Document Store
8.4.3 Conversational
8.4.4 OpenAI Function
8.4.5 Self-Ask With Search
8.4.6 Structured Tool Chat
8.4.7 OpenAI Assistant
▌8.5 自訂Tool
8.5.1 使用Tool 物件
8.5.2 繼承BaseTool
8.5.3 使用Tool 裝飾器
8.5.4 Structured Tool
8.5.5 異常處理
▌8.6 人工驗證及輸入
8.6.1 預設人工驗證
8.6.2 自訂使用者審核
8.6.3 人工輸入
▌8.7 Agent 實際應用
8.7.1 結合向量儲存使用Agent
8.7.2 Fake Agent(虛構代理)
8.7.3 自訂Agent
8.7.4 自訂LLM Agent
8.7.5 自訂MRKL Agent
8.7.6 自訂具有工具檢索功能的Agent
8.7.7 Auto-GPT Agent
▌8.8 LangGraph
8.8.1 簡介
8.8.2 範例
第9 章 LangChain 的其他功能
▌9.1 回呼
9.1.1 簡介
9.1.2 自訂回呼處理
9.1.3 將日誌記錄到檔案中
9.1.4 Token 使用量追蹤
9.1.5 LLMonitor
▌9.2 隱私與安全
9.2.1 隱私
9.2.2 安全
▌9.3 Evaluation(評估)
9.3.1 簡介
9.3.2 字串評估器
9.3.3 比較評估器
9.3.4 軌跡評估器
▌9.4 LangSmith
9.4.1 簡介
9.4.2 收集與追蹤
9.4.3 評估
9.4.4 LangSmith Hub
▌9.5 LangServe
9.5.1 簡介
9.5.2 建構
9.5.3 呼叫
9.5.4 LangChain Templates
▌9.6 LangChain v0.1
▌9.7 總結
第10 章 案例開發與實戰
▌10.1 基於Streamlit 實現聊天機器人
10.1.1 簡介
10.1.2 實現
10.1.3 部署
▌10.2 基於Chainlit 實現PDF 問答機器人
10.2.1 簡介
10.2.2 實現
▌10.3 零程式AI 應用建構平臺:Flowise
10.3.1 簡介
10.3.2 執行
10.3.3 使用
序/導讀
前言
2024 年,人工智慧走向大眾化的序幕已經拉開。無論是聲勢浩大的大型語言模型,還是AI 繪圖領域的佼佼者,如Stable Diffusion 與Midjourney,皆已成為潮流之巔的焦點。其中,大型語言模型尤為矚目,其作為一顆閃耀著智慧之光的「大腦」,已廣泛融入人們生活的各個場景。在這一背景下,LangChain應運而生,這一建立在大型語言模型之上的框架,讓快速開發AI 應用成為可能,其影響力也正逐步擴大。LangChain 不僅為開發人員提供了大量的現成工具,同時受益於其廣泛的使用者群眾,很多尖端、具有實驗性質的工具也相繼被納入其中。這使得開發人員不僅能夠運用那些已極為成熟的資源去建構應用,同時能夠借助那些整合的工具,迅速洞悉並嘗試大型語言模型的最新技術。
目前,LangChain 已成為進行大型語言模型應用程式開發必須掌握的框架之一。隨著時間的演進,LangChain 已不再僅是一個大型語言模型開發框架,而是演化為一個包含開發、偵錯、部署乃至應用商店的整合式完整生態圈。
與此同時,LangChain 社區的快速壯大,正是其日益蓬勃發展的最佳見證。正值大型語言模型開發以潮湧之勢席捲而來之際,越來越多的開發人員對於怎樣利用LangChain 迅速建構AI 應用產生了濃厚的興趣。
在這樣的背景下,本書應運而生。本書不只為求知者呈上LangChain 的詳盡開發指南,更是以其中的諸多知識為軸心,向外擴散,深度闡述其背後的原理之美,甚至於途中不吝對基礎知識進行淺釋,讓讀者在領會「其然」的同時,也能參透「其所以然」。
本書結構
本書以五大核心要旨,即模型的輸入與輸出(Model I/O)、檢索增強生成(RAG)技術、代理(Agent)技術、其他知識及完整案例實踐為主線,精心編排為10 章,詳細說明闡釋:
第1 章介紹了當前大型語言模型的發展,並且從是什麼、為什麼使用、為何使用、應用場景四個維度對LangChain 進行了全面解讀。
第2 章細述了進行LangChain 開發前的各項準備工作,包括安裝LangChain函式庫、獲取OpenAI API Key、架設開發環境等,旨在幫助開發者掃清這部分的障礙。
第3 章對Model I/O 的Model( 模型) 部分進行了講解。不僅講解了LangChain Model 的使用,還對最常用的OpenAI 相關的API 及參數進行了深入講解。
第4 章主要講解了Model I/O 的I/O 部分。在輸入部分,不僅講解了LangChain 的提示詞範本, 還對提示詞工程進行了講解, 讓讀者可以借助LangChain 寫出更優秀的提示詞。在輸出部分,對大量的輸出解析器進行了講解及應用。
第5 ∼ 7 章:這部分重點闡釋了檢索增強生成(RAG)技術的原理與應用,內容涵蓋了載入器、轉換器、向量儲存、檢索器、鏈及記憶等關鍵元件的用法和高階操作技巧。
第8 章主要對代理(Agent)技術的原理和應用進行了深入講解,也對LangGraph 多智慧體框架進行了介紹。
第9 章對LangChain 其他元件及週邊生態進行了講解,如回呼、安全與隱私、評估、追蹤偵錯平臺LangSmith、部署框架LangServe、應用範本商店LangChain Templates 等。
第10 章旨在指導讀者從零開始逐步建構並部署應用,完成兩個完整的人工智慧應用程式開發項目,以及學習LangChian 的零程式AI 應用建構平臺Flowise。讀者不僅可以透過此過程鞏固學習成果,而且可以將所學知識用於打造專屬的應用。
本書面向的讀者
本書深入淺出地講解了豐富的前置知識和基本理論,因為LangChain 在本質上是一個便於AI 應用程式開發的框架,所以本書以應用程式開發實踐為主,未涉及大型語言模型的底層原理和相關晦澀的數學公式。
本書適合剛入門或想加入AI 行業的技術從業者、需要結合大型語言模型相關技術為業務賦能的產品經理、電腦相關專業的學生,以及AI 同好和自學者。
本書特色
(1) 內容全面更新, 融入了新版本特性和新動態。本書深入探討了LangChain 的全新運算式語言、LangGraph、LangSmith、LangServe 及LangChain Templates,並精研了一系列全新的API,例如Assistant Agent Type。
(2)系統講解,細節豐富。本書將相關的前置知識嵌入相應的章節中,確保讀者能夠按部就班地掌握從理論到實踐的知識。
(3)本書的結構設計讓內容自然銜接,避免了在章節之間跳來跳去的閱讀方式,不需要在搜尋引擎中尋找相關概念。我們追求的不只是對官方文件的講解,更是對整個LangChain 運行邏輯的深入講解,以及對LangChain 先進思想的學習。
(4)涵蓋LangChain 的深度內容。除了基礎知識,本書還深入介紹了LangChain 的隱私與安全、評估等高級主題,這些內容在市面上的其他資料中幾乎未被觸及。
(5)提供了豐富的實例程式和結果截圖。本書中的所有程式都經過嚴格測試,盡可能確保正常運行,這一點與LangChain 文件中僅提供部分程式的做法形成鮮明對比,大大減少了讀者在實踐本書中的程式時的偵錯工作。
(6)書中每個章節的程式均在GitHub 中提供,讀者可以很方便地獨立運行對應的程式部分來學習。
第1 章的部分內容參考了《LangChain 系列-01 是什麼》和《大型語言模型的演進》兩篇文章。第5 章的部分內容參考了How do domain-specific chatbots work? An Overview of Retrieval Augmented Generation(RAG) 一文。感謝這些資料為筆者撰寫本書提供的想法和啟發。