Source code for autogen_agentchat.tools._agent
from autogen_core import Component, ComponentModel
from pydantic import BaseModel
from typing_extensions import Self
from autogen_agentchat.agents import BaseChatAgent
from ._task_runner_tool import TaskRunnerTool
class AgentToolConfig(BaseModel):
"""Configuration for the AgentTool."""
agent: ComponentModel
"""The agent to be used for running the task."""
return_value_as_last_message: bool = False
"""Whether to return the value as the last message of the task result."""
[docs]
class AgentTool(TaskRunnerTool, Component[AgentToolConfig]):
"""Tool that can be used to run a task using an agent.
The tool returns the result of the task execution as a :class:`~autogen_agentchat.base.TaskResult` object.
Args:
agent (BaseChatAgent): The agent to be used for running the task.
return_value_as_last_message (bool): Whether to use the last message content of the task result
as the return value of the tool in :meth:`~autogen_agentchat.tools.TaskRunnerTool.return_value_as_string`.
If set to True, the last message content will be returned as a string.
If set to False, the tool will return all messages in the task result as a string concatenated together,
with each message prefixed by its source (e.g., "writer: ...", "assistant: ...").
Example:
.. code-block:: python
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.tools import AgentTool
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
async def main() -> None:
model_client = OpenAIChatCompletionClient(model="gpt-4")
writer = AssistantAgent(
name="writer",
description="A writer agent for generating text.",
model_client=model_client,
system_message="Write well.",
)
writer_tool = AgentTool(agent=writer)
assistant = AssistantAgent(
name="assistant",
model_client=model_client,
tools=[writer_tool],
system_message="You are a helpful assistant.",
)
await Console(assistant.run_stream(task="Write a poem about the sea."))
asyncio.run(main())
"""
component_config_schema = AgentToolConfig
component_provider_override = "autogen_agentchat.tools.AgentTool"
def __init__(self, agent: BaseChatAgent, return_value_as_last_message: bool = False) -> None:
self._agent = agent
super().__init__(
agent, agent.name, agent.description, return_value_as_last_message=return_value_as_last_message
)
[docs]
def _to_config(self) -> AgentToolConfig:
return AgentToolConfig(
agent=self._agent.dump_component(),
return_value_as_last_message=self._return_value_as_last_message,
)
[docs]
@classmethod
def _from_config(cls, config: AgentToolConfig) -> Self:
return cls(BaseChatAgent.load_component(config.agent), config.return_value_as_last_message)