Skip to content

fix(chapter13): repair trip planner health check - #824

Open
Ling-ye wants to merge 1 commit into
datawhalechina:mainfrom
Ling-ye:fix/ch13-trip-health
Open

fix(chapter13): repair trip planner health check#824
Ling-ye wants to merge 1 commit into
datawhalechina:mainfrom
Ling-ye:fix/ch13-trip-health

Conversation

@Ling-ye

@Ling-ye Ling-ye commented Aug 20, 2026

Copy link
Copy Markdown

背景

我在参考 hello-agents 第十三章实现旅行规划项目,并检查案例后端健康状态接口时,
发现 /trip/health 在旅行规划器已经成功初始化的情况下仍会进入 503 异常路径。

沿着健康检查的调用链排查后发现,端点访问了
MultiAgentTripPlanner.agent,但该类并不存在统一的 agent 属性。
实际可用的是 attraction_agentweather_agenthotel_agent
planner_agent 四个组件 Agent。

问题原因

健康检查当前执行:

agent.agent.name
agent.agent.list_tools()

get_trip_planner_agent() 返回的是 MultiAgentTripPlanner。访问不存在的
.agent 会触发 AttributeError,随后被端点统一转换为 HTTP 503。

变更

  • 使用四个实际存在的组件 Agent 获取工具名称。
  • 对多个 Agent 共享的同名工具去重。
  • 使用实际旅行规划器类型名填充现有 agent_name 字段。
  • 保持健康检查的响应字段和初始化失败时的 503 行为。
  • 增加不依赖真实 LLM、MCP、地图服务或 API Key 的离线回归测试。

tools_count 在本修复中表示“系统暴露的唯一工具名称数量”,而不是 Agent 与
工具绑定关系的总次数。

验证

cd code/chapter13/helloagents-trip-planner/backend
python3 -m unittest discover -s tests -p '*_test.py' -v

结果:2 个测试通过。

  • 成功路径不再访问不存在的 .agent
  • 四个组件 Agent 的重复工具名称只统计一次。
  • 初始化异常仍转换为 HTTP 503,并保留错误详情。
  • 路由实现和测试文件通过 Python 编译检查。
  • git diff --check 通过。

测试使用标准库替身隔离 FastAPI、LLM 和 MCP 初始化,因此这是路由核心逻辑的
离线回归测试,不代表完整服务端到端验证。

风险

  • 响应字段 statusserviceagent_nametools_count 保持不变。
  • 不修改旅行规划流程、组件 Agent 配置或 MCP 工具调用。
  • agent_name 从无法读取的内部属性改为旅行规划器的实际类型名。

@Ling-ye
Ling-ye marked this pull request as ready for review August 20, 2026 03:51

@linhongyu510 linhongyu510 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

验证通过,修复与当前 MultiAgentTripPlanner 的真实对象结构一致。

我在固定 head 07c6facd944893c69936a73a04e76c4712a3e5c9 上做了以下核查:

  • 运行作者测试 python3 -m unittest discover -s tests -p '*_test.py' -v:2/2 通过。健康 planner 返回 4 个组件 Agent 暴露的 3 个唯一工具名;工厂初始化异常仍保持 HTTP 503。
  • 使用真实 FastAPI 0.141.1 / Starlette 1.3.1 / HTTPX 0.28.1 / Pydantic 2.13.4TestClient 做独立红绿对照,并构造与生产类相同的 attraction_agentweather_agenthotel_agentplanner_agent 四组件对象(刻意不提供不存在的统一 .agent 字段):
    • base 45dd84e626a91997294ac8d4d44f18b29a411c6eGET /trip/health 返回 503,错误为 MultiAgentTripPlanner 没有 agent 属性;
    • 本 PR:同一路由返回 200,响应为 status=healthyagent_name=MultiAgentTripPlannertools_count=3
    • 工厂抛出 RuntimeError("initialization failed") 时,本 PR 仍返回 503,没有放宽失败语义。
  • 检查项目允许范围的最低 hello-agents==0.2.4 与当前最高 0.2.9 wheel:两个版本中 SimpleAgent.list_tools() 都返回工具名称字符串列表,因此跨组件放入 set 去重的契约成立。
  • py_compilegit diff --check 均通过。

验证边界:本次只覆盖健康检查路由、HTTP 状态/响应契约以及真实依赖版本中的工具列表接口;未初始化真实 LLM,也未连接 MCP 或地图服务,因此不把结果表述为完整旅行规划 E2E。

AI 辅助披露:使用 AI 辅助梳理差异与生成验证语料;上述命令、依赖版本、输出和 Review 结论均由我逐项复核。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants