6.1 代理生命周期回调 本教程演示如何使用 和 监控代理执行的生命周期。 学习目标 理解代理生命周期回调 学习如何监控代理执行的时间 了解如何在回调之间共享状态 练习实现性能监控 项目结构 设置 安装依赖: 设置 API 密钥: 运行演示 命令行演示 Web 界面 核心概念:代理生命周期监控 代理生命周期回调允许您监控代理执行的开始和结束,从而了解代理何时启动并完成任务。 代理生命周期流程 回调执行时间线 代码详解 1.
本教程演示如何使用before_agent_callback 和 after_agent_callback 监控代理执行的生命周期。
6_1_agent_lifecycle_callbacks/ ├── agent.py # Agent with lifecycle callbacks ├── app.py # Streamlit web interface ├── requirements.txt # Python dependencies └── README.md # This file
安装依赖:
pip install -r requirements.txt
设置 API 密钥:
# Create .env file echo "GOOGLE_API_KEY=your_api_key_here" > .env
python agent.py
streamlit run app.py
代理生命周期回调允许您监控代理执行的开始和结束,从而了解代理何时启动并完成任务。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ User Input │───▶│ Agent Start │───▶│ Agent End │ │ │ │ Callback │ │ Callback │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ Agent Logic │ │ Performance │ │ Execution │ │ Metrics │ └─────────────────┘ └─────────────────┘
Timeline: ──────────────────────────────────────────────────────────▶ User Message │ ▼ ┌─────────────────┐ │ before_agent │ ← Records start time, agent info │ _callback │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ Agent Logic │ ← Core agent processing │ Execution │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ after_agent │ ← Calculates duration, logs completion │ _callback │ └─────────────────┘ │ ▼ Response to User
这些回调成对工作,以监控完整的代理生命周期:
Before 回调 (before_agent_callback):
None 以允许正常执行After 回调 (after_agent_callback):
None 以使用原始结果Session State Flow: ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ before_callback │───▶│ Session State │───▶│ after_callback │ │ stores: │ │ │ │ retrieves: │ │ - start_time │ │ - request_start │ │ - start_time │ │ │ │ _time │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘
该代理配置了两个生命周期回调:
before_agent_callback:监控代理执行开始after_agent_callback:监控代理执行完成InMemoryRunner 以正确触发回调Agent LifecycleDemoAgent started at 19:15:30 ⏰ Start time: 2024-01-15 19:15:30 ✅ Agent LifecycleDemoAgent completed ⏱️ Duration: 1.23s ⏰ End time: 2024-01-15 19:15:31 Performance: 1.23s | LifecycleDemoAgent
callback_context.state.to_dict() to get current statecallback_context.state.update() 修改状态忘记等待会话创建:
# ❌ Wrong session_service.create_session(...) # ✅ Correct await session_service.create_session(...)
使用了错误的回调签名:
# ❌ Wrong def after_agent_callback(context, result): # ✅ Correct def after_agent_callback(callback_context: CallbackContext):
未使用 InMemoryRunner:
# ❌ Wrong - callbacks won't trigger agent.run(message) # ✅ Correct runner.run_async(...)
事件循环完成:如果您在接收到 is_final_response() 后立即中断事件循环,after_agent_callback 将不会触发。
正确模式:让事件循环自然完成:
# ❌ Wrong - breaks loop early, after_agent_callback won't run if event.is_final_response() and event.content: response_text = event.content.parts[0].text.strip() break # This prevents after_agent_callback from running # ✅ Correct - let loop complete naturally if event.is_final_response() and event.content: response_text = event.content.parts[0].text.strip() # Don't break - let the loop complete to ensure callbacks run
这是已知的 ADK 行为,提前中断循环会导致清理回调无法执行。
免责声明:
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。