Files
Agent-Docs/ADKLearning/google-adk-tutorial/code/llm_agent_demo.py
Nelson 514723dbe7 init
2026-04-06 12:36:04 +08:00

211 lines
7.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Google ADK LLM 智能体完整示例
展示 LlmAgent 的各种配置和用法
对应教程第03章 - LLM 智能体详解
"""
# 导入 ADK 核心模块
from google.adk.agents import Agent, LlmAgent # Agent 和 LlmAgent
from google.adk.agents import SequentialAgent # 顺序工作流
from google.adk.models.lite_llm import LiteLlm # LiteLLM 适配器
from google.adk.tools import google_search # Google 搜索工具
from google.adk.tools import code_execution # 代码执行工具
# 导入运行相关模块
from google.adk.runners import Runner # 运行器
from google.adk.sessions import InMemorySessionService # 内存会话服务
from google.genai import types # Google GenAI 类型定义
# 导入异步库
import asyncio # 异步编程库
# ========================================
# 示例一:基础 LlmAgent 配置
# ========================================
# 使用 Gemini 模型(默认)
gemini_agent = Agent(
name="gemini_agent", # Agent 名称
model="gemini-2.0-flash", # 使用 Gemini 2.0 Flash
instruction="你是一个专业的编程助手。", # 系统指令
description="擅长编程和代码审查。", # 描述(用于多 Agent 路由)
)
# 使用 LiteLLM 适配 DeepSeek 模型
deepseek_agent = Agent(
name="deepseek_agent", # Agent 名称
model=LiteLlm( # 使用 LiteLLM 适配器
model="deepseek/deepseek-chat", # 格式provider/model_name
api_key="你的_DEEPSEEK_API_KEY", # API Key
),
instruction="你是一个中文写作助手。", # 系统指令
)
# 使用 LiteLLM 适配 OpenAI 模型
openai_agent = Agent(
name="openai_agent", # Agent 名称
model=LiteLlm( # 使用 LiteLLM 适配器
model="openai/gpt-4o", # OpenAI GPT-4o
api_key="你的_OPENAI_API_KEY", # API Key
),
instruction="你是一个数据分析助手。", # 系统指令
)
# ========================================
# 示例二:使用 Google 内置工具
# ========================================
# 带搜索能力的 Agent
search_agent = Agent(
name="search_agent", # Agent 名称
model="gemini-2.0-flash", # 使用 Gemini 模型
instruction=( # 系统指令
"你是一个信息查询助手。\n"
"使用 Google Search 工具搜索最新信息。\n"
"根据搜索结果提供准确、全面的回答。"
),
tools=[google_search], # 注册 Google 搜索工具
)
# 带代码执行能力的 Agent
code_agent = Agent(
name="code_agent", # Agent 名称
model="gemini-2.0-flash", # 使用 Gemini 模型
instruction=( # 系统指令
"你是一个数据分析助手。\n"
"使用 Code Execution 工具执行 Python 代码。\n"
"确保代码正确且高效。"
),
tools=[code_execution], # 注册代码执行工具
)
# 多功能 Agent搜索 + 代码执行)
super_agent = Agent(
name="super_agent", # Agent 名称
model="gemini-2.0-flash", # 使用 Gemini 模型
instruction="你是一个全能助手,可以搜索信息和执行代码。", # 指令
tools=[google_search, code_execution], # 注册多个工具
)
# ========================================
# 示例三output_key 用法
# ========================================
# 第一步:提取信息的 Agent
extractor = Agent(
name="Extractor", # 信息提取 Agent
model="gemini-2.0-flash", # 模型
instruction="从用户输入中提取关键信息。只输出提取的信息。", # 指令
output_key="extracted_info", # 将输出保存到 state['extracted_info']
)
# 第二步:分析信息的 Agent引用第一步的输出
analyzer = Agent(
name="Analyzer", # 信息分析 Agent
model="gemini-2.0-flash", # 模型
instruction=( # 指令:通过 {key} 引用 state 中的值
"分析以下提取的信息,给出深度分析。\n"
"提取的信息:{extracted_info}"
),
output_key="analysis_result", # 将分析结果保存到 state
)
# 创建顺序流水线
pipeline = SequentialAgent(
name="InfoPipeline", # 流水线名称
sub_agents=[extractor, analyzer], # 按顺序执行
)
# ========================================
# 示例四Agent Transfer动态委派
# ========================================
# 定义专门的子 Agent
booking_agent = LlmAgent(
name="BookingAgent", # 预订 Agent
model="gemini-2.0-flash", # 模型
description="负责处理航班和酒店的预订请求。", # 描述
instruction="你是一个预订助手,帮助用户预订航班和酒店。", # 指令
)
info_agent = LlmAgent(
name="InfoAgent", # 信息查询 Agent
model="gemini-2.0-flash", # 模型
description="负责回答一般性问题和提供信息。", # 描述
instruction="你是一个信息助手,回答用户的各种问题。", # 指令
)
# 定义协调器 Agent
coordinator = LlmAgent(
name="Coordinator", # 协调器
model="gemini-2.0-flash", # 模型
description="主协调器,负责分配任务。", # 描述
instruction=( # 指令
"你是一个协调器。\n"
"预订任务交给 BookingAgent。\n"
"信息查询交给 InfoAgent。\n"
"使用 transfer_to_agent 工具委派任务。"
),
sub_agents=[booking_agent, info_agent], # 注册子 Agent
)
# ========================================
# 示例五:通过代码运行 Agent
# ========================================
# 定义应用信息
APP_NAME = "llm_demo_app" # 应用名称
USER_ID = "user_001" # 用户 ID
SESSION_ID = "session_001" # 会话 ID
async def run_demo():
"""运行 LlmAgent 演示"""
# 创建会话服务
session_service = InMemorySessionService() # 内存会话服务
# 创建会话
session = await session_service.create_session(
app_name=APP_NAME, # 应用名称
user_id=USER_ID, # 用户 ID
session_id=SESSION_ID, # 会话 ID
)
# 创建运行器
runner = Runner(
agent=gemini_agent, # 使用 Gemini Agent
app_name=APP_NAME, # 应用名称
session_service=session_service, # 会话服务
)
# 构造用户消息
content = types.Content(
role='user', # 角色:用户
parts=[types.Part(text='用 Python 写一个冒泡排序算法')], # 消息
)
# 运行 Agent
events = runner.run_async(
user_id=USER_ID, # 用户 ID
session_id=SESSION_ID, # 会话 ID
new_message=content, # 用户消息
)
# 处理事件流
async for event in events: # 遍历所有事件
if event.is_final_response(): # 如果是最终响应
response = event.content.parts[0].text # 提取文本
print(f"Agent 回复:\n{response}") # 打印回复
# 运行演示
if __name__ == "__main__": # 当脚本被直接运行时
asyncio.run(run_demo()) # 执行异步函数