5分钟上手ADK插件开发:从基础到集成全攻略
还在为AI Agent功能固定无法扩展发愁?本文3步教你用ADK插件打造专属工具链,无需复杂代码即可实现:
- 掌握插件开发全流程
- 学会集成自定义监控工具
- 解决90%的兼容性问题
插件基础:ADK扩展能力核心
ADK插件本质是封装回调函数的类,通过拦截Agent生命周期关键节点实现功能扩展。与普通回调不同,插件注册一次即可全局生效,适用于跨Agent的监控、日志、安全等横向需求。
官方插件开发文档:contributing/samples/plugin_basic/README.md
开发3步法:从0构建计数插件
1. 定义插件类
继承BasePlugin实现自定义逻辑,以下示例创建调用计数器:
from google.adk.plugins.base_plugin import BasePlugin
class CountInvocationPlugin(BasePlugin):
def __init__(self):
super().__init__(name="count_invocation")
self.agent_count = 0 # 初始化计数器
async def before_agent_callback(self, agent, callback_context):
self.agent_count += 1 # 拦截Agent调用事件
print(f"[Plugin] Agent run count: {self.agent_count}")
完整代码:contributing/samples/plugin_basic/count_plugin.py
2. 集成到Agent
在Runner初始化时注册插件,支持多插件组合使用:
runner = InMemoryRunner(
agent=root_agent,
app_name="test_app",
plugins=[CountInvocationPlugin()] # 注册插件实例
)
集成示例:contributing/samples/plugin_basic/main.py#L47
3. 运行与验证
执行以下命令启动带插件的Agent:
python3 -m contributing.samples.plugin_basic.main
预期输出包含插件计数器日志:
[Plugin] Agent run count: 1
[Plugin] LLM request count: 1
Hello world: query is [hello world]
实战进阶:常用回调与应用场景
| 回调方法 | 触发时机 | 典型用途 |
|---|---|---|
before_agent_callback | Agent启动前 | 权限校验、资源预热 |
before_model_callback | LLM请求前 | 缓存查询、Prompt注入 |
after_tool_callback | 工具调用后 | 结果过滤、格式转换 |
错误处理插件示例:src/google/adk/plugins/reflect_retry_tool_plugin.py
避坑指南:常见问题解决方案
插件不生效?
检查Runner初始化代码,确保插件已加入plugins列表:
# 正确示例
runner = InMemoryRunner(agent=root_agent, plugins=[MyPlugin()])
多插件冲突?
通过name属性区分插件,优先级按注册顺序执行:
# 命名规范示例
class LoggingPlugin(BasePlugin):
def __init__(self):
super().__init__(name="logging") # 唯一名称标识
完整故障排查手册:contributing/adk_project_overview_and_architecture.md
下一步行动计划
- 尝试修改计数器插件,增加工具调用次数统计
- 探索反射重试插件:contributing/samples/plugin_reflect_tool_retry
- 查阅API文档:src/google/adk/plugins/base_plugin.py
点赞收藏本文,关注ADK更新获取更多插件开发技巧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




