从提示到行动:我在 Google 与 Kaggle AI 代理训练营的旅程
Source: Dev.to
这是一篇提交给 Google AI Agents Writing Challenge 的作品:学习心得
事实证明,只要会写一个 Python 函数,就能构建一个代理。下面是我对代码、概念和工具的深度探索,让这段旅程变得触手可及,并展示我的毕业项目:Jarbest。
觉醒:你好,代理
来自非开发者背景的我,一直把软件想象成“砌砖工”——严格按照蓝图执行。第一天,我认识了 Agent:一个更像 电影导演 的系统。它不仅仅是预测文本;它拥有 大脑(模型)、双手(工具)和 神经系统(编排),能够自主感知、推理并行动。
代理在一个连续循环中运行——任务 → 扫描 → 思考 → 行动 → 观察——不断调整计划以解决问题。这个框架揭开了魔法的面纱:我不只是写一个聊天机器人,而是在构建一个拥有自主性的系统来执行多步骤任务。
“啊哈!”时刻:这只是 Python 与 AI 的 “USB 接口”

第二天,我恍然大悟。模型只是“大脑”——模式预测器,既看不见也不能行动。要让它们有用,就需要 工具:让它们获取数据或执行动作的“眼睛”和“手”。
如果把每个工具都接到每个模型上,很快就会变成噩梦(N × M 问题)。这时 模型上下文协议(MCP) 出场了。
把 MCP 想象成 AI 的 USB 接口。在 USB 之前,你需要为每个设备准备一根特定的线缆。MCP 让你可以使用标准连接,把任何工具插入任何代理。
代码:给代理“手”
在我的项目 Jarbest(一个易于使用的个人伴侣)中,我需要一个能够查询银行账户余额的代理。与其编写自定义连接器,我使用 MCP “插入”了一个安全的银行服务器。
# Finance Agent: Manages the bank's transactions
finance_agent = Agent(
name="finance_agent",
description="An agent that can help with banking operations like checking balances...",
# This toolset connects to a secure internal banking server
tools=[
MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url=f"{BANK_MCP_URL.rstrip('/')}/mcp",
)
)
],
)
为什么这很重要(以及潜在风险)
代理读取这些工具定义,并且准确知道何时使用它们。如果用户问 “我能买得起这块披萨吗?”,代理会自然而然地先调用 check_balance。
然而,笔记提醒我们:使用 MCP 就像把在街上捡到的随机 USB 盘插进去。它可能是合法工具,也可能是“工具影子”(恶意副本)。这就是我在 Jarbest 中实现严格 应用层网关(通过硬编码白名单)的原因——确保代理只能连接到我特定的内部 MCP 银行服务器,防止它“插入”不受信任的来源。
深入探讨:大脑(记忆)

第三天,事情变得更为复杂。聊天机器人在你关闭标签页的那一刻就会忘记你。代理会记住。
对于 Jarbest 来说,它面向重视一致性的老年用户,记忆至关重要。如果 “Jane 奶奶” 要求她的 “常规订单”,代理不应该问 “那是什么?”;它应该已经知道。
下面是我在根代理中实现 “大脑” 的方式:
root_agent = Agent(
name='root_agent',
instruction="""
You are Jarbest...
Memory: Use the load_memory tool to recall past conversations and preferences
(e.g., "ordering the usual").
""",
tools=[load_memory], # <--- This single line gives the agent a "brain"
after_agent_callback=auto_save_to_memory # Auto‑saves every interaction
)
非开发者的视角
把 load_memory 想象成给代理一个文件柜。当 Jane 奶奶说 “帮我点点吃的” 时,代理会思考:*“我需要检查她是否有偏好”,*打开文件柜(load_memory),找到 “喜欢大号意大利香肠披萨”,然后执行相应操作。实时看到这种思考过程令人惊叹。
“挤压”:调试黑盒

第四天我们学到,仅仅“它能工作”是不够的。你必须知道 为什么 能工作。构建像 Jarbest 这样以安全为核心的代理时,我不能容忍 “幻觉”。
通过 Agent 可观测性 实验,我学会了追踪代理的推理步骤。当我的代理拒绝点披萨时,我可以查看追踪日志,看到:
- 用户: “点一个披萨。”
- 工具调用:
check_balance→ 返回 $5.00。 - 推理: “披萨要价 $20。用户只有 $5。结果:不安全。”
- 响应: “我无法完成此订单,因为您的余额不足。”
看到原始推理日志就像窥视矩阵一样。它把 LLM 从神秘的预言者变成了可调试的逻辑软件组件。我意识到我已经不再只是“提示”,而是在进行逻辑工程。
生态系统:代理之间的对话(A2A)
第五天引入了 Agent‑to‑Agent(A2A)协议。这标志着我从构建单一助手转向构建 团队。
我的 “采购代理” 并不会做披萨,而是连接到一个完全独立的 “披萨店代理”(模拟第三方供应商)。
# Creating a client‑side proxy for a remote agent
pizza_agent_proxy = RemoteA2aAgent(
name="pizza_agent",
# The "Agent Card" acts like a business card for discovery
agent_card="http://localhost:10000/.well-known/agent-card.json",
description="Remote pizza agent from external vendor...",
)
purchaser_agent = Agent(
name="purchaser_agent",
instruction="Your goal is to help the user find and buy items.",
tools=[AgentTool(pizza_agent_proxy)], # <--- Treating another agent as a tool
)
酷炫的想法
“Agent Card” 不仅是技术清单;它是一种全新的商业交互方式。
- 对中小企业(SMB)而言: 与其不断维护和文档化复杂的 API 供开发者使用,不如暴露一个 Agent Card,让任何兼容的 AI 代理都能发现并即插即用。