|
|
|
"""Load agent.""" |
|
from typing import Any, List, Optional |
|
|
|
from langchain.agents.agent import AgentExecutor |
|
from langchain.agents.loading import AGENT_TO_CLASS, load_agent |
|
from langchain.agents.tools import Tool |
|
from langchain.callbacks.base import BaseCallbackManager |
|
from langchain.llms.base import BaseLLM |
|
|
|
|
|
def initialize_agent( |
|
tools: List[Tool], |
|
llm: BaseLLM, |
|
agent: Optional[str] = None, |
|
callback_manager: Optional[BaseCallbackManager] = None, |
|
agent_path: Optional[str] = None, |
|
prefix: Optional[str] = None, |
|
suffix: Optional[str]= None, |
|
ai_prefix: Optional[str] = None, |
|
human_prefix: Optional[str] = None, |
|
**kwargs: Any, |
|
) -> AgentExecutor: |
|
"""Load agent given tools and LLM. |
|
|
|
Args: |
|
tools: List of tools this agent has access to. |
|
llm: Language model to use as the agent. |
|
agent: The agent to use. Valid options are: |
|
`zero-shot-react-description` |
|
`react-docstore` |
|
`self-ask-with-search` |
|
`conversational-react-description` |
|
If None and agent_path is also None, will default to |
|
`zero-shot-react-description`. |
|
callback_manager: CallbackManager to use. Global callback manager is used if |
|
not provided. Defaults to None. |
|
agent_path: Path to serialized agent to use. |
|
**kwargs: Additional key word arguments to pass to the agent. |
|
|
|
Returns: |
|
An agent. |
|
""" |
|
if agent is None and agent_path is None: |
|
agent = "zero-shot-react-description" |
|
if agent is not None and agent_path is not None: |
|
raise ValueError( |
|
"Both `agent` and `agent_path` are specified, " |
|
"but at most only one should be." |
|
) |
|
if agent is not None: |
|
if agent not in AGENT_TO_CLASS: |
|
raise ValueError( |
|
f"Got unknown agent type: {agent}. " |
|
f"Valid types are: {AGENT_TO_CLASS.keys()}." |
|
) |
|
agent_cls = AGENT_TO_CLASS[agent] |
|
agent_obj = agent_cls.from_llm_and_tools( |
|
llm, tools, prefix=prefix, suffix=suffix, ai_prefix=ai_prefix, human_prefix=human_prefix, callback_manager=callback_manager |
|
) |
|
elif agent_path is not None: |
|
agent_obj = load_agent( |
|
agent_path, llm=llm, tools=tools, callback_manager=callback_manager |
|
) |
|
else: |
|
raise ValueError( |
|
"Somehow both `agent` and `agent_path` are None, " |
|
"this should never happen." |
|
) |
|
return AgentExecutor.from_agent_and_tools( |
|
agent=agent_obj, |
|
tools=tools, |
|
callback_manager=callback_manager, |
|
**kwargs, |
|
) |