【本書要點】
☆LangChain生態系統概覽
☆環境準備
☆角色扮演寫作實戰
☆多媒體資源的摘要實戰
☆文件導向的對話機器人實戰
☆自然語言交流的搜尋引擎實戰
☆快速建構互動式LangChain應用原型
☆使用生態工具加速LangChain應用程式開發
☆LangChain, LlamaIndex, AutoGen比較
【內容簡介】
本書分9章,第1章介紹LangChain的生態系統設定,並解析一個官方生產級應用Chat LangChain,幫助讀者初步認識該生態系統。第2章介紹Ollama的使用和llama2-chinese模型的部署,第3章到第6章結合應用場景深入講解LangChain的核心模組及LCEL語法和Runnable Sequence中的可用元件,包括第3章角色扮演寫作實戰,講解Model I/O三元組概念和應用。第4章探討如何使用LangChain處理多媒體資源中的文字內容。第5章講解Retriever模組機制和應用,以及檢索增強生成的流程及元件。第6章詳述利用Agent和思考鏈構建自然語言處理搜尋引擎,並介紹Callback模組。第7章介紹如何使用Streamlit和Chainlit框架快速轉化為本地和雲端應用。第8章深入講解LangSmith、LangServe和Templates&CLI三個關鍵工具,LangSmith用於監控LangChain應用,LangServe用於將應用部署至API,提高可存取性和性能,Templates&CLI用於快速啟動專案。第9章分析比較LangChain、LlamaIndex、AutoGen框架,探討LangChain Hub的應用場景和通用人工智慧的認知架構發展。
作者簡介:
張海立
網路暱稱:滄海九粟
馭勢科技雲平臺研發總監,中國資訊通信研究院「汽車雲工作組」首批專家,目前專注的領域是無人駕駛運維平臺的標準化和智慧化研究。同時作為開源愛好者和佈道師,長期關注和致力於雲原生與前沿互聯網技術的推廣,現擔任KubeSphere用戶委員會上海站站長,也是CNCF OpenFunction 項目管委會成員。曾就職於英特爾亞太研發有限公司,擔任高級研發經理和架構師。
曹士圯
網路暱稱:萬千十一
前全棧資料科學家,關注大資料分析、建模及架構等;現為獨立AI工程師,聚焦於大語言模型智慧體的發展及行業應用,同時關注各類大語言模型的端側部署推理應用。資料玩家、工具狂魔,開源愛好者,樂於寫作和分享。
郭祖龍
馭勢科技雲平臺研發經理。關注雲原生可觀測性、loT相關技術、流式計算等。I人丈夫,新晉奶爸,熱愛運動,喜歡旅行。
作者序
前言
在過去的十五年裡, 我從HTML5 的初探者成長為雲端原生(Cloud Native) 的實踐者, 最終步入通用人工智慧(Artificial General Intelligence,AGI)的時代進行探索。每個時代都有其獨特的技術特點和發展趨勢,而我始終堅信,無論時代如何變遷,將理論知識和技術應用緊密結合都是非常重要的。
在HTML5 時代,我見證了Web 技術的高速發展,它不僅改變了人們使用網際網路的習慣,也為後來的技術發展奠定了基礎。進入雲端原生時代後,我的研究領域擴充到了容器化、微服務、Serverless 等技術,這些技術極大地提高了軟體開發的效率和靈活性。如今,隨著通用人工智慧時代的到來,我見證了大型語言模型的崛起,它們在語言處理、影像辨識等領域展現出驚人的潛力。但與此同時,我也意識到,充分發揮這些大型語言模型的能力需要有效的應用程式開發框架來支援。LangChain 正是在這樣的背景下嶄露頭角的。
LangChain 是一個開放原始碼的大型語言模型應用程式開發框架,它不僅功能強大,而且易於學習和使用。在探索LangChain 的過程中,我深切地感受到,無論是前端開發者還是後端開發者,無論是否具備AI 專業知識,都可以透過LangChain 來開發自己的應用和產品。這激發了我透過架構圖繪製、影片講解和案例分享的方式,盡可能地將LangChain 的複雜概念和應用技巧簡化,從而將我學習到的知識和經驗傳播給更多的人的熱情。在這個過程中,我與社群成員們共同探討技術難題,交流心得。這種互動不僅使我能夠深入地理解LangChain,更重要的是,它讓我意識到知識傳播的價值。我希望透過我的努力,能夠幫助初學者和同行更進一步地理解和應用LangChain。
為了更進一步地向社群夥伴們傳遞LangChain 的最新技術和應用方法,我與兩位LangChain 同好——曹士圯、郭祖龍緊密合作,共同撰寫了本書。我們的目標是,基於LangChain 的核心理念和功能,為讀者提供全面、深入的學習路徑。在這個過程中,我們不僅會和大家一起探索LangChain 的開放原始碼穩定版本(0.1),也會著眼於整個LangChain 生態系統,對其進行多維度展示。
我們在書中特別強調了LangChain 的最新應用程式開發方式,例如LCEL。這種方式不僅代表了LangChain 技術的前端,也表現了我們對技術傳播和實用性的重視。我們致力於透過清晰的講解、實際的案例分析和易於理解的範例程式,幫助讀者深入理解LangChain 的工作原理和應用場景。
透過本書,我們希望能夠激發讀者對LangChain 的興趣,為他們提供可靠的學習資源。我們相信,無論是技術新手還是有經驗的開發者,都能從中獲得寶貴的知識和靈感,進而在自己的專案和研究中使用LangChain 開發出具有創新性和有效的解決方案。
在深入閱讀本書之前,這幾點建議可能會幫助您更進一步地理解和應用書中的內容。首先,本書假設您具備基本的Python 程式設計能力,以及在Linux或macOS 系統上進行軟體安裝的基礎知識。這些技能將幫助您更順暢地理解書中的範例程式和操作步驟。其次,我們建議您採取兩個階段的閱讀方法來深化對LangChain 的理解。
• 初步閱讀:在首次閱讀時,建議您整體瀏覽全書,了解LangChain 生態系統的基本概念和組成部分。特別是理解各個元件在LangChain 生態系統中的角色和功能。此時,可以初步瀏覽範例程式部分,無須深入。
• 深入閱讀:在第二次閱讀時,建議您結合範例程式深入理解LangChain的開發細節。您可以重點閱讀單獨介紹LCEL 語法和Runnable Sequence中可用元件的相關小節,以此來有效地熟悉和掌握LangChain 推薦的思維鏈撰寫方式。書中所有的範例程式都可以運行,您可以從GitHub 程式庫中獲取並進行實際操作,以加深理解。
本書共分為9 章,每章圍繞LangChain 的不同方面展開,旨在提供全面而深入的指導。
「第1 章 LangChain 生態系統概覽」是必讀內容, 為讀者全面介紹LangChain 生態系統的版面配置,並且透過解析一個官方的生產級應用ChatLangChain,幫助讀者初步認識LangChain 生態系統。
「第2 章 環境準備」對讀者隨閱讀進行程式的撰寫來說非常關鍵,這一章的重點是Ollama 的使用和llama2-chinese 模型的部署。
第3 章到第6 章結合具體的應用場景,深入講解LangChain 的核心模組。同時,會詳細介紹LCEL 語法和Runnable Sequence 中可用的Runnable 組件。在實際撰寫程式前,建議重點閱讀這幾章。
「第3 章 角色扮演寫作實戰」引入並講解Model I/O 三元組的概念和應用。
「第4 章 多媒體資源的摘要實戰」探討如何使用LangChain 載入、處理多媒體資源中的文字內容。
「第5 章 文件導向的對話機器人實戰」深入講解Retriever 模組的機制和應用,同時解析檢索增強生成(Retrieval Augmented Generation,RAG)的流程及其關鍵元件。
「第6 章 自然語言交流的搜尋引擎實戰」詳述如何利用Agent 和思維鏈建構自然語言處理的搜尋引擎,並且介紹了Callback 模組的功能。
「第7 章 快速建構互動式LangChain 應用原型」介紹如何將思維鏈快速轉化為本地和雲端應用,特別介紹了如何使用Streamlit 和Chainlit 框架在雲端快速發佈原型。
「第8 章 使用生態工具加速LangChain 應用程式開發」深入講解3 個關鍵的生態工具——LangSmith、LangServe 和Templates&CLI。
• LangSmith: 詳細介紹LangSmith 的功能和如何使用LangSmith 監控LangChain 應用。
• LangServe:詳細介紹如何將LangChain 應用部署至API,提高應用的可存取性和性能。
• Templates&CLI:詳細介紹如何使用應用範本和命令列介面快速啟動LangChain 專案。
「第9 章 我們的' 大世界'」展望更廣闊的大型語言模型應用程式開發領域。本章不僅分析和比較了LangChain、LlamaIndex、AutoGen 框架,還探討了基於LangChain Hub 的各種應用場景和通用人工智慧的認知架構的發展。
• 大型語言模型應用程式開發框架的「你我他」:分析和比較三大框架的特點和應用場景。
• 從LangChain Hub 看提示詞的豐富應用場景:基於LangChain Hub,總結熱門提示詞領域及其豐富的應用場景。
• 淺談通用人工智慧的認知架構的發展:討論通用人工智慧的認知架構概念,以及其在開放原始碼和閉源發展中的現狀和趨勢。
本書中所有的範例程式及其參考資料都可以從GitHub 程式庫中獲取。
感謝支援和幫助我們的家人們,是他們的理解和包容,才讓本書得以完成。在我們疲憊或灰心時,是家人們的關懷支持著我們繼續前行。
同時,我們也要感謝電子工業出版社的孫學瑛老師。她專業的指導幫助我們邏輯清晰地組織了本書的內容,使本書更加易讀好用。她嚴謹的工作態度和敬業精神,也激勵著我們不斷完善作品。
LangChain 是一個非常有前途和影響力的框架,它的快速發展讓所有參與者都對它充滿熱情和期待。然而,任何新事物在發展過程中都難免遇到困難。作為早期檢視者,我們的能力和經驗有限,在內容創作上也會不可避免地存在一些缺陷。如果各位讀者發現內容中有任何錯誤或不足之處,請您提出寶貴意見,我們會虛心接受、認真改進。
最後,我們由衷地感謝所有的讀者,您的支持就是我們最大的動力。我們衷心希望本書能成為您的有益工具。透過本書,我們也希望能夠幫助更多的開發者和技術同好走在技術的前端,探索和創造更多的可能。
張海立
2024 年3 月
前言
在過去的十五年裡, 我從HTML5 的初探者成長為雲端原生(Cloud Native) 的實踐者, 最終步入通用人工智慧(Artificial General Intelligence,AGI)的時代進行探索。每個時代都有其獨特的技術特點和發展趨勢,而我始終堅信,無論時代如何變遷,將理論知識和技術應用緊密結合都是非常重要的。
在HTML5 時代,我見證了Web 技術的高速發展,它不僅改變了人們使用網際網路的習慣,也為後來的技術發展奠定了基礎。進入雲端原生時代後,我的研究領域擴充到了容器化、微服務、Serverless 等技術,這些技術極大地提高了軟體開發的效率和...
目錄
第1章 LangChain 生態系統概覽
1.1 LangChain 生態系統的版面設定
1.1.1 LangChain 軟體套件的組織方式
1.1.2 LangChain 核心功能模組概覽
1.2 從Chat LangChain 應用看生態實踐
1.2.1 讀取和載入私域資料
1.2.2 資料前置處理及儲存
1.2.3 基於使用者問題的資料檢索
1.2.4 基於檢索內容的應答生成
1.2.5 提供附帶中間結果的流式輸出
1.2.6 思維鏈的服務化和應用化
1.2.7 追逐生產環境的調研鏈和指標
第2章 環境準備
2.1 在VS Code 中開啟並使用Jupyter Notebook
2.2 透過python-dotenv 隱式載入環境變數
2.3 使用Ollama 載入大型語言模型
第3章 角色扮演寫作實戰
3.1 場景程式範例
3.2 場景程式解析
3.3 Model I/O 三元組
3.3.1 Prompt 模組
3.3.2 Model 模組
3.3.3 Output Parser 模組
3.4 LCEL 語法解析:基礎語法和介面
3.4.1 Runnable 物件的標準介面
3.4.2 Runnable 物件的輸入和輸出
3.4.3 Runnable 物件的動態參數綁定
3.4.4 審查鏈路結構和提示詞
3.5 Runnable Sequence 的基座:Model I/O 三元組物件
第4章 多媒體資源的摘要實戰
4.1 場景程式範例
4.2 場景程式解析
4.3 Document 的載入與處理
4.3.1 文件載入器
4.3.2 文件轉換器
4.3.3 文字分割器
4.4 3 種核心文件處理策略
4.4.1 Stuff 策略:直接合併
4.4.2 MapReduce 策略:分而治之
4.4.3 Refine 策略:循序迭代
4.5 LCEL 語法解析:RunnableLambda 和RunnableMap
4.5.1 RunnableLambda
4.5.2 RunnableMap
第5章 文件導向的對話機器人實戰
5.1 場景程式範例
5.2 場景程式解析
5.3 RAG 簡介
5.3.1 什麼是RAG
5.3.2 RAG 的工作原理
5.4 LangChain 中的RAG 實現
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.6 Indexing API 簡介
5.6.1 刪除模式
5.6.2 使用場景和方式
5.7 Chain 模組和Memory 模組
5.7.1 透過Retrieval QA Chain 實現文件問答
5.7.2 透過Conversational Retrieval QA Chain 實現階段文件問答
5.7.3 透過Memory 模組為對話過程保駕護航
5.8 長上下文記憶系統的建構
5.8.1 階段記憶系統
5.8.2 語義記憶系統
5.8.3 生成式Agent 系統
5.8.4 長上下文記憶系統的建構要點
5.9 LCEL 語法解析:RunnablePassthrough
5.10 Runnable Sequence 的資料連接:Retriever 物件
第6章 自然語言交流的搜尋引擎實戰
6.1 場景程式範例
6.2 場景程式解析
6.3 Agent 簡介
6.3.1 Agent 和Chain 的區別
6.3.2 Agent 的思維鏈
6.4 Agent 的工具箱
6.5 OpenAI 導向的Agent 實現
6.6 Callback 回呼系統簡介
6.7 Callback 和verbose 的關係
6.8 LCEL 語法解析:RunnableBranch 和鏈路異常回退機制
6.8.1 RunnableBranch
6.8.2 鏈路異常回退機制
6.9 Runnable Sequence 的擴充:外部工具的連線
6.10 LangGraph:以圖的方式建構Agent
第7章 快速建構互動式LangChain 應用原型
7.1 Streamlit 及免費雲端服務「全家桶」
7.1.1 環境準備
7.1.2 極簡開發
7.1.3 即時互動
7.1.4 雲端部署
7.2 使用Chainlit 快速建構互動式文件對話機器人
7.2.1 環境準備
7.2.2 簡單範例
7.2.3 互動式文件對話機器人
第8章 使用生態工具加速LangChain 應用程式開發
8.1 LangSmith:全面監控LangChain 應用
8.1.1 追蹤LangChain 應用
8.1.2 資料集與評估
8.1.3 LangChain Hub
8.2 LangServe:將LangChain 應用部署至Web API
8.2.1 快速開始
8.2.2 原理詳解
8.3 Templates & CLI:從範本和腳手架快速啟動
8.3.1 LangChain Templates
8.3.2 LangChain CLI 命令列工具
8.3.3 最佳化升級
第9章 我們的「大世界」
9.1 大型語言模型應用程式開發框架的「你我他」
9.1.1 三大框架的簡介
9.1.2 三大框架的特性
9.1.3 三大框架的對比
9.2 從LangChain Hub 看提示詞的豐富應用場景
9.2.1 場景寫作
9.2.2 資訊總結
9.2.3 資訊提取
9.2.4 程式分析和評審
9.2.5 提示最佳化
9.2.6 RAG
9.2.7 自然語言SQL 查詢
9.2.8 評價評分
9.2.9 合成資料生成
9.2.10 思維鏈
9.3 淺談通用人工智慧的認知架構的發展
第1章 LangChain 生態系統概覽
1.1 LangChain 生態系統的版面設定
1.1.1 LangChain 軟體套件的組織方式
1.1.2 LangChain 核心功能模組概覽
1.2 從Chat LangChain 應用看生態實踐
1.2.1 讀取和載入私域資料
1.2.2 資料前置處理及儲存
1.2.3 基於使用者問題的資料檢索
1.2.4 基於檢索內容的應答生成
1.2.5 提供附帶中間結果的流式輸出
1.2.6 思維鏈的服務化和應用化
1.2.7 追逐生產環境的調研鏈和指標
第2章 環境準備
2.1 在VS Code 中開啟並使用Jupyter Notebook
2.2 透過python-dotenv 隱式載入環境變數
2.3 使用Ollama ...