resource.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """
  2. 资源查询工具 - KnowHub 工具表 API 封装
  3. """
  4. import os
  5. import httpx
  6. from typing import List, Dict, Optional, Any
  7. from agent.tools import tool, ToolResult
  8. KNOWHUB_API = os.getenv("KNOWHUB_API", "http://43.106.118.91:9999").rstrip("/")
  9. @tool(
  10. description="列出知识库中的所有工具资源",
  11. groups=["resource"],
  12. )
  13. def resource_list_tools(
  14. category: Optional[str] = None,
  15. ) -> ToolResult:
  16. """列出所有工具资源,可选按分类过滤
  17. Args:
  18. category: 可选的分类过滤,如 "plugin", "model" 等
  19. """
  20. try:
  21. resp = httpx.get(f"{KNOWHUB_API}/api/resource", params={"limit": 1000}, timeout=60.0)
  22. resp.raise_for_status()
  23. data = resp.json()
  24. # 处理返回格式
  25. if isinstance(data, dict):
  26. data = data.get("results") or data.get("data") or []
  27. # 过滤工具
  28. tools = [r for r in data if isinstance(r, dict) and r.get("id", "").startswith("tools/")]
  29. # 按分类过滤
  30. if category:
  31. tools = [t for t in tools if t.get("metadata", {}).get("category") == category]
  32. result = {
  33. "total": len(tools),
  34. "tools": [{"id": t["id"], "title": t.get("title", ""), "category": t.get("metadata", {}).get("category")} for t in tools]
  35. }
  36. return ToolResult(title="工具列表", output=str(result))
  37. except Exception as e:
  38. return ToolResult(title="查询失败", output="", error=str(e))
  39. @tool(
  40. description="获取指定工具的详细信息",
  41. groups=["resource"],
  42. )
  43. def resource_get_tool(tool_id: str) -> ToolResult:
  44. """获取工具详情
  45. Args:
  46. tool_id: 工具ID,如 "tools/image_gen/comfyui"
  47. """
  48. try:
  49. resp = httpx.get(f"{KNOWHUB_API}/api/resource/{tool_id}", timeout=10.0)
  50. resp.raise_for_status()
  51. return ToolResult(title=f"工具详情: {tool_id}", output=str(resp.json()))
  52. except Exception as e:
  53. return ToolResult(title="获取工具详情失败", output="", error=str(e))