LangChain
官方文檔:LangChain
一、什么是Langchain
LangChain 是一個用于構建基于LLM的應用框架,它提供了對 LLM API 的封裝和擴展,使開發者能夠更方便地構建復雜的應用。
個人理解:用類比的方法來說,LangChain類似vue框架,因為vue高度封裝,用戶只需要調用對應的方法就能實現頁面的構建路由的管理,而LangChain也是,用戶不需要關注底層實現,只需要按順序調用對應的方法,保證事件處理的邏輯就行。
看到這,可能有一個問題,我必須要用LangChain來實現LLM嗎?
其實LLM不借助Langchain也能實現相應的功能,只不過實現起來很復雜,就像頁面不用vue或react框架只用html,css也能構建,但是實現起來比較復雜,總的來說LangChain 簡化了 LLM 應用程序生命周期的每個階段。
二、LangChain 核心組件
- Prompt 模板: 將用戶的輸入格式化,在不同的模型下都使用。
不同的模型可能期望不同的數據格式。在可能的情況下,我們希望允許在不同的模型類型中使用相同的提示,而prompt相當于對不同模型的輸入格式進行處理和封裝,保證最終輸入到不同模型的提示是一致的。 - Chains(鏈): 將多個模塊組件組合成一個流程,例如:加載文檔 → 分割文本 → 向量化 → 檢索 → 生成回答。
- Agents(代理): 根據用戶輸入動態選擇工具和操作,實現更智能的交互。根據用戶的輸入,代理來決定調用哪些工具
- Tool(工具): 集成外部 API 或功能模塊,如搜索引擎、計算器等,擴展 LLM 的能力。
- Memory(記憶/內存): 分為短期內存和長期內存。
- 短期內存是在單個對話中傳遞以前的信息(如最近幾條對話記錄)。
- 長期內存是維護對話歷史,實現多輪對話(如用戶偏好,歷史對話摘要),長期內存通常需要依賴外部存儲(如數據庫,Redis)。
- Models (模型):
- 大型語言模型:輸入的是字符串,返回的輸出的也是字符串。
- 聊天模型:以聊天消息列表作為輸入,并返回聊天消息。
- 文本嵌入模型:模型以文本作為輸入,并返回浮點數列表。這個更多的是用于文檔、文本或者大量數據的總結、問答場景,一般是和向量庫一起使用,實現向量匹配。其實就是把文本等內容轉成多維數組,可以后續進行相似性的計算和檢索。
- Document Loaders(文檔加載器): 支持從多種格式的文件中提取文本內容,供 LLM 使用。比如從 PDF 文件中提取文本。
- Vectorstore(向量存儲庫): 將文本轉換為向量,存儲在向量數據庫中,實現高效的語義搜索。
主要列舉了一些比較常用的組件,其實還有其他的組件,可以參考官方文檔。
大型語言模型的流程
- 假設我們在使用一個智能問答系統,用戶提出了一個問題,例如:“請告訴我法國巴黎的天氣情況。”?
- Agent 接收到用戶的問題后,識別出需要獲取“法國巴黎天氣”的信息。
- Agent 決定調用一個天氣查詢工具(Tool),例如一個調用天氣 API 的函數。
- 工具執行之后返回查詢到的結果,然后代理將工具的輸出結果與用戶問題一起作為 Prompt 傳遞給語言模型。
- 語言模型結合工具的輸出和原始用戶輸入,生成最終的回答。
- 如果用戶又問了“那明天呢?”,這個時候 Memory 就能根據上下文識別出“那”指的是“法國巴黎的天氣”,在長期使用過程中,內存模塊還可以記錄用戶的個性化偏好,例如喜歡的回答風格、常詢問的主題等,Memory也可以會根據個性化偏好生成符合用戶風格的回答。
- 在這個過程中,Chain 將多個組件(如提示模板、LLM、輸出解析器等)按照特定順序組合,形成一個完整的處理流程。并在各個組件之間傳遞數據。例如,將用戶輸入傳遞給提示模板,生成的提示再傳遞給 LLM,LLM 的輸出再傳遞給輸出解析器。
文本嵌入模型的流程
- 當用戶上傳一段長文本或 PDF 文檔時,會先用 LangChain 提供的文檔加載器(Document Loaders)將 PDF 文件讀取并解析生成 Document 對象,將長文本切分為較小的片段(Text Splitters),將切分后的文檔片段轉換為向量表示,并存儲在向量數據庫(Vectorstore)中,以便后續檢索。
- 將檢索器與語言模型結合,構建一個問答鏈。?當用戶提出問題時,系統將:使用檢索器查找相關文檔片段。?
- 將檢索到的內容與用戶問題一起作為 Prompt 傳遞給語言模型。?
- 語言模型生成最終的回答。
三、LangChain 的具體應用場景
LangChain 適用于需要復雜邏輯、多步驟處理或與外部系統集成的應用,如智能助理、問答系統。