Google Agent Development Kit与MCP初试
Google Agent Development Kit与MCP初试
- 一、背景知识
- 二、搭建智能大脑 - Ollama服务器
- 2.1 为什么要先搭建Ollama?
- 2.2 搭建ollama服务器
- 2.2.1 安装
- 2.2.2 试着用curl命令"问"AI一个问题:
- 三、构建智能体工坊 - ADK环境
- 3.1 创建容器
- 3.2 安装核心组件
- 四、打造第一把工具 - MCP服务
- 4.1 MCP服务架构图解
- 4.2 创建示例工具服务
- 4.3 测试工具调用
- 五、组装智能代理
- 5.1 项目结构解析
- 5.2 创建步骤
- 5.3 打开流程器测试
- 5.4 效果图
- 六、常见问题解答
- 七、扩展阅读
一、背景知识
在开始之前,我们先了解几个关键概念:
- Ollama:一个本地化运行大语言模型(如Gemma、Qwen等)的开源工具,类似"手机上的离线版ChatGPT"
- ADK(Agent Development Kit):Google推出的智能代理开发框架,可以快速构建具备多工具调用能力的AI助手
- MCP(Model Control Protocol):实现AI模型与工具间通信的协议,好比AI的"手和脚"让语言模型可以操作外部工具
- LiteLLM:统一不同大模型API的适配层,可以理解为"AI界的通用充电器"
二、搭建智能大脑 - Ollama服务器
2.1 为什么要先搭建Ollama?
就像人类需要大脑才能思考一样,我们需要一个本地运行的AI模型作为智能核心。选择Ollama是因为它:
- 支持多种开源大模型(Gemma、Qwen等)
- 可在普通服务器部署
- 提供类似OpenAI的API接口
2.2 搭建ollama服务器
2.2.1 安装
# 安装Ollama(约1分钟)
curl -fsSL https://ollama.com/install.sh | sh# 配置服务器可被外部访问(默认只能本机访问)
export OLLAMA_HOST="0.0.0.0:8000"# 启动服务(保持此终端运行)
ollama serve# 下载两个常用模型(根据网络情况需要较长时间)
ollama run gemma3:27b # 谷歌轻量级模型,适合简单任务
ollama run qwen3:32b # 阿里云通义千问,中文处理更优秀
2.2.2 试着用curl命令"问"AI一个问题:
curl http://10.22.4.73:8000/api/chat -d '{"model": "qwen3:32b","messages": [{"role": "user","content": "为什么天空是蓝色的?"}]
}'
三、构建智能体工坊 - ADK环境
3.1 创建容器
docker run --runtime nvidia --gpus all -ti \-v $PWD:/home -w /home --name adk \-p 9002:8000 nvcr.io/nvidia/pytorch:24.03-py3 bash
参数说明:
--gpus all
:启用全部GPU-v $PWD:/home
:将当前目录挂载到容器内-p 9002:8000
:端口映射(容器内8000→外部9002)
3.2 安装核心组件
# Google智能代理开发套件
pip install google-adk -i https://pypi.tuna.tsinghua.edu.cn/simple# MCP协议实现库
pip install fastmcp -i https://pypi.tuna.tsinghua.edu.cn/simple# 模型API统一适配器
pip install litellm -i https://pypi.tuna.tsinghua.edu.cn/simple
四、打造第一把工具 - MCP服务
4.1 MCP服务架构图解
[用户提问] → [ADK Agent] → [MCP客户端] ↔ [MCP服务端] → [具体工具]
(决策中心) (通信协议) (实际执行)
4.2 创建示例工具服务
cat > server.py <<-'EOF'
from mcp.server.fastmcp import FastMCP# 创建一个 MCP 服务端实例,命名为 "SimpleServer"
mcp = FastMCP("SimpleServer")# 定义一个工具:计算两个数字之和
@mcp.tool()
def add_numbers(a: int, b: int) -> int:"""Add two numbers together."""with open("debug.txt","w") as f:f.write("add_numbers call")return a + b# 运行服务端
if __name__ == "__main__":mcp.run()
EOF
4.3 测试工具调用
cat > client.py <<-'EOF'
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_clientasync def main():# 定义服务端参数:假设服务端脚本为 server.pyserver_params = StdioServerParameters(command="python",args=["server.py"],env=None) # 使用 stdio_client 连接到服务端async with stdio_client(server_params) as (stdio, write):# 创建客户端会话async with ClientSession(stdio, write) as session:# 初始化会话await session.initialize()# 列出可用工具tools_response = await session.list_tools()print("可用工具:", [tool.name for tool in tools_response.tools])# 调用 add_numbers 工具result = await session.call_tool("add_numbers", {"a": 5, "b": 3})print("工具调用结果 (5 + 3):", result)# 运行异步客户端
if __name__ == "__main__":asyncio.run(main())
EOF
python client.py
五、组装智能代理
5.1 项目结构解析
multi_tool_agent/
├── __init__.py # Python包标识
├── agent.py # 智能体主程序
└── .env # 环境配置
5.2 创建步骤
# 创建目录
rm -rf multi_tool_agent
mkdir multi_tool_agent/
echo "from . import agent" > multi_tool_agent/__init__.py# 核心代码
cat > multi_tool_agent/agent.py <<-'EOF'
import os
from google.adk.agents import Agent
from google.adk.agents import LlmAgent
from google.adk.tools.mcp_tool import MCPToolset
from google.adk.models.lite_llm import LiteLlm
from mcp import StdioServerParametersroot_agent = Agent(model=LiteLlm(model="ollama_chat/qwen3:32b"), # 绑定本地Qwen模型name="dice_agent", # 代理名称description=("支持数学运算的智能体"),instruction="你负责计算数学表达式的值",tools=[MCPToolset(connection_params=StdioServerParameters(command='python',args=['server.py'], # 连接我们创建的MCP服务))],
)
EOF# 环境配置
cat > multi_tool_agent/.env <<-'EOF'
export OLLAMA_API_BASE=http://10.22.4.73:8000 # 指向Ollama服务器地址
EOF### 启动Web界面
adk web --host 0.0.0.0
5.3 打开流程器测试
http://10.22.4.73:9002/dev-ui?app=multi_tool_agent
5.4 效果图
六、常见问题解答
Q:MCP协议有什么优势?
- 工具热插拔:随时添加/移除工具无需重启服务
- 跨语言支持:工具可以用不同语言开发
- 权限控制:可精细管理每个工具的访问权限
Q:如何添加新工具?
- 在server.py中添加新的@mcp.tool()函数
- 重启MCP服务
- Agent会自动发现新工具
七、扩展阅读
- MCP 本机服务端和客户端Python例子
- ADK文档
- LiteLLM