Google Agent Development Kit (ADK) 指南 第三章:核心概念与架构

Google Agent Development Kit (ADK) 指南 第三章:核心概念与架构

系列教程:这是《Google ADK 指南》系列的第三章。

前置知识:已完成第二章,完成环境搭建。


目录

  1. [ADK 架构概览](#ADK 架构概览)
  2. 核心组件详解
  3. 数据流与执行模型
  4. 扩展点与插件
  5. 最佳实践

1. ADK 架构概览

1.1 整体架构

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                        应用层                                   │
│    (Chatbot、API Service、Batch Processing、Web UI)             │
├─────────────────────────────────────────────────────────────────┤
│                        ADK 框架层                                │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐  │
│  │   Agent     │ │    Tool     │ │   Memory    │ │  Evaluator│  │
│  │   Engine    │ │   Manager   │ │   Manager   │ │           │  │
│  └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │                    Orchestrator                             ││
│  │  (Single Agent | Multi-Agent | Workflow | Parallel)         ││
│  └─────────────────────────────────────────────────────────────┘│
├─────────────────────────────────────────────────────────────────┤
│                        模型层                                    │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐  │
│  │   Gemini    │ │    PaLM     │ │   Codey     │ │  Third-   │  │
│  │   2.0       │ │     2       │ │             │ │   party   │  │
│  └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘  │
├─────────────────────────────────────────────────────────────────┤
│                      GCP 基础设施层                              │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐  │
│  │   Vertex    │ │     GCS     │ │  BigQuery   │ │    IAM    │  │
│  │     AI      │ │             │ │             │ │           │  │
│  └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘  │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐  │
│  │   Cloud     │ │   Pub/Sub   │ │  Cloud      │ │  Secret   │  │
│  │   Logging   │ │             │ │  Functions  │ │  Manager  │  │
│  └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘  │
└─────────────────────────────────────────────────────────────────┘

1.2 设计原则

原则 说明 实现方式
模块化 组件独立可替换 清晰接口定义
可扩展 易于添加新功能 插件架构
可观测 运行状态透明 日志、指标、追踪
安全 数据保护优先 IAM、加密、审计
高性能 低延迟高吞吐 异步、缓存、批处理

2. 核心组件详解

2.1 Agent(智能体)

定义:Agent 是 ADK 的核心,负责接收输入、决策、调用工具、生成输出。

核心属性

python 复制代码
from google.adk import Agent
from google.adk.models import Gemini
from google.adk.memory import ConversationBufferMemory

agent = Agent(
    # 基础配置
    name="customer_service_agent",
    description="客户服务智能代理",
    
    # 模型配置
    model=Gemini("gemini-2.0-pro"),
    
    # 指令(System Prompt)
    instruction="""你是一个专业的客户服务代表。
    - 用友好、专业的语气回答
    - 只根据知识库内容回答
    - 不知道的事情要承认""",
    
    # 工具列表
    tools=[search_tool, order_tool, refund_tool],
    
    # 记忆配置
    memory=ConversationBufferMemory(max_turns=20),
    
    # 生成配置
    generation_config={
        "temperature": 0.7,
        "max_output_tokens": 2048,
        "top_p": 0.95
    },
    
    # 安全配置
    safety_settings={
        "HARM_CATEGORY_HARASSMENT": "BLOCK_MEDIUM_AND_ABOVE"
    }
)

Agent 生命周期

复制代码
初始化 → 接收输入 → 思考规划 → 调用工具 → 生成响应 → 更新记忆 → 输出
   ↑                                                                  │
   └────────────────────────── 循环 ──────────────────────────────────┘

2.2 Tool(工具)

定义:Tool 是 Agent 可调用的外部函数或 API。

工具类型

类型 说明 示例
函数工具 Python 函数 计算器、日期处理
API 工具 HTTP API 天气、地图、支付
数据库工具 SQL 查询 订单查询、用户信息
GCP 工具 Google 服务 BigQuery、Storage

创建工具

python 复制代码
from google.adk import Tool
from pydantic import BaseModel, Field

# 方式 1:装饰器(推荐)
@Tool(
    name="calculate_shipping",
    description="计算运费",
    parameters={
        "weight": {"type": "number", "description": "包裹重量 (kg)"},
        "destination": {"type": "string", "description": "目的地城市"},
        "express": {"type": "boolean", "description": "是否快递"}
    }
)
def calculate_shipping(weight: float, destination: str, express: bool = False) -> str:
    """计算运费并返回结果"""
    base_rate = 10.0
    express_rate = 2.0 if express else 0.0
    total = base_rate * weight + express_rate
    return f"运费:${total:.2f}"

# 方式 2:类定义(复杂工具)
from google.adk.tools import BaseTool

class OrderLookupTool(BaseTool):
    name = "lookup_order"
    description = "查询订单状态"
    
    class Parameters(BaseModel):
        order_id: str = Field(..., description="订单 ID")
        email: str = Field(..., description="用户邮箱")
    
    def execute(self, order_id: str, email: str) -> dict:
        # 查询数据库
        order = db.query("SELECT * FROM orders WHERE id=? AND email=?", 
                        order_id, email)
        return {
            "status": order.status,
            "items": order.items,
            "tracking": order.tracking_number
        }

2.3 Memory(记忆)

定义:Memory 管理 Agent 的状态和历史信息。

记忆类型

python 复制代码
# 1. 对话缓冲记忆(短期)
from google.adk.memory import ConversationBufferMemory
memory = ConversationBufferMemory(max_turns=10)

# 2. 向量记忆(长期)
from google.adk.memory import VectorStoreMemory
from google.adk.vectorstores import VertexAISearch
memory = VectorStoreMemory(
    store=VertexAISearch(
        project_id="your-project",
        location_id="global"
    )
)

# 3. 实体记忆(结构化)
from google.adk.memory import EntityMemory
memory = EntityMemory(
    entities=["user_profile", "preferences", "history"]
)

# 4. 组合记忆
from google.adk.memory import CompositeMemory
memory = CompositeMemory(
    short_term=ConversationBufferMemory(max_turns=10),
    long_term=VectorStoreMemory(...)
)

记忆操作

python 复制代码
# 添加记忆
memory.add_message(role="user", content="你好")
memory.add_message(role="assistant", content="你好!有什么可以帮助你的?")

# 获取历史
history = memory.get_history(last_n=5)

# 搜索记忆
results = memory.search("用户偏好", top_k=3)

# 清除记忆
memory.clear()

2.4 Evaluator(评估器)

定义:Evaluator 评估 Agent 输出质量。

内置评估器

python 复制代码
from google.adk.evaluators import (
    RelevanceEvaluator,
    FaithfulnessEvaluator,
    SafetyEvaluator,
    CustomEvaluator
)

# 相关性评估
relevance_eval = RelevanceEvaluator(
    model=Gemini("gemini-2.0-flash"),
    threshold=0.7
)

# 忠实度评估(是否基于事实)
faithfulness_eval = FaithfulnessEvaluator(
    context_required=True
)

# 安全评估
safety_eval = SafetyEvaluator(
    blocked_categories=["HARASSMENT", "HATE_SPEECH"]
)

# 自定义评估
class ToneEvaluator(CustomEvaluator):
    def evaluate(self, response: str, context: dict) -> float:
        # 评估语气是否友好
        if any(word in response for word in ["抱歉", "感谢", "请"]):
            return 1.0
        return 0.5

# 组合评估
from google.adk.evaluators import EnsembleEvaluator
evaluator = EnsembleEvaluator(
    evaluators=[relevance_eval, faithfulness_eval, safety_eval],
    weights=[0.4, 0.4, 0.2]
)

2.5 Orchestrator(编排器)

定义:Orchestrator 协调多个 Agent 或复杂工作流。

编排模式

python 复制代码
# 1. 单 Agent(默认)
from google.adk import SingleAgentOrchestrator
orchestrator = SingleAgentOrchestrator(agent=single_agent)

# 2. 多 Agent 路由
from google.adk import MultiAgentOrchestrator
orchestrator = MultiAgentOrchestrator(
    agents={
        "sales": sales_agent,
        "support": support_agent,
        "billing": billing_agent
    },
    router=SemanticRouter(  # 语义路由
        model=Gemini("gemini-2.0-flash")
    )
)

# 3. 顺序工作流
from google.adk import SequentialWorkflow
workflow = SequentialWorkflow(
    steps=[
        intent_agent,      # 识别意图
        retrieval_agent,   # 检索信息
        response_agent     # 生成回复
    ]
)

# 4. 并行处理
from google.adk import ParallelWorkflow
workflow = ParallelWorkflow(
    agents=[agent1, agent2, agent3],
    merge_strategy="concatenate"  # 合并策略
)

# 5. 条件分支
from google.adk import ConditionalWorkflow
workflow = ConditionalWorkflow(
    conditions=[
        {
            "condition": lambda ctx: ctx["intent"] == "complaint",
            "agent": complaint_agent
        },
        {
            "condition": lambda ctx: ctx["intent"] == "inquiry",
            "agent": inquiry_agent
        }
    ],
    default=default_agent
)

3. 数据流与执行模型

3.1 请求处理流程

复制代码
用户输入
    ↓
┌─────────────────┐
│  输入预处理      │  (清洗、验证、标准化)
└────────┬────────┘
         ↓
┌─────────────────┐
│  意图识别        │  (分类、实体抽取)
└────────┬────────┘
         ↓
┌─────────────────┐
│  检索记忆        │  (历史对话、用户信息)
└────────┬────────┘
         ↓
┌─────────────────┐
│  规划与决策      │  (选择工具、制定步骤)
└────────┬────────┘
         ↓
┌─────────────────┐
│  工具执行        │  (并行/串行调用)
└────────┬────────┘
         ↓
┌─────────────────┐
│  响应生成        │  (LLM 生成)
└────────┬────────┘
         ↓
┌─────────────────┐
│  质量评估        │  (安全性、相关性)
└────────┬────────┘
         ↓
┌─────────────────┐
│  输出后处理      │  (格式化、过滤)
└────────┬────────┘
         ↓
    用户输出

3.2 执行模式

同步执行

python 复制代码
response = agent.run("你好")
print(response.text)

异步执行

python 复制代码
import asyncio

async def main():
    response = await agent.run_async("你好")
    print(response.text)

asyncio.run(main())

流式执行

python 复制代码
for chunk in agent.run_stream("写一篇长文章"):
    print(chunk.text, end="", flush=True)

批处理

python 复制代码
inputs = ["问题 1", "问题 2", "问题 3"]
responses = agent.batch_run(inputs, max_concurrent=5)

3.3 错误处理

python 复制代码
from google.adk.exceptions import (
    AgentError,
    ToolExecutionError,
    ModelAPIError,
    TimeoutError
)

try:
    response = agent.run(user_input, timeout=30)
except ToolExecutionError as e:
    # 工具执行失败
    logger.error(f"工具失败:{e.tool_name}, 错误:{e.message}")
    response = agent.run("抱歉,暂时无法完成该操作。")
except ModelAPIError as e:
    # 模型 API 错误
    logger.error(f"模型错误:{e.status_code}")
    response = agent.run("服务暂时不可用,请稍后重试。")
except TimeoutError:
    # 超时
    logger.warning("请求超时")
    response = agent.run("处理超时,请简化问题。")
except AgentError as e:
    # 通用错误
    logger.error(f"Agent 错误:{e}")
    raise

4. 扩展点与插件

4.1 自定义模型 provider

python 复制代码
from google.adk.models import BaseModel, register_model

class CustomModel(BaseModel):
    def __init__(self, model_name: str, api_key: str):
        self.model_name = model_name
        self.api_key = api_key
    
    def generate(self, prompt: str, **kwargs) -> str:
        # 调用自定义模型 API
        response = requests.post(
            "https://api.custom-llm.com/generate",
            headers={"Authorization": f"Bearer {self.api_key}"},
            json={"prompt": prompt, "model": self.model_name}
        )
        return response.json()["text"]

# 注册
register_model("custom", CustomModel)

# 使用
agent = Agent(
    model=CustomModel("custom-v1", "your-api-key")
)

4.2 自定义工具

python 复制代码
from google.adk.tools import BaseTool
from pydantic import BaseModel

class DatabaseQueryTool(BaseTool):
    name = "query_database"
    description = "执行 SQL 查询"
    
    class Parameters(BaseModel):
        query: str
        read_only: bool = True
    
    def execute(self, query: str, read_only: bool = True) -> list:
        if read_only and not query.strip().upper().startswith("SELECT"):
            raise ValueError("只读模式只允许 SELECT 查询")
        
        conn = get_db_connection()
        cursor = conn.cursor()
        cursor.execute(query)
        return cursor.fetchall()

4.3 自定义记忆存储

python 复制代码
from google.adk.memory import BaseMemory

class RedisMemory(BaseMemory):
    def __init__(self, redis_url: str, session_id: str):
        import redis
        self.redis = redis.from_url(redis_url)
        self.session_key = f"adk:memory:{session_id}"
    
    def add_message(self, role: str, content: str):
        self.redis.lpush(self.session_key, f"{role}:{content}")
        self.redis.ltrim(self.session_key, 0, 99)  # 保留 100 条
    
    def get_history(self, last_n: int = 10):
        messages = self.redis.lrange(self.session_key, 0, last_n-1)
        return [m.decode().split(":", 1) for m in reversed(messages)]
    
    def clear(self):
        self.redis.delete(self.session_key)

5. 最佳实践

5.1 Agent 设计

推荐

  • 单一职责原则(一个 Agent 做好一件事)
  • 清晰的指令(System Prompt)
  • 合理的工具数量(3-7 个)
  • 适当的记忆长度(10-20 轮)

避免

  • 万能 Agent(什么都做)
  • 模糊的指令
  • 过多工具(>15 个)
  • 无限记忆

5.2 工具开发

推荐

  • 详细的描述和参数说明
  • 完善的错误处理
  • 超时控制
  • 结果格式化
python 复制代码
@Tool(
    name="search_products",
    description="搜索产品,支持关键词、价格范围、分类筛选",
    parameters={
        "keyword": {"type": "string", "description": "搜索关键词"},
        "min_price": {"type": "number", "description": "最低价格"},
        "max_price": {"type": "number", "description": "最高价格"},
        "category": {"type": "string", "description": "产品分类"}
    },
    timeout=10,  # 超时设置
    cache_ttl=300  # 缓存 5 分钟
)
def search_products(keyword: str, min_price: float = None, 
                    max_price: float = None, category: str = None) -> list:
    try:
        # 实现...
        pass
    except Exception as e:
        logger.error(f"搜索失败:{e}")
        return []

5.3 性能优化

python 复制代码
# 1. 启用缓存
from google.adk.caching import ResponseCache
agent.cache = ResponseCache(ttl=3600)

# 2. 批量工具调用
@Tool(batch_enabled=True)
def batch_lookup_ids(ids: list[str]) -> list:
    # 一次调用查询多个 ID
    pass

# 3. 异步并发
import asyncio
results = await asyncio.gather(
    tool1.run_async(arg1),
    tool2.run_async(arg2),
    tool3.run_async(arg3)
)

# 4. 流式响应
for chunk in agent.run_stream(long_query):
    process(chunk)  # 边生成边处理

5.4 安全实践

python 复制代码
# 1. 输入验证
from google.adk.security import InputValidator

validator = InputValidator(
    max_length=1000,
    blocked_patterns=[r"<script>", r"DROP TABLE"],
    require_auth=True
)

# 2. 输出过滤
from google.adk.security import OutputFilter

filter = OutputFilter(
    remove_pii=True,  # 移除个人信息
    block_sensitive=True  # 阻止敏感信息
)

# 3. 速率限制
from google.adk.security import RateLimiter

limiter = RateLimiter(
    requests_per_minute=60,
    tokens_per_minute=10000
)

# 4. 审计日志
from google.adk.logging import AuditLogger

audit = AuditLogger(
    log_input=True,
    log_output=True,
    log_tool_calls=True,
    retention_days=90
)

系列教程导航

相关推荐
A__tao15 分钟前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
墨染天姬15 分钟前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
研究点啥好呢19 分钟前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
AI成长日志19 分钟前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_9481142431 分钟前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠33 分钟前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
迷藏49434 分钟前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
FserSuN1 小时前
LangChain DeepAgent 多 Agent 架构原理学习
架构·langchain
黎阳之光1 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好1 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型