langchain agent 是不是基于mcp 调用工具的?

创建于:2025年11月24日

使用 GPT-5.1 回答 Chat01

问题

langchain agent 是不是基于mcp 调用工具的?

思考

Thought for a few seconds

回答

不是“天生就基于 MCP”,但可以通过 MCP 来调用工具——前提是你显式把 MCP 适配器接进 LangChain。

LangChain Agent 默认怎么调工具?

LangChain 的 agents(不管是 ReAct、OpenAI tools agent、LLM Router 等)默认是走 LangChain 自己的 Tool 抽象
你在代码里定义 Tool / StructuredTool,agent 通过模型的 function/tool calling 能力来调用它们。这个机制跟 MCP 没有强绑定关系。

MCP 在 LangChain 里扮演什么角色?

MCP(Model Context Protocol)是 Anthropic 发起的一个开放协议,用来把“外部工具/数据/上下文”以标准化 client-server 方式暴露给 LLM。LangChain 现在提供了 MCP adapters,让 agent 能把 MCP server 提供的工具“转成 LangChain Tools”然后照常调用。官方文档明确说:LangChain agents 可以使用 MCP server 上定义的工具,需要借助 langchain-mcp-adapters 这类库。 (LangChain Docs)

也就是说:

  • MCP 是一种可选的工具来源/连接方式
  • LangChain agent 的调用逻辑不依赖 MCP
  • 你接了 MCP 之后,agent 才会通过 MCP 发现工具、执行工具

一句话总结

LangChain agent 本身不是基于 MCP 的;MCP 只是 LangChain 支持的一种“把工具接进来”的标准接口。
你不用 MCP 也能正常写 agent;用 MCP 主要是为了跨系统/跨工具标准化接入,少写适配胶水。 (Cloudurable)

如果你愿意,我可以给你一个最小 demo:LangChain agent + MCP server 工具调用的结构长啥样。

问题

langchain agent 是怎么路由到 具体的tool的?

回答

LangChain Agent 路由到具体工具(Tool Routing) 的机制取决于你使用的 agent 类型,但核心流程都类似:** LLM 决定要调用哪个 tool,LangChain 负责执行**。下面我给你一个清晰、由浅到深的讲解。


🧠 LangChain Agent 是如何路由到具体工具的?

整体流程(无论 ReAct / OpenAI Tools / 自定义 Agent 都类似)

  1. 你向 agent 提供工具列表(Tools)
    每个 tool 都包含:

    • 名称(name)
    • 描述(description)
    • 参数 schema(如果是 StructuredTool)
    • 执行函数(callable)
  2. Agent 把“工具列表 + 用户输入 + 历史”交给 LLM
    LLM 根据这些信息 决定要不要用工具,用哪个工具,用什么参数

  3. LangChain 读取 LLM 输出中的工具调用字段

    • 对 OpenAI/Anthropic function calling:模型直接返回标准化结构
    • 对 ReAct Agent:模型输出 "Action: tool_name" 形式的指令
  4. LangChain 从工具列表中找到对应 tool
    用名称匹配:

    python
    tools = {tool.name: tool, ...} tools[llm_output.tool_name]()
  5. 调用工具 → 返回结果 → 再给 LLM → 直到完成


🧩 不同 Agent 是如何路由工具的?

1. OpenAI function calling / Tool calling agent(最常见)

模型返回一个结构化的函数调用,例如:

json
{ "tool_calls": [ { "name": "search_weather", "arguments": {"city": "New York"} } ] }

LangChain 内部基本做:

python
tool = tools["search_weather"] result = tool.run(arguments)

➡️ 路由关键点:直接用 tool.name 匹配工具表。
这是最稳定、最推荐的方式。


2. ReAct Agent(基于思维链解析)

LLM 输出类似:

text
Thought: I need to look up today's weather Action: search_weather Action Input: {"city": "New York"}

LangChain 用正则解析 "Action:" 字段,然后做:

python
tool = tools[action_name] tool.run(action_input)

➡️ 路由关键点:从文本里解析 action_name,再查名字。


3. MCP Agent(如果你接了 MCP 工具)

原理相同,只是工具来源变成 MCP 的“远程工具列表”。
LangChain 把 MCP 的 tool schema 转成 LangChain Tool,再按名称匹配。

➡️ 依然是 通过 tool.name 精确匹配


🔍 核心机制总结(非常关键)

🎯 LangChain agent 路由到工具依靠——工具名(name)匹配 + LLM 决定调用哪个工具

  • 工具展示阶段:
    LangChain 把所有 tool 的 name + description 给 LLM
  • LLM 选择工具:
    要么生成 tool_call(name="xxx")
    要么输出 "Action: xxx"
  • LangChain 执行工具:
    查找工具字典 tools[name]、执行

📌 工具名必须唯一
📌 LLM 决定调用哪个工具(而不是 LangChain 决定)
📌 LangChain 只是做执行与循环控制


📘 用一个极简代码示例说明路由机制

python
from langchain.agents import initialize_agent, Tool from langchain_openai import ChatOpenAI def add(x, y): return x + y def subtract(x, y): return x - y tools = [ Tool(name="add", func=lambda q: add(**q), description="Add two numbers"), Tool(name="subtract", func=lambda q: subtract(**q), description="Subtract two numbers"), ] llm = ChatOpenAI(model="gpt-4o-mini") agent = initialize_agent(tools, llm, agent="openai-tools") agent.invoke("帮我算一下 10 - 4")

运行时的路由逻辑:

  1. LLM 看到“10 - 4” → 选择 "subtract"
  2. LangChain 看到 tool_call:
    json
    {"name": "subtract", "arguments": {"x": 10, "y": 4}}
  3. 找到工具 tools["subtract"] → 执行 → 返回 → LLM 最终回答 6

如果你愿意,我可以给你:

  • 一个 自定义 agent 完整源码实现
  • 一个 LangChain+MCP 工具调用的路由示例
  • 分析 工具选择失败时的诊断方法(比如模型不选工具)

你想看哪个?

问题

网上有没有好的 langchain agent 实践的开源项目?

思考

Thought for 5s

回答

有,而且现在(2025 年)社区里“真正能学到 agent 工程实践”的开源项目主要集中在 LangGraph / ReAct / 多智能体编排 / 工具调用落地 这几类。我按“学习价值 + 工程参考性”给你分组推荐一些值得直接 clone 下来读的仓库。


1) 官方系:最接近“正确用法/最新范式”

langchain-ai/langgraph

LangGraph 是 LangChain 生态里专门做 agent 编排/状态机的官方框架,这个主仓库自带大量 example(从单 agent、ReAct、Plan&Execute 到 multi-agent、HITL、memory、RAG 等),基本就是官方实践集合。要学“生产级 agent 应该怎么控流程、怎么持久化、怎么加人类介入”,看这里最稳。 (GitHub)

你可以重点翻 examples 目录里这些主题:

  • create-react-agent-*(ReAct + tool calling 的标准写法)
  • human_in_the_loop/(人工审批/回滚)
  • multi_agent/(Supervisor/Team pattern)
  • memory/(长期记忆/持久化 checkpoints)

langchain-ai/react-agent(Python)

官方的 LangGraph ReAct agent 模板,代码量小但结构清晰,展示了“Graph 版 ReAct”如何循环推理+调用多工具。适合你当作骨架改自己项目。 (GitHub)

langchain-ai/react-agent-js(TypeScript)

同一套 ReAct/graph 思路的 JS/TS 实现,想做前后端或 Node 服务的 agent 可以对照着抄。 (GitHub)

langchain-ai/deepagents

官方出的“agent harness/脚手架”,带 planning、文件系统、子 agent 生成等能力,算是偏真实产品形态的综合 demo。如果你想看更接近“AutoGPT 但 LangChain 风格”的工程组织方式,这个很有参考价值。 (GitHub)

langchain-ai/open-agent-platform

官方开源的 no-code/low-code LangGraph agent 平台,包含 UI、部署、调试、工具接入、Supervisor 等。适合看完整产品链路:从图形化编排到运行时执行。 (GitHub)


2) 社区高质量实践:更“像真实业务”

Abeshith/LangGraph

一个从基础到进阶的 LangGraph 学习仓库,覆盖 SQL agent、RAG agent、多 agent 协作、调试与 LangSmith 观测等,路径清晰、例子多。拿来系统练手很好。 (GitHub)

arvindagg/LangGraph-Multi-Agent

偏“多智能体系统工程”的 modular 框架,有 Supervisor/专职子 agent/工具层拆分,适合学 multi-agent 的结构化组织。 (GitHub)

robin-ochieng/langgraph-agents

强调 ReAct + function calling + stateful agent,示例比较贴近“会规划/会执行/会复盘”的 agent 框架。 (GitHub)


3) 小而美的 ReAct / Tool Calling Demo(快速看懂路由与循环)

这类仓库不大,但非常适合你快速理解 agent 路由 tools 的最小工作闭环

  • junfanz1/Code-Interpreter-ReAct-LangChain-Agent
    用最少代码演示 ReAct agent + 自定义 tool 的推理/行动循环。适合当入门剖面。 (GitHub)

  • botextractai/ai-langchain-react-agent
    ReAct + 多工具串联(Python REPL / 搜索等),能直观看到 agent 连续选工具的过程。 (GitHub)

  • omiguelpinheiro/react-agent
    ReAct + SQL tool + memory buffer 的小项目,展示“agent+数据库”这类典型落地。 (GitHub)


4) 资源索引/合集(省你到处搜)

awesome-langchain-agents

一个专门收集 LangChain/LangGraph agent 项目的清单,适合你按领域继续挖(RAG、代码、浏览器自动化等)。 (GitHub)

awesome-LangGraph / Awesome LangGraph

两个 LangGraph 项目/模板/教程合集,里面经常能挖到新鲜的业务 demo。 (GitHub)


怎么选?给你一个“按目标挑 repo”的小指南

  • 想学官方最新范式 / 生产级结构
    → 先看 langgraph 主仓库 examples + react-agent 模板。 (GitHub)

  • 想做多智能体/监督者架构
    langgraph/examples/multi_agent + LangGraph-Multi-Agent。 (GitHub)

  • 想快速上手 agent + tools 的最小闭环
    → 任意一个小 ReAct demo(junfanz1 / botextractai / omiguelpinheiro)。 (GitHub)

  • 想看完整“产品级 Agent 平台”
    open-agent-platform。 (GitHub)


如果你告诉我你现在主要用 Python 还是 TS、想做 RAG/SQL/多 agent/浏览器自动化 哪一类,我可以从这些仓库里挑 2–3 个最对口的,给你一条具体的阅读/抄作业路线(从哪个 example 开始,先改哪几块)。

分享这个问答