LangChain入門學習
前言
未來已來。2022年11月30日,OpenAI 發布了 ChatGPT,這是 AI 時代重要的一次劃時代的產品,到如今,AI 已經開始滲透到普通人生活中的點點滴滴,各種 AI 應用產品層出不窮,其中以 LLM 為基礎的應用產品尤為廣泛。為了能夠快速定制開發 LLM 應用,誕生了很多開發框架,其中以 LangChain 最為有名。作為互聯網從業人員,我覺得學習和使用 LangChain 框架很有必要,可以幫助自己理解 LLM 大模型,提升自己的工作效率。從本文開始,接下來系列文章將記錄一些學習心得。
一、認識 LangChain
1.1 LangChain 的概念
認識 LangChain
1.1 LangChain 的概念
LangChain 是一個開源框架,旨在簡化基于大型語言模型(LLM)的應用程序開發。其核心設計理念是通過模塊化組件和鏈式任務管理,將 LLM 與外部工具、數據源和服務集成,構建復雜的 AI 應用(如智能問答系統、自動化工作流等)。它使得應用程序能夠:
- 具有上下文感知能力:將語言模型連接到上下文來源(提示指令,少量的示例,需要回應的內容等)
- 具有推理能力:依賴語言模型進行推理(根據提供的上下文如何回答,采取什么行動等)
關鍵特性包括:
- ?模型接口統一化:支持多種 LLM(如 OpenAI、DeepSeek、Llama 等)和嵌入模型,開發者可靈活切換底層模型。
- ?鏈(Chains)?:通過組合多個組件(如模型調用、數據處理、工具調用)形成端到端任務流水線,例如 RAG(檢索增強生成)流程。
- ?代理(Agents)?:賦予 LLM 動態決策能力,根據用戶需求調用外部 API、數據庫或工具,實現自動化操作。
- ?記憶(Memory)?:支持短期對話上下文和長期用戶偏好存儲,增強多輪交互的連貫性。
這個框架由幾個部分組成:
- LangChain 庫:Python 和 JavaScript 庫。包含了各種組件的接口和集成,一個基本的運行時,用于將這些組件組合成鏈和代理,以及現成的鏈和代理的實現。
- LangChain 模板:一系列易于部署的參考架構,用于各種任務。
- LangServe:一個用于將 LangChain 鏈部署為 REST API 的庫。
- LangSmith:一個開發者平臺,讓你可以調試、測試、評估和監控基于任何 LLM 框架構建的鏈,并且與 LangChain 無縫集成。
1.2 LangChain 的價值
LangChain 的核心價值在于降低 LLM 應用開發門檻并擴展模型能力邊界:
- ?簡化開發流程:通過預置組件(如提示模板、文檔加載器)減少重復代碼,例如快速搭建基于本地知識庫的問答系統。
- ?靈活集成外部資源:支持與 70+ LLM 和 700+ 第三方工具(如向量數據庫、API)交互,解決模型“數據孤島”問題。
- ?支持復雜任務編排:通過鏈和代理實現多步驟推理(如“解析用戶意圖→檢索數據→生成回答→記錄日志”)。
- ?活躍生態與工具鏈:衍生工具 LangSmith(監控)、LangGraph(多代理協作)等形成完整 LLMOps 體系。
1.3 其它 LLM 應用開發框架
除了 LangChain 以外,還有很多其它 LLM 應用開發框架,這里以 LlamaIndex、 Flowise AI 作一個對比:
- LangChain 以靈活性和擴展性見長,適合復雜任務編排與多工具集成場景
- LlamaIndex 是一個專注于 RAG 應用程序構建的開源框架,在 RAG 應用開發領域更具有優勢。
- Flowise AI 是一個低代碼開發框架,適合不動編程的用戶快速構建 LLM 應用。
二、安裝 LangChain
安裝方法有很多,這里以 pip 為例:
pip install langchain
這將安裝LangChain的最基本要求。 LangChain的很多價值在于將其與各種模型提供商、數據存儲等進行集成。 默認情況下,進行此類集成所需的依賴項并未安裝。您需要單獨安裝特定集成的依賴項。
LangChain Core
langchain-core包含LangChain生態系統使用的基礎抽象,以及LangChain表達式語言。它由langchain自動安裝,但也可以單獨使用。安裝方法如下:
pip install langchain-core
LangChain community
langchain-community包含第三方集成。它由langchain自動安裝,但也可以單獨使用。安裝方法如下:
pip install langchain-community
LangChain experimental
langchain-experimental包含實驗性的LangChain代碼,用于研究和實驗用途。 安裝方法如下:
pip install langchain-experimental
LangServe
LangServe幫助開發者將LangChain可運行文件和鏈作為REST API部署。 LangServe由LangChain CLI自動安裝。 如果不使用LangChain CLI,安裝方法如下:
pip install "langserve[all]"
用于客戶端和服務器依賴項。或者 pip install "langserve[client]" 用于客戶端代碼,和 pip install "langserve[server]" 用于服務器代碼。
LangChain CLI
LangChain CLI對于處理LangChain模板和其他LangServe項目非常有用。 安裝方法如下:
pip install langchain-cli
LangSmith SDK
LangSmith SDK由LangChain自動安裝。 如果不使用LangChain,安裝方法如下:
pip install langsmith
三、第一個 LangChain 應用示例
單純學習概念很是很枯燥無味的,先整個例子跑起來了,可能會更有趣味。
3.1 環境設置
LangChain 通過需要與一個或者多個模型提供者、數據存儲、API 等進行集成,如果是訪問在線的 LLM 服務,一般需要進行 API 秘鑰配置,可以通過環境變量配置,也可以在初始化時通過參數設置。本人學習是在本地進行部署的大模型,無需配置 API 秘鑰,具體用法下面會提到。
這里首先在本地部署大模型,前面有一篇文章講過使用 LLM Studio 在本地部署大模型,作為開發,這里選擇了使用 ollama 部署 DeepSeek 大模型。
3.2 第一個應用程序
直接上代碼:
from langchain_openai import ChatOpenAI
def test_openai():
# 指向 Ollama 本地 API 地址
llm = ChatOpenAI(
openai_api_base="http://localhost:11434/v1", # Ollama 默認端口
openai_api_key="NA", # 本地無需密鑰,但需占位符
model_name="deepseek-r1:14b" # 對應 Ollama 已下載的模型名稱,如 qwen2.5:latest
)
# 調用模型
result = llm.invoke("寫一首關于春天的詩")
print(result.content)
簡單說明一下代碼:
- 首先通過 ChatOpenAI 構造出一個大模型實例對象,必須的參數有模型名稱,訪問地址,以及 api_key,相關的代碼都有注釋說明。
- 調用大模型對象的
invoke方法,參數傳入提示詞。 - 打印出返回值的
content。
輸出結果如下:
<think>
好的,用戶讓我寫一首關于春天的詩。首先,我需要確定主題是春天,所以我要想到春天的特點,比如溫暖、花開、綠草、鳥鳴等等。
接下來,考慮詩的形式。可能選擇四句的絕句,結構簡單,容易表達春天的美好。押韻也很重要,通常選平聲韻,讓讀起來順口。
然后,每個句子的內容安排。第一句可以描述天氣的變化,比如“暖風輕”來表現春風拂面的感覺。第二句描繪大地蘇醒,萬物復蘇,“大地醒”這樣的詞簡潔明了。
第三句需要具體一些,比如花開的情景,用“桃紅李白”來代表各種花卉盛開的顏色和種類。最后一句可以加入動物的元素,增強生機勃勃的畫面感,比如“喜鵲唱春耕”,表現春天不僅是視覺上的美麗,更是農耕的開始。
賞析部分要解釋詩中的意象和情感。第一句點出春風溫暖,第二句展現大地生機,第三句用色彩豐富畫面,第四句以聲音收尾,整體表達對春天的喜愛和贊美。
最后,檢查押韻是否合適,句子結構是否流暢。確保每句都緊扣主題,沒有偏離春天的意境。這樣整首詩就完成了。
</think>
《七絕·詠春》
暖風輕撫柳含煙,
大地蘇醒展新顏。
桃紅李白爭相艷,
喜鵲枝頭唱春天。
賞析:這首作品描繪了春天的美麗景象,通過“暖風輕”、“柳含煙”等意象生動展現了春風和煦、萬物復蘇的自然美景。詩中“桃紅李白”一句更是以鮮明的色彩對比,形象地表現了花的繁盛與艷麗。末句以“喜鵲唱春天”作結,寓意著春天帶給人們的喜悅與生機,在聲色交融中表達了對春天的熱愛之情。
由于使用的 DeepSeek 模型,所以連大模型的思考內容也一并輸出出來了。
3.3 ChatOpenAI 和 ChatOllama
上面的例子中使用了 ChatOpenAI 創建大模型實例,來自于 from langchain_openai import ChatOpenAI 這個包。
另外還有使用 OpenAI 創建大模型實例的,輸入是字符串,輸出也是字符串。兩者的區別,后面一片文章再說。
由于我是本地部署的大模型,在 from langchain_ollama import ChatOllama 這個包中還有一個 ChatOllama 可以用來創建大模型對象。它與 ChatOpenAI 的區別:
- ChatOpenAI 需要有一個參數
openai_api_key, 本地模型可以隨便傳一個,但是必須傳一個占位。ChatOllama 沒有這個參數。 - ChatOpenAI 嚴格遵循 OpenAI 的
/v1/chat/completions接口標準,所以它的openai_api_base參數為 "http://localhost:11434/v1"。而使用 ChatOllama 時,它有一個參數base_url, 如果傳入和 ChatOpenAI 一樣,則會報錯 404, 因為 ollama 本地服務地址為 "http://localhost:11434", 無需/v1, 它只能傳入 "http://localhost:11434" 或者None。 ChatOllama 也可以不傳這個參數,默認值就是None,因為它默認調用本地 11434 端口的 Ollama 服務。當然如果你是用的其它服務如 LM Studio,則需明確指定。
總結一下:
- OpenAI 適用于生成連貫文本、代碼補全等單輪任務, ChatOpenAI支持多輪對話上下文管理,適合聊天機器人、客服系統等場景。 OpenAI 能干的活,ChatOpenAI 都能干。所以絕大多數情況下,使用 ChatOpenAI 就夠了。
- ChatOpenAI 適用于依賴云端服務、追求高性能的標準化任務(如客服機器人、代碼生成)。而 ChatOllama 適用于對隱私敏感、需本地化運行模型的場景(如醫療數據處理、企業私有知識庫)。
后記
本文簡單介紹了 LangChain 的概念,演示了使用 LangChain 和 LLM 的基本交互,后續文章會詳細介紹更多知識點。
最后吟詩一首:
《訴衷情·銀屏未暗》
銀屏未暗亂碼紛,數據鎖重門。
夜闌鍵碎聲切,寒透薄衫身。
云海卷,客星淪,競浮沉。
倦指頻移,敲碎冰心,倦眼空瞋。
——怎一個卷字堪題?

浙公網安備 33010602011771號