#!/usr/bin/env python3 # -*- coding: utf-8 -*- """作业 1 · 步骤 5:对话验收 —— 问 gpu-server-01 状态,应触发工具并返回指标。""" 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, "HOMEWORK1_AGENT_ID", "") or "" if aid: return aid sql = ( "SELECT a.id FROM apps ap JOIN agents a ON a.app_id=ap.id " "WHERE ap.name='%s' ORDER BY ap.created_at DESC LIMIT 1;" % C.HOMEWORK1_APP_NAME.replace("'", "''") ) out, err = d.sh( 'docker exec %s psql -U postgres -d dify -t -A -c "%s"' % (C.PG_CONTAINER, sql) ) aid = (out or "").strip() if not aid: raise RuntimeError("找不到 Agent: %s %s" % (out, err)) return aid 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.HOMEWORK1_PROBE_QUERY, "response_mode": "streaming", "files": [], "conversation_id": "", }, extra="-m 420 --max-time 420", t=450, ) pp("chat", r, limit=4000) text = r.get("text") or "" ok_markers = ("45%", "62%", "78%", "18.2", "gpu-server-01", "getServerStatus") hits = [m for m in ok_markers if m in text] print("\n匹配到的验收关键词:", hits) if r.get("code") not in ("200",) or len(hits) < 2: print("\n[FAIL] 未看到工具返回的模拟指标,请检查工具挂载与 SSRF 出网。") return 1 print("\n[PASS] Agent 已调用工具并返回状态信息。") return 0 finally: d.close() if __name__ == "__main__": sys.exit(main())