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

相关推荐
武子康44 分钟前
Agent 说“3 passed”就算修好了?先检查是谁判的通过
人工智能·agent
杨杨杨大侠2 小时前
AI 怎么知道自己改对了?从 Astra 修千问说到 Harness²
人工智能·agent
Danny转行做跨境2 小时前
AI搜索时代选品数据采集: MCP比爬虫稳在哪
跨境电商·mcp·sorftime
Danny转行做跨境4 小时前
CLI 怎么批量拉亚马逊选品数据:61 个接口的实测
跨境电商·mcp·sorftime
小七-七牛开发者4 小时前
Agent 支线知识:Personal Agent 如何跨应用完成任务?
ai·agent·工具调用·aiagent·mcp
文谦南宁AI普工5 小时前
CVSS 10.0 沙箱逃逸 + 假扩展后门:给 Agent 开发者的供应链与沙箱安全复盘(附可跑的配置审计器)
安全·agent·ai编程
vivo互联网技术5 小时前
把 Agent 的判断与行动变成可恢复的软件事实|KDC 系列 工程篇
架构·agent·ai编程
武子康5 小时前
工作流 JSON 没变,为什么 ComfyUI 更新后仍可能跑出不同结果?
人工智能·agent
去伪存真5 小时前
高敏资产场景下的大模型协同设计架构
前端·agent