#!/usr/bin/env python3 # -*- coding: utf-8 -*- """作业 5 · 步骤 5:问「检查一下 AI 平台的健康状态」,应调用三工具并出报告。""" from __future__ import annotations import sys import _bootstrap # noqa: F401 import _config as C from dify_api import Dify, pp def resolve_agent_id(d: Dify) -> str: aid = getattr(C, "HOMEWORK5_AGENT_ID", "") or "" if aid: return aid r_list = d.get("/agent?page=1&limit=50") for item in (r_list.get("json") or {}).get("data") or []: if item.get("name") == C.HOMEWORK5_APP_NAME: return item.get("agent_id") or item.get("id") or "" raise RuntimeError("找不到 Agent: %s" % C.HOMEWORK5_APP_NAME) def main() -> int: d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD) try: d.login() agent_id = resolve_agent_id(d) print("agent_id", agent_id) r = d.post( "/agent/%s/chat-messages" % agent_id, body={ "inputs": {}, "query": C.HOMEWORK5_PROBE_QUERY, "response_mode": "streaming", "files": [], "conversation_id": "", }, extra="-m 480 --max-time 480", t=510, ) pp("chat", r, limit=8000) text = r.get("text") or "" need = ("get_vllm_status", "get_gpu_info", "get_request_queue") hits = [m for m in need if m in text] extra = [m for m in ("H20", "vllm-qwen", "waiting", "running") if m in text] print("\n匹配到的工具名:", hits) print("匹配到的指标词:", extra) if r.get("code") not in ("200",) or len(hits) < 3: print("\n[FAIL] 未看到三个工具都被调用。") return 1 if len(extra) < 2: print("\n[FAIL] 工具调用了,但回复里缺少 GPU/队列关键信息。") return 1 print("\n[PASS] Agent 已调用三工具并输出健康报告。") return 0 finally: d.close() if __name__ == "__main__": sys.exit(main())