戰(zhàn):構(gòu)建能調(diào)用工具的大模型應(yīng)用)
1. 先搞清楚 LangChain Agent、MCP 和 Skills 到底能幫你解決什么如果你正在用 Claude、GPT 這類大模型但總覺得它們像個(gè)“萬(wàn)事通萬(wàn)事松”——什么都知道一點(diǎn)但一到具體操作比如查數(shù)據(jù)庫(kù)、調(diào) API、操作本地文件就只會(huì)說(shuō)“我無(wú)法直接操作”那你現(xiàn)在遇到的問(wèn)題LangChain Agent 加上 MCP 和 Skills 這套組合就是目前最主流的工程化解決方案。簡(jiǎn)單來(lái)說(shuō)它的核心價(jià)值是讓大模型從一個(gè)“聊天顧問(wèn)”變成一個(gè)能真正“動(dòng)手執(zhí)行”的智能助手。你不再需要手動(dòng)復(fù)制模型輸出的代碼或命令去執(zhí)行而是告訴 Agent 你的目標(biāo)它就能自主規(guī)劃、調(diào)用工具Skills、完成任務(wù)并把最終結(jié)果返回給你。這里涉及三個(gè)關(guān)鍵角色LangChain Agent 你可以把它理解為一個(gè)“大腦”或“調(diào)度中心”。它負(fù)責(zé)理解你的指令比如“幫我分析一下上個(gè)月的銷售數(shù)據(jù)”然后決定先做什么、后做什么調(diào)用哪個(gè)工具并解析工具返回的結(jié)果。MCP 全稱是 Model Context Protocol你可以把它看作一套“工具接入標(biāo)準(zhǔn)”或“通信協(xié)議”。它定義了工具Skills如何以一種統(tǒng)一、標(biāo)準(zhǔn)化的方式把自己“能干什么”、“需要什么參數(shù)”告訴給 Agent。有了 MCPAgent 就能動(dòng)態(tài)發(fā)現(xiàn)和調(diào)用各種工具而無(wú)需為每個(gè)工具寫死代碼。Skills 這就是具體的“工具”或“技能”。一個(gè) Skill 就是一個(gè)具體的能力比如“讀取數(shù)據(jù)庫(kù)”、“發(fā)送郵件”、“查詢天氣”、“操作 Excel 文件”。通過(guò) MCP 協(xié)議這些 Skills 被封裝成 Agent 可以理解和調(diào)用的格式。所以當(dāng)有人討論“Claude 接入 Skills”、“Agent 開發(fā)”時(shí)他們本質(zhì)上是在做同一件事構(gòu)建一個(gè)能自動(dòng)使用外部工具的大模型應(yīng)用。這對(duì)于需要將 AI 能力嵌入到具體工作流如數(shù)據(jù)分析、自動(dòng)化辦公、智能客服的場(chǎng)景來(lái)說(shuō)是效率提升的關(guān)鍵。2. 環(huán)境準(zhǔn)備與核心依賴別在第一步就卡住在開始寫代碼之前先把環(huán)境理順。很多“跑不起來(lái)”的問(wèn)題都出在環(huán)境配置和依賴版本上。這里我按實(shí)際落地的順序帶你過(guò)一遍。2.1 基礎(chǔ) Python 環(huán)境與關(guān)鍵包首先你需要一個(gè) Python 環(huán)境建議 3.8 以上。我強(qiáng)烈建議使用虛擬環(huán)境venv或conda來(lái)隔離項(xiàng)目依賴。核心的 Python 包主要有以下幾個(gè)pip install langchain langchain-communitylangchain是核心框架langchain-community包含了大量社區(qū)貢獻(xiàn)的工具、集成和工具。版本注意LangChain 迭代很快API 可能有變動(dòng)。如果遇到某些類或函數(shù)找不到第一反應(yīng)是去查對(duì)應(yīng)版本的官方文檔而不是盲目搜索。這是新手最容易踩的坑。2.2 大模型 API 密鑰Agent 的“大腦”需要一個(gè)大模型來(lái)驅(qū)動(dòng)。你需要準(zhǔn)備一個(gè) LLM 提供商的 API Key。OpenAI / Azure OpenAI 最常用生態(tài)最成熟。你需要OPENAI_API_KEY。Anthropic Claude 在長(zhǎng)上下文和復(fù)雜指令遵循上表現(xiàn)很好。你需要ANTHROPIC_API_KEY。其他如DeepSeek、智譜、月之暗面等國(guó)內(nèi)外的模型只要 LangChain 支持都可以。將 API Key 設(shè)置為環(huán)境變量這是最安全、最方便的做法# Linux/macOS export OPENAI_API_KEYyour-api-key-here # Windows (PowerShell) $env:OPENAI_API_KEYyour-api-key-here或者在代碼中通過(guò)os.environ[“OPENAI_API_KEY”] “your-key”設(shè)置不推薦用于生產(chǎn)環(huán)境。2.3 關(guān)于 MCP Server 和 Skills這是概念上最容易混淆的地方。MCP 是一個(gè)協(xié)議要實(shí)現(xiàn)它你需要一個(gè)MCP Server。這個(gè) Server 負(fù)責(zé)管理一個(gè)或多個(gè)Skills并以標(biāo)準(zhǔn)格式向 Agent 暴露這些 Skills 的功能。目前你有幾種選擇來(lái)獲得 MCP Server 和 Skills使用現(xiàn)成的 MCP Server 一些項(xiàng)目或公司提供了開箱即用的 MCP Server里面集成了很多常用 Skills如文件操作、SQL查詢等。你需要運(yùn)行這個(gè) Server。自己實(shí)現(xiàn) MCP Server 如果你有自定義的工具需要接入就需要按照 MCP 協(xié)議規(guī)范自己編寫 Server 端代碼。這涉及到定義工具Tools的 Schema名稱、描述、參數(shù)。使用 LangChain 內(nèi)置工具 對(duì)于快速驗(yàn)證LangChain 的langchain.tools和langchain-community中已經(jīng)有很多預(yù)定義的工具如WikipediaQueryRun,ShellTool。你可以先用這些工具構(gòu)建一個(gè)簡(jiǎn)單的 Agent理解流程再考慮接入更復(fù)雜的 MCP。對(duì)于初次嘗試我建議路線是先忽略“純 MCP”的實(shí)現(xiàn)復(fù)雜度直接用 LangChain 內(nèi)置工具跑通一個(gè) Agent。這能讓你快速建立對(duì) Agent 工作流的直覺。理解了 Agent 如何調(diào)用 Tools 之后再去研究 MCP Server 的部署和連接會(huì)順暢很多。3. 從零構(gòu)建你的第一個(gè) LangChain Agent我們從一個(gè)最簡(jiǎn)單的例子開始創(chuàng)建一個(gè)能使用搜索引擎和計(jì)算器的 Agent。這個(gè)例子不涉及 MCP Server但完整展示了 Agent 的核心工作流。3.1 定義工具Skills首先我們創(chuàng)建兩個(gè)工具一個(gè)用于網(wǎng)絡(luò)搜索一個(gè)用于數(shù)學(xué)計(jì)算。from langchain.tools import Tool, DuckDuckGoSearchRun from langchain.utilities import ArxivAPIWrapper import math # 工具1 網(wǎng)絡(luò)搜索使用 DuckDuckGo search DuckDuckGoSearchRun() search_tool Tool( nameWeb Search, funcsearch.run, descriptionUseful for when you need to answer questions about current events or general knowledge. Input should be a search query. ) # 工具2 計(jì)算器 def calculator_func(expression: str) - str: Evaluate a mathematical expression. Use only , -, *, /, **, ( ). try: # 警告直接使用 eval 有安全風(fēng)險(xiǎn)僅用于演示。生產(chǎn)環(huán)境應(yīng)使用安全評(píng)估庫(kù)如 asteval。 result eval(expression, {__builtins__: None}, {math: math}) return str(result) except Exception as e: return fError evaluating expression: {e} calc_tool Tool( nameCalculator, funccalculator_func, descriptionUseful for performing arithmetic calculations. Input should be a valid mathematical expression as a string, e.g., 3 * 4 5. ) # 將工具放入列表 tools [search_tool, calc_tool]關(guān)鍵點(diǎn)每個(gè)Tool對(duì)象都必須有清晰的name、func執(zhí)行函數(shù)和description。description至關(guān)重要因?yàn)?Agent大模型就是靠閱讀這些描述來(lái)決定在什么情況下使用哪個(gè)工具。3.2 初始化大模型和 Agent接下來(lái)我們選擇一個(gè) LLM并用它和工具列表來(lái)創(chuàng)建 Agent。from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain import hub # 1. 初始化 LLM llm ChatOpenAI(modelgpt-4o, temperature0) # 使用 gpt-4o溫度設(shè)為0保證穩(wěn)定性 # 2. 獲取一個(gè)預(yù)設(shè)的提示詞模板。ReAct 是一個(gè)經(jīng)典的 Agent 推理框架。 prompt hub.pull(hwchase17/react) # 3. 創(chuàng)建 Agent agent create_react_agent(llm, tools, prompt) # 4. 創(chuàng)建 Agent 執(zhí)行器它負(fù)責(zé)運(yùn)行 Agent 的循環(huán)思考 - 選擇工具 - 執(zhí)行 - 觀察 - 再思考... agent_executor AgentExecutor(agentagent, toolstools, verboseTrue, handle_parsing_errorsTrue)verboseTrue會(huì)讓整個(gè)執(zhí)行過(guò)程打印出來(lái)非常適合調(diào)試和學(xué)習(xí)。handle_parsing_errorsTrue很重要當(dāng)模型輸出格式不符合 Agent 預(yù)期時(shí)它能防止程序直接崩潰而是嘗試讓模型重試。3.3 運(yùn)行并觀察 Agent 思考過(guò)程現(xiàn)在讓我們問(wèn)一個(gè)需要結(jié)合搜索和計(jì)算的問(wèn)題。question “What was the GDP of the United States in 2023? If it grew by 2.5% in 2024, what would the projected GDP be?” result agent_executor.invoke({input: question}) print(f\n最終答案: {result[output]})當(dāng)你運(yùn)行這段代碼時(shí)在控制臺(tái)會(huì)看到類似以下的輸出verboseTrue的效果 Entering new AgentExecutor chain... I need to find the US GDP for 2023 first, then calculate the projected GDP for 2024 with a 2.5% growth. Action: Web Search Action Input: “United States GDP 2023” Observation: [Search result: The GDP of the United States in 2023 was approximately $27.36 trillion.] Thought: Now I have the 2023 GDP. I need to calculate 2.5% of that and add it to get the 2024 projection. Action: Calculator Action Input: “27360 * 0.025” Observation: 684 Thought: So the growth is $684 billion. Now add it to the 2023 GDP. Action: Calculator Action Input: “27360 684” Observation: 28044 Thought: The projected GDP for 2024 would be approximately $28.044 trillion. Final Answer: The GDP of the United States in 2023 was about $27.36 trillion. With a 2.5% growth in 2024, the projected GDP would be approximately $28.044 trillion. Finished chain. 最終答案: The GDP of the United States in 2023 was about $27.36 trillion. With a 2.5% growth in 2024, the projected GDP would be approximately $28.044 trillion.這就是 Agent 的核心魔力它自動(dòng)完成了“規(guī)劃-執(zhí)行-推理”的循環(huán)。你不需要告訴它先去搜索再去計(jì)算。你只給了最終目標(biāo)它自己拆解了步驟。4. 進(jìn)階接入真正的 MCP Server 與自定義 Skills當(dāng)你理解了基礎(chǔ) Agent 的工作流后就可以探索更工程化的 MCP 模式了。這里的核心變化是工具Skills不再直接寫在 Python 代碼里而是由一個(gè)獨(dú)立的 MCP Server 提供。4.1 理解 MCP 通信模型在 MCP 架構(gòu)下你的應(yīng)用Client通常是 LangChain Agent和工具提供方Server是分離的。它們通過(guò)標(biāo)準(zhǔn)化的 JSON-RPC 消息進(jìn)行通信。Client 初始化 連接到 MCP Server。Server 宣告 Server 向 Client 發(fā)送它提供的所有 Tools 的列表及其 Schema。Agent 工作 當(dāng) Agent 決定使用某個(gè)工具時(shí)Client 會(huì)向 Server 發(fā)送一個(gè)call_tool請(qǐng)求。Server 執(zhí)行 Server 執(zhí)行對(duì)應(yīng)的工具函數(shù)并將結(jié)果返回給 Client。Client 接收 Client 將結(jié)果交給 Agent 進(jìn)行下一步推理。這種分離的好處是解耦 Skill 的開發(fā)者后端和 Agent 的開發(fā)者前端/應(yīng)用層可以獨(dú)立工作。安全 敏感操作如數(shù)據(jù)庫(kù)訪問(wèn)、服務(wù)器命令可以封裝在受控的 Server 環(huán)境中而不是在調(diào)用 LLM 的客戶端環(huán)境中。動(dòng)態(tài)性 Server 可以隨時(shí)更新或添加新的 SkillsClient 無(wú)需修改代碼即可發(fā)現(xiàn)和使用。4.2 部署并連接一個(gè)簡(jiǎn)單的 MCP Server假設(shè)我們已經(jīng)有一個(gè)運(yùn)行在http://localhost:8080的 MCP Server它提供了一個(gè)read_file的技能。我們需要讓 LangChain Agent 能調(diào)用它。LangChain 社區(qū)通常通過(guò)MCPClient來(lái)橋接。雖然 LangChain 核心庫(kù)對(duì) MCP 的原生支持在演進(jìn)中但一個(gè)常見的實(shí)踐模式是將 MCP Server 提供的工具“轉(zhuǎn)換”為 LangChain 能識(shí)別的Tool對(duì)象。下面是一個(gè)概念性的代碼示例展示了如何連接并封裝 MCP 工具# 假設(shè)我們有一個(gè)能與 MCP Server 通信的客戶端類 # 注意以下是一個(gè)示意流程具體實(shí)現(xiàn)取決于你使用的 MCP 客戶端庫(kù)。 import requests import json class SimpleMCPClient: def __init__(self, server_urlhttp://localhost:8080): self.server_url server_url self.tools self._list_tools() def _list_tools(self): 向 MCP Server 請(qǐng)求可用的工具列表 response requests.post(f{self.server_url}/list_tools) # MCP 協(xié)議有標(biāo)準(zhǔn)端點(diǎn) return response.json() # 返回工具 schema 列表 def call_tool(self, tool_name, arguments): 調(diào)用指定的 MCP 工具 payload { jsonrpc: 2.0, method: call_tool, params: {name: tool_name, arguments: arguments}, id: 1 } response requests.post(f{self.server_url}/rpc, jsonpayload) result response.json() if error in result: raise Exception(fMCP Tool error: {result[error]}) return result[result] # 使用這個(gè)客戶端創(chuàng)建 LangChain Tool mcp_client SimpleMCPClient() def read_file_wrapper(file_path: str) - str: Wrapper function that calls the MCP servers read_file tool. return mcp_client.call_tool(read_file, {path: file_path}) mcp_file_tool Tool( nameread_file, funcread_file_wrapper, descriptionReads the contents of a file from the local filesystem. Input should be a valid file path string. ) # 現(xiàn)在你可以像使用普通工具一樣將 mcp_file_tool 加入到你的 Agent 工具列表中 tools.append(mcp_file_tool) # 然后用新的 tools 列表重新創(chuàng)建 agent_executor關(guān)鍵點(diǎn) 你需要一個(gè)實(shí)際的 MCP Server 在運(yùn)行。你可以尋找開源實(shí)現(xiàn)例如一些項(xiàng)目提供的示例 Server或者根據(jù) MCP 協(xié)議規(guī)范自己實(shí)現(xiàn)一個(gè)。連接的核心是將 MCP Server 的 RPC 調(diào)用封裝成 LangChainTool對(duì)象。4.3 開發(fā)一個(gè)自定義 SkillMCP Server 端如果你想自己提供 Skill就需要實(shí)現(xiàn) MCP Server。這通常涉及以下步驟以 Python 為例選擇 MCP SDK 使用官方或社區(qū)提供的 MCP SDK例如mcp-sdk-python來(lái)簡(jiǎn)化協(xié)議通信。定義工具函數(shù) 編寫實(shí)際執(zhí)行操作的函數(shù)如數(shù)據(jù)庫(kù)查詢、調(diào)用外部 API。注冊(cè)工具 使用 SDK 將你的函數(shù)注冊(cè)為 MCP 工具并定義好輸入輸出的 JSON Schema。啟動(dòng) Server 啟動(dòng)一個(gè) HTTP 或 stdio 服務(wù)器等待 Client 連接。一個(gè)極簡(jiǎn)的偽代碼示例# server.py (概念示例) from mcp_sdk import Server, Tool server Server(my-skills-server) server.tool( nameget_weather, descriptionGet current weather for a city., args_schema{“city”: {“type”: “string”, “description”: “City name”}} ) async def get_weather(city: str) - str: # 這里實(shí)現(xiàn)真正的天氣 API 調(diào)用 return f“The weather in {city} is sunny.” if __name__ __main__: server.run(transportstdio) # 或 “http”端口 8080運(yùn)行這個(gè) Server 后任何兼容 MCP 的 Client包括未來(lái)可能直接支持 MCP 的 Claude Desktop 等應(yīng)用都能發(fā)現(xiàn)并調(diào)用get_weather這個(gè)技能。5. 生產(chǎn)環(huán)境實(shí)踐穩(wěn)定性、成本與調(diào)試當(dāng)你的 Agent 從 Demo 走向?qū)嶋H應(yīng)用時(shí)以下幾個(gè)點(diǎn)必須重點(diǎn)關(guān)注。5.1 控制成本與穩(wěn)定性Token 消耗Agent 的“思考”過(guò)程ReAct 格式會(huì)產(chǎn)生大量的 Token 消耗尤其是它反復(fù)輸出Thought、Action、Observation時(shí)。選擇性價(jià)比模型 對(duì)于工具調(diào)用邏輯簡(jiǎn)單的任務(wù)可以考慮使用gpt-3.5-turbo而非gpt-4來(lái)驅(qū)動(dòng) Agent以大幅降低成本。復(fù)雜任務(wù)再切換回更強(qiáng)的模型。設(shè)置最大迭代次數(shù)AgentExecutor可以設(shè)置max_iterations和max_execution_time參數(shù)防止 Agent 陷入無(wú)限循環(huán)或處理過(guò)于復(fù)雜的任務(wù)。agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, max_iterations10, early_stopping_methodgenerate, # 當(dāng)達(dá)到限制時(shí)讓模型直接給出最終答案 handle_parsing_errorsTrue )優(yōu)化工具描述 工具的description要精準(zhǔn)、簡(jiǎn)潔。模糊的描述會(huì)導(dǎo)致模型錯(cuò)誤調(diào)用或需要更多輪次來(lái)理解。5.2 錯(cuò)誤處理與魯棒性工具調(diào)用失敗 網(wǎng)絡(luò)超時(shí)、API 限流、文件不存在等都會(huì)導(dǎo)致工具調(diào)用失敗。確保你的工具函數(shù)有良好的異常捕獲并返回對(duì) Agent 友好的錯(cuò)誤信息例如“Failed to fetch data: Network timeout”而不是讓程序崩潰。解析錯(cuò)誤handle_parsing_errorsTrue是基礎(chǔ)。你還可以自定義一個(gè)output_parser來(lái)更優(yōu)雅地處理模型輸出格式不符合預(yù)期的情況。驗(yàn)證輸入 在工具函數(shù)內(nèi)部對(duì)輸入?yún)?shù)進(jìn)行驗(yàn)證。例如文件路徑工具要檢查路徑是否在允許的目錄內(nèi)防止路徑遍歷攻擊。5.3 調(diào)試與監(jiān)控充分利用verboseTrue 開發(fā)階段一定要打開這是理解 Agent 決策過(guò)程的最直接窗口。記錄日志 將AgentExecutor的運(yùn)行日志包括所有的 Thoughts, Actions, Observations結(jié)構(gòu)化的記錄到文件或日志系統(tǒng)便于事后分析。使用 LangSmith 如果你在開發(fā)嚴(yán)肅的應(yīng)用強(qiáng)烈建議集成 LangSmith。它能可視化追蹤每一次 Agent 運(yùn)行的完整鏈條精確看到每個(gè)步驟的輸入輸出、耗時(shí)和 Token 使用量是調(diào)試和優(yōu)化的神器。5.4 與 LangGraph 的區(qū)別與選擇搜索熱詞中出現(xiàn)了langgraph。簡(jiǎn)單來(lái)說(shuō)LangChain Agent 更適合單一目標(biāo)、線性或簡(jiǎn)單分支的任務(wù)流程。你給一個(gè)指令它自動(dòng)規(guī)劃執(zhí)行。LangGraph 是一個(gè)基于圖狀態(tài)機(jī)的框架用于構(gòu)建復(fù)雜、有狀態(tài)、多輪、循環(huán)或并行的工作流。例如一個(gè)客服機(jī)器人需要管理多輪對(duì)話狀態(tài)并根據(jù)不同狀態(tài)跳轉(zhuǎn)到不同的處理節(jié)點(diǎn)。如何選 如果你的任務(wù)主要是“調(diào)用工具完成一件事”用 Agent。如果你的任務(wù)涉及復(fù)雜的業(yè)務(wù)流程、狀態(tài)維護(hù)和節(jié)點(diǎn)路由比如一個(gè)涵蓋用戶查詢、數(shù)據(jù)庫(kù)檢索、生成報(bào)告、發(fā)送郵件、等待用戶反饋的完整自動(dòng)化流程則應(yīng)該用 LangGraph。兩者可以結(jié)合例如在 LangGraph 的一個(gè)節(jié)點(diǎn)里運(yùn)行一個(gè) Agent。6. 典型應(yīng)用場(chǎng)景與避坑指南最后結(jié)合常見搜索詞看看這套技術(shù)能用在哪兒以及有哪些“坑”。6.1 應(yīng)用場(chǎng)景智能數(shù)據(jù)分析助手 用戶用自然語(yǔ)言提問(wèn)“上個(gè)月銷售額最高的產(chǎn)品是什么”Agent 自動(dòng)調(diào)用“數(shù)據(jù)庫(kù)查詢”Skill 獲取數(shù)據(jù)再調(diào)用“圖表生成”Skill 畫出趨勢(shì)圖最后總結(jié)。自動(dòng)化辦公 “將本周項(xiàng)目會(huì)議紀(jì)要的關(guān)鍵任務(wù)提取出來(lái)生成一個(gè)TODO列表發(fā)到我的郵箱。” Agent 調(diào)用“讀取文檔”Skill - “文本摘要/提取”Skill - “發(fā)送郵件”Skill。內(nèi)部知識(shí)庫(kù)問(wèn)答 結(jié)合 RAG檢索增強(qiáng)生成Agent 可以先調(diào)用“向量庫(kù)搜索”Skill 找到相關(guān)文檔片段再讓 LLM 生成精準(zhǔn)答案。代碼生成與操作 “在src/utils/目錄下幫我創(chuàng)建一個(gè)名為formatDate.js的函數(shù)文件內(nèi)容是按‘YYYY-MM-DD’格式化日期。” Agent 需要調(diào)用“文件系統(tǒng)操作”Skill。6.2 常見“坑”與解決方案坑1Agent 亂用或不用工具現(xiàn)象 模型要么不調(diào)用工具直接瞎猜要么調(diào)用錯(cuò)誤的工具。排查檢查工具description是否清晰、無(wú)歧義。用人類能看懂的話描述工具的功能和適用場(chǎng)景。檢查給模型的系統(tǒng)提示詞prompt。hwchase17/react這個(gè) prompt 是經(jīng)過(guò)優(yōu)化的。如果你自定義 prompt必須包含清晰的工具使用說(shuō)明。嘗試換用更強(qiáng)的模型如從 gpt-3.5 切換到 gpt-4推理能力更強(qiáng)的模型在工具選擇上更準(zhǔn)確。坑2任務(wù)陷入循環(huán)或超時(shí)現(xiàn)象 Agent 反復(fù)調(diào)用同一個(gè)工具或者一直在“思考”不出結(jié)果。排查首先設(shè)置max_iterations如5-10次。檢查工具返回的結(jié)果是否清晰。如果工具返回“未找到”或錯(cuò)誤信息Agent 可能無(wú)法理解并陷入困惑。確保工具返回對(duì)后續(xù)決策有用的信息。在 prompt 中強(qiáng)調(diào)“如果你無(wú)法通過(guò)現(xiàn)有工具完成任務(wù)請(qǐng)直接告知用戶并停止嘗試”。坑3處理復(fù)雜、多步驟任務(wù)效果差現(xiàn)象 任務(wù)稍微復(fù)雜點(diǎn)Agent 的規(guī)劃就亂了。解決方案 這可能是單一 Agent 的局限。考慮使用Plan-and-Execute模式或LangGraph。即先用一個(gè)“規(guī)劃者”LLM 將大任務(wù)拆解成明確的子任務(wù)列表再由一個(gè)“執(zhí)行者”Agent 或工作流依次執(zhí)行每個(gè)子任務(wù)。這比讓一個(gè) Agent 自己動(dòng)態(tài)規(guī)劃要穩(wěn)定得多。坑4MCP Server 連接或調(diào)用失敗現(xiàn)象 Client 無(wú)法連接到 Server或調(diào)用工具時(shí)超時(shí)。排查網(wǎng)絡(luò)與端口 確認(rèn) Server 進(jìn)程是否在運(yùn)行ps aux | grep mcp端口是否被占用或被防火墻攔截。協(xié)議兼容性 確認(rèn) Client 和 Server 使用的 MCP 協(xié)議版本是否兼容。查看 Server 日志。參數(shù)格式 確保調(diào)用工具時(shí)傳入的參數(shù)嚴(yán)格符合 Server 端定義的 JSON Schema。一個(gè)字段類型不匹配就可能導(dǎo)致調(diào)用失敗。最后的核心建議 不要一開始就追求接入復(fù)雜的 MCP 和一大堆 Skills。從最簡(jiǎn)單的 LangChain Agent 兩個(gè)內(nèi)置工具開始徹底理解Thought - Action - Observation這個(gè)循環(huán)。然后嘗試為自己寫一個(gè)自定義的 Python Tool比如一個(gè)查詢數(shù)據(jù)庫(kù)的函數(shù)。當(dāng)你能熟練駕馭這個(gè)流程后再去研究如何將你的工具改造成 MCP Server或者如何連接別人提供的 MCP Server。這樣由簡(jiǎn)入繁的路徑能幫你避開大部分概念和工程上的陷阱。