Skip to content

BUG:Web UI 智能体发现机制显示非智能体目录(继承自 Google ADK) #552

@xyl-muse

Description

@xyl-muse

描述 Bug:

VeADK 继承了 Google ADK 的 Web UI 智能体发现机制,该机制会在智能体选择下拉列表中显示所有子目录,包括非智能体目录(如 tools/schemas/tests/ 等),导致用户界面混乱和不良的开发体验。

复现步骤:

  1. 创建一个典型的 VeADK 多智能体项目结构:
xsoc_agent/
├── agent.py            # 根智能体
├── __init__.py
├── flows/              # ✅ 有效智能体 (SecurityEventOrchestrator)
│   ├── __init__.py
│   └── security_event_flow.py
├── agents/             # ❌ 非智能体 (子智能体代码)
├── tools/              # ❌ 非智能体 (工具模块)
├── schemas/            # ❌ 非智能体 (Pydantic模型)
└── tests/              # ❌ 非智能体 (单元测试)
  1. 运行 veadk web
  2. 打开浏览器访问 http://127.0.0.1:8000/
  3. 观察智能体选择下拉列表显示:agents, flows, schemas, tests, tools
  4. 尝试选择 agentstools 等目录 → 出现加载错误

期望行为:

下拉列表应仅显示包含有效智能体定义的目录(本例中应只显示 flows)。

实际行为:

Web UI 显示了所有子目录,选择非智能体目录时出现错误:

ValueError: No root_agent found for 'tools'.

环境详情:

  • VeADK 版本: 0.5.29
  • Google ADK 版本: 1.29.0
  • 操作系统: Windows 10 / Linux / macOS
  • Python 版本: 3.10+

模型信息:

  • 是否使用 LiteLLM: N/A
  • 使用的模型: N/A(问题出在智能体发现机制,与模型无关)

🟡 可选信息

回归测试:

这不是回归问题,而是从依赖的上游项目(Google ADK)继承的设计问题。相关 Issue:Google ADK Duplicate of #3429。

日志:

无后端错误日志。问题在于 /list-apps API 返回了所有目录名。

截图 / 视频:

Web UI 下拉列表中混入了非智能体目录,造成用户困惑。

补充背景:

VeADK 与 Google ADK 的依赖关系:

veadk-python (0.5.29)
    ↓ 依赖于
google-adk (>=1.19.0)
    ↓ 调用
google.adk.cli.cli_tools_click.cli_web()

VeADK 的 cli_web.py 实现:

from google.adk.cli.cli_tools_click import cli_web

# VeADK 对 AdkWebServer 进行了一些 patch
# 但没有修改 list_apps 的行为
cli_web.main(args=extra_args, standalone_mode=False)

根本原因:

  1. Google ADK 的 /list-apps 端点默认 detailed=False
  2. 预编译的 Angular 前端硬编码了 API 调用,未传递 ?detailed=true
  3. VeADK 完全委托给 Google ADK,没有覆盖或 patch 这个行为

对国内开发者的影响:

VeADK 主要面向国内市场,用户构建企业级多智能体系统时面临:

  • 界面混乱: 看到 6+ 个选项,但只有 1-2 个有效
  • 开发体验差: 需要反复尝试才能找到有效智能体
  • 生产部署问题: 无效的智能体名称出现在部署场景中

建议解决方案:

方案 1: 等待 Google ADK 修复

跟踪 Google ADK 进展,等待上游修复后更新依赖。

优点:

  • 无需修改代码
  • 受益于整个 Google ADK 生态系统
  • 保持与上游对齐

缺点:

  • 依赖 Google ADK 发布时间线
  • 期间用户仍会遇到此问题

方案 2: 在 VeADK 层面临时 Patch

veadk/cli/cli_web.py 中添加 monkey patch 强制使用 detailed 模式。

优点:

  • VeADK 用户立即受益
  • 不依赖上游时间线

缺点:

  • 增加维护负担
  • 可能与未来 Google ADK 版本产生兼容性问题
  • Monkey patch 不够优雅

方案 3: 文档说明

在 VeADK 文档中说明当前行为和临时解决方案。

最小复现代码:

# 创建测试项目结构
import tempfile
from pathlib import Path

with tempfile.TemporaryDirectory() as tmp:
    # 创建有效智能体
    (Path(tmp) / "flows").mkdir()
    (Path(tmp) / "flows" / "__init__.py").write_text(
        "from veadk import Agent\n"
        "root_agent = Agent(name='test', model='gemini-2.0-flash-exp')"
    )
    
    # 创建非智能体目录
    (Path(tmp) / "tools").mkdir()
    (Path(tmp) / "schemas").mkdir()
    
    # 运行 veadk web tmp
    # 下拉列表会显示: flows, schemas, tools
    # 但只有 flows 可用

问题发生频率:

  • 总是 (100%)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions