🌐 LangChain 是什麼?
LangChain 是一個開源框架,讓你可以更方便地構建基於大型語言模型(LLMs)的應用程式。
它能幫你整合 prompt 模版、LLM記憶功能、串接外部感知工具、資料檢索與代理人(Agents),讓 LLM 從單純來回回答問題進化為解決任務的智慧系統,也提供非常好用的 Python 套件,方便你快速建構與整合語言模型和資料應用。
透過 LangChain,你也能理解一個「以 LLM 為中心」的應用程式,幫助你調度 LLM 相關的模組與組件,加速建構語言模型的工作流程。
🧩 LangChain 能做什麼?
智慧問答系統(像 ChatGPT 但能讀懂你家的資料):就像幫你公司的資料裝上 ChatGPT,讓它能讀懂內部文件或資料庫後再回答問題。
RAG(檢索增強生成):它會在回答問題前,先去查資料再講話,不是自己亂編,讓回答更可信。
自動修改 GitHub 程式碼:你只要告訴它「幫我把這段程式碼改成什麼功能」,它就會去讀懂你的程式碼然後動手修改。
聊天機器人 / 客服系統:可以建立一個像真人一樣的客服,記得客戶之前問過什麼,也會從資料裡找答案來回答。
自動摘要 / 報告工具:幫你把一堆資料濃縮成重點摘要,像是自動幫你寫週報、會議紀錄。
🔧 核心元件一覽
元件 | 說明 |
---|---|
PromptTemplate | 定義輸入模板,提高重用性與一致性。 白話:把你想問的話套進格式,像填空題幫模型理解你的指令 |
LLM | 封裝語言模型如 OpenAI、Ollama、Anthropic 等。 白話:大腦負責思考與回應的主體 |
Chains | 串連任務步驟(例:輸入 → 推論 → 輸出)。 白話:把好幾個步驟排成一條線,自動按順序執行 |
Memory | 對話記憶,保留上下文資訊。 白話:幫模型「記住你剛剛說過什麼」,讓它有對話記憶 |
Tools | 可呼叫外部功能,如瀏覽器、資料庫、Python 腳本等。 白話:讓模型能「動手做事」,像上網查資料、跑程式等 |
Agents | 能自主判斷任務並選用適合的 Tool 執行。 白話:像一個會自己決定要用什麼工具來完成任務的 AI 經理人 |
Retrievers | 用於檢索向量資料庫或文件內容,配合 RAG 模型。 白話:幫模型「翻找資料」的助手,能從文件中找到答案 |
⚙️ 安裝與快速上手
要開始使用 LangChain,建議安裝以下四個核心套件:
pip install langchain
pip install langchain-core
pip install langchain-openai
pip install langchain-community
這些模組負責不同的核心功能:
langchain
:主要框架本體langchain-core
:核心結構模組langchain-openai
:串接 OpenAI 模型用langchain-community
:整合其他常見工具與外部服務
延伸閱讀與官方資源:
🤖 LangChain Agent 實例:建立程式碼助理
這個範例展示了 LangChain 如何快速串接 LLM + 工具 + 推理模式,來建立一個「能聽懂任務 → 執行分析 → 回應結果」的簡單 AI Pipeline 資料處理應用。
以下是一個使用 LangChain 架設「程式碼助理」的範例,可以根據輸入自動解釋或修改程式碼:
import os
from langchain.agents import initialize_agent, Tool
from langchain.agents.agent_types import AgentType
from langchain_community.llms import OpenAI
# 設定 API 金鑰
os.environ["OPENAI_API_KEY"] = "你的 API 金鑰"
# 初始化 LLM
llm = OpenAI(temperature=0.3)
# 🔧 定義兩個工具:解釋程式碼、修改程式碼
def explain_code_tool(input_text: str) -> str:
prompt = f"""
你是一位資深工程師,請用簡單、清楚的方式解釋下面這段程式碼的用途與邏輯。
請盡量用中文、舉例說明,讓初學者也看得懂。
程式碼如下:
{input_text}
"""
return llm.invoke(prompt)
def modify_code_tool(input_text: str) -> str:
prompt = f"""
你是一個專業程式開發者,請依照以下修改規格(spec)來修改指定程式碼。
只輸出修改後的程式碼,不要附帶說明。
【修改規格】
- 將 logging level 改為 "error"
- 加入 "debug": false 這個設定
【原始程式碼】
{input_text}
"""
return llm.invoke(prompt)
# 包裝成 Tool
explain_tool = Tool(
name="CodeExplainer",
func=explain_code_tool,
description="提供簡單易懂的程式碼解釋,支援 Python / JSON / SQL"
)
modify_tool = Tool(
name="CodeModifier",
func=modify_code_tool,
description="依照規格修改程式碼,輸出更新後版本"
)
# ✅ 初始化 Agent
agent = initialize_agent(
tools=[explain_tool, modify_tool],
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
max_iterations=15,
verbose=True
)
# 🧪 測試輸入
query = """
幫我解釋這段程式碼在做什麼:
def greet(name):
return f"Hello, {name}!"
"""
# 🧠 執行 Agent
result = agent.run(query)
print("\n🧠 解釋結果:\n", result)
🌍 使用自定義 OpenAI Base URL
若你是使用代理服務(如自架的 API 或 LM Studio / LocalAI),可以這樣指定 base URL:
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
# 設定你自定義的 OpenAI 服務 base url 和 key
OPENAI_API_KEY = "你的 API 金鑰"
OPENAI_API_BASE = "https://你的-base-url.com/v1"
# 初始化 ChatOpenAI 模型,指定 base url
llm = ChatOpenAI(
temperature=0.7,
openai_api_key=OPENAI_API_KEY,
openai_api_base=OPENAI_API_BASE,
model_name="gpt-3.5-turbo", # 替換成你服務支援的模型名稱
)
# 設計 prompt template
prompt = ChatPromptTemplate.from_template("請用繁體中文回覆:你對 {topic} 有什麼看法?")
# 建立 Chain
chain = LLMChain(llm=llm, prompt=prompt)
# 測試輸入
response = chain.run("程式開發與日常生活的關聯")
print(response)
📌 注意:
openai_api_base
請加上/v1
model_name
請對應你的自訂服務支援的模型名稱若用非 Chat 模型(如
text-davinci-003
),請改用langchain.llms.OpenAI
🔍 檢索增強生成(RAG)範例
from langchain.document_loaders import PyPDFLoader
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA
loader = PyPDFLoader("你的文件.pdf")
docs = loader.load()
vector_db = FAISS.from_documents(docs, OpenAIEmbeddings())
retriever = vector_db.as_retriever()
qa = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
qa.run("這份文件的主要內容是什麼?")
🤖 OpenAI 原生 SDK vs LangChain:差異比較
LangChain 並不是模型執行引擎,而是「語言模型調度與工作流框架」,會呼叫模型執行引擎 package 的接口。以下是它與 OpenAI 原生 SDK 在開發體驗與功能支援上的比較:
📌 建議:
想快速測試 LLM 回應 → 用 OpenAI 原生 SDK 較簡單
想構建具規模的 AI 應用或複雜工作流程 → 用 LangChain 更有效率
項目 | OpenAI 原生 SDK (openai package) | LangChain 框架 |
用途定位 | 直接存取 OpenAI API,低階控制 | 高階框架,幫你整合 prompt、記憶體、檢索與工具 |
語法風格 | 精簡直接,自己控制所有流程 | 模組化、可組合性強,適合建構複雜應用 |
Prompt 處理 | 你需自行組字串 | 提供 PromptTemplate 等管理機制 |
多步驟任務 | 手動串接 | 使用 Chain 自動串接處理流程 |
外部工具 | 自行串接 API 或函式 | 可透過 Tools 與 Agents 自動整合使用 |
記憶體與上下文 | 需自己處理上下文儲存與回傳 | 有 Memory 模組自動維護對話歷史 |
適合場景 | 簡單 LLM 呼叫、寫小工具、debug | 構建長流程、複雜交互任務、智慧代理系統 |
⚠️ LangChain 的常見缺點與開發者反饋
在使用 LangChain 的時候,可以根據應用程式的需求與開發階段,衡量它是否適合你目前遇到的場景。
下面是一些大家開發上遇到 LangChain 常見的缺點:
限制靈活性,難以實現複雜需求
當你需要實作更動態的 AI 代理人架構(例如:動態調整工具、管理多代理互動),LangChain 的高層抽象有時反而會卡手,必須繞過框架才能完成。性能開銷與依賴繁多
它的模組化設計雖然靈活,但也會引入額外的性能負擔,加上外部套件繁多,有時系統變得複雜又難維護。不適合所有應用場景
如果你只是要做一個簡單的 LLM 呼叫或小工具,直接用openai
SDK、httpx
或其他輕量方案可能反而更省力。
[用心去感覺] vibe coding 治百病?
LangChain 在你初次導入 LLM 的時候非常棒!它像是一張地圖,它會帶你理解 prompt、memory、retriever、agent 等每個重要模組的角色與組合方式。
當然,就像用傳統 STL pipeline 一樣,即使用 vide coding 寫 LangChain,一樣有時候會卡到,一樣很煩人 ... 🫖
結語:找到適合的場景打造 AI Agent 吧!
LangChain 是一個專為構建 AI 工作流與應用而設計的工具框架,不只是「用 LLM 回答問題」,而是幫助你搭起完整的 AI 系統。
你可以從簡單的任務開始,比如解釋或修改程式碼,也可以整合公司內部的 PDF、資料庫、Markdown、Notion 等各種資料,打造出屬於你的智慧問答系統。
若你要處理更複雜的流程,LangChain 也能與 n8n 等自動化工具結合,讓 AI 不只思考,還能「動起來」自動執行任務——像是從 Notion 擷取資訊 → 整理 → 傳送到 Slack,全流程都能自動化。
無論你是工程師、分析師,或只是想讓工作更聰明地自動完成,LangChain 提供了靈活且強大的架構,大家一起來發揮吧!keep going 🚀
沒有留言:
張貼留言