test_knowhub_modify.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. """批量给 KnowHub 工具表添加 toolhub_items 字段
  2. 规则:
  3. - 已接入的工具:填入对应的 Tool Agent 工具 ID 和名称
  4. - 未接入的工具:只加空的 toolhub_items 字段
  5. """
  6. import httpx
  7. import os
  8. import json
  9. KNOWHUB_API = os.getenv("KNOWHUB_API", "http://43.106.118.91:9999")
  10. TIMEOUT = 60.0
  11. # Tool Agent registry 中已接入的工具 → KnowHub 工具表的映射
  12. # key: KnowHub tool_id, value: toolhub_items 列表
  13. TOOLHUB_MAPPING = {
  14. "tools/image_gen/comfyui": [
  15. {"launch_comfy_env": "启动云端 ComfyUI Docker 环境,返回 server_id 和 comfy_url"},
  16. {"runcomfy_workflow_executor": "在已就绪的 RunComfy 机器上提交 ComfyUI 工作流,上传输入文件,监听执行状态,下载结果图片"},
  17. {"runcomfy_stop_env": "停止并删除 RunComfy 机器实例,释放资源"},
  18. ],
  19. }
  20. def get_all_tools() -> list[dict]:
  21. """获取 KnowHub 所有工具"""
  22. resp = httpx.get(f"{KNOWHUB_API}/api/resource", params={"limit": 1000}, timeout=TIMEOUT)
  23. resp.raise_for_status()
  24. data = resp.json()
  25. results = data.get("results", [])
  26. return [r for r in results if isinstance(r, dict) and r.get("id", "").startswith("tools/")]
  27. def patch_tool(tool_id: str, metadata: dict) -> bool:
  28. """PATCH 更新工具 metadata"""
  29. resp = httpx.patch(
  30. f"{KNOWHUB_API}/api/resource/{tool_id}",
  31. json={"metadata": metadata},
  32. timeout=TIMEOUT
  33. )
  34. resp.raise_for_status()
  35. return True
  36. def main():
  37. print(f"KnowHub API: {KNOWHUB_API}")
  38. print("=" * 60)
  39. tools = get_all_tools()
  40. print(f"共 {len(tools)} 个工具\n")
  41. updated = 0
  42. skipped = 0
  43. failed = 0
  44. for tool in tools:
  45. tool_id = tool["id"]
  46. metadata = tool.get("metadata", {})
  47. # 已经有 toolhub_items 且非空的跳过
  48. if metadata.get("toolhub_items"):
  49. print(f" SKIP {tool_id} (已有 toolhub_items)")
  50. skipped += 1
  51. continue
  52. # 查映射表,有则填入,无则空列表
  53. items = TOOLHUB_MAPPING.get(tool_id, [])
  54. metadata["toolhub_items"] = items
  55. try:
  56. patch_tool(tool_id, metadata)
  57. tag = f"{len(items)} items" if items else "empty"
  58. print(f" OK {tool_id} ({tag})")
  59. updated += 1
  60. except Exception as e:
  61. print(f" FAIL {tool_id}: {e}")
  62. failed += 1
  63. print(f"\n{'=' * 60}")
  64. print(f"完成: 更新 {updated}, 跳过 {skipped}, 失败 {failed}")
  65. if __name__ == "__main__":
  66. main()