This commit is contained in:
Nelson
2026-04-06 12:36:04 +08:00
commit 514723dbe7
23 changed files with 7529 additions and 0 deletions

View File

@@ -0,0 +1,210 @@
"""
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()) # 执行异步函数