mirror of
https://github.com/Mintplex-Labs/langchain-python.git
synced 2026-07-21 00:35:23 -04:00
7b5e160d28
Follow-up of @hinthornw's PR: - Migrate the Tool abstraction to a separate file (`BaseTool`). - `Tool` implementation of `BaseTool` takes in function and coroutine to more easily maintain backwards compatibility - Add a Toolkit abstraction that can own the generation of tools around a shared concept or state --------- Co-authored-by: William FH <13333726+hinthornw@users.noreply.github.com> Co-authored-by: Harrison Chase <hw.chase.17@gmail.com> Co-authored-by: Francisco Ingham <fpingham@gmail.com> Co-authored-by: Dhruv Anand <105786647+dhruv-anand-aintech@users.noreply.github.com> Co-authored-by: cragwolfe <cragcw@gmail.com> Co-authored-by: Anton Troynikov <atroyn@users.noreply.github.com> Co-authored-by: Oliver Klingefjord <oliver@klingefjord.com> Co-authored-by: William Fu-Hinthorn <whinthorn@Williams-MBP-3.attlocal.net> Co-authored-by: Bruno Bornsztein <bruno.bornsztein@gmail.com>
73 lines
2.5 KiB
Python
73 lines
2.5 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 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_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,
|
|
)
|