94 lines
2.5 KiB
Python
94 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Agent Factory
|
|
|
|
Factory functions for creating and configuring agents
|
|
with standardized toolkits.
|
|
"""
|
|
|
|
import os
|
|
from typing import Optional
|
|
from agentscope.agent import ReActAgent
|
|
from agentscope.tool import Toolkit
|
|
from agentscope.formatter import FormatterBase, OpenAIChatFormatter
|
|
from agentscope.model import ChatModelBase, OpenAIChatModel
|
|
from agentscope.memory import InMemoryMemory, MemoryBase
|
|
|
|
|
|
# Default configurations
|
|
DEFAULT_MODEL_CONFIG = {
|
|
"model_name": "gpt-4o",
|
|
"stream": False,
|
|
}
|
|
|
|
|
|
def get_default_model() -> OpenAIChatModel:
|
|
"""Create default OpenAI model instance."""
|
|
api_key = os.environ.get("OPENAI_API_KEY")
|
|
if not api_key:
|
|
raise ValueError("OPENAI_API_KEY environment variable is required")
|
|
|
|
return OpenAIChatModel(api_key=api_key, **DEFAULT_MODEL_CONFIG)
|
|
|
|
|
|
def create_agent(
|
|
name: str,
|
|
sys_prompt: str,
|
|
toolkit: Toolkit,
|
|
description: Optional[str] = None,
|
|
model: Optional[ChatModelBase] = None,
|
|
formatter: Optional[FormatterBase] = None,
|
|
memory: Optional[MemoryBase] = None,
|
|
max_iters: int = 10,
|
|
parallel_tool_calls: bool = False,
|
|
**kwargs,
|
|
) -> ReActAgent:
|
|
"""
|
|
Create a ReActAgent with standardized configuration.
|
|
|
|
Args:
|
|
name: Agent identifier
|
|
sys_prompt: System prompt template (supports {name} placeholder)
|
|
toolkit: Toolkit instance
|
|
model: Language model (defaults to GPT-4o)
|
|
formatter: Message formatter (defaults to OpenAIChatFormatter)
|
|
memory: Memory instance (defaults to InMemoryMemory)
|
|
max_iters: Maximum reasoning iterations
|
|
parallel_tool_calls: Enable parallel tool execution
|
|
**kwargs: Additional ReActAgent arguments
|
|
|
|
Returns:
|
|
Configured ReActAgent instance
|
|
|
|
Example:
|
|
>>> agent = create_agent(
|
|
... name="sql_expert",
|
|
... sys_prompt="You are {name}, a SQL database expert",
|
|
... tools=sql_tools
|
|
... )
|
|
"""
|
|
# Set defaults
|
|
if model is None:
|
|
model = get_default_model()
|
|
if formatter is None:
|
|
formatter = OpenAIChatFormatter()
|
|
if memory is None:
|
|
memory = InMemoryMemory()
|
|
|
|
# Create agent
|
|
agent = ReActAgent(
|
|
name=name,
|
|
sys_prompt=sys_prompt.format(name=name),
|
|
model=model,
|
|
formatter=formatter,
|
|
toolkit=toolkit,
|
|
memory=memory,
|
|
max_iters=max_iters,
|
|
parallel_tool_calls=parallel_tool_calls,
|
|
**kwargs,
|
|
)
|
|
|
|
agent.__doc__ = description
|
|
|
|
return agent
|