mirror of
https://github.com/Mintplex-Labs/langchain-python.git
synced 2026-07-21 00:35:23 -04:00
a83a371069
Updating documentation in initialize_agent. One thing that could benefit from further clarification is the responsibility breakdown by between an AgentExecutor vs. an Agent. The documentation for an AgentExecutor does not clarify that. From the class attributes, it appears that executor has access to the tools, while the agent is only aware of the tool names. Anyway, additional clarification would be beneficial on the AgentExecutor class.
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
"""Load agent."""
|
|
from typing import Any, Optional, Sequence
|
|
|
|
from langchain.agents.agent import AgentExecutor
|
|
from langchain.agents.loading import AGENT_TO_CLASS, load_agent
|
|
from langchain.callbacks.base import BaseCallbackManager
|
|
from langchain.llms.base import BaseLLM
|
|
from langchain.tools.base import BaseTool
|
|
|
|
|
|
def initialize_agent(
|
|
tools: Sequence[BaseTool],
|
|
llm: BaseLLM,
|
|
agent: Optional[str] = None,
|
|
callback_manager: Optional[BaseCallbackManager] = None,
|
|
agent_path: Optional[str] = None,
|
|
agent_kwargs: Optional[dict] = None,
|
|
**kwargs: Any,
|
|
) -> AgentExecutor:
|
|
"""Load an agent executor given tools and LLM.
|
|
|
|
Args:
|
|
tools: List of tools this agent has access to.
|
|
llm: Language model to use as the agent.
|
|
agent: A string that specified the agent type 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.
|
|
agent_kwargs: Additional key word arguments to pass to the underlying agent
|
|
**kwargs: Additional key word arguments passed to the agent executor
|
|
|
|
Returns:
|
|
An agent executor
|
|
"""
|
|
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_kwargs = agent_kwargs or {}
|
|
agent_obj = agent_cls.from_llm_and_tools(
|
|
llm, tools, callback_manager=callback_manager, **agent_kwargs
|
|
)
|
|
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,
|
|
)
|