總字數：約18000字 | 預計閱讀時長：50-60分鐘​

一、LangChain框架概述​

1.1 什麼是LangChain​

LangChain 是一個用於構建大語言模型（LLM）應用的開源框架，基於Python語言編寫，由Harrison Chase於2022年10月首次釋出。它提供了一套標準化的工具和抽象層，讓開發者能夠更高效地將大模型與外部資料、工具和服務整合，構建複雜的AI應用。​

簡單來說，LangChain就像一個"AI樂高積木"——它把構建AI應用所需的各種元件（模型呼叫、提示詞管理、資料處理、工具整合等）封裝成標準化的模組，開發者可以像搭積木一樣組合這些模組，快速構建出功能強大的AI應用。​

為什麼需要LangChain？​

直接呼叫大模型API雖然簡單，但在構建複雜應用時會遇到諸多挑戰：​

​



| 挑戰 | 直接呼叫API | 使用LangChain |
| --- | --- | --- |





| 提示詞管理 | 硬編碼在程式碼中，難以維護 | 模板化管理，支援動態生成 |
| --- | --- | --- |
| 多輪對話 | 手動管理上下文，容易丟失 | 內建記憶元件，自動管理 |
| 工具整合 | 需要自行編寫呼叫邏輯 | 標準化工具介面，即插即用 |
| 鏈式呼叫 | 需要手動串聯多個步驟 | 宣告式鏈定義，自動編排 |
| 資料處理 | 需要自行處理文件、向量化 | 內建文件載入、分割、儲存 |
| 輸出解析 | 手動解析模型輸出 | 型別化輸出解析器 |



​

1.2 LangChain在AI Agent開發中的地位​

在AI Agent技術棧中，LangChain處於應用層框架的核心位置：​

​

Unable to print

![Feishu Docs - Image](images/img_1.jpg)

​

LangChain的核心價值在於：​

•

標準化介面：統一了不同模型廠商的呼叫方式​

•

元件化設計：每個功能都是獨立的元件，可以靈活組合​

•

生態豐富：整合了數百個第三方工具和資料來源​

•

社群活躍：GitHub倉庫（[https://github.com/langchain-ai/langchain](https://github.com/langchain-ai/langchain)）星標超過138K（2026年6月），持續更新迭代​

1.3 LangChain的核心價值與適用場景​

LangChain的三大核心價值：​

1）降低開發門檻​

將複雜的AI應用開發簡化為元件組合，開發者無需深入瞭解底層實現細節。​

2）提升開發效率​

提供開箱即用的元件和最佳實踐，避免重複造輪子。​

3）增強應用能力​

透過工具整合和鏈式呼叫，讓AI應用具備更強的執行能力。​

典型適用場景：​

​



| 場景型別 | 具體應用 | 核心元件 |
| --- | --- | --- |





| 知識問答 | 企業知識庫、產品文件問答 | RAG鏈、向量儲存 |
| --- | --- | --- |
| 智慧客服 | 多輪對話、意圖識別 | 對話鏈、記憶元件 |
|  |  |  |
|  |  |  |
|  |  |  |



​

不適合使用LangChain的場景：​

•

簡單的單輪對話（直接呼叫API更簡單）​

•

對延遲極其敏感的實時應用（框架有一定開銷）​

•

需要深度定製的特殊場景（可能受限於框架抽象）​

二、LangChain核心元件​

2.1 模型I/O（Model I/O）​

模型I/O是LangChain最基礎的元件，負責與大模型進行互動。​

1）語言模型（LLM）​

LangChain支援兩類語言模型：​

​



| 型別 | 特點 | 適用場景 |
| --- | --- | --- |
| LLM | 輸入輸出都是字串 | 簡單的文字生成 |
| ChatModel | 輸入輸出都是訊息列表 | 多輪對話、角色扮演 |



​

DeepSeek模型整合示例：​

​

Code block​

Python

​

引數說明：​

•

temperature：控制輸出的隨機性。值越小，輸出越確定；值越大，輸出越多樣。安全場景建議使用較低值（0.3-0.7）。​

•

max\_tokens：最大輸出token數。根據任務複雜度調整。​

•

model：模型名稱。DeepSeek提供deepseek-v4-flash和deepseek-v4-pro兩個模型。​

執行結果：​

​

Unable to print

![Feishu Docs - Image](images/img_2.png)

​

2）提示詞模板（Prompt Templates）​

提示詞模板用於動態生成提示詞，避免硬編碼。​

​

Code block​

Python

\# prompt\_template\_demo.py​

from langchain\_core.prompts import ChatPromptTemplate​

​

\# 建立聊天提示詞模板​

prompt = ChatPromptTemplate.from\_messages(\[​

("system", "你是一個{role}，擅長{skill}"),​

("human", "{question}")​

\])​

​

\# 格式化提示詞​

formatted\_prompt = prompt.invoke({​

"role": "安全專家",​

"skill": "漏洞分析",​

"question": "如何檢測XSS漏洞？"​

})​

​

print(formatted\_prompt)​

​

模板變數規則：​

•

使用{變數名}定義變數，例如role、skill​

•

變數名可以是中文或英文​

•

呼叫時傳入字典格式的變數值​

3）輸出解析器（Output Parsers）​

輸出解析器用於將模型輸出轉換為結構化資料。​

​

Code block​

Python

\# output\_parser\_demo.py​

"""​

輸出解析器演示​

將模型輸出轉換為結構化資料​

"""​

​

import sys​

import os​

import io​

​

from langchain\_deepseek import ChatDeepSeek​

from langchain\_core.output\_parsers import JsonOutputParser​

from langchain\_core.prompts import ChatPromptTemplate​

from pydantic import BaseModel, Field​

​

class VulnerabilityAnalysis(BaseModel):​

vulnerability\_type: str = Field(description="漏洞型別")​

severity: str = Field(description="嚴重程度：高/中/低")​

description: str = Field(description="漏洞描述")​

recommendation: str = Field(description="修復建議")​

​

def main():​

api\_key = os.getenv("DEEPSEEK\_API\_KEY")​

​

llm = ChatDeepSeek(​

model="deepseek-chat",​

api\_key=api\_key,​

temperature=0.3,​

max\_tokens=2048​

)​

​

執行結果：​

​

Unable to print

​

2.2 資料連線（Data Connection）​

資料連線元件用於將外部資料載入到LangChain中。​

1）文件載入器（Document Loaders）​

LangChain支援多種文件格式的載入：​

​



| 載入器型別 | 支援格式 | 使用場景 |
| --- | --- | --- |





| TextLoader | .txt | 純文字檔案 |
| --- | --- | --- |
| CSVLoader | .csv | CSV資料檔案 |
| PDFLoader | .pdf | PDF文件 |
| WebBaseLoader | 網頁 | 網頁內容抓取 |
| DirectoryLoader | 目錄 | 批次載入檔案 |



​

載入本地文件示例：​

​

Code block​

Python

\# document\_loader\_demo.py​

"""​

文件載入器演示​

載入本地文件並顯示資訊​

"""​

​

import os​

from langchain\_community.document\_loaders import TextLoader, DirectoryLoader​

​

SCRIPT\_DIR = os.path.dirname(os.path.abspath(\_\_file\_\_))​

​

def main():​

txt\_path = os.path.join(SCRIPT\_DIR, "sql\_injection.txt")​

loader = TextLoader(txt\_path, encoding="utf-8")​

​

執行結果：​

​

Unable to print

![Feishu Docs - Image](images/img_3.png)

​

2）文字分割器（Text Splitters）​

大模型有上下文長度限制，需要將長文件分割成小塊。​

​

Code block​

Python

\# text\_splitter\_demo.py​

"""​

文字分割器演示​

將長文件分割成小塊​

"""​

import os​

​

​

Unable to print

![Feishu Docs - Image](images/img_4.png)

​

分割引數選擇建議：​

•

chunk\_size：根據模型上下文長度和任務型別調整。一般500-2000字元。​

•

chunk\_overlap：設定適當的重疊可以避免資訊丟失。一般50-200字元。​

3）向量儲存（Vector Stores）​

向量儲存用於將文字轉換為向量並儲存，支援語義檢索。​

​

Code block​

Python

\# vector\_store\_demo.py​

"""​

向量儲存演示​

​

執行結果：​

​

Unable to print

![Feishu Docs - Image](images/img_5.png)

​

向量資料庫選擇：​

​



| 資料庫 | 特點 | 適用場景 |
| --- | --- | --- |





|  |  |  |
| --- | --- | --- |
|  |  |  |
|  |  |  |
|  |  |  |



​

2.3 鏈（Chains）​

鏈是LangChain的核心概念，用於將多個元件串聯起來。​

1）LLMChain​

最基本的鏈，將提示詞、模型和輸出解析器組合在一起。​

​

Code block​

Python

\# llm\_chain\_demo.py​

from langchain.chains import LLMChain​

​

\# 建立LLMChain​

chain = LLMChain(​

llm=llm,​

prompt=prompt,​

output\_parser=parser​

)​

​

\# 呼叫鏈​

result = chain.invoke({​

"code": "SELECT \* FROM users WHERE id = " + user\_id​

})​

​

2）SequentialChain​

順序鏈，將多個鏈按順序執行。​

​

Code block​

Python

\# sequential\_chain\_demo.py​

from langchain.chains import SequentialChain​

​

\# 鏈1：分析漏洞型別​

chain1 = LLMChain(​

llm=llm,​

prompt=ChatPromptTemplate.from\_template("分析以下程式碼的漏洞型別：{code}"),​

output\_key="vulnerability\_type"​

)​

​

\# 鏈2：評估嚴重程度​

chain2 = LLMChain(​

llm=llm,​

prompt=ChatPromptTemplate.from\_template("評估{vulnerability\_type}的嚴重程度："),​

output\_key="severity"​

)​

​

\# 鏈3：生成修復建議​

chain3 = LLMChain(​

llm=llm,​

prompt=ChatPromptTemplate.from\_template("為{vulnerability\_type}提供修復建議："),​

output\_key="recommendation"​

)​

​

\# 組合順序鏈​

overall\_chain = SequentialChain(​

chains=\[chain1, chain2, chain3\],​

input\_variables=\["code"\],​

​

3）自定義鏈​

使用LCEL（LangChain Expression Language）建立自定義鏈。​

​

Code block​

Python

from langchain\_core.runnables import RunnablePassthrough​

​

\# 使用管道運算子組合鏈​

chain = (​

{"code": RunnablePassthrough()} \# 輸入​

| prompt \# 提示詞模板​

| llm \# 模型​

| parser \# 輸出解析器​

)​

​

\# 呼叫​

result = chain.invoke("SELECT \* FROM users WHERE id = " + user\_id)​

​

LCEL的優勢：​

•

更直觀的鏈式語法​

•

支援流式輸出​

•

自動並行化​

•

更好的錯誤處理​

2.4 記憶（Memory）​

記憶元件用於維護對話上下文。​

1）對話緩衝記憶​

儲存最近的對話歷史。​

​

Code block​

Python

\# lang\_memory.py​

from langchain.memory import ConversationBufferWindowMemory​

​

\# 建立記憶元件（保留最近10輪對話）​

memory = ConversationBufferWindowMemory(​

k=10,​

return\_messages=True,​

memory\_key="chat\_history"​

)​

​

\# 在鏈中使用記憶​

from langchain.chains import ConversationChain​

​

conversation = ConversationChain(​

llm=llm,​

memory=memory,​

verbose=True​

)​

​

\# 多輪對話​

response1 = conversation.invoke("什麼是SQL隱碼攻擊？")​

response2 = conversation.invoke("如何防範這種攻擊？")​

​

2）對話摘要記憶​

將長對話壓縮為摘要，節省token。​

​

Code block​

Python

\# lang\_memory\_summary.py​

from langchain.memory import ConversationSummaryMemory​

​

\# 建立摘要記憶​

memory = ConversationSummaryMemory(​

llm=llm,​

return\_messages=True,​

memory\_key="chat\_history"​

)​

​

\# 使用方式與緩衝記憶相同​

conversation = ConversationChain(​

llm=llm,​

memory=memory,​

verbose=True​

)​

​

3）實體記憶​

追蹤對話中提到的實體（如人名、組織、技術術語）。​

​

Code block​

Python

\# lang\_memory\_entity.py​

from langchain.memory import ConversationEntityMemory​

​

\# 建立實體記憶​

​

記憶型別選擇：​

​



| 記憶型別 | 優點 | 缺點 | 適用場景 |
| --- | --- | --- | --- |
| 緩衝記憶 | 保留完整上下文 | 消耗token多 | 短對話 |
| 摘要記憶 | 節省token | 可能丟失細節 | 長對話 |
| 實體記憶 | 追蹤關鍵資訊 | 實現複雜 | 資訊密集對話 |



​

2.5 代理（Agents）​

代理是LangChain最強大的元件，讓AI能夠使用工具執行任務。​

1）代理型別​

LangChain提供多種代理型別：​

​



| 代理型別 | 特點 | 適用場景 |
| --- | --- | --- |
| ReAct | 推理-行動迴圈 | 通用任務 |
| OpenAI Functions | 使用函式呼叫 | 結構化輸出 |
| Plan-and-Execute | 先規劃後執行 | 複雜任務 |



​

2）工具整合​

工具是代理可以呼叫的外部函式。​

​

Code block​

Python

\# lang\_tools.py​

from langchain\_core.tools import tool​

​

\# 定義工具​

@tool​

def scan\_sql\_injection(query: str) -> str:​

"""檢測SQL隱碼攻擊漏洞​

​

Args:​

query: SQL查詢語句​

​

Returns:​

檢測結果​

"""​

dangerous\_keywords = \["'", "OR", "AND", ";", "--", "UNION", "SELECT"\]​

​

for keyword in dangerous\_keywords:​

if keyword.lower() in query.lower():​

return f"檢測到潛在SQL隱碼攻擊風險：發現危險關鍵詞 '{keyword}'"​

​

return "未檢測到SQL隱碼攻擊風險"​

​

3）ReAct推理模式​

ReAct（Reasoning + Acting）是LangChain最常用的代理模式。​

​

Code block​

Python

\# lang\_react​

from langchain.agents import AgentExecutor, create\_react\_agent​

​

\# 建立ReAct代理​

agent = create\_react\_agent(​

llm=llm,​

​

三、LangChain開發環境搭建​

3.1 安裝與配置​

環境要求：​

•

Python 3.12+​

•

pip包管理器​

安裝步驟：​

​

Code block​

Bash

\# 建立虛擬環境（推薦）​

python -m venv langchain-env​

​

\# 啟用虛擬環境​

\# Windows​

langchain-env\\Scripts\\activate​

\# Linux/Mac​

source langchain-env/bin/activate​

​

\# 安裝LangChain核心包​

pip install langchain langchain-core langchain-community​

​

​

3.2 DeepSeek API整合​

獲取API金鑰：​

1.

訪問 [DeepSeek開放平臺](https://platform.deepseek.com/)​

2.

註冊賬號並登入​

3.

在"API金鑰"頁面建立新的API金鑰​

4.

複製金鑰並妥善保管​

配置環境變數：​

​

Code block​

Bash

\# Windows PowerShell​

$env:DEEPSEEK\_API\_KEY="your\_api\_key\_here"​

​

\# 或建立.env檔案​

echo DEEPSEEK\_API\_KEY=your\_api\_key\_here > .env​

​

驗證配置：​

​

Code block​

Python

\# api\_test.py​

from langchain\_deepseek import ChatDeepSeek​

​

\# 測試連線​

llm = ChatDeepSeek(​

model="deepseek-chat",​

api\_key="your\_api\_key\_here"​

)​

​

response = llm.invoke("你好，請介紹一下自己")​

print(response.content)​

​

3.3 開發工具鏈​

推薦的開發工具：​

​



| 工具 | 用途 | 安裝方式 |
| --- | --- | --- |
| VS Code | 程式碼編輯器 | 官網下載 |
| Jupyter Notebook | 互動式開發 | pip install jupyter |
| LangSmith | 除錯和監控 | pip install langsmith |
| LangServe | 部署服務 | pip install langserve |



​

LangSmith配置（可選）：​

​

Code block​

Bash

\# 設定環境變數​

​

四、LangChain實戰：安全知識問答系統​

4.1 需求分析​

構建一個基於本地安全知識庫的問答系統，能夠：​

•

載入本地安全文件（漏洞報告、安全規範等）​

•

將文件向量化並儲存​

•

根據使用者問題檢索相關文件​

•

使用大模型生成專業回答​

4.2 系統設計​

​

Code block​

Plain Text

┌─────────────────────────────────────────────────┐​

│ 使用者介面層 │​

├─────────────────────────────────────────────────┤​

│ 問答鏈（RAG Chain） │​

│ ┌─────────────────────────────────────────┐ │​

│ │ 問題 → 向量檢索 → 相關文件 → 模型生成 │ │​

│ └─────────────────────────────────────────┘ │​

├─────────────────────────────────────────────────┤​

│ 向量儲存層 │​

│ FAISS / ChromaDB │​

├─────────────────────────────────────────────────┤​

│ 文件處理層 │​

​

4.3 核心程式碼實現​

完整程式碼（security\_qa\_system.py）：​

​

Code block​

Python

"""​

安全知識問答系統​

基於LangChain + DeepSeek + FAISS實現​

"""​

​

import os​

from pathlib import Path​

from typing import List​

​

from langchain\_deepseek import ChatDeepSeek, DeepSeekEmbeddings​

from langchain\_community.vectorstores import FAISS​

from langchain\_community.document\_loaders import TextLoader, DirectoryLoader​

from langchain\_text\_splitters import RecursiveCharacterTextSplitter​

from langchain\_core.prompts import ChatPromptTemplate​

from langchain\_core.output\_parsers import StrOutputParser​

from langchain\_core.runnables import RunnablePassthrough​

​

​

class SecurityQASystem:​

"""安全知識問答系統"""​

​

def \_\_init\_\_(self, api\_key: str, docs\_path: str = "./security\_docs"):​

"""​

初始化問答系統​

​

​

4.4 執行與測試​

準備測試文件：​

建立security\_docs目錄，並新增一些安全文件：​

​

Code block​

Plain Text

security\_docs/​

├── sql\_injection.txt​

├── xss\_vulnerability.txt​

└── security\_best\_practices.txt​

​

示例文件內容（sql\_injection.txt）：​

​

Code block​

Plain Text

SQL隱碼攻擊漏洞是一種常見的Web安全漏洞。攻擊者透過在輸入欄位中插入惡意SQL程式碼，​

可以繞過身份驗證、訪問或修改資料庫資料，甚至執行系統命令。​

​

檢測方法：​

1\. 手動測試：在輸入框中輸入單引號(')、雙引號(")等特殊字元​

2\. 自動化工具：使用SQLMap、Burp Suite等工具進行掃描​

3\. 程式碼審計：檢查SQL語句的拼接方式​

​

防範措施：​

1\. 使用引數化查詢或預編譯語句​

2\. 對使用者輸入進行嚴格的驗證和過濾​

3\. 使用最小許可權原則配置資料庫賬戶​

4\. 定期更新資料庫軟體和驅動程式​

​

執行系統：​

​

Code block​

Bash

\# 設定API金鑰​

​

測試示例：​

​

Code block​

Plain Text

請輸入問題：什麼是SQL隱碼攻擊？​

​

回答：根據參考資料，SQL隱碼攻擊漏洞是一種常見的Web安全漏洞。攻擊者透過在輸入欄位中插入惡意SQL程式碼，可以繞過身份驗證、訪問或修改資料庫資料，甚至執行系統命令。​

​

檢測方法包括：​

1\. 手動測試：在輸入框中輸入單引號(')、雙引號(")等特殊字元​

2\. 自動化工具：使用SQLMap、Burp Suite等工具進行掃描​

3\. 程式碼審計：檢查SQL語句的拼接方式​

​

五、LangChain在網路安全中的應用​

5.1 威脅情報分析​

應用場景：自動分析威脅情報報告，提取關鍵資訊。​

​

Code block​

Python

\# lang\_threat\_demo.py​

from langchain\_core.prompts import ChatPromptTemplate​

from langchain\_core.output\_parsers import JsonOutputParser​

from langchain\_core.pydantic\_v1 import BaseModel, Field​

from typing import List​

​

5.2 安全日誌分析​

應用場景：自動分析安全日誌，識別異常行為。​

​

Code block​

Python

\# lang\_logs.demo​

from langchain\_core.prompts import ChatPromptTemplate​

​

\# 建立日誌分析提示詞​

log\_analysis\_prompt = ChatPromptTemplate.from\_template("""​

你是一個安全分析師。分析以下安全日誌，識別潛在的安全威脅。​

​

日誌內容：​

{log\_content}​

​

請分析：​

1\. 是否存在異常行為​

2\. 可能的攻擊型別​

3\. 建議的響應措施​

​

分析結果：""")​

​

\# 建立分析鏈​

log\_analysis\_chain = log\_analysis\_prompt | llm | StrOutputParser()​

​

\# 使用示例​

log\_content = """​

​

5.3 漏洞檢測輔助​

應用場景：輔助程式碼審計，識別潛在漏洞。​

​

Code block​

Python

\# lang\_audit.py​

from langchain\_core.tools import tool​

from langchain.agents import AgentExecutor, create\_react\_agent​

​

\# 定義程式碼審計工具​

@tool​

def analyze\_code\_security(code: str, language: str) -> str:​

"""分析程式碼安全性​

​

Args:​

code: 待分析的程式碼​

language: 程式語言​

​

Returns:​

安全分析結果​

"""​

\# 建立分析提示詞​

prompt = ChatPromptTemplate.from\_template("""​

​

六、常見問題與最佳實踐​

6.1 效能最佳化​

1）使用流式輸出​

​

Code block​

Python

\# 使用stream方法獲取流式輸出​

for chunk in llm.stream("解釋什麼是SQL隱碼攻擊"):​

print(chunk.content, end="", flush=True)​

​

2）批次處理​

​

Code block​

Python

\# 批次呼叫提高效率​

questions = \["什麼是XSS？", "什麼是CSRF？", "什麼是SSRF？"\]​

results = llm.batch(\[HumanMessage(content=q) for q in questions\])​

​

3）快取機制​

​

Code block​

Python

from langchain.globals import set\_llm\_cache​

from langchain\_community.cache import SQLiteCache​

​

\# 啟用快取​

​

6.2 錯誤處理​

​

Code block​

Python

from langchain\_core.runnables import RunnableLambda​

​

\# 新增錯誤處理​

def safe\_invoke(chain, input\_data):​

try:​

return chain.invoke(input\_data)​

except Exception as e:​

print(f"呼叫失敗：{e}")​

return None​

​

\# 使用重試機制​

from langchain\_core.runnables import RunnableRetry​

​

chain\_with\_retry = chain.with\_retry(​

stop\_after\_attempt=3,​

wait\_exponential\_jitter=True​

)​

​

6.3 安全性考慮​

1）API金鑰安全​

​

Code block​

Python

import os​

from dotenv import load\_dotenv​

​

2）輸入驗證​

​

Code block​

Python

def sanitize\_input(user\_input: str) -> str:​

"""清理使用者輸入，防止提示詞注入"""​

\# 移除潛在的提示詞注入​

dangerous\_patterns = \[​

"ignore previous instructions",​

"system prompt",​

"ignore above"​

\]​

​

for pattern in dangerous\_patterns:​

if pattern.lower() in user\_input.lower():​

return "輸入包含不安全內容"​

​

return user\_input​

​

3）輸出過濾​

​

Code block​

Python

def filter\_output(response: str) -> str:​

"""過濾模型輸出，移除敏感資訊"""​

​

七、總結與展望​

核心要點回顧​

1.

LangChain是什麼：一個用於構建LLM應用的開源框架，提供標準化的元件和工具。​

2.

核心元件：模型I/O、資料連線、鏈、記憶、代理五大元件構成完整的技術棧。​

3.

開發流程：環境搭建 → 元件選擇 → 鏈式組合 → 測試最佳化 → 部署上線。​

4.

安全應用：威脅情報分析、安全日誌分析、漏洞檢測輔助等場景。​

關鍵結論​

•

LangChain降低了AI應用開發門檻，讓開發者能夠專注於業務邏輯而非底層實現。​

•

元件化設計是LangChain的核心優勢，每個元件都可以獨立使用或靈活組合。​

•

安全場景是LangChain的重要應用領域，可以顯著提升安全運營效率。​

後續展望​

本章介紹了LangChain框架的基礎知識和核心元件。在後續章節中，我們將深入學習：​

•

RAG檢索增強生成：如何構建高質量的知識庫問答系統​

•

Agent智慧體架構：如何構建能夠自主決策和執行任務的AI代理​

•

MCP協議與Skill工程化：如何標準化工具介面和技能管理​

這些內容將幫助你構建更加複雜和強大的AI安全應用。​

​

​

作者：無涯​