尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

在 mcp-agent 中集成 LangChain 第三方工具:以 Serper 网页搜索为例的完整实战指南

在 mcp-agent 中集成 LangChain 第三方工具:以 Serper 网页搜索为例的完整实战指南 在 mcp-agent 中集成 LangChain 第三方工具以 Serper 网页搜索为例的完整实战指南【免费下载链接】mcp-agentBuild effective agents using Model Context Protocol and simple workflow patterns项目地址: https://gitcode.com/GitHub_Trending/mc/mcp-agentmcp-agent 是一个以 Model Context ProtocolMCP为核心、通过简单工作流模式构建高效 Agent 的开源框架。在实际开发中AI Agent 生态已经沉淀了大量高质量工具如 LangChain、CrewAI 社区维护的搜索、文件、数据库操作等工具mcp-agent 提供了from_langchain_tool/from_crewai_tool这类适配器让这些第三方工具可以直接作为本地函数挂载到 Agent 上从而加速开发并复用整个生态的成果。本文以 examples/langchain/README.md 为骨架结合源码与测试完整讲解如何在 mcp-agent 中接入一个 LangChain 工具Serper 网页搜索 API读完后你将掌握第三方工具集成的完整配置流程、适配器底层原理以及如何改造示例代码接入自己的 LangChain 工具。示例概览为什么需要第三方工具集成MCP 生态的服务器MCP Server负责向 Agent 暴露标准化的工具、资源和提示词而 LangChain 与 CrewAI 等框架则各自维护着庞大、成熟的工具集。直接在 mcp-agent 中重新实现这些工具既不现实也不经济。通过适配器模式mcp-agent 将这类工具翻译成自身 Agent 可调用的本地函数实现了双向复用复用 LangChain 生态的BaseTool、StructuredTool、tool装饰器等统一工具抽象复用 SerperDevTool、GoogleSerperAPIWrapper 等开箱即用的第三方 API 封装保持 mcp-agent 原有的 Agent 调度、LLM 调用与日志追踪能力不变。示例仓库中与此主题强相关的配套样例还包括 examples/crewai/README.mdCrewAI 工具集成与 examples/langchain/main.pyLangChain 工具集成。本文聚焦 LangChain 一侧。环境准备与工程配置克隆仓库并定位示例目录git clone https://github.com/lastmile-ai/mcp-agent.git cd mcp-agent/examples/langchain安装 uv 与项目依赖示例采用 uv 作为依赖管理工具首先安装 uvpip install uv随后同步 mcp-agent 项目依赖通过--extra langchain安装 LangChain 集成所需的可选依赖uv sync --extra langchainlangchain这一可选依赖组定义在项目根目录的 pyproject.toml 中langchain [ langchain-core0.3.64, ]最后安装示例专属依赖uv pip install -r requirements.txtrequirements.txt 中通过mcp-agent file://../../链接到本地项目根目录并声明了示例运行所需的其他包# Core framework dependency mcp-agent file://../../ # Link to the local mcp-agent project root # Additional dependencies specific to this example openai langchain-community需要说明的是uv sync --extra langchain安装的是langchain-core而示例的main.py从langchain_community导入GoogleSerperAPIWrapper因此在安装完核心依赖后还必须执行uv pip install -r requirements.txt安装langchain-community与openai二者缺一不可。理解示例配置文件示例的 mcp_agent.config.yaml 展示了 mcp-agent 应用的基础配置$schema: ../../schema/mcp-agent.config.schema.json execution_engine: asyncio logger: transports: [console, file] level: debug progress_display: true path_settings: path_pattern: logs/mcp-agent-{unique_id}.jsonl unique_id: timestamp # Options: timestamp or session_id timestamp_format: %Y%m%d_%H%M%S openai: default_model: gpt-4o-mini要点如下execution_engine: asyncio指定使用 asyncio 执行引擎而非 Temporal 等分布式工作流引擎本示例无需持久化执行因此保持最简单配置logger同时启用 console 与 file 两种传输通道日志级别为 debug并开启进度显示文件日志按时间戳命名写入logs/目录格式为 JSONL便于后续用 scripts/event_viewer.py 等工具分析openai.default_model指定 LLM 默认模型为gpt-4o-mini示例没有配置mcp.servers对应代码里server_names[]因为本示例不依赖 MCP Server而是直接使用本地函数工具。配置 Serper API KeySerper 是一个提供 Google 搜索结果 JSON API 的第三方服务示例通过 LangChain 的GoogleSerperAPIWrapper封装它。需要在示例目录创建.env文件# Serper API Key (for web search) SERPER_API_KEYyour_serper_api_key_hereAPI Key 可从 Serper 官网注册获取。main.py顶部通过load_dotenv()加载该文件使环境变量在进程内生效。运行示例完成上述两步后运行uv run main.py示例 Agent 会收到一条自然语言指令Who is Singapores current prime minister?。Agent 会自动调用被挂载的 Serper 搜索工具获取最新网页搜索结果再交由 LLM 归纳生成答案最终在日志中输出结果并在终端打印总运行耗时Total run time: 12.34s源码拆解LangChain 工具如何挂载到 Agent完整示例代码examples/langchain/main.py 的核心逻辑如下import asyncio import time from dotenv import load_dotenv from mcp_agent.app import MCPApp from mcp_agent.agents.agent import Agent from mcp_agent.tools.langchain_tool import from_langchain_tool from mcp_agent.workflows.llm.augmented_llm_openai import OpenAIAugmentedLLM from langchain_community.utilities import GoogleSerperAPIWrapper # Load env variables load_dotenv() app MCPApp(namesearch_example) async def example_usage(): async with app.run() as agent_app: logger agent_app.logger search_tool GoogleSerperAPIWrapper() finder_agent Agent( namesearch_agent, instructionYou are a helpful assistant, server_names[], functions[from_langchain_tool(search_tool)], ) async with finder_agent: llm await finder_agent.attach_llm(OpenAIAugmentedLLM) result await llm.generate_str( messageWho is Singapores current prime minister?, ) logger.info(fresult: {result})关键调用链逐层解读MCPApp(namesearch_example)创建应用容器app.run()作为异步上下文管理器负责初始化日志、配置与执行引擎并注入agent_app.logger。GoogleSerperAPIWrapper()LangChain 社区封装的 Serper 工具实例内部使用SERPER_API_KEY。from_langchain_tool(search_tool)适配器核心将 LangChain 工具转换为普通 Python 函数。Agent(..., functions[...])Agent 模型定义在 src/mcp_agent/agents/agent.py 中其functions字段List[Callable]用于挂载本地函数即无需 MCP Server 即可直接调用的工具。本例将server_names留空、仅提供functions说明该 Agent 的工具来源完全来自第三方框架而非 MCP 服务器。attach_llm(OpenAIAugmentedLLM)为 Agent 绑定 OpenAI 增强型 LLM随后调用generate_str下发自然语言任务。Agent 内部会把挂载的本地函数注册成可供 LLM 识别的工具由 LLM 自主决定何时调用。from_langchain_tool的底层实现适配器的实现在 src/mcp_agent/tools/langchain_tool.py核心签名如下def from_langchain_tool( lc_tool: Union[BaseTool, object], *, name: Optional[str] None, description: Optional[str] None, ) - Callable[..., Any]:函数按优先级处理不同类型的 LangChain 工具保证转换后依然保留原始函数的参数签名、名称与描述这样 LLM 才能正确推断参数并生成调用StructuredTool直接取用其func属性并覆写__name__与__doc__最大化保留原始函数签名具备_run方法的BaseTool包装_run并通过inspect.signature(run_method)把原方法签名复制到包装函数上langchain_tool.py仅具备run方法的工具作为回退分支同样包装并尝试复制签名langchain_tool.py普通可调用对象直接包装避免修改原对象其他情况抛出ValueError(LangChain tool must have a func, run, or _run method, or be callable.)。name与description两个关键字参数允许在转换时显式覆盖工具名与描述便于 Agent 更好地理解工具用途。同名 CrewAI 适配器mcp-agent 对 CrewAI 提供了对称的适配器 src/mcp_agent/tools/crewai_tool.pyfrom_crewai_tool。区别在于 CrewAI 工具名可能包含空格适配器会自动替换为下划线并转小写对带有 Pydanticargs_schema的类式工具它会基于字段信息动态构造参数签名必需参数在前、可选参数在后。配套示例见 examples/crewai/main.py其中同时使用了SerperDevTool与FileWriterTool演示了搜索 文件写入的组合用法。这说明第三方工具集成的思路是通用的LangChain 与 CrewAI 两套生态都可以接入。测试佐证转换行为的边界与保证仓库针对适配器提供了完整的单元测试 tests/tools/test_langchain_tool.py可用于验证转换的可靠性也能帮助理解其能力边界签名与元数据保留tool装饰器工具、StructuredTool.from_function、自定义BaseTool转换后参数名、类型注解与默认值均保持一致name/description覆写from_langchain_tool(tool, namecustom_multiply, description...)会覆盖工具名与描述但功能不受影响回退与容错仅有run方法、或纯 callable 的工具可正常转换完全无效的对象会抛出ValueError与 FastMCP 的互操作转换后的函数可以直接通过mcp.server.fastmcp.tools.Tool.from_function(fn)注册为 MCP 工具证明第三方工具与 MCP 生态可以打通test_langchain_tool.py幂等性对同一工具多次转换结果一致可安全复用。实战改造接入你自己的 LangChain 工具在上述骨架基础上将 Serper 换成任意 LangChain 工具只需三步安装对应依赖例如要在 pyproject.toml 的可选依赖组中加入该工具的包或在示例的 requirements.txt 中追加实例化工具替换GoogleSerperAPIWrapper()为你需要的工具实例传入functionsfunctions[from_langchain_tool(your_tool, name..., description...)]。如果工具需要额外的 API Key将其写入.env文件即可由load_dotenv()统一加载。若希望 Agent 同时具备 MCP Server 工具与第三方工具则可在Agent中同时填写server_names与functions两者会合并为 Agent 可调用的完整工具集——从 agent.py 中functions字段的定义与示例配置可以看出这一组合是被框架天然支持的。小结通过 examples/langchain/README.md 与配套源码可以看到 mcp-agent 在 MCP 之上为第三方 AI Agent 生态工具提供了轻量、无损的接入通道一条from_langchain_tool转换 functions[...]挂载 attach_llm驱动的调用链即可让 Serper 等 LangChain 工具参与 Agent 工作流而无需编写任何 MCP Server。对于需要快速组合不同生态工具的开发者这是加速交付、复用现有资产的务实选择。若要进一步深入可继续阅读 src/mcp_agent/tools/langchain_tool.py、tests/tools/test_langchain_tool.py 以及项目根目录的 README.md。【免费下载链接】mcp-agentBuild effective agents using Model Context Protocol and simple workflow patterns项目地址: https://gitcode.com/GitHub_Trending/mc/mcp-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表