紅桃A:《LangChain 入門指南》

2024年2月6日 15点热度 0人点赞

LangChain作為大模型集成框架鼎鼎大名,最近剛出的這本《LangChain入門指南》是一本很及時的書,值得推薦~

01

為什麼需要LangChain

首先想象一個開發者在構建一個LLM應用時的常見場景。

當你開始構建一個新項目時,你可能會遇到許多API接口、數據格式和工具。對於一個非AI領域的開發者來說,要去研究每一個工具、接口都有著巨大的負擔。

現在,假設你要構建一個涉及語言處理的應用,比如一個智能聊天機器人,你可能會想:我難道要一步步去學習如何訓練一個語言模型,如何處理各種數據,還要解決所有的兼容性問題嗎?

這就是LangChain的價值所在。

LangChain是一個集成框架,它為開發者提供了一系列的工具和組件,使得與語言模型中各種數據(如Google Analytics、Stripe、SQL、PDF、CSV等)的連接、語言模型的應用和優化變得簡單直接。

其實,LangChain就好比一把“瑞士軍刀”,你不再需要為每一個任務找一個新工具,它提供了一站式的解決方案。正如你要修理一個小小的傢用電器,而你已經擁有了一個完整的工具箱。不管你遇到什麼問題,打釘子、擰螺絲、剪線,工具箱裡總有一個合適的工具等著你。LangChain為你提供了這樣的工具箱,不僅涵蓋了基礎工具,還為個性化需求提供了自定義組件解決方案。

現在,隨著LangChain在開發者社區中的受歡迎程度逐漸上升,可以明顯地看到使用LangChain的開發者數量呈現激增的趨勢。

2023年8月,LangChain開源框架已經收獲了驚人的數據:5.82萬個星標、557位專註開發者,以及7800位積極的分支開發者。這些數字從深層次上代表了眾多開發者對LangChain實用性和未來潛力的堅定認可。

正是因為LangChain連接了開發者和復雜的LLM應用,因此,開發變得更為簡單、高效。也因為這種受歡迎程度和媒體報道的廣泛傳播,越來越多的開發者,不論是LLM領域的還是非LLM領域的,都選擇使用LangChain。

02

LLM應用開發的最後1公裡

想象一下,一個對編程完全陌生的初學者,正面臨著如何與模型進行交互的諸多問題,哪怕是簡單的GET或POST請求,都可能成為其開發路上的第一道門檻。而LangChain的存在恰恰能跨越這道門檻,使得LLM應用開發變得觸手可及。

首先,LangChain的簡潔性讓它脫穎而出。開發者隻需要寫幾行代碼,就能運行一個大型LLM程序,甚至快速構建一個響應式的機器人。這種簡潔性意味著,無論是對於有經驗的開發者還是初入此領域的新手,LangChain都能為他們進入LLM應用開發的世界鋪平道路。

LangChain還為開發者集成了豐富的內置鏈組件,為開發者解決了重復編寫代碼的問題。面對特定的任務,如摘要或問答,LangChain提供了專門的摘要鏈和問答鏈,簡化了開發流程。Agent的引入將工具和數據庫的整合提升到了一個新的層次,使得開發者可以全心投入任務。

借助LangChain,開發者除了可以實現LLM與真實世界的在線數據增強,即RAG(檢索增強生成),還能在私有環境中部署模型,或是針對特定任務選擇更精確的模型平臺及型號,甚至隨時切換各大平臺推出的新模型。

而對於那些未選擇使用LangChain的開發者來說,他們很可能會被各模型平臺的接口選擇、提示詞的編寫,以及輸出格式的處理等問題所困擾,這些復雜的問題會成為開發過程中的巨大障礙,甚至導致開發者“從入門到放棄”。

在LLM應用開發中,一個經常被遺漏但至關重要的環節是,如何為LLM編寫合適的提示詞,確保LLM能夠準確理解開發者的意圖。對於許多開發者,特別是初學者來說,這可能是一個具有挑戰性的任務。然而,LangChain為這一問題提供了有力的解決方案。

對於那些在模型提示詞編寫上感到困惑的開發者來說,LangChain提供了多種模板供選擇。這並不僅僅是一些隨意整合的模板,而是與各種應用、工具緊密集成的組件,其中包含了大量已經經過實際驗證的提示詞模板。這意味著開發者無須從零開始編寫程序,隻需要在LangChain提供的模板中找到與任務相匹配的部分,並進行相應的調整即可。

以SQL查詢為例,這是一個對許多開發者來說相對熟悉,但在與LLM結合時可能存在困惑的領域。如果一個開發者剛開始接觸如何為SQL編寫提示詞,他可以輕松地在LangChain中找到SQL組件的提示詞模板。這些模板中包括如何編寫語法正確的PostgreSQL查詢、如何查看查詢結果,以及如何返回針對輸入問題的答案。更進一步,LangChain提供的提示詞模板也包括各種查詢的最佳實踐,如限制PostgreSQL查詢結果、正確使用列名、註意使用當前日期的函數等。

例如,LangChain提供了以下格式化SQL提示詞模板(翻譯):

1 你是一個PostgreSQL專傢。給定一個輸入問題,首先創建一個語法正確的PostgreSQL查詢來運行,然後查看查詢結果,並返回針對輸入問題的答案。

2 除非用戶明確指定了要返回的結果數量,否則應使用PostgreSQL的LIMIT子句來限制查詢結果,最多返回top_k條記錄。你可以對結果進行排序,以返回數據庫中最有信息價值的數據。

3 絕對不要查詢表中的所有列。你隻能查詢回答問題所需的列。用雙引號(")將每個列名包裹起來,表示它們是界定的標識符。

4 註意隻使用你在表中可以看到的列名,不要查詢不存在的列。此外,要註意哪一列在哪個表中。

5 如果問題涉及“今天”,請註意使用CURRENT_DATE函數獲取當前日期。

6

7 使用以下格式:

8

9 問題:這裡的問題

10 SQL查詢:要運行的SQL查詢

11 SQL結果:SQL查詢的結果

12 答案:這裡的最終答案

13

14 隻使用以下表:

15

16 {table_info}

17

18 問題:{input}

想象一下,如果沒有LangChain提供的這個提示詞模板,當你要開始編寫一段SQL查詢代碼時,會走多少彎路?

LLM應用開發的最後1公裡,其意義是確保開發者無須為了一個小細節而多走彎路,正如居民無須跑很遠坐公交車一樣,每一個關鍵的細節都能得到及時而準確的處理,使得整個開發過程更為高效。

03

LangChain的2個關鍵詞

在現代軟件工程中,如何將龐大復雜的系統劃分為更小、更易於管理和使用的部分,已經成了設計和開發的核心考量。在這個背景下,LangChain以“組件”和“鏈”作為2個關鍵概念,為LLM應用開發者提供了便利。

首先來談談“組件”。

在LangChain中,組件不是代碼的拼湊,而是一個具有明確功能和用途的單元。組件包括LLM模型包裝器、聊天模型包裝器及與數據增強相關的一系列工具和接口。這些組件就是LangChain中的核心,你可以把它們看作數據處理流水線上的各個工作站。每個組件都有其特定的職責,如處理數據的輸入輸出、轉化數據格式。

然而,單純的組件還不足以滿足復雜應用的需求,這時“鏈”便顯得尤為關鍵。在LangChain的體系中,鏈是將各種組件連接在一起的紐帶,它能夠確保組件之間的無縫集成和在程序運行環境中的高效調用。無論是對於LLM還是其他工具,鏈都扮演著至關重要的角色。舉個例子,LLMChain,這是LangChain中最常用的鏈,它可以整合LLM模型包裝器和記憶組件,讓聊天機器人擁有“記憶”。

值得一提的是,LangChain並沒有止步於提供基礎的組件和鏈。反之,它進一步為這些核心部分提供了標準的接口,並與數據處理平臺及實際應用工具緊密集成。這樣的設計不僅強化了LangChain與其他數據平臺和實際工具的連接,也確保了開發者能在一個開放且友好的環境中輕松地進行LLM應用開發。

以最常見的聊天機器人為例,為了在各種場景中為用戶提供自然、流暢的對話體驗,聊天機器人需要具備多種功能,包括與用戶進行日常交流、獲取天氣信息及實時搜索。這一設計目標意味著要處理的任務范圍覆蓋了從簡單的日常對話到復雜的信息查詢,因此,一個結構化、模塊化的設計方案是必要的。

在此背景下,LangChain 的“組件”和“鏈”提供了極大的幫助。利用LangChain的組件,開發者可以為聊天機器人設計不同的模塊,如與用戶進行日常交流的模塊、獲取天氣信息的模塊及進行實時搜索的模塊。每個模塊中的組件都具備特定的功能,並專門處理與之相關的任務。例如,當需要回答關於天氣的問題時,機器人可以調用“搜索工具組件”來獲取天氣信息數據。

但是,單純的組件無法滿足機器人的整體運作。為了確保組件之間可以協同工作並為用戶提供順暢的體驗,需要用到LangChain的“鏈”來整合這些組件。例如,當用戶詢問一個涉及多個組件的問題時,如“今天天氣怎麼樣,同時告訴我量子力學是什麼”,LangChain的鏈就可以確保“搜索工具組件”和“維基百科查詢組件”協同工作,為用戶提供完整的回答。

具體來說,當用戶提出問題時,LangChain提供的API允許機器人執行以下操作:

(1)請求LLM解釋用戶的輸入,並根據輸入內容生成對應的查詢請求,這可能涉及一個或多個組件;

(2)根據生成的查詢請求,激活對應的組件以獲取必要的數據或信息;

(3)利用LLM生成基於自然語言的回答,將各組件的返回結果整合為用戶可以理解的回答。

通過這種方式,開發者無須深入每一個復雜的處理細節,隻需要利用LangChain的API輸入用戶的問題,並將得到的答案呈現給用戶即可。這不僅使聊天機器人能夠提供豐富的信息服務,還能確保LLM應用自然而然地融入人們的日常生活,達到設計初衷。

04

LangChain的3個場景

LangChain正在重新定義LLM應用的開發方式,尤其是在問答系統、數據處理與管理、自動問答與客服機器人這3個場景下。以下是對LangChain在這3個場景下作用的分析。

第1個場景是問答系統。問答系統已經成為許多LLM應用的重要組成部分,從簡單的搜索工具到復雜的知識庫查詢工具。LangChain在這方面展現了其出色的能力。當開發者面臨需要從長篇文章或特定數據源中提取信息的挑戰時,LangChain 可以輕松地與這些外部數據源交互,迅速提取關鍵信息,然後執行生成操作,以生成準確的回答。

第2個場景是數據處理與管理,如RAG。在數據驅動的當下,RAG成了一個非常熱門的LLM應用落地方向。RAG結合了檢索和生成兩個階段,為用戶提供了更為精準和富有深度的回答。LangChain采用了LEDVR工作流,實現了RAG的功能。

LEDVR工作流將數據處理的每一個步驟標準化,確保了數據從輸入到輸出的完整性和準確性。首先,開發者會使用文檔加載器,如WebBaseLoader,從外部數據源導入所需的數據。這一步確保了數據的完整性和原始性。

接著,數據會被傳輸到嵌入包裝器,如OpenAIEmbeddings中。這一步的主要目的是將每一份文檔轉化為一個能夠在機器學習模型中使用的向量。這個向量能夠捕獲文檔的主要特征,使得後續的處理更為高效。

為了更好地處理大量的數據,LangChain中引入了分塊轉化步驟。通過使用如
RecursiveCharacterTextSplitter這樣的工具,文檔被切割成更小的數據塊。這不僅提高了處理速度,還使得每一個數據塊都能得到更為精準的處理。

當所有的數據塊都被處理完畢,它們會被存儲到向量存儲系統,如FAISS中。這個存儲系統能夠確保數據的安全,同時也能提供一個高效的查詢接口。

最後,檢索器(如
ConversationalRetrievalChain)被用來從向量存儲系統中檢索相關的文檔。這一步結合了用戶查詢和向量存儲系統中的數據,為用戶提供了最為相關的回答。

第3個場景是自動問答與客服機器人。在許多在線平臺上,客服機器人已經成為用戶與公司之間的首要交互點。利用LangChain,開發者成功構建了能夠實時響應用戶查詢的客服機器人。這種實時響應得益於LangChain的Agent功能,其中涉及LLM決策,並根據反饋不斷優化交互的過程。這樣的設計使客服機器人不僅能夠及時響應,還能提供更加精確的信息或解決方案。

LangChain已經在這3個關鍵場景中展現了強大的潛力,為開發者提供了實用且強大的工具,使開發者可以更加高效地實現各種開發需求。

05

LangChain的6大模塊

針對LLM應用開發者的需求,LangChain推出了6大核心模塊。

這些模塊覆蓋了從模型I/O到數據增強,從鏈到記憶,以及從Agent到回調處理器的全方位功能。

借助這些模塊中的包裝器和組件,開發者能夠更為方便地搭建LLM應用。

1. 模型I/O(Model IO):對於任何大語言模型應用來說,其核心無疑都是模型自身。LangChain提供了與任何大語言模型均適配的模型包裝器(模型I/O的功能),分為LLM和聊天模型包裝器(Chat Model)。模型包裝器的提示詞模板功能使得開發者可以模板化、動態選擇和管理模型輸入。LangChain自身並不提供大語言模型,而是提供統一的模型接口。模型包裝器這種包裝方式允許開發者與不同模型平臺底層的API進行交互,從而簡化了大語言模型的調用,降低了開發者的學習成本。此外,其輸出解析器也能幫助開發者從模型輸出中提取所需的信息。

2. 數據增強(Data Connection):許多LLM應用需要的用戶特定數據並不在模型的訓練集中。LangChain提供了加載、轉換、存儲和查詢數據的構建塊。開發者可以利用文檔加載器從多個來源加載文檔,通過文檔轉換器進行文檔切割、轉換等操作。矢量存儲和數據檢索工具則提供了對嵌入數據的存儲和查詢功能。

3. 鏈(Chain):單獨使用LLM對於簡單應用可能是足夠的,但面對復雜的應用,往往需要將多個LLM模型包裝器或其他組件進行鏈式連接。LangChain為此類“鏈式”應用提供了接口。

4. 記憶(Memory):大部分的LLM應用都有一個對話式的界面,能夠引用之前對話中的信息是至關重要的。LangChain提供了多種工具,幫助開發者為系統添加記憶功能。記憶功能可以獨立使用,也可以無縫集成到鏈中。記憶模塊需要支持兩個基本操作,即讀取和寫入。在每次運行中,鏈首先從記憶模塊中讀取數據,然後在執行核心邏輯後將當前運行的輸入和輸出寫入記憶模塊,以供未來引用。

5. Agent:核心思想是利用LLM選擇操作序列。在鏈中,操作序列是硬編碼的,而在Agent代理中,大語言模型被用作推理引擎,確定執行哪些操作,以及它們的執行順序。

6. 回調處理器(Callback):LangChain提供了一個回調系統,允許開發者在LLM應用的各個階段對狀態進行幹預。這對於日志記錄、監視、流處理等任務非常有用。通過API提供的callbacks參數,開發者可以訂閱這些事件。


本文摘自LangChain入門指南:構建高可復用、可擴展的LLM應用程序一書!

如果你想更多了解這門迅速發展的大模型技術框架,歡迎閱讀這本書~~

本書由LangChain中文網聯合創始人李特麗與創始人康軼文共同編著!

本書專門為那些對自然語言處理技術感興趣的讀者提供了系統的LLM應用開發指南。

全書分為11章,從LLM基礎知識開始,通過LangChain這個開源框架為讀者解讀整個LLM應用開發流程。

  • 第1~2章概述LLM技術的發展背景和LangChain框架的設計理念。

  • 從第3章開始,分章深入介紹LangChain的6大模塊,包括模型I/O、數據增強、鏈、記憶等,通過大量代碼示例讓讀者了解其原理和用法。

  • 第9章通過構建PDF問答程序,幫助讀者將之前學習的知識應用於實踐。

  • 第10章則介紹集成,可拓寬LangChain的用途。

  • 第11章為初學者簡要解析LLM的基礎理論,如Transformer模型等。

本書以LangChain這個讓人熟悉的框架為主線,引導讀者一步一步掌握LLM應用開發流程,適合對大語言模型感興趣的開發者、AI應用程序開發者閱讀。