好書安利 | LangChain入門指南:構建高可復用、可擴展的LLM應用程序(送PDF)輕松入門LangChain

《LangChain入門指南》

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參數,開發者可以訂閱這些事件。

如果你想更多了解這門迅速發展的大模型技術框架,這份完整版的大模型 AI 學習資料已經上傳CSDN,朋友們如果需要可以微信掃描下方CSDN官方認證二維碼免費領取【保證100%免費

本書由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應用程序開發者閱讀。

圖片

這本書籍以及完整版的大模型 AI 學習資料已經上傳CSDN,朋友們如果需要可以微信掃描下方CSDN官方認證二維碼免費領取【保證100%免費

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36930.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

不使用canvs也能創建出點狀背景

div{ height: 100%; touch-action: none; background: radial-gradient(circle, #e6e6e6 1px, transparent 1px); /* 創建一個點狀背景 */ background-size: 15px 15px; /* 控制點的大小和間距 */ padding: 20px; /* 添加內邊距使內容不靠邊 */ position: relative; /* 讓內部內…

樹形DP——AcWing 323. 戰略游戲

樹形DP 定義 樹形動態規劃(Tree Dynamic Programming,簡稱樹形DP)是一種在樹形結構上應用動態規劃算法的技術。它利用樹的遞歸結構,通過定義狀態和狀態轉移方程,來求解與樹相關的最優化問題,如樹上的最長…

10秒教會你mysql的連接

連接MySQL數據庫通常可以通過多種方法實現,以下是幾種常見的方法,我將按照您的要求以清晰、分點的方式歸納說明: 1. 使用MySQL命令行客戶端 打開終端或命令提示符:首先,打開您的計算機上的終端或命令提示符窗口。輸入…

CSS中的display屬性:布局控制的關鍵

CSS的display屬性是控制元素在頁面上如何顯示的核心屬性之一。它決定了元素的顯示類型,以及它在頁面布局中的行為。本文將詳細介紹display屬性的不同值及其使用場景,幫助你更好地掌握布局控制。 display屬性的基本值 block 特點:塊級元素&…

LeetCode每日一題 2734.子串操作后的字典序最小字符串|標志位遍歷字符數組

問題描述 📋 子串操作后的字典序最小字符串 給定一個僅包含小寫字母的字符串,你可以執行如下操作任意次: 選擇某個子串,將其中的每個字符都替換成其前一個字母(比如 ‘b’ 變成 ‘a’,‘c’ 變成 ‘b’&…

未來數據中心智能運維的趨勢

隨著信息技術的飛速發展,數據中心作為支撐企業信息化建設的核心樞紐,其運維管理的重要性日益凸顯。傳統的運維模式已難以滿足現代數據中心高效、安全、靈活的需求,而智能運維正成為行業發展的新趨勢。本文將結合運維行業的資料和團隊經驗&…

【JavaScript 小工具】——如何判斷當前頁面是否在微信瀏覽器中打開

要判斷用戶是否通過微信瀏覽器打開網頁,你可以檢查用戶代理(User Agent)字符串中是否包含微信瀏覽器的特定標識。微信瀏覽器通常會在User Agent中包含"MicroMessenger"這個關鍵詞。 以下是一段JavaScript代碼示例,用于…

不使用cmake,如何在vs2019對cpp項目進行文件夾分類?

不使用cmake,如何在vs2019對cpp項目進行文件夾分類? 1.不使用cmake的根目錄指的是哪里?2.什么時候進行項目管理?3.應該分成什么樣的文件夾?4.如何分類? 1.不使用cmake的根目錄指的是哪里? 查看項…

最新AI智能聊天對話問答系統源碼(圖文搭建部署教程)+AI繪畫,文生圖,TTS語音識別輸入,文檔分析

一、人工智能語言模型和AI繪畫在多個領域廣泛應用 人工智能語言模型和AI繪畫在多個領域都有廣泛的應用。以下是一些它們的主要用處: 人工智能語言模型 內容生成 寫作輔助:幫助撰寫文章、博客、報告、劇本等。 代碼生成:自動生成或補全代碼&…

sudo: /etc/init.d/ssh: command not found

在 WSL 中嘗試啟動 SSH 服務時遇到 sudo: /etc/init.d/ssh: command not found 錯誤 安裝 OpenSSH 服務器 更新軟件包列表 sudo apt update安裝 OpenSSH 服務器 sudo apt install openssh-server啟動 SSH 服務 在 WSL 2 上,服務管理與傳統 Linux 系統有所不同。你可以手動啟動…

C++之STL(十)

1、適配器 2、函數適配器 #include <iostream> using namespace std;#include <algorithm> #include <vector> #include <functional>bool isOdd(int n) {return n % 2 1; } int main() {int a[] {1, 2, 3, 4, 5};vector <int> v(a, a 5);cou…

ONLYOFFICE 8.1版本桌面編輯器測評:重塑辦公效率的巔峰之作

在數字化辦公日益普及的今天&#xff0c;一款高效、便捷且功能強大的桌面編輯器成為了職場人士不可或缺的工具。ONLYOFFICE 8.1版本桌面編輯器憑借其卓越的性能和豐富的功能&#xff0c;成功吸引了眾多用戶的目光。今天&#xff0c;我們將對ONLYOFFICE 8.1版本桌面編輯器進行全…

使用el-amap-info-window遇到的問題

使用的這個庫https://github.com/yangyanggu/vue-amap 想要滾動amapInfoWindow里的內容&#xff0c;但不觸發地圖縮放 默認滾動amapInfoWindow里的內容&#xff0c;會觸發地圖縮放。看了C站一個大佬的文章解決了。 amapInfoWindow會自動滾動到頂部 我的amapInfoWindow里面用了…

【智能制造-4】機器人控制器

機器人控制器中分哪幾個模塊&#xff1f; 機器人控制器通常由以下幾個主要模塊組成: 運動控制模塊: 負責機器人各軸電機的位置、速度、加速度等控制 實現機器人末端執行器的精確定位和運動控制傳感器接口模塊: 負責機器人各種傳感器信號的采集和處理 為運動控制、環境感知等提…

Python-正則表達式

目錄 一、打開正則表達式 二、正則表達式的使用 1、限定符 &#xff08;1&#xff09;x*&#xff1a;*表示它前面的字符y 可以有0個或多個&#xff1b; &#xff08;2&#xff09;x&#xff1a;表示它前面的字符可以出現一次以上&#xff1b;&#xff08;只可以匹配多次&…

電鍍用開關電源技術詳解

1 引言 在電鍍行業里&#xff0c;一般要求工作電源的輸出電壓較低&#xff0c;而電流很大。電源的功率要求也比較高&#xff0c;一般都是幾千瓦到幾十千瓦。目前&#xff0c;如此大功率的電鍍電源一般都采用晶閘管相控整流方式。其缺點是體積大、效率低、噪音高、功率因數低、…

[CocosCreator]CocosCreator網絡通信:https + websocket + protobuf

環境 cocos creator版本&#xff1a;3.8.0 開發語言&#xff1a;ts 操作系統&#xff1a;windows http部分 直接使用 XMLHttpRequest 創建http請求 // _getHttpUrl 方法自己寫字符串拼接public httpPostJsonRequest(uri: string, headData: any, data: any, cb: Function…

2024年6月大眾點評深圳餐飲店鋪POI分析18萬家

2024年6月大眾點評深圳餐飲店鋪POI共有178720家 店鋪POI點位示例&#xff1a; 店鋪id G9TSD2JvdLtA7fdm 店鋪名稱 江味龍蝦館(南山店) 十分制服務評分 8.8 十分制環境評分 8.8 十分制劃算評分 8.6 人均價格 128 評價數量 12840 店鋪地址 南山大道與桂廟路交叉口西北角…

微信小程序 點擊左上角返回彈窗提示

業務需求&#xff1a;當頁面表單沒有提交直接返回時&#xff0c;要提示用戶是否保存當前信息&#xff0c;如果已經提交就不提示了。 由于微信小程序是無法監聽右上角按鈕返回事件。 所以就換個思路 小程序提供了如下兩個Api wx.enableAlertBeforeUnload(Object object)&…

Python入門-基礎知識-編程規范

1.縮進 在編程語言中&#xff0c;代碼之間往往存在著一定的邏輯關系和層次關系。C語言和Java語言等 用“{}”分隔代碼塊&#xff0c;而Python用的是縮進和冒號。Python代碼的縮進可以使用空格鍵或 Tab鍵來實現&#xff0c;通常情況下以4個空格或1個制表符作為1個縮進量。Pytho…