确保翻译不显得太生硬。确保翻译注释。 这个文件是用Markdown格式写的。不要把它当作XML或HTML。 不要翻译任何[!NOTE]、[!WARNING]、[!TIP]、[!IMPORTANT]或[!CAUTION]。 不要翻译任何实体,如变量名、函数名、类名,或占位符如@@INLINECODEx@@或@@CODEBLOCKx@@,但保留它们在文件中。 不要翻译任何URL或路径,但保留它们在文件中。 请从左到右写输出。
确保翻译不显得太生硬。确保翻译注释。
这个文件是用Markdown格式写的。不要把它当作XML或HTML。
不要翻译任何[!NOTE]、[!WARNING]、[!TIP]、[!IMPORTANT]或[!CAUTION]。
不要翻译任何实体,如变量名、函数名、类名,或占位符如@@INLINE_CODE_x@@或@@CODE_BLOCK_x@@,但保留它们在文件中。
不要翻译任何URL或路径,但保留它们在文件中。
请从左到右写输出。
回调是在代理执行过程中特定时刻被调用的函数,允许你在不修改核心逻辑的情况下,监控、记录并控制代理的行为。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Agent Start │───▶│ LLM Request │───▶│ Tool Execution │ │ Callback │ │ Callback │ │ Callback │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Agent End │ │ LLM Response │ │ Tool Result │ │ Callback │ │ Callback │ │ Callback │ └─────────────────┘ └─────────────────┘ └─────────────────┘
本教程涵盖 Google ADK 中三种关键的回调模式:
每个子教程都提供了简单而专注的示例,演示具体的回调模式。
6_callbacks/ ├── README.md # This file - concept explanation ├── 6_1_agent_lifecycle_callbacks/ # Agent lifecycle monitoring │ ├── README.md # Lifecycle callback patterns │ ├── agent.py # Agent with lifecycle callbacks │ ├── app.py # Streamlit interface │ └── requirements.txt # Dependencies ├── 6_2_llm_interaction_callbacks/ # LLM request/response tracking │ ├── README.md # LLM callback patterns │ ├── agent.py # Agent with LLM callbacks │ ├── app.py # Streamlit interface │ └── requirements.txt # Dependencies └── 6_3_tool_execution_callbacks/ # Tool execution monitoring ├── README.md # Tool callback patterns ├── agent.py # Agent with tool callbacks ├── app.py # Streamlit interface └── requirements.txt # Dependencies
完成本教程后,你将掌握以下内容:
GOOGLE_API_KEY=your_key_herepip install -r requirements.txt# Agent Lifecycle Callbacks cd 6_1_agent_lifecycle_callbacks streamlit run app.py # LLM Interaction Callbacks cd ../6_2_llm_interaction_callbacks streamlit run app.py # Tool Execution Callbacks cd ../6_3_tool_execution_callbacks streamlit run app.py
def on_agent_start(agent_name: str): print(f"▶️ Agent {agent_name} started") def on_agent_end(agent_name: str, result: str): print(f"✅ Agent {agent_name} completed: {result}") # Register callbacks agent = LlmAgent( name="my_agent", model="gemini-3-flash-preview", on_start=on_agent_start, on_end=on_agent_end )
def on_llm_request(model: str, prompt: str): print(f" LLM Request to {model}: {prompt[:50]}...") def on_llm_response(model: str, response: str, tokens: int): print(f" LLM Response from {model}: {tokens} tokens") # Register callbacks agent = LlmAgent( name="my_agent", model="gemini-3-flash-preview", on_llm_request=on_llm_request, on_llm_response=on_llm_response )
def on_tool_start(tool_name: str, params: dict): print(f" Tool {tool_name} started with params: {params}") def on_tool_end(tool_name: str, result: str): print(f"✅ Tool {tool_name} completed: {result}") # Register callbacks agent = LlmAgent( name="my_agent", model="gemini-3-flash-preview", tools=[my_tool], on_tool_start=on_tool_start, on_tool_end=on_tool_end )
完成本教程后,你将准备好:
免责声明:
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。