Key Findings
  • LangChain 是當前最成熟的 LLM 應用開發框架,以模組化設計將 Model、Prompt、Chain、Memory、Tool 解耦,開發者可如拼積木般組裝出從簡單問答到複雜多步驟推理的企業級應用
  • LangChain Expression Language(LCEL)以宣告式語法串聯 Runnable 元件,提供原生的串流輸出、批次處理與非同步執行能力,大幅簡化生產環境部署
  • 結合 Document Loader、Text Splitter、Embedding Model 與 Vector Store,LangChain 提供端到端的 RAG 管線建構方案,是企業導入知識增強 LLM 應用的最短路徑
  • LangGraph 將 Agent 執行流程建模為有向狀態圖,支援條件分支、迴圈與人機協作節點,是建構生產級多步驟 AI Agent 的首選架構

一、LangChain 的定位:LLM 應用開發的瑞士刀

自 2022 年 Harrison Chase 首次發布 LangChain 以來[1],這個開源框架已從一個實驗性的 Python 套件,成長為擁有超過 90,000 GitHub Stars、每月數百萬次下載的 LLM 應用開發標準基礎設施。LangChain 的核心價值主張極為明確:為開發者提供一套模組化、可組合的抽象層,將大型語言模型的原始能力轉化為可靠的應用程式。

在 LangChain 出現之前,開發一個 LLM 應用意味著直接與各家模型提供者的 API 打交道——OpenAI 有一套介面、Anthropic 有另一套、Google 又是另一套。每次切換模型,幾乎所有程式碼都需要重寫。更棘手的是,從「能跑的 demo」到「能上線的產品」之間存在巨大的工程鴻溝:如何管理對話記憶?如何串聯多個 LLM 呼叫?如何整合外部資料來源?如何實現錯誤處理與重試機制?這些問題每一個都需要大量的樣板程式碼。

Topsakal 與 Akinci 在 2023 年的研究中指出[7],LangChain 透過統一的抽象介面,將上述工程挑戰封裝為可重用的模組。開發者只需專注於業務邏輯——選擇哪個模型、設計什麼 Prompt、串聯哪些步驟——而無需操心底層的 API 相容性、序列化、錯誤處理等基礎設施問題。這種設計哲學類似於 Web 開發中 Django 或 Rails 之於原生 HTTP 處理的角色。

LangChain 的生態系如今已遠超框架本身。LangGraph 提供有狀態的 Agent 架構[2];LangSmith 提供可觀測性與評估平台;LangServe 提供一鍵部署為 REST API 的能力。這個完整的工具鏈,使得 LangChain 不僅是一個框架,而是一個涵蓋開發、測試、部署、監控全生命週期的 LLM 應用平台。

二、核心模組:Model、Prompt、Chain

LangChain 的架構可以理解為一層層疊加的抽象。最底層是 Model——對各家 LLM 提供者的統一封裝;其上是 Prompt——結構化的提示工程工具;再上一層是 Chain——將多個元件串聯為完整工作流程的組合機制。理解這三層抽象,是掌握 LangChain 的基礎。

2.1 Model:統一的模型介面

LangChain 定義了兩類核心模型介面:LLM(純文字輸入輸出)與 ChatModel(基於訊息列表的對話模型)。無論底層使用 OpenAI GPT-4o、Anthropic Claude、Google Gemini 還是開源的 Llama,開發者都透過相同的 .invoke() 方法呼叫模型。這層抽象的價值在於:當你決定從 GPT-4o 切換至 Claude Opus 時,只需更改一行模型初始化程式碼,其餘業務邏輯完全不受影響。

2.2 Prompt Template:可重用的提示工程

好的 Prompt 是 LLM 應用的靈魂,而 LangChain 的 PromptTemplateChatPromptTemplate 將提示工程從硬編碼的字串提升為可參數化、可版本控制的工程產物。一個典型的 ChatPromptTemplate 包含 System Message(定義角色與規則)、Few-shot Examples(提供示範)與 Human Message(使用者輸入),開發者可以透過變數注入動態內容。Wei 等人的研究[6]證實,精心設計的 Chain-of-Thought Prompt 能大幅提升 LLM 的推理表現,而 LangChain 的 Prompt Template 機制使得這類複雜 Prompt 的管理與迭代變得系統化。

2.3 Chain 與 LCEL:宣告式的工作流程組合

Chain 是 LangChain 最具標誌性的概念。一個 Chain 將多個處理步驟串聯為一條管線——例如「接收使用者輸入 → 填入 Prompt 模板 → 呼叫 LLM → 解析輸出」。LangChain 在 v0.2 後引入了 LangChain Expression Language(LCEL),使用 | 管道運算子以宣告式語法組合 Runnable 元件:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_template("用繁體中文摘要以下內容:{text}")
model = ChatOpenAI(model="gpt-4o")
parser = StrOutputParser()

chain = prompt | model | parser
result = chain.invoke({"text": "LangChain 是一個開源框架..."})

LCEL 的設計哲學深受函數式程式設計影響:每個 Runnable 都是一個純函數,接收輸入、產生輸出,可以任意組合。這種設計帶來的附加價值是原生支援串流輸出(.stream())、批次處理(.batch())與非同步執行(.ainvoke()),無需額外的工程投入。

三、Memory 系統:讓 LLM 記住對話脈絡

LLM 的一個根本限制是缺乏持久記憶——每次 API 呼叫都是無狀態的。對於需要多輪對話的應用(客服機器人、諮詢助手、互動式分析工具),這是一個必須解決的工程問題。LangChain 的 Memory 系統提供了一系列策略來管理對話歷史與上下文。

3.1 ConversationBufferMemory:完整保留

最直觀的策略是將所有對話歷史完整保存並在每次呼叫時注入 Prompt。ConversationBufferMemory 實作了這個方法。優點是資訊零損失,缺點是隨著對話輪次增加,Token 消耗會線性成長,最終可能超出模型的 Context Window 上限。對於短對話場景(如技術支援問答),這是最簡單有效的選擇。

3.2 ConversationSummaryMemory:壓縮策略

為解決 Token 成長問題,ConversationSummaryMemory 在每輪對話後使用 LLM 將歷史對話壓縮為摘要。這種「以 LLM 呼叫換取 Token 空間」的策略,適用於需要長期對話記憶但不需要逐字回溯的場景。摘要過程本身會引入額外的 API 延遲與成本,因此需要在記憶保真度與效能之間取得平衡。

3.3 ConversationBufferWindowMemory 與進階策略

ConversationBufferWindowMemory 提供了一種折中方案:僅保留最近 K 輪對話的完整內容。這種「滑動窗口」策略在多數商業場景中足夠實用——使用者通常關心的是當前話題的近期脈絡,而非數十輪前的歷史細節。對於更複雜的需求,LangChain 也支援基於 Entity Memory(追蹤對話中提及的實體狀態)與向量記憶(將歷史對話嵌入向量空間,按語義相關性檢索)的進階方案。

在企業級應用中,Memory 的設計決策往往比想像中更重要。一個醫療諮詢機器人需要精確記住患者先前描述的症狀;一個法律助手需要追蹤案件中的關鍵事實。選擇錯誤的 Memory 策略,輕則導致回答品質下降,重則造成關鍵資訊遺失。我們建議根據具體場景進行基準測試,而非盲目套用預設方案。

四、RAG 管線建構:從文件載入到向量檢索

檢索增強生成(Retrieval-Augmented Generation, RAG)是當前企業導入 LLM 最主流的架構模式[3]。其核心邏輯是:在 LLM 生成回答之前,先從企業知識庫中檢索相關文件,將其作為上下文注入 Prompt,使模型能基於最新且特定的知識回答問題。LangChain 為 RAG 管線的每個環節提供了成熟的模組化工具。

4.1 Document Loader:統一的資料擷取

RAG 的第一步是將企業知識資產載入系統。LangChain 提供超過 160 種 Document Loader,支援 PDF、Word、HTML、CSV、Notion、Confluence、Google Drive、GitHub、S3 等幾乎所有常見的資料來源。每個 Loader 都會將原始資料轉換為統一的 Document 物件,包含 page_content(文字內容)與 metadata(來源、頁碼、最後修改時間等中繼資料)。

4.2 Text Splitter:語義感知的文件切割

載入的文件通常過長,無法直接餵入 LLM 的 Context Window。Text Splitter 負責將長文件切割為適當大小的 Chunk。Gao 等人的 RAG 綜述研究[8]指出,Chunk 的品質直接決定了 RAG 系統的檢索精準度。LangChain 提供多種切割策略:RecursiveCharacterTextSplitter(按層級遞迴分割,優先保持段落完整性)、TokenTextSplitter(按 Token 精確控制長度)、MarkdownHeaderTextSplitter(按 Markdown 標題結構切割)。在實務中,我們推薦設定 chunk_overlap(重疊區間)以避免語義在 Chunk 邊界處斷裂。

4.3 Embedding 與 Vector Store:語義索引

切割後的 Chunk 透過 Embedding Model 轉換為高維向量表示,並存入 Vector Store 建立語義索引。LangChain 支援 OpenAI Embeddings、Cohere、HuggingFace 等主流 Embedding 模型,以及 Chroma、FAISS、Pinecone、Weaviate、Milvus、Qdrant 等向量資料庫。查詢時,使用者問題同樣被轉換為向量,透過餘弦相似度或內積檢索最相關的 Chunk,再注入 LLM Prompt 生成回答。

一個完整的 RAG Chain 在 LCEL 中的表達極為簡潔:

from langchain_core.runnables import RunnablePassthrough

rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)

這段程式碼將檢索、格式化、Prompt 填充、模型呼叫與輸出解析串聯為一條管線,展現了 LCEL 在表達複雜工作流程時的簡潔優勢。

五、Tool 與 Agent:讓 LLM 使用外部工具

純粹基於文字生成的 LLM 有一個根本限制:它無法與外部世界互動。它不能查詢即時資料、執行計算、操作資料庫或呼叫 API。Schick 等人的 Toolformer 研究[5]開創性地證明了 LLM 具備學習使用工具的能力,而 LangChain 的 Tool 與 Agent 系統將這一能力工程化。

5.1 Tool:外部能力的封裝

在 LangChain 中,一個 Tool 是對外部功能的標準化封裝,包含三個要素:名稱(name)、描述(description)與可呼叫函數(function)。描述至關重要——它是 LLM 決定何時、如何使用該工具的唯一依據。LangChain 內建了搜尋引擎(Tavily、SerpAPI)、計算器(LLMMath)、Python REPL、維基百科、天氣 API 等常用工具,開發者也可以透過 @tool 裝飾器輕鬆定義自訂工具。

5.2 Agent:動態決策引擎

如果說 Chain 是預定義的靜態管線,那麼 Agent 就是能夠根據情境動態決定下一步行動的智慧體。Yao 等人提出的 ReAct 框架[4]是 LangChain Agent 的理論基礎:在每一步,LLM 先推理(Reason)當前情境,決定是呼叫某個工具(Act)還是直接回答使用者。工具回傳的結果成為下一輪推理的觀察(Observation),如此迴圈直到任務完成。

LangChain 的 Agent 系統經歷了顯著的演進。早期的 AgentExecutor 提供了簡單的 ReAct 迴圈實現,但在需要複雜控制流程的場景中力有未逮。Wang 等人的 Agent 綜述[9]指出,生產級 Agent 需要具備錯誤恢復、平行工具呼叫、人機協作等進階能力。這些需求直接催生了 LangGraph 的誕生——一個將 Agent 執行流程建模為有向圖的全新框架。

5.3 Function Calling:結構化工具呼叫

現代 LLM(GPT-4o、Claude、Gemini)原生支援 Function Calling——模型可以輸出結構化的 JSON 來指定要呼叫的函數及其參數。LangChain 透過 .bind_tools() 方法將 Tool 定義綁定到模型上,使 LLM 能以結構化方式呼叫工具,大幅提升了工具呼叫的可靠性與可解析性。相較於早期依賴 Prompt Engineering 讓模型「說出」工具呼叫指令的做法,Function Calling 在穩定性上有質的飛躍。

六、LangGraph:有狀態的多步驟 Agent 架構

LangGraph 是 LangChain 團隊於 2024 年推出的 Agent 框架[2],其設計哲學是:將 Agent 的執行流程建模為一個有向圖(Directed Graph),其中節點(Node)代表處理步驟,邊(Edge)代表步驟之間的轉移邏輯,而圖的全域狀態(State)在節點之間共享與更新。

6.1 圖狀態機的設計理念

傳統的 AgentExecutor 是一個不透明的黑盒迴圈:LLM 決定行動、執行工具、觀察結果、再決定行動。開發者對這個迴圈的控制能力極為有限。LangGraph 將這個迴圈「攤開」為一張可視化的圖,每個決策點、每個處理步驟都成為圖上的一個明確節點。這種設計帶來了三個關鍵優勢:

第一,細粒度控制。開發者可以在任意節點插入自訂邏輯——資料驗證、權限檢查、成本控制、日誌記錄。第二,條件分支與迴圈。透過條件邊(Conditional Edge),Agent 可以根據中間結果走不同的執行路徑,或在不滿足條件時回到先前的節點重試。Shinn 等人的 Reflexion 研究[10]所倡導的「自我反思迴圈」在 LangGraph 中可以自然地表達為圖上的一條回邊。第三,人機協作(Human-in-the-loop)。透過在關鍵決策節點插入 interrupt 指令,Agent 可以在執行前暫停並等待人類確認,這對於高風險場景(金融交易、醫療決策)至關重要。

6.2 State、Node 與 Edge 的實作

LangGraph 的核心 API 由三個概念構成。State 是一個 TypedDict,定義了圖的全域狀態結構——包含訊息歷史、中間結果、工具回傳值等。Node 是一個 Python 函數,接收當前 State 並回傳狀態更新。Edge 定義了節點之間的轉移規則,可以是固定的(從 A 必定到 B)或條件的(根據 State 中某個欄位的值決定走向)。以下是一個基本的 ReAct Agent 在 LangGraph 中的構建範式:

from langgraph.graph import StateGraph, MessagesState, START, END
from langgraph.prebuilt import ToolNode

graph = StateGraph(MessagesState)
graph.add_node("agent", call_model)
graph.add_node("tools", ToolNode(tools))
graph.add_edge(START, "agent")
graph.add_conditional_edges("agent", should_continue, {"continue": "tools", "end": END})
graph.add_edge("tools", "agent")

app = graph.compile()

這段程式碼定義了一個最小的 ReAct 迴圈:Agent 節點呼叫 LLM 決定下一步行動,條件邊根據 LLM 是否要求呼叫工具來決定流向——若需要工具則轉到 Tools 節點執行,執行完再回到 Agent 節點;若不需要工具則結束。整個圖的結構清晰可視化、可測試、可除錯。

6.3 持久化與檢查點

LangGraph 內建 Checkpointer 機制,可將任意時間點的圖狀態持久化至資料庫。這不僅支援長時間運行的任務(跨越數小時甚至數天的 Agent 工作流程),也使得「時間旅行除錯」成為可能——開發者可以回溯到任意檢查點,檢視當時的完整狀態,重播後續步驟。對於生產環境中的故障排查,這是一個極具價值的能力。

七、LangSmith:可觀測性與評估

建構 LLM 應用的一大挑戰在於:傳統軟體工程的確定性測試方法(給定輸入,預期精確輸出)在非確定性的語言模型面前失效。LangSmith 是 LangChain 團隊推出的可觀測性與評估平台,專門解決「如何知道你的 LLM 應用是否正常運作」這個問題。

7.1 追蹤(Tracing)

LangSmith 自動記錄 LangChain 應用中每一次 LLM 呼叫、Tool 呼叫、Retriever 查詢的完整細節:輸入、輸出、延遲、Token 使用量、錯誤資訊。這些追蹤記錄以巢狀的 Run Tree 形式呈現,開發者可以精確定位一個複雜 Chain 或 Agent 中的哪個環節出了問題。在 RAG 應用中,追蹤功能特別有價值——你可以清楚看到檢索回了哪些文件、LLM 如何基於這些文件生成回答,從而診斷「檢索品質差」與「生成品質差」這兩類本質不同的問題。

7.2 評估(Evaluation)

LangSmith 提供系統化的評估框架:定義資料集(Dataset)、建立評估器(Evaluator)、批次執行測試並比較不同版本的表現。評估器可以是基於規則的(關鍵字匹配、JSON Schema 驗證)、基於 LLM 的(使用另一個 LLM 判斷回答品質)、或人工標註的。這套工具讓開發者能在每次迭代 Prompt、更換模型或調整 RAG 參數後,量化地衡量變更的影響,而非依賴「感覺變好了」的主觀判斷。

7.3 Prompt Hub 與協作

LangSmith 內建 Prompt Hub,使團隊能夠版本控制、共享與迭代 Prompt Template。在企業環境中,Prompt 往往由產品經理、領域專家與工程師共同迭代——Prompt Hub 提供了一個統一的協作介面,避免了 Prompt 散落在程式碼庫各處、無法追蹤變更歷史的混亂狀態。結合評估框架,每次 Prompt 變更都可以自動觸發回歸測試,確保改動不會引入意外的品質退化。

八、企業級架構設計與效能優化

將 LangChain 應用從 Prototype 推向 Production,需要在架構層面做出一系列關鍵設計決策。以下是我們在多個企業級專案中歸納出的實戰經驗。

8.1 模型路由與降級策略

在生產環境中,不應將所有請求都發送至同一個模型。簡單的分類或摘要任務使用輕量級模型(如 GPT-4o-mini 或 Claude Haiku)即可,只有需要深度推理的複雜查詢才路由至旗艦模型。LangChain 的 Runnable 抽象使得實現模型路由器變得直觀:先用一個輕量模型評估查詢複雜度,再根據結果路由至對應的模型。此外,當主要模型 API 不可用時,自動降級至備選模型的 Fallback 機制是生產環境的必備設計。

8.2 快取與成本控制

LLM API 呼叫的成本在高流量場景中可能迅速攀升。LangChain 內建多種快取策略:InMemoryCache(開發環境)、SQLiteCache(單機部署)、RedisCache(分散式環境)。對於 Embedding 計算,快取的效益尤為顯著——同一段文字的 Embedding 結果是確定性的,無需重複計算。在 RAG 應用中,我們建議為 Document Embedding 與常見查詢的 LLM 回覆分別建立快取層,可將 API 成本降低 40-60%。

8.3 非同步與串流

LCEL 原生支援非同步執行(ainvokeastream),對於需要高並發的 Web 服務至關重要。搭配 FastAPI 等非同步框架,一個 LangChain 服務可以在等待 LLM API 回應的同時處理其他請求,大幅提升吞吐量。串流輸出(Streaming)則直接影響使用者體驗——讓使用者在 LLM 生成回答的同時逐字看到結果,而非等待完整回應,可將感知延遲從數秒降低至數百毫秒。

8.4 安全與合規

企業部署 LLM 應用必須正視安全風險。LangChain 提供 Input/Output Guard 機制,可在 Chain 的入口與出口插入內容過濾邏輯——檢測並阻擋 Prompt Injection 攻擊、過濾敏感個資(PII)、限制模型輸出的主題範圍。對於受監管行業(金融、醫療),建議在 LangGraph 的 Agent 工作流程中加入人工審核節點,確保高風險決策在執行前經過人類確認。

九、結語:LangChain 生態系的未來

LangChain 從 2022 年的一個實驗性開源專案,在短短三年間成長為 LLM 應用開發的事實標準框架[1]。這個發展軌跡不僅反映了框架本身的技術實力,更折射出整個產業對「如何系統化地建構 LLM 應用」這一問題的迫切需求。

展望未來,我們觀察到幾個明確的趨勢。首先,Agent 架構將成為主流。隨著 LLM 推理能力的持續提升與 Function Calling 的普及,LLM 應用正從靜態的 Chain 管線演進為動態的 Agent 系統。LangGraph 的有向圖模型為此提供了穩固的工程基礎,其生態系也在快速擴展——從 Checkpoint 持久化到 LangGraph Cloud 的託管部署,Agent 的工程化程度正在迅速追趕傳統軟體。

其次,多模態能力將深度整合。當前的 LangChain 應用以文字為主,但隨著 GPT-4o、Gemini 等模型原生支援圖像、音訊與視訊輸入,RAG 管線需要擴展為多模態檢索——不僅檢索文字,也檢索圖表、影片片段與音訊記錄。LangChain 的模組化架構使得這種擴展在技術上是可行的,但在 Embedding 策略與 Vector Store 選型上需要重新思考。

第三,可觀測性與評估將成為剛需。隨著 LLM 應用從 POC 進入生產環境,「它在大多數情況下似乎運作正常」不再是可接受的品質標準。LangSmith 所代表的方向——系統化的追蹤、評估與持續監控——將從「nice-to-have」變為「must-have」。我們預期未來一年內,LLM 應用的品質保證體系將趨向成熟,形成類似傳統軟體 CI/CD 的自動化評估管線。

對於台灣的企業與開發者而言,LangChain 生態系提供了一條從概念驗證到生產部署的完整路徑。然而,框架只是工具——真正的挑戰在於:如何基於對業務場景的深入理解,設計出合適的 Prompt 策略、選擇正確的 Memory 機制、建構高品質的 RAG 知識庫、以及定義穩健的 Agent 工作流程。這些決策需要同時具備 LLM 工程實踐經驗與領域專業知識的團隊。超智諮詢持續協助台灣企業在此旅程中做出最佳技術選擇,將 LangChain 的工程能力轉化為可量化的商業價值。