sub_agent_toolkit.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import json
  2. import textwrap
  3. import types
  4. from pqai_agent.data_models.agent_configuration import AgentConfiguration
  5. from pqai_agent.toolkit import get_tools
  6. from pqai_agent.toolkit.base import BaseToolkit
  7. from pqai_agent.toolkit.function_tool import FunctionTool
  8. from pqai_agent.agents.simple_chat_agent import SimpleOpenAICompatibleChatAgent
  9. class SubAgentToolkit(BaseToolkit):
  10. @staticmethod
  11. def create_tool_from_agent(agent_config: AgentConfiguration):
  12. def agent_execution_func(user_input: str) -> str:
  13. extra_params = json.loads(agent_config.extra_params)
  14. agent = SimpleOpenAICompatibleChatAgent(
  15. model=agent_config.execution_model,
  16. system_prompt=agent_config.system_prompt,
  17. tools=get_tools(json.loads(agent_config.tools)),
  18. generate_cfg=extra_params.get('generate_cfg', {}),
  19. max_run_step=extra_params.get('max_run_step', 20)
  20. )
  21. return agent.run(user_input)
  22. func_doc = f"""
  23. {agent_config.description}
  24. Args:
  25. user_input (str): 用户输入
  26. Returns:
  27. str: Agent执行结果
  28. """
  29. func_doc = textwrap.dedent(func_doc).strip()
  30. dynamic_function = types.FunctionType(
  31. agent_execution_func.__code__,
  32. globals(),
  33. name=agent_config.name,
  34. argdefs=agent_execution_func.__defaults__,
  35. closure=agent_execution_func.__closure__
  36. )
  37. dynamic_function.__doc__ = func_doc
  38. return FunctionTool(dynamic_function)