diff --git a/langchain/experimental/plan_and_execute/agent_executor.py b/langchain/experimental/plan_and_execute/agent_executor.py index e268ca34751..dccf9eb2008 100644 --- a/langchain/experimental/plan_and_execute/agent_executor.py +++ b/langchain/experimental/plan_and_execute/agent_executor.py @@ -39,7 +39,11 @@ class PlanAndExecute(Chain): if run_manager: run_manager.on_text(str(plan), verbose=self.verbose) for step in plan.steps: - _new_inputs = {"previous_steps": self.step_container, "current_step": step} + _new_inputs = { + "previous_steps": self.step_container, + "current_step": step, + "objective": inputs[self.input_key], + } new_inputs = {**_new_inputs, **inputs} response = self.executor.step( new_inputs, diff --git a/langchain/experimental/plan_and_execute/executors/agent_executor.py b/langchain/experimental/plan_and_execute/executors/agent_executor.py index d3c21bec9d4..201a25dfa6f 100644 --- a/langchain/experimental/plan_and_execute/executors/agent_executor.py +++ b/langchain/experimental/plan_and_execute/executors/agent_executor.py @@ -12,15 +12,29 @@ Current objective: {current_step} {agent_scratchpad}""" +TASK_PREFIX = """{objective} + +""" + def load_agent_executor( - llm: BaseLanguageModel, tools: List[BaseTool], verbose: bool = False + llm: BaseLanguageModel, + tools: List[BaseTool], + verbose: bool = False, + include_task_in_prompt: bool = False, ) -> ChainExecutor: + input_variables = ["previous_steps", "current_step", "agent_scratchpad"] + template = HUMAN_MESSAGE_TEMPLATE + + if include_task_in_prompt: + input_variables.append("objective") + template = TASK_PREFIX + template + agent = StructuredChatAgent.from_llm_and_tools( llm, tools, - human_message_template=HUMAN_MESSAGE_TEMPLATE, - input_variables=["previous_steps", "current_step", "agent_scratchpad"], + human_message_template=template, + input_variables=input_variables, ) agent_executor = AgentExecutor.from_agent_and_tools( agent=agent, tools=tools, verbose=verbose