LangChain Agent 開發入門:工具呼叫教學
如果你最近有在關注 AI 開發的趨勢,你一定聽過 LangChain 這個名字。老實說,當我第一次接觸 LangChain 的時候,覺得它的文件寫得有點混亂,但等到真正上手之後,才發現它在 Agent 開發上的威力真的很強大。今天這篇文章,我想帶你從零開始認識 LangChain Agent 的工具呼叫機制,讓你不再對這些概念感到陌生。
什麼是 LangChain Agent
簡單來說,LangChain Agent 就是一個能夠「自己思考該怎麼做」的 AI 程式。一般的 LLM 只能接收輸入然後產出文字回應,但 Agent 不一樣——它可以根據使用者的問題,自己決定要呼叫哪些工具、要執行什麼動作,然後把結果整合起來回覆你。
你可以把它想像成一個聰明的助理。當你問它「今天台北的天氣如何?」的時候,它不會瞎掰一個答案,而是會去呼叫天氣 API,拿到真實的資料之後再回答你。這就是 Agent 跟一般聊天機器人最大的區別。
在 LangChain 的架構中,Agent 主要由三個部分組成:LLM(大型語言模型)、Tools(工具)和 Prompt(提示詞)。LLM 負責思考和推理,Tools 負責執行具體的任務,而 Prompt 則定義了 Agent 的行為模式。
工具呼叫的核心概念
工具呼叫(Tool Calling)是 Agent 的靈魂所在。沒有工具呼叫,Agent 就只是一個比較會聊天的程式而已。那到底什麼是工具呼叫呢?
本質上,工具呼叫就是讓 LLM 能夠以結構化的方式來「使用」外部功能。當 LLM 判斷需要使用某個工具時,它會輸出一段符合特定格式的資料(通常是 JSON),告訴系統:「我要呼叫這個工具,參數是這些。」然後系統就會真的去執行那個工具,把結果回傳給 LLM。
舉個例子,假設你定義了一個「搜尋資料庫」的工具,當使用者問「我們公司上個月的營收是多少?」時,Agent 就會自動呼叫這個搜尋工具,帶入適當的查詢條件,然後拿到結果。這整個過程都是自動完成的,不需要你寫一堆 if-else 判斷。
使用 @tool 裝飾器定義工具
在 LangChain 中,定義工具最簡單的方式就是使用 @tool 裝飾器。這個裝飾器可以把任何一個普通的 Python 函式變成 Agent 可以使用的工具。
from langchain_core.tools import tool
@tool
def search_weather(city: str) -> str:
"""搜尋指定城市的天氣資訊。
Args:
city: 要查詢天氣的城市名稱
"""
# 這裡放你的 API 呼叫邏輯
return f"{city}目前天氣晴朗,氣溫 28°C"這邊有幾個重點要注意。第一,函式的 docstring 非常重要,因為 LLM 就是靠這段描述來判斷什麼時候該用這個工具。寫得越清楚,Agent 就越能正確地使用它。第二,型別註解也不能省略,LangChain 會根據型別註解來產生工具的參數定義。
我自己的經驗是,docstring 最好寫得像是在跟人解釋「這個工具能做什麼」,而不是寫成技術規格。這樣 LLM 更容易理解什麼情況下該呼叫這個工具。
建立 Tool Calling Agent
工具定義好之後,接下來就是把它們組裝成一個 Agent。LangChain 提供了 create_tool_calling_agent 這個函式,讓整個過程變得非常簡單。
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
# 初始化 LLM
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 定義提示詞模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一個有用的助理,請使用提供的工具來回答問題。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
# 建立 Agent
tools = [search_weather]
agent = create_tool_calling_agent(llm, tools, prompt)
# 建立執行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 執行
result = agent_executor.invoke({"input": "台北現在天氣怎樣?"})這段程式碼的關鍵在於 AgentExecutor。它負責管理 Agent 的整個執行流程,包括呼叫 LLM、解析工具呼叫、執行工具、把結果回傳給 LLM 等等。你只需要 invoke 一次,它就會自動處理所有事情。
ReAct Agent 模式解析
ReAct(Reasoning + Acting)是目前最流行的 Agent 模式之一。它的核心理念是讓 LLM 在每一步都先「思考」再「行動」,形成一個 Thought → Action → Observation 的循環。
在 ReAct 模式下,Agent 的運作流程大概是這樣的:首先,Agent 收到使用者的問題後會先思考(Thought),分析需要什麼資訊來回答這個問題。接著,它會決定要執行什麼動作(Action),也就是呼叫哪個工具。工具執行完之後,Agent 會觀察結果(Observation),然後決定是否需要再呼叫其他工具,或者已經可以給出最終答案。
這個模式的好處是 Agent 的推理過程是透明的。你可以看到它每一步在想什麼、為什麼要呼叫某個工具。這對除錯來說非常有用,因為你可以很快找出 Agent 在哪個環節出了問題。
串接多個工具的實戰範例
真實世界的應用通常不會只有一個工具。讓我們來看一個稍微複雜一點的例子:一個可以同時查詢天氣和搜尋餐廳的旅遊助手。
@tool
def search_restaurants(city: str, cuisine: str) -> str:
"""搜尋指定城市中特定類型的餐廳推薦。
Args:
city: 城市名稱
cuisine: 料理類型,例如日式、義式、中式
"""
return f"在{city}推薦的{cuisine}餐廳:好味道餐廳、美食天堂"
@tool
def get_travel_info(destination: str) -> str:
"""取得旅遊目的地的基本資訊,包含交通和住宿建議。
Args:
destination: 旅遊目的地
"""
return f"{destination}的旅遊資訊:建議搭高鐵前往,住宿推薦車站附近"當你問這個 Agent「我週末想去台南玩,想吃日式料理,天氣會怎樣?」的時候,Agent 會自動拆解這個問題,分別呼叫天氣查詢、餐廳搜尋和旅遊資訊三個工具,最後把結果整合成一個完整的回答。
如果你對資料檢索這塊有興趣,也可以參考向量資料庫比較這篇文章,了解如何讓 Agent 從向量資料庫中取得更精準的資訊。
2026 年 Deep Agents 新功能
說到 2026 年 LangChain 最讓人興奮的更新,絕對是 Deep Agents 功能。這個新功能讓 Agent 可以進行更深層的推理,不再只是簡單的 Thought → Action → Observation 循環。
Deep Agents 引入了「計畫-執行-反思」的三階段架構。在計畫階段,Agent 會先分析整個任務,制定一個執行計畫。在執行階段,它會按照計畫一步一步完成任務。在反思階段,它會回顧整個執行過程,檢查是否有遺漏或錯誤。
另外一個很實用的功能是 Agent 之間的協作。你現在可以建立多個專門化的 Agent,讓它們彼此溝通合作。比如一個負責搜尋、一個負責分析、一個負責撰寫報告,整個流程完全自動化。這在處理複雜任務的時候特別有用。
LangGraph 在這次更新中也加入了更好的狀態管理機制,讓你可以更靈活地控制 Agent 的執行流程。如果你之前覺得 LangGraph 的學習曲線太陡,現在是重新嘗試的好時機。
錯誤處理與除錯技巧
開發 Agent 的時候,錯誤處理是絕對不能忽略的。工具呼叫可能會因為各種原因失敗,比如 API 逾時、參數格式錯誤、權限不足等等。
@tool
def safe_search(query: str) -> str:
"""安全的搜尋工具,帶有錯誤處理。
Args:
query: 搜尋關鍵字
"""
try:
result = perform_search(query)
return result
except TimeoutError:
return "搜尋逾時,請稍後再試"
except Exception as e:
return f"搜尋發生錯誤:{str(e)}"我的建議是,工具函式永遠不要拋出例外。如果發生錯誤,就回傳一段清楚的錯誤訊息,讓 Agent 知道發生了什麼事。這樣 Agent 可以自己決定下一步該怎麼做,比如重試或者使用其他工具。
除錯方面,把 verbose=True 打開是最基本的做法。它會把 Agent 的每一步推理過程都印出來。更進階的話,你可以用 LangSmith 來追蹤和監控 Agent 的執行過程,它提供了非常好的視覺化界面。
效能優化建議
當你的 Agent 越來越複雜、工具越來越多的時候,效能就會變成一個問題。這裡分享幾個我自己踩過坑之後學到的優化技巧。
首先,工具數量不要太多。雖然理論上你可以給 Agent 幾十個工具,但實際上工具太多的話,LLM 反而會搞混,經常呼叫錯誤的工具。我的經驗是控制在 10 個以內比較理想。
其次,善用 caching。如果某些工具呼叫的結果在短時間內不會變化(比如匯率查詢),就把結果快取起來,不要每次都重新呼叫 API。
最後,考慮使用串流(streaming)來改善使用者體驗。Agent 的執行通常需要好幾秒,如果讓使用者乾等的話體驗會很差。透過串流,你可以即時顯示 Agent 的思考過程,讓使用者知道它正在做什麼。如果你的 Agent 涉及到網頁爬取,可以參考Python Selenium 動態爬蟲教學來優化資料擷取的效率。
總結與下一步
回顧一下今天學到的內容:我們從 LangChain Agent 的基本概念開始,認識了工具呼叫的運作機制,學會了用 @tool 裝飾器定義工具,用 create_tool_calling_agent 建立 Agent,也探討了 ReAct 模式和 2026 年的 Deep Agents 新功能。
如果你是剛入門的開發者,我建議你先從一個簡單的單工具 Agent 開始練習,等熟悉了基本流程之後,再慢慢增加工具數量和複雜度。不要一開始就想做太複雜的東西,循序漸進才是最有效率的學習方式。
LangChain 的生態系統還在快速發展中,幾乎每個月都有新的功能和改進。保持學習的心態,持續關注官方文件和社群討論,你一定可以打造出強大的 AI Agent 應用。
你可能也喜歡
探索其他領域的精選好文
Redis 快取策略教學:Cache-Aside、Write-Through 到實戰踩坑全紀錄
快取不是 set/get 那麼簡單。這篇從 Cache-Aside、Write-Through 到 Write-Behind,帶你理解每種策略的取捨,加上我踩過的坑,幫你少走彎路。
DaVinci Resolve 免費影片剪輯入門教學:從安裝到完成第一支影片
DaVinci Resolve 是好萊塢等級的剪輯軟體,但免費版就能滿足 90% 的需求。這篇帶你從安裝開始,一步步完成第一支影片。
Google SGE 對 SEO 的影響:2026 年你必須知道的因應策略
Google AI Overview 已經出現在將近一半的搜尋結果中。SEO 不會死,但規則正在改變。這篇整理最新數據和五個你現在就該開始做的因應策略。
CSS Container Queries 教學:響應式設計的新時代終於來了
Media Queries 看的是視窗大小,但元件不一定只活在全寬的地方。Container Queries 讓你的 CSS 根據容器大小來變化,真正實現元件級的響應式設計。