Source code for langchain.agents.conversational.base
"""An agent designed to hold a conversation in addition to using tools."""from__future__importannotationsfromtypingimportAny,List,Optional,Sequencefromlangchain_core._apiimportdeprecatedfromlangchain_core.callbacksimportBaseCallbackManagerfromlangchain_core.language_modelsimportBaseLanguageModelfromlangchain_core.promptsimportPromptTemplatefromlangchain_core.toolsimportBaseToolfrompydanticimportFieldfromlangchain._api.deprecationimportAGENT_DEPRECATION_WARNINGfromlangchain.agents.agentimportAgent,AgentOutputParserfromlangchain.agents.agent_typesimportAgentTypefromlangchain.agents.conversational.output_parserimportConvoOutputParserfromlangchain.agents.conversational.promptimportFORMAT_INSTRUCTIONS,PREFIX,SUFFIXfromlangchain.agents.utilsimportvalidate_tools_single_inputfromlangchain.chainsimportLLMChain
[docs]@deprecated("0.1.0",message=AGENT_DEPRECATION_WARNING,removal="1.0",)classConversationalAgent(Agent):"""An agent that holds a conversation in addition to using tools."""ai_prefix:str="AI""""Prefix to use before AI output."""output_parser:AgentOutputParser=Field(default_factory=ConvoOutputParser)"""Output parser for the agent."""@classmethoddef_get_default_output_parser(cls,ai_prefix:str="AI",**kwargs:Any)->AgentOutputParser:returnConvoOutputParser(ai_prefix=ai_prefix)@propertydef_agent_type(self)->str:"""Return Identifier of agent type."""returnAgentType.CONVERSATIONAL_REACT_DESCRIPTION@propertydefobservation_prefix(self)->str:"""Prefix to append the observation with. Returns: "Observation: " """return"Observation: "@propertydefllm_prefix(self)->str:"""Prefix to append the llm call with. Returns: "Thought: " """return"Thought:"
[docs]@classmethoddefcreate_prompt(cls,tools:Sequence[BaseTool],prefix:str=PREFIX,suffix:str=SUFFIX,format_instructions:str=FORMAT_INSTRUCTIONS,ai_prefix:str="AI",human_prefix:str="Human",input_variables:Optional[List[str]]=None,)->PromptTemplate:"""Create prompt in the style of the zero-shot agent. Args: tools: List of tools the agent will have access to, used to format the prompt. prefix: String to put before the list of tools. Defaults to PREFIX. suffix: String to put after the list of tools. Defaults to SUFFIX. format_instructions: Instructions on how to use the tools. Defaults to FORMAT_INSTRUCTIONS ai_prefix: String to use before AI output. Defaults to "AI". human_prefix: String to use before human output. Defaults to "Human". input_variables: List of input variables the final prompt will expect. Defaults to ["input", "chat_history", "agent_scratchpad"]. Returns: A PromptTemplate with the template assembled from the pieces here. """tool_strings="\n".join([f"> {tool.name}: {tool.description}"fortoolintools])tool_names=", ".join([tool.namefortoolintools])format_instructions=format_instructions.format(tool_names=tool_names,ai_prefix=ai_prefix,human_prefix=human_prefix)template="\n\n".join([prefix,tool_strings,format_instructions,suffix])ifinput_variablesisNone:input_variables=["input","chat_history","agent_scratchpad"]returnPromptTemplate(template=template,input_variables=input_variables)
[docs]@classmethoddeffrom_llm_and_tools(cls,llm:BaseLanguageModel,tools:Sequence[BaseTool],callback_manager:Optional[BaseCallbackManager]=None,output_parser:Optional[AgentOutputParser]=None,prefix:str=PREFIX,suffix:str=SUFFIX,format_instructions:str=FORMAT_INSTRUCTIONS,ai_prefix:str="AI",human_prefix:str="Human",input_variables:Optional[List[str]]=None,**kwargs:Any,)->Agent:"""Construct an agent from an LLM and tools. Args: llm: The language model to use. tools: A list of tools to use. callback_manager: The callback manager to use. Default is None. output_parser: The output parser to use. Default is None. prefix: The prefix to use in the prompt. Default is PREFIX. suffix: The suffix to use in the prompt. Default is SUFFIX. format_instructions: The format instructions to use. Default is FORMAT_INSTRUCTIONS. ai_prefix: The prefix to use before AI output. Default is "AI". human_prefix: The prefix to use before human output. Default is "Human". input_variables: The input variables to use. Default is None. **kwargs: Any additional keyword arguments to pass to the agent. Returns: An agent. """cls._validate_tools(tools)prompt=cls.create_prompt(tools,ai_prefix=ai_prefix,human_prefix=human_prefix,prefix=prefix,suffix=suffix,format_instructions=format_instructions,input_variables=input_variables,)llm_chain=LLMChain(# type: ignore[misc]llm=llm,prompt=prompt,callback_manager=callback_manager,)tool_names=[tool.namefortoolintools]_output_parser=output_parserorcls._get_default_output_parser(ai_prefix=ai_prefix)returncls(llm_chain=llm_chain,allowed_tools=tool_names,ai_prefix=ai_prefix,output_parser=_output_parser,**kwargs,)