#!/usr/bin/env python3 # -*- coding: utf-8 -*- """专题十六 · 步骤 1:复现并定位「打开 Agent 配置页 Internal Server Error」。 对照三项: 1) 对话仍能调 OpenAPI 工具(streaming 200) 2) 配置页接口 builtin//credential/info 是否 500 3) API 日志是否 PluginNotFoundError """ from __future__ import annotations import sys import _bootstrap # noqa: F401 import _config as C from dify_api import Dify, pp def main() -> int: d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD) try: d.login() uuid = C.SERVER_STATUS_PROVIDER_ID print("provider UUID", uuid) r_api = d.get( "/workspaces/current/tool-provider/api/get?provider=%s" % C.SERVER_STATUS_PROVIDER ) pp("1) OpenAPI provider 详情", r_api, limit=400) r_bad = d.get( "/workspaces/current/tool-provider/builtin/%s/credential/info" % uuid ) pp("2) 配置页误打的 builtin credential/info", r_bad, limit=500) r_ok = d.get("/workspaces/current/tool-provider/builtin/time/credential/info") pp("3) 真正的 builtin(time)对照", r_ok, limit=300) r_chat = d.post( "/agent/%s/chat-messages" % C.HOMEWORK1_AGENT_ID, body={ "inputs": {}, "query": C.HOMEWORK1_PROBE_QUERY, "response_mode": "streaming", "files": [], "conversation_id": "", }, extra="-m 120 --max-time 120", t=150, ) text = r_chat.get("text") or "" print("\n4) 对话 HTTP", r_chat.get("code"), "getServerStatus" in text, "45%" in text) out, _ = d.sh( "docker logs %s --tail 40 2>&1 | grep -iE 'PluginNotFound|credential/info' | tail -10" % C.DIFY_API_CTR ) print("\n5) api 日志片段:\n", out or "(无匹配,可能已打补丁)") code = r_bad.get("code") if code == "500": print("\n[定位完成] 配置页接口 500 = 本专题场景。下一步跑作业1_06。") return 0 if code == "200": print("\n[已修复] credential/info 已是 200,配置页应不再红条。请 Ctrl+F5。") return 0 print("\n[异常] 预期 500 或 200,实际 HTTP", code) return 1 finally: d.close() if __name__ == "__main__": sys.exit(main())