前面幾篇其實已經把 AI App 的零件湊得差不多了。
Lesson 018:API 講過:API 讓你的程式可以和模型服務交換 Request 與 Response。
Lesson 023:RAG 講過:RAG 先找相關外部資料,再把資料放進 Context 讓模型回答。
Lesson 020:AI Agent 講過:Agent 把模型的判斷、工具與工作流程接起來,讓系統可以不只回答文字,還能採取動作。
當這些東西全部出現在同一個專案,問題會變成:
誰來管理它們之間的連線?
這就是 LangChain 這類 Framework 出現的背景。
Framework 是什麼?
框架(Framework) 可以先理解成一套已經設計好的程式結構與介面,讓你不用每次從最底層重新接線。
想像你要開一間公司。
你可以自己發明:
- 表單格式
- 工作流程
- 部門交接
- 錯誤處理
- 權限系統
也可以先採用一套現成辦公流程,再針對自己的需求修改。
LangChain 就比較像後者。
LangChain 不是模型
LangChain 是一套用來建立 LLM / Agent 應用的開發框架。
它不會取代 GPT、Gemini、Grok、Local LLM。
相反地,它通常站在模型的「外面」,幫你處理:
- 不同模型供應商介面
- Tool 定義
- Agent Loop
- Prompt / Message 結構
- Middleware
- State
- Structured Output
- 與其他 LangChain / LangGraph 生態整合
所以如果模型是員工,LangChain 更像辦公室流程與工具管理系統。
為什麼不直接自己寫 Python?
當然可以。
其實很小的專案直接自己寫,往往更簡單。
例如:
question = input("問題:")
answer = call_model(question)
print(answer)
如果你的程式只有一個模型 Request,可能根本不需要大型 Framework。
LangChain 比較有價值的時候,是當系統開始出現:
- 多個 Tool
- 多輪 Agent 決策
- 不同 Provider
- 結構化輸出
- 狀態管理
- Trace / Debug
- Middleware
- 較複雜工作流程
所以不要把「有用 LangChain」當成專案比較專業的證明。
框架是降低複雜度的工具,不是勳章。
最小 Agent 範例
LangChain 現代 Python API 裡可以使用 create_agent() 建立 Agent。
先看一個概念範例:
from langchain.agents import create_agent
def get_word_count(text: str) -> str:
"""Count characters in text."""
return str(len(text))
agent = create_agent(
model="openai:<model-name>",
tools=[get_word_count],
system_prompt="你是一位簡潔的助理。",
)
這裡故意把 <model-name> 留成佔位符,因為 Provider 支援的模型名稱會隨時間變動;實際使用時要依當下官方文件換成可用模型。
逐段看。
第一行:載入 create_agent
from langchain.agents import create_agent
這和 Lesson 026:Python 的 from ... import ... 一樣:從 LangChain 套件載入建立 Agent 的功能。
這個函式就是 Tool
def get_word_count(text: str) -> str:
"""Count characters in text."""
return str(len(text))
它是一個普通 Python Function。
作用是:
- 接收
text。 - 用
len(text)計算字元數。 - 把數字轉成字串回傳。
在 Agent 系統裡,這個 Function 可以被註冊成 Tool。
重要的是:
模型本身沒有真的執行 Python。Framework / Runtime 會根據 Tool Call 去執行你的函式,再把結果交回模型。
create_agent() 在組什麼?
agent = create_agent(
model="openai:<model-name>",
tools=[get_word_count],
system_prompt="你是一位簡潔的助理。",
)
這裡提供三個主要東西:
model
指定 Agent 使用哪個模型。
tools
tools=[get_word_count]
告訴 Agent:你有這個工具可以使用。
system_prompt
提供高層行為指示。
Lesson 005:Prompt 已經講過 Prompt 是把任務與限制說清楚;System Prompt 則通常是應用程式在更高優先層提供給模型的行為指示之一。
Agent 怎麼真的跑?
概念上可能會看到:
result = agent.invoke({
"messages": [
{"role": "user", "content": "請算 SATIN SYNTAX 有幾個字元"}
]
})
invoke() 的作用是把一次輸入交給 Agent Runtime 執行。
這次流程可能是:
User Message
↓
Model 判斷需要計算字元
↓
產生 Tool Call
↓
LangChain 執行 get_word_count()
↓
Tool Result 回到 Model
↓
Model 組成最後回答
這就是 Agent Loop 的直覺。
Tool Description 為什麼重要?
模型需要知道:
- 這個 Tool 叫什麼
- 它能做什麼
- 參數是什麼
- 什麼情況應該使用
如果 Tool Description 模糊,模型可能選錯工具或傳錯參數。
所以 Tool Calling 並不是「丟一個 Python Function 給模型,它就自然懂」。
Framework 會把 Function Signature、Description、Schema 等資訊整理成模型能使用的工具描述。
LangChain 和 RAG 怎麼接?
Lesson 023:RAG 的流程是:檢索 → 把相關內容放進 Context → 生成回答。
LangChain 可以把 Retriever、Vector Store、Prompt、Model 等元件組成流程。
但不要誤會成:
「RAG = LangChain。」
RAG 是架構概念;LangChain 只是實作它的一種工具選擇。
你完全可以不用 LangChain 自己寫 RAG。
LangChain 和 LangGraph 是什麼關係?
目前 LangChain 的 Agent 實作底層會使用圖式 Runtime 來管理步驟與狀態,而 LangGraph 是其生態中處理較低階、長流程與 Stateful Agent Workflow 的重要元件。
現在先不用把所有 API 背起來。
只要知道:
當 Agent 從單純的一次 Tool Call 變成多步驟、有狀態、會循環的工作流程時,「流程圖」式的執行模型會變得很有用。
Framework 會讓 Agent 比較安全嗎?
不會自動安全。
LangChain 可以提供 Middleware、Tool 管理與結構化介面,但安全仍取決於你怎麼設計:
- Tool 權限
- Input Validation
- Secret 管理
- 人工確認
- Prompt Injection 防護
- Network / File Access
後面 Lesson 035 會專門談 Prompt Injection。
如果我用 Ollama 還能用 LangChain 嗎?
可以。
Lesson 030:Ollama 已經講過:Local LLM 也可以透過本機 API 提供服務。
LangChain 支援多種 Model Provider / Integration;真正能否使用某個模型與哪些功能,要看對應 Integration 是否支援該 Provider 的 Tool Calling、Structured Output 等能力。
因此:
LangChain ≠ 雲端專用
它是一層應用 Framework。
什麼時候不該用 LangChain?
如果你的 App 只有:
User → Model → Answer
直接用 Provider SDK 可能更清楚。
如果你只是想學 API,也建議先自己寫幾次 Request,不然 Framework 會把很多關鍵概念藏起來。
等你理解 API、Tool、RAG、Agent 之後,再使用 LangChain,會更知道它到底替你省了什麼。
一句話帶走
LangChain 不是模型,而是把模型、Tool、Prompt、RAG 與 Agent Workflow 組裝成可管理程式的 Framework;真正重要的不是會背 LangChain API,而是知道每個元件原本負責什麼。
留言
有想法、疑問或想補充的地方,都可以留在這裡。
還沒有留言,來當 1F 吧。