agent_tool.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. """
  2. AgentTool: 将 SimpleAgent 包装为 Tool,实现直接调用
  3. 这是比 A2A 协议更简单的多智能体模式
  4. """
  5. from hello_agents import SimpleAgent
  6. from hello_agents.tools import Tool
  7. from typing import Dict, Any
  8. class AgentTool(Tool):
  9. """将一个 SimpleAgent 包装为可被其他 Agent 调用的工具"""
  10. def __init__(self, agent: SimpleAgent, name: str, description: str):
  11. """
  12. Args:
  13. agent: 要包装的 SimpleAgent 实例
  14. name: 工具名称
  15. description: 工具描述
  16. """
  17. self.agent = agent
  18. self._name = name
  19. self._description = description
  20. @property
  21. def name(self) -> str:
  22. return self._name
  23. @property
  24. def description(self) -> str:
  25. return self._description
  26. def get_parameters(self) -> list:
  27. """定义工具参数"""
  28. from hello_agents.tools.base import ToolParameter
  29. return [
  30. ToolParameter(
  31. name="query",
  32. type="string",
  33. description="发送给智能体的查询或指令",
  34. required=True
  35. )
  36. ]
  37. def run(self, parameters: Dict[str, Any]) -> str:
  38. """执行工具 - 直接调用被包装的 agent"""
  39. query = parameters.get('query', '')
  40. if not query:
  41. return "错误:需要提供 query 参数"
  42. try:
  43. # 直接调用 agent 的 run 方法
  44. return self.agent.run(query)
  45. except Exception as e:
  46. return f"调用 {self.name} 时出错: {str(e)}"