#!/usr/bin/env python3 # -*- coding: utf-8 -*- """作业 1 · 步骤 4:验收 Agent 工具调用(新开对话)。""" from __future__ import annotations import json import sys import _bootstrap # noqa: F401 import _config as C from dify_api import Dify, pp def agent_id_for_homework(d: Dify) -> str: name = C.HOMEWORK1_APP_NAME.replace("'", "''") sql = ( "SELECT a.id FROM apps ap JOIN agents a ON a.app_id = ap.id " "WHERE ap.name = '%s' LIMIT 1;" % name ) out, err = d.sh( 'docker exec %s psql -U postgres -d dify -t -A -c "%s"' % (C.PG_CONTAINER, sql) ) aid = (out or err).strip() if not aid: raise RuntimeError("未找到 %s,请先运行 作业1_03" % C.HOMEWORK1_APP_NAME) return aid def main() -> int: d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD) try: d.login() agent_id = agent_id_for_homework(d) print("agent_id:", agent_id) r = d.post( "/agent/%s/chat-messages" % agent_id, body={ "inputs": {}, "query": C.HOMEWORK1_PROBE_QUERY, "response_mode": "blocking", "files": [], "conversation_id": "", }, extra="-m 180 --max-time 180", t=200, ) pp("chat", r, limit=4000) text = r.get("text") or "" ok = r.get("code") == "200" and ( "45%" in text or "gpu-server-01" in text or "78%" in text ) if ok: print("\n[OK] 验收通过:Agent 调用了工具并返回格式化状态") return 0 print("\n[WARN] 未在回复中看到预期指标,请检查工具注册与 vLLM tool-call-parser") return 1 finally: d.close() if __name__ == "__main__": sys.exit(main())