LangChain + MCP 协议:Agent 接入联网搜索(Tavily MCP)完整实践

简介

MCP(Model Context Protocol)是一款标准化工具调用协议,解决大模型Agent工具接入碎片化问题。不再需要为每个搜索工具单独写工具定义、参数解析、返回值格式化逻辑,通过MCP客户端直接对接远端MCP服务,一键获取工具描述并交由Agent调用。

本文基于 langchain-mcp-adapters,实现Agent接入 Tavily MCP联网搜索,代码可直接运行,适合RAG、智能Agent项目集成联网实时信息。

环境:Python3.10+,LangChain生态,异步架构

一、依赖安装

复制代码
pip install langchain-mcp-adapters

二、完整源码

复制代码
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient

def tools(func):
    ts = asyncio.run(func())
    return ts

@tools
async def get_tools():
    client = MultiServerMCPClient(
        {
            "tavily_search": {
                "url": f"https://mcp.tavily.com/mcp/?tavilyApiKey={'你的TAVILY_SEARCH_KEY'}",
                "transport": "streamable_http",
            }
        },
    )
    return await client.get_tools()

if __name__ == "__main__":
    # 测试Tavily联网搜索工具
    from deepagents import create_deep_agent
    from langchain_openai import ChatOpenAI
    model = ChatOpenAI(
	    api_key = "你的api_key"
            model="你的模型",
            base_url="你的模型地址",
            temperature=0.1,
    agent = create_deep_agent(
        tools=get_tools,
        model=model,
        debug=False
    )
    import asyncio
    result = asyncio.run(agent.ainvoke({
        "messages": [{"role": "user", "content": "今天是2026年10月13日,深圳天气怎么样"}]
    }))
    print(result["messages"][-1].content)

三、代码核心解析

1. MultiServerMCPClient

MultiServerMCPClient 是langchain-mcp-adapters提供的多MCP服务客户端,支持同时挂载多个MCP服务(搜索、文件读写、数据库等)。

  • tavily_search:自定义服务名称,用于区分多个MCP服务
  • url:Tavily官方MCP HTTP端点,携带API Key鉴权
  • transport="streamable_http":传输协议,Tavily MCP使用streamable http

await client.get_tools():自动从远端MCP服务拉取工具schema、名称、描述、入参定义 ,无需手动写StructuredTool,这是MCP最大优势。

2. Agent构造逻辑

create_deep_agent 为自定义Agent工厂函数:

  • tools=get_tools:传入异步函数,Agent内部会异步加载MCP工具
  • model=get_llm():注入大模型实例(OpenAI/通义千问/DeepSeek等均可)
  • debug=False:关闭调试日志,生产环境使用

3. 异步调用

agent.ainvoke 异步执行Agent推理;asyncio.run 启动异步事件循环,提交用户提问。 示例问题带有时间,用来验证Agent调用联网搜索获取实时数据,而不是依赖模型静态知识库。

四、关键知识点

  1. MCP协议价值 传统LangChain工具开发:编写工具函数 + 手写工具描述 + 定义Pydantic参数模型。 MCP模式:远端MCP服务自描述工具,客户端自动同步工具定义,新增工具只需要新增MCP服务配置,Agent代码无需改动。
  2. transport传输方式
  • streamable_http:远端HTTP MCP服务(Tavily官方MCP)
  • stdio:本地进程MCP服务(本地脚本、本地工具)
  1. 鉴权 Tavily MCP直接在URL参数携带 tavilyApiKey,服务端校验密钥后提供搜索能力。生产环境建议把密钥放在环境变量,不要硬编码到URL字符串。

五、常见踩坑

  1. 异步坑:get_tools是async函数 不能直接 tools=get_tools() 传入,部分Agent框架支持传入callable,内部自动await加载工具。如果你的Agent不支持,需要提前await获取工具列表。
  2. 网络问题 访问 mcp.tavily.com 网络不通会导致拉取工具超时,需要检查网络连通性。
  3. API Key额度耗尽 Tavily免费额度有限,调用报错401/403优先检查密钥正确性和剩余搜索次数。
  4. 大模型不触发工具调用 提示词、Agent的prompt模板需要支持工具调用,确保模型具备Function Calling能力。

六、扩展方向

  1. 同时挂载多个MCP服务:例如Tavily搜索 + 文件MCP + 数据库查询MCP,全部交给同一个Agent。
  2. 替换transport为stdio,对接本地自建MCP服务。
  3. 增加缓存层,相同搜索query减少Tavily调用,节约API费用。
  4. 增加工具调用回调,记录搜索日志、耗时统计。

七、总结

通过 langchain-mcp-adapters + Tavily MCP,可以极简方式给LangChain Agent接入联网搜索能力。MCP标准化工具协议极大降低Agent多工具集成成本,是当前大模型Agent工程落地的主流方案之一。Agent不再绑定固定工具,工具能力由MCP服务动态提供,架构更加灵活。

八、写在最后

平台内已上线**《大模型入门精品课》+ 简历和面试指导** (对于小白和想转行小伙伴而已,如果没有简历和面试辅导是很难通过面试的),课程内容包括:

  • 纯干货一个月学完,没有冗余的理论,项目都是大型企业项目,非demo。

  • 覆盖 RAG、智能体、Lora微调实战项目、模型压缩(剪枝、量化、蒸馏)。

  • 感兴趣的小伙伴可以前往主页了解!课程地址: https://edu.csdn.net/course/detail/41422

相关推荐
FITA阿泽要努力1 小时前
如何调用 LLM 接口
python·api·agent
DigitalOcean1 小时前
DigitalOcean Agent 数据服务:为 AI Agent 构建数据基础
agent
guslegend1 小时前
别把执行权交给概率:六大契约重新定义工具设计
agent
武子康1 小时前
ESP32-S3 分核后仍报 AFE 缓冲区满?先查输入合同
人工智能·后端·agent
范中勤2 小时前
LangGraph Checkpointer 封装(下):with 的双层上下文与 MemorySaver 为什么不用 with
python·大模型·llm·agent·langgraph
hpoenixf3 小时前
Agent 发布治理为什么做了两次?
agent
hackchen4 小时前
LangChain 学习第 2 课 - 提示词模板(Prompt Template)
学习·langchain·prompt
jerrywus4 小时前
用 Pi 接入 Hindsight:安装配置、记忆检索与实战排查
chatgpt·agent·claude
救救孩子把4 小时前
AI面试八股文-03_3-RAG 系统面试题
人工智能·redis·面试·agent·rag