From 6a861b0ad969c1f5cdea38e74925c83f1bc157a0 Mon Sep 17 00:00:00 2001 From: William FH <13333726+hinthornw@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:52:23 -0700 Subject: [PATCH] [Doc] Name variable langgraph_agent_executor (#26799) --- docs/docs/how_to/migrate_agent.ipynb | 88 ++++++++++++++++++---------- 1 file changed, 56 insertions(+), 32 deletions(-) diff --git a/docs/docs/how_to/migrate_agent.ipynb b/docs/docs/how_to/migrate_agent.ipynb index b08140ba179..49d374266b8 100644 --- a/docs/docs/how_to/migrate_agent.ipynb +++ b/docs/docs/how_to/migrate_agent.ipynb @@ -34,6 +34,12 @@ "LangChain agents (the [AgentExecutor](https://python.langchain.com/api_reference/langchain/agents/langchain.agents.agent.AgentExecutor.html#langchain.agents.agent.AgentExecutor) in particular) have multiple configuration parameters.\n", "In this notebook we will show how those parameters map to the LangGraph react agent executor using the [create_react_agent](https://langchain-ai.github.io/langgraph/reference/prebuilt/#create_react_agent) prebuilt helper method.\n", "\n", + "\n", + ":::note\n", + "In LangGraph, the graph replaces LangChain's agent executor. It manages the agent's cycles and tracks the scratchpad as messages within its state. The LangChain \"agent\" corresponds to the state_modifier and LLM you've provided.\n", + ":::\n", + "\n", + "\n", "#### Prerequisites\n", "\n", "This how-to guide uses OpenAI as the LLM. Install the dependencies to run." @@ -183,10 +189,10 @@ "source": [ "from langgraph.prebuilt import create_react_agent\n", "\n", - "app = create_react_agent(model, tools)\n", + "langgraph_agent_executor = create_react_agent(model, tools)\n", "\n", "\n", - "messages = app.invoke({\"messages\": [(\"human\", query)]})\n", + "messages = langgraph_agent_executor.invoke({\"messages\": [(\"human\", query)]})\n", "{\n", " \"input\": query,\n", " \"output\": messages[\"messages\"][-1].content,\n", @@ -216,7 +222,9 @@ "\n", "new_query = \"Pardon?\"\n", "\n", - "messages = app.invoke({\"messages\": message_history + [(\"human\", new_query)]})\n", + "messages = langgraph_agent_executor.invoke(\n", + " {\"messages\": message_history + [(\"human\", new_query)]}\n", + ")\n", "{\n", " \"input\": new_query,\n", " \"output\": messages[\"messages\"][-1].content,\n", @@ -309,10 +317,12 @@ "# This could also be a SystemMessage object\n", "# system_message = SystemMessage(content=\"You are a helpful assistant. Respond only in Spanish.\")\n", "\n", - "app = create_react_agent(model, tools, state_modifier=system_message)\n", + "langgraph_agent_executor = create_react_agent(\n", + " model, tools, state_modifier=system_message\n", + ")\n", "\n", "\n", - "messages = app.invoke({\"messages\": [(\"user\", query)]})" + "messages = langgraph_agent_executor.invoke({\"messages\": [(\"user\", query)]})" ] }, { @@ -356,10 +366,12 @@ " ]\n", "\n", "\n", - "app = create_react_agent(model, tools, state_modifier=_modify_state_messages)\n", + "langgraph_agent_executor = create_react_agent(\n", + " model, tools, state_modifier=_modify_state_messages\n", + ")\n", "\n", "\n", - "messages = app.invoke({\"messages\": [(\"human\", query)]})\n", + "messages = langgraph_agent_executor.invoke({\"messages\": [(\"human\", query)]})\n", "print(\n", " {\n", " \"input\": query,\n", @@ -503,13 +515,13 @@ "# system_message = SystemMessage(content=\"You are a helpful assistant. Respond only in Spanish.\")\n", "\n", "memory = MemorySaver()\n", - "app = create_react_agent(\n", + "langgraph_agent_executor = create_react_agent(\n", " model, tools, state_modifier=system_message, checkpointer=memory\n", ")\n", "\n", "config = {\"configurable\": {\"thread_id\": \"test-thread\"}}\n", "print(\n", - " app.invoke(\n", + " langgraph_agent_executor.invoke(\n", " {\n", " \"messages\": [\n", " (\"user\", \"Hi, I'm polly! What's the output of magic_function of 3?\")\n", @@ -520,15 +532,15 @@ ")\n", "print(\"---\")\n", "print(\n", - " app.invoke({\"messages\": [(\"user\", \"Remember my name?\")]}, config)[\"messages\"][\n", - " -1\n", - " ].content\n", + " langgraph_agent_executor.invoke(\n", + " {\"messages\": [(\"user\", \"Remember my name?\")]}, config\n", + " )[\"messages\"][-1].content\n", ")\n", "print(\"---\")\n", "print(\n", - " app.invoke({\"messages\": [(\"user\", \"what was that output again?\")]}, config)[\n", - " \"messages\"\n", - " ][-1].content\n", + " langgraph_agent_executor.invoke(\n", + " {\"messages\": [(\"user\", \"what was that output again?\")]}, config\n", + " )[\"messages\"][-1].content\n", ")" ] }, @@ -636,9 +648,13 @@ " return prompt.invoke({\"messages\": state[\"messages\"]}).to_messages()\n", "\n", "\n", - "app = create_react_agent(model, tools, state_modifier=_modify_state_messages)\n", + "langgraph_agent_executor = create_react_agent(\n", + " model, tools, state_modifier=_modify_state_messages\n", + ")\n", "\n", - "for step in app.stream({\"messages\": [(\"human\", query)]}, stream_mode=\"updates\"):\n", + "for step in langgraph_agent_executor.stream(\n", + " {\"messages\": [(\"human\", query)]}, stream_mode=\"updates\"\n", + "):\n", " print(step)" ] }, @@ -707,9 +723,9 @@ "source": [ "from langgraph.prebuilt import create_react_agent\n", "\n", - "app = create_react_agent(model, tools=tools)\n", + "langgraph_agent_executor = create_react_agent(model, tools=tools)\n", "\n", - "messages = app.invoke({\"messages\": [(\"human\", query)]})\n", + "messages = langgraph_agent_executor.invoke({\"messages\": [(\"human\", query)]})\n", "\n", "messages" ] @@ -839,10 +855,10 @@ "\n", "RECURSION_LIMIT = 2 * 3 + 1\n", "\n", - "app = create_react_agent(model, tools=tools)\n", + "langgraph_agent_executor = create_react_agent(model, tools=tools)\n", "\n", "try:\n", - " for chunk in app.stream(\n", + " for chunk in langgraph_agent_executor.stream(\n", " {\"messages\": [(\"human\", query)]},\n", " {\"recursion_limit\": RECURSION_LIMIT},\n", " stream_mode=\"values\",\n", @@ -953,12 +969,12 @@ "source": [ "from langgraph.prebuilt import create_react_agent\n", "\n", - "app = create_react_agent(model, tools=tools)\n", + "langgraph_agent_executor = create_react_agent(model, tools=tools)\n", "# Set the max timeout for each step here\n", - "app.step_timeout = 2\n", + "langgraph_agent_executor.step_timeout = 2\n", "\n", "try:\n", - " for chunk in app.stream({\"messages\": [(\"human\", query)]}):\n", + " for chunk in langgraph_agent_executor.stream({\"messages\": [(\"human\", query)]}):\n", " print(chunk)\n", " print(\"------\")\n", "except TimeoutError:\n", @@ -994,17 +1010,21 @@ "\n", "from langgraph.prebuilt import create_react_agent\n", "\n", - "app = create_react_agent(model, tools=tools)\n", + "langgraph_agent_executor = create_react_agent(model, tools=tools)\n", "\n", "\n", - "async def stream(app, inputs):\n", - " async for chunk in app.astream({\"messages\": [(\"human\", query)]}):\n", + "async def stream(langgraph_agent_executor, inputs):\n", + " async for chunk in langgraph_agent_executor.astream(\n", + " {\"messages\": [(\"human\", query)]}\n", + " ):\n", " print(chunk)\n", " print(\"------\")\n", "\n", "\n", "try:\n", - " task = asyncio.create_task(stream(app, {\"messages\": [(\"human\", query)]}))\n", + " task = asyncio.create_task(\n", + " stream(langgraph_agent_executor, {\"messages\": [(\"human\", query)]})\n", + " )\n", " await asyncio.wait_for(task, timeout=3)\n", "except TimeoutError:\n", " print(\"Task Cancelled.\")" @@ -1108,10 +1128,10 @@ "\n", "RECURSION_LIMIT = 2 * 1 + 1\n", "\n", - "app = create_react_agent(model, tools=tools)\n", + "langgraph_agent_executor = create_react_agent(model, tools=tools)\n", "\n", "try:\n", - " for chunk in app.stream(\n", + " for chunk in langgraph_agent_executor.stream(\n", " {\"messages\": [(\"human\", query)]},\n", " {\"recursion_limit\": RECURSION_LIMIT},\n", " stream_mode=\"values\",\n", @@ -1289,10 +1309,14 @@ " return [(\"system\", \"You are a helpful assistant\"), state[\"messages\"][0]]\n", "\n", "\n", - "app = create_react_agent(model, tools, state_modifier=_modify_state_messages)\n", + "langgraph_agent_executor = create_react_agent(\n", + " model, tools, state_modifier=_modify_state_messages\n", + ")\n", "\n", "try:\n", - " for step in app.stream({\"messages\": [(\"human\", query)]}, stream_mode=\"updates\"):\n", + " for step in langgraph_agent_executor.stream(\n", + " {\"messages\": [(\"human\", query)]}, stream_mode=\"updates\"\n", + " ):\n", " pass\n", "except GraphRecursionError as e:\n", " print(\"Stopping agent prematurely due to triggering stop condition\")"