"""向量存储代理。"""
from typing import Any, Dict, Optional
from langchain_core.callbacks.base import BaseCallbackManager
from langchain_core.language_models import BaseLanguageModel
from langchain.agents.agent import AgentExecutor
from langchain.agents.agent_toolkits.vectorstore.prompt import PREFIX, ROUTER_PREFIX
from langchain.agents.agent_toolkits.vectorstore.toolkit import (
VectorStoreRouterToolkit,
VectorStoreToolkit,
)
from langchain.agents.mrkl.base import ZeroShotAgent
from langchain.chains.llm import LLMChain
[docs]def create_vectorstore_agent(
llm: BaseLanguageModel,
toolkit: VectorStoreToolkit,
callback_manager: Optional[BaseCallbackManager] = None,
prefix: str = PREFIX,
verbose: bool = False,
agent_executor_kwargs: Optional[Dict[str, Any]] = None,
**kwargs: Any,
) -> AgentExecutor:
"""从LLM和工具构建一个VectorStore代理。
参数:
llm (BaseLanguageModel): 将被代理使用的LLM
toolkit (VectorStoreToolkit): 代理的工具集
callback_manager (Optional[BaseCallbackManager], optional): 用于处理回调的对象 [默认为None]
prefix (str, optional): 代理的前缀提示。如果未提供,则使用默认的PREFIX。
verbose (bool, optional): 如果您想查看scratchpad的内容。[默认为False]
agent_executor_kwargs (Optional[Dict[str, Any]], optional): 如果有任何其他参数要发送给代理。[默认为None]
**kwargs: 要传递给ZeroShotAgent的其他命名参数。
返回:
AgentExecutor: 返回一个可调用的AgentExecutor对象。您可以调用它或使用run方法与查询一起获取响应。
""" # noqa: E501
tools = toolkit.get_tools()
prompt = ZeroShotAgent.create_prompt(tools, prefix=prefix)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
callback_manager=callback_manager,
)
tool_names = [tool.name for tool in tools]
agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names, **kwargs)
return AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools,
callback_manager=callback_manager,
verbose=verbose,
**(agent_executor_kwargs or {}),
)
[docs]def create_vectorstore_router_agent(
llm: BaseLanguageModel,
toolkit: VectorStoreRouterToolkit,
callback_manager: Optional[BaseCallbackManager] = None,
prefix: str = ROUTER_PREFIX,
verbose: bool = False,
agent_executor_kwargs: Optional[Dict[str, Any]] = None,
**kwargs: Any,
) -> AgentExecutor:
"""从LLM和工具构建一个VectorStore路由代理。
参数:
llm (BaseLanguageModel): 将被代理使用的LLM
toolkit (VectorStoreRouterToolkit): 代理的工具集,具有与多个向量存储进行路由的能力
callback_manager (Optional[BaseCallbackManager], optional): 处理回调的对象 [默认为None]
prefix (str, optional): 路由代理的前缀提示。如果未提供,则使用默认的ROUTER_PREFIX。
verbose (bool, optional): 如果您想查看scratchpad的内容。[默认为False]
agent_executor_kwargs (Optional[Dict[str, Any]], optional): 如果有任何其他参数要发送给代理。[默认为None]
**kwargs: 传递给ZeroShotAgent的其他命名参数。
返回:
AgentExecutor: 返回一个可调用的AgentExecutor对象。您可以调用它或使用run方法与查询一起获取响应。
""" # noqa: E501
tools = toolkit.get_tools()
prompt = ZeroShotAgent.create_prompt(tools, prefix=prefix)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
callback_manager=callback_manager,
)
tool_names = [tool.name for tool in tools]
agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names, **kwargs)
return AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools,
callback_manager=callback_manager,
verbose=verbose,
**(agent_executor_kwargs or {}),
)