如何使用Google Gemini 2.5 Pro实现MCP

人工智能 潘老师 来源:bytebeats 4天前 52 ℃ (0) 扫码查看

如今GPT-4、Claude、Gemini和Llama3等大型语言模型(LLM)发展得如火如荼。但这些模型通常基于预训练数据独立运行,没办法直接访问实时数据、数据库、外部API或者本地文件。所以,我们急需一种标准化的方法,将它们与各种工具、API以及系统连接起来。在这篇文章里,咱们就来深入研究如何借助Google Gemini 2.5 Pro实现MCP,还会通过完整代码进行详细剖析。

一、MCP是什么?能干什么?

MCP是Anthropic开发的一种标准化开放协议,简单来说,它就像是AI集成的“通用连接器”,能让AI模型和外部数据源、工具实现无缝交互。打个比方,把MCP看作是“AI集成的USB-C接口”,它为AI模型连接不同的设备和数据源提供了一种通用的方式。

(一)MCP的工作方式

MCP采用的是客户端 – 服务器架构。客户端可以是AI应用程序或者LLM,它们连接到服务器;而服务器由MCP工具提供商提供,主要负责把工具、API或者数据源暴露给客户端。通过这样的架构,就实现了LLM模型与外部API之间动态且结构化的交互。

(二)MCP的优势

  1. 标准化集成:有了MCP,将LLM连接到任何外部系统变得轻松许多,大大减少了定制开发的工作量。
  2. 灵活性高:LLM可以根据实际需求,灵活使用多种工具和服务。
  3. 安全可靠:支持安全的API交互,不用再把凭据硬编码到程序里,降低了安全风险。
  4. 开发简便:开发人员能更轻松地构建和公开自定义的MCP服务器。
  5. 维护轻松:避免了重复编写集成逻辑,维护起来更加方便。

MCP还能把API转化为模型友好的工具,具备自动发现、可预测模式以及结构化交互等功能。像文件系统、网络搜索、数据库、客户关系管理、版本控制等场景,都能通过MCP服务器实现与外部资源的交互。

(三)什么时候用MCP?

当遇到以下这些情况时,使用MCP就再合适不过了:

  1. 正在构建代理系统;
  2. 希望工具具备模块化、可重用以及可发现的特性;
  3. 需要使用多个外部资源;
  4. 打算扩展到多个工具或者工具链。

二、基于Gemini + MCP实现自然语言航班搜索的架构解析

接下来看看一个结合多个组件,使用Gemini + MCP实现自然语言航班搜索的项目架构。这个架构涉及到多个组件之间的交互:

  1. 用户到客户端:用户输入自然语言查询,比如“查找明天从广州飞往北京的航班”,客户端脚本(client.py)负责处理这些输入内容。
  2. 客户端到MCP服务器:客户端启动MCP服务器进程(mcp-flight-search),建立stdio通信通道,然后检索可用工具及其说明。
  3. 客户端到Gemini API:客户端把用户查询发送给Gemini API,同时提供工具说明,之后接收带有提取参数的结构化函数调用。
  4. 客户端到MCP工具:从Gemini获取函数调用参数,用这些参数调用相应的MCP工具,并处理响应结果。
  5. MCP服务器到SerpAPI:MCP服务器向SerpAPI发起请求,查询谷歌航班数据,再处理和格式化航班信息。

三、使用Gemini AI构建实现的具体步骤

(一)准备工作

  1. 安装Python 3.8及以上版本。
  2. 获取访问谷歌Gemini生成式AI的API密钥。
  3. 准备有效的SerpAPI key,用于获取实时飞行数据。

(二)设置虚拟环境并安装依赖项

# 设置虚拟环境
python -m venv venv 

# 激活虚拟环境
source venv/bin/activate

# 安装依赖项
pip install google-genai mcp

其中,google-genai是用于和谷歌生成式AI模型(比如Gemini)交互的官方Python库;mcp则是和MCP服务器交互的Python SDK,能提供与外部工具或服务通信的功能。安装好依赖项后,还需要设置环境变量:

export GEMINI_API_KEY="your-google-api-key"
export SERP_API_KEY="your-serpapi-key"

(三)安装MCP服务器 – mcp-flight-search

为了让Gemini能够和现实世界的API交互,这里使用mcp-flight-search,这是一个基于FastMCP构建的轻量级MCP服务器,可以通过SerpAPI搜索实时飞行数据。在PyPI上就能安装这个服务器软件包:

# 从PyPI安装
pip install mcp-flight-search

安装完成后,可以用pip show mcp-flight-search命令来验证是否安装成功。

(四)理解MCP工具包并进行关键导入

在代码中,需要导入一些关键的库:

from google import genai
from google.genai import types
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
  • from google import genai:从google-generativeai库导入genai模块,通过它可以访问Google的强大LLMs,像Gemini 1.5、2.0、2.5模型等,还包含与模型进行自然语言交互的客户端方法。
  • from google.genai import types:这个模块提供了Gemini API使用的类型定义和配置结构,比如工具定义、GenerateContentConfig配置等。
  • from mcp import ClientSession, StdioServerParametersClientSession用于管理客户端和MCP服务器之间的通信会话;StdioServerParameters则让服务器能通过标准输入/输出(stdio)进行通信,这种方式不依赖特定语言,方便嵌入不同环境。
  • from mcp.client.stdio import stdio_clientstdio_client是一个异步上下文管理器,用于通过标准I/O和MCP服务器建立连接,保证服务器正确启动,客户端能正常收发结构化请求。

(五)初始化Gemini客户端

client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))

初始化后的GenAI.Client()对象,是和谷歌生成模型(如Gemini 2.5 Pro、Gemini 2 Flash)交互的主要接口。通过这个客户端对象,可以向Gemini模型发送提示、传递工具定义(函数调用),以及接收结构化响应和函数调用对象。

(六)配置MCP工具服务器

server_params = StdioServerParameters(
    command="mcp-flight-search",
    args=["--connection_type", "stdio"],
    env={"SERP_API_KEY": os.getenv("SERP_API_KEY")}
)
  • mcp-flight-search:是运行本地MCP服务器的CLI入口点,也可以是实现MCP协议的Python模块。
  • stdio:指定服务器使用标准输入/输出作为通信渠道,这种方式简单且与语言无关,适合在本地或子进程中运行工具服务器。
  • SERP_API_KEY:把环境变量传递给运行工具的子进程,因为工具需要这个密钥来验证SerpAPI,从而获取实时飞行数据。

(七)连接到MCP服务器并列出工具

async def run():
    # 去除调试打印
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            prompt = f"Find Flights from Atlanta to Las Vegas 2025-05-05"
            await session.initialize()
            # 去除调试打印

            mcp_tools = await session.list_tools()
            # 去除调试打印

            tools = [
                types.Tool(
                    function_declarations=[
                        {
                            "name": tool.name,
                            "description": tool.description,
                            "parameters": {
                                k: v
                                for k, v in tool.inputSchema.items()
                                if k not in ["additionalProperties", "$schema"]
                            },
                        }
                    ]
                )
                for tool in mcp_tools.tools
            ]
            # 去除调试打印

            response = client.models.generate_content(
                model="gemini-2.5-pro-exp-03-25",
                contents=prompt,
                config=types.GenerateContentConfig(
                    temperature=0,
                    tools=tools,
                ),
            )

这段代码实现了三个重要步骤:

  1. 启动与MCP服务器的连接;
  2. 为结构化工具通信初始化会话;
  3. 为Gemini动态发现和格式化可用工具。

(八)Gemini – 解释提示并建议函数调用

response = client.models.generate_content(
    model="gemini-2.5-pro-exp-03-25",
    contents=prompt,
    config=types.GenerateContentConfig(
        temperature=0,
        tools=tools,
    ),
)

把用户的提示和从MCP服务器发现的可用工具列表一起发送给Gemini模型。如果Gemini识别出提示与function_mode匹配,就会返回一个function_call对象,里面包含工具名称和自动填充的参数。

(九)Gemini LLM最终响应

如果Gemini确定提示和函数一致,就会返回一个结构化的function_call对象,比如:

{
  "function_call": {
    "name": "search_flights",
    "args": {
      "source": "ATL",
      "destination": "LAS",
      "date": "2025-05-05"
    }
  }
}

Gemini LLM能够解释自然输入,选择合适的工具,并自动填写函数参数,无需手动编写解析逻辑。

四、与Gemini LLM一起使用MCP的最佳实践

(一)工具设计

  1. 工具名称要简短且有意义,比如search_flightsget_weather
  2. 为每个工具提供清晰明了的描述,方便模型判断何时以及如何调用。
  3. 明确输入参数的类型,比如字符串、枚举、数字等,帮助模型准确填写参数。

(二)模型交互

  1. 减少工具数量,避免模型超载,只使用相关工具,以提高准确性。
  2. 根据用户查询或对话上下文,动态加载工具。
  3. 明确设定模型的角色,向模型解释如何以及何时使用工具。

(三)服务器设置

  1. 使用stdio作为连接类型启动MCP服务器,方便本地开发。
  2. 通过环境变量安全地向工具服务器传递密钥,比如SERP_API_KEY

(四)请求处理

  1. 在列出或调用工具之前,务必先运行session.initialize()初始化会话。
  2. 使用session.list_tools()动态列出工具,保持客户端的灵活性和工具无关性。

(五)错误处理与安全

  1. 工具服务器出现故障时,要返回有意义的错误信息。
  2. 注意安全,不要在日志或错误信息中泄露API密钥等敏感信息。

五、目前存在的限制

截至2025年3月,在使用Gemini LLM的MCP和函数调用时,还存在一些限制:

  1. 对OpenAPI只是部分支持。
  2. Python支持的参数类型有限。
  3. 自动函数调用目前仅是Python SDK的一项功能。

通过这篇文章,我们详细了解了如何使用MCP和谷歌Gemini LLM构建实时、工具增强型AI助手。希望这些内容能帮助大家在相关开发工作中有所收获。如果有不同的看法,欢迎一起讨论!

相关代码可以在GitHub上的mcp-gemini-search仓库中找到。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/ai/17607.html
喜欢 (2)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】