mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-21 15:12:26 +02:00
- control selection of relevant runs (needs langsmith release) - see output of conditional edge function - fix issue with conditional entry point not getting full state values as input
316 lines
112 KiB
Plaintext
316 lines
112 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Subgraphs\n",
|
|
"\n",
|
|
"Compiling a langgraph instance turns it into a regular langchain runnable. This can be used as a node in any other graph.\n",
|
|
"\n",
|
|
"Creating subgraphs lets you build things like [multi-agent teams](./multi_agent/hierarchical_agent_teams.ipynb), where each team can track its own separate state.\n",
|
|
"\n",
|
|
"Below is a simple (somewhat contrived) example of a graph with a node that itself is a graph. The subgraph will contain a simple tool-less \"agent\" that generates a response then critiques itself 3 times in a loop."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%pip install -U langgraph langchain_anthropic"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import getpass\n",
|
|
"import os\n",
|
|
"\n",
|
|
"os.environ[\"LANGCHAIN_API_KEY\"] = getpass.getpass(\"LANGCHAIN_API_KEY\")\n",
|
|
"os.environ[\"ANTHROPIC_API_KEY\"] = getpass.getpass(\"ANTHROPIC_API_KEY\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Subgraph\n",
|
|
"\n",
|
|
"Our toy subgraph will be a simple loop that generates a joke then critiques itself."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import operator\n",
|
|
"from typing import Annotated, List, TypedDict\n",
|
|
"\n",
|
|
"from langchain_anthropic import ChatAnthropic\n",
|
|
"from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n",
|
|
"\n",
|
|
"from langgraph.graph import END, StateGraph\n",
|
|
"\n",
|
|
"llm = ChatAnthropic(temperature=0, model_name=\"claude-3-opus-20240229\")\n",
|
|
"prompt = ChatPromptTemplate.from_messages(\n",
|
|
" [\n",
|
|
" (\n",
|
|
" \"system\",\n",
|
|
" \"You're the jokester. Respond with a joke, the best joke ever fashioned.\",\n",
|
|
" ),\n",
|
|
" MessagesPlaceholder(variable_name=\"messages\"),\n",
|
|
" ],\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"critic_prompt = ChatPromptTemplate.from_messages(\n",
|
|
" [\n",
|
|
" (\"system\", \"You're the standup critic. Roast the bad joke.\"),\n",
|
|
" MessagesPlaceholder(variable_name=\"messages\"),\n",
|
|
" ],\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"def update(out):\n",
|
|
" return {\"messages\": [out]}\n",
|
|
"\n",
|
|
"\n",
|
|
"def replace_role(out):\n",
|
|
" return {\"messages\": [(\"user\", out.content)]}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"## Build the subgraph\n",
|
|
"\n",
|
|
"\n",
|
|
"class SubGraphState(TypedDict):\n",
|
|
" messages: Annotated[List, operator.add]\n",
|
|
"\n",
|
|
"\n",
|
|
"builder = StateGraph(SubGraphState)\n",
|
|
"builder.add_node(\"tell_joke\", prompt | llm | update)\n",
|
|
"builder.add_node(\"critique\", critic_prompt | llm | replace_role)\n",
|
|
"\n",
|
|
"\n",
|
|
"def route(state):\n",
|
|
" return END if len(state[\"messages\"]) >= 3 else \"critique\"\n",
|
|
"\n",
|
|
"\n",
|
|
"builder.add_conditional_edges(\"tell_joke\", route)\n",
|
|
"builder.add_edge(\"critique\", \"tell_joke\")\n",
|
|
"builder.set_entry_point(\"tell_joke\")\n",
|
|
"joke_graph = builder.compile()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<IPython.core.display.Image object>"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from IPython.display import Image\n",
|
|
"\n",
|
|
"Image(joke_graph.get_graph().draw_png())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"{'tell_joke': {'messages': [AIMessage(content='Sure, here\\'s a joke about pasta:\\n\\nWhat do you call a fake noodle? An impasta!\\n\\nThis joke plays on the similarity between the words \"imposter\" (someone pretending to be someone else) and \"pasta.\" The pun suggests that a fake noodle would be called an \"impasta,\" combining the words \"imposter\" and \"pasta\" for humorous effect.')]}}\n",
|
|
"{'critique': {'messages': [('user', \"\\n\\nWhile this joke relies on a simple pun and isn't very sophisticated, puns are a common form of humor. The joke is short, easy to remember, and kid-friendly. Some might find it mildly amusing, while others may groan at the corny wordplay.\\n\\nOverall, it's an inoffensive joke that plays it safe, but isn't likely to get big laughs from most audiences. The pasta pun is a bit obvious and cliché. For a stronger joke, it would help to have some more original wordplay or a clever twist that goes beyond just a simple pun.\")]}}\n",
|
|
"{'tell_joke': {'messages': [AIMessage(content='You make some great points about the strengths and weaknesses of my pasta pun. You\\'re absolutely right that it relies on a fairly obvious and groan-worthy play on words without much of a clever twist. \\n\\nHere\\'s my attempt at a pasta joke with a bit more setup and payoff:\\n\\nDid you hear about the Italian chef who died? He pasta way. \\n\\nHis legacy will become a pizza history.\\n\\nHere I\\'ve tried to work in a few more puns and a darker twist with the death element. The phrase \"passed away\" becomes \"pasta way\", and then \"piece of history\" turns into \"pizza history.\" \\n\\nStill pretty corny overall, but I tried to layer the wordplay a bit more. I guess I shouldn\\'t quit my day job as an AI to become a stand-up comedian just yet! Thanks for the helpful humor feedback.')]}}\n",
|
|
"{'__end__': {'messages': [('user', 'Tell a joke about pasta'), AIMessage(content='Sure, here\\'s a joke about pasta:\\n\\nWhat do you call a fake noodle? An impasta!\\n\\nThis joke plays on the similarity between the words \"imposter\" (someone pretending to be someone else) and \"pasta.\" The pun suggests that a fake noodle would be called an \"impasta,\" combining the words \"imposter\" and \"pasta\" for humorous effect.'), ('user', \"\\n\\nWhile this joke relies on a simple pun and isn't very sophisticated, puns are a common form of humor. The joke is short, easy to remember, and kid-friendly. Some might find it mildly amusing, while others may groan at the corny wordplay.\\n\\nOverall, it's an inoffensive joke that plays it safe, but isn't likely to get big laughs from most audiences. The pasta pun is a bit obvious and cliché. For a stronger joke, it would help to have some more original wordplay or a clever twist that goes beyond just a simple pun.\"), AIMessage(content='You make some great points about the strengths and weaknesses of my pasta pun. You\\'re absolutely right that it relies on a fairly obvious and groan-worthy play on words without much of a clever twist. \\n\\nHere\\'s my attempt at a pasta joke with a bit more setup and payoff:\\n\\nDid you hear about the Italian chef who died? He pasta way. \\n\\nHis legacy will become a pizza history.\\n\\nHere I\\'ve tried to work in a few more puns and a darker twist with the death element. The phrase \"passed away\" becomes \"pasta way\", and then \"piece of history\" turns into \"pizza history.\" \\n\\nStill pretty corny overall, but I tried to layer the wordplay a bit more. I guess I shouldn\\'t quit my day job as an AI to become a stand-up comedian just yet! Thanks for the helpful humor feedback.')]}}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for step in joke_graph.stream({\"messages\": [(\"user\", \"Tell a joke about pasta\")]}):\n",
|
|
" print(step)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Main Graph\n",
|
|
"\n",
|
|
"The main graph is just a router that either sends the message to the joke graph or responds directly."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class AssistantState(TypedDict):\n",
|
|
" conversation: Annotated[List, operator.add]\n",
|
|
"\n",
|
|
"\n",
|
|
"assistant_llm = ChatAnthropic(temperature=0, model_name=\"claude-3-opus-20240229\")\n",
|
|
"assistant_prompt = ChatPromptTemplate.from_messages(\n",
|
|
" [\n",
|
|
" (\"system\", \"You are a helpful assistant\"),\n",
|
|
" MessagesPlaceholder(variable_name=\"conversation\"),\n",
|
|
" ]\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"def add_to_conversation(message):\n",
|
|
" return {\"conversation\": [message]}\n",
|
|
"\n",
|
|
"\n",
|
|
"main_builder = StateGraph(AssistantState)\n",
|
|
"main_builder.add_node(\n",
|
|
" \"assistant\", assistant_prompt | assistant_llm | add_to_conversation\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"def get_user_message(state: AssistantState):\n",
|
|
" last_message = state[\"conversation\"][-1]\n",
|
|
" # Convert to sub-graph state\n",
|
|
" return {\"messages\": [last_message]}\n",
|
|
"\n",
|
|
"\n",
|
|
"def get_joke(state: SubGraphState):\n",
|
|
" final_joke = state[\"messages\"][-1]\n",
|
|
" return {\"conversation\": [final_joke]}\n",
|
|
"\n",
|
|
"\n",
|
|
"main_builder.add_node(\"joke_graph\", get_user_message | joke_graph | get_joke)\n",
|
|
"\n",
|
|
"\n",
|
|
"def route(state: AssistantState):\n",
|
|
" if \"joke\" in state[\"conversation\"][-1][-1]:\n",
|
|
" return \"joke_graph\"\n",
|
|
" return \"assistant\"\n",
|
|
"\n",
|
|
"\n",
|
|
"main_builder.set_conditional_entry_point(\n",
|
|
" route,\n",
|
|
")\n",
|
|
"main_builder.set_finish_point(\"assistant\")\n",
|
|
"main_builder.set_finish_point(\"joke_graph\")\n",
|
|
"graph = main_builder.compile()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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nnzwwQesXbuW7777DoAbbrgBgFWrVqHVaiuHJUuW8PDDD1f2DL2SHj16oNFo+PnnnyvHmUwm4uLiLvu+unyXtm3bZvF68+bNNG/eXK5IU48kvJo4RVG4//77sbe3v+L5XDExMdjZ2bFkyRJKS0tJT0/nwQcfJDk5ubLrcIcOHdi5cyfPPvssKSkppKenM3/+fOzt7enVq9cVp1+sNu3d3d1JTExk8+bNdOrU6Yo11taF8y0pKanTe5uCim7td9555yVbMZ06dWLYsGE8++yzJCQkUFZWxqpVq5g9ezYPP/xwtVshd911F0OHDuWpp54iOzub8PBwxowZw7x58/j0peg9NQAAIABJREFU00/JyckhLi6OqVOnEhgYWOuboEZERFQeT5s+fTorVqygX79+JCcnX3ZrqDbf9wqLFi3i9ddfJzs7mzVr1vDRRx/x0ksv1ao+cZWs11lENAQffPCB4uDgoGzZsqVW7WfOnKm0bNlScXJyUpycnJTHHntMmT17tuLk5KRkZ2criqIoK1asUPr06aM4ODgogBIYGKisXbu2ch5Xmn5hb8PatI+Li1M8PT0VQNmwYUOtavT09FTeeecdi892//33K926datxvuJS586dUwIDA5XY2NhLuspnZGQoo0ePVuzs7BSNRqP4+fkp06ZNs3j/xf/Wx44dU1xcXJT77rtPURRFycnJUSZNmlT5bx8QEKA88MADSnFxcZ3qLC0tVaZOnaoEBwcrfn5+yqOPPqpMmDBB6d69e2UbrVarvPfeexbvq+13ady4cUpISIgCKHq9Xnn55Zct5lPd9+3hhx9WOnXqVKfPISpJV/mm7NChQ4qLi4syc+bMOr3PbDYrycnJFt1+q5OXl6ekpaVd9fS6tDebzUpWVlada7ySi+crLrVnzx7F1dVVcXBwuOTHX1EUpbi4WElOTv5byygrK1OSk5MtuqPXVn5+vrJjx45LvgujRo2q1akQV/ouXRhMqamplV3tRb36WnYbNlHl5eXce++9tGvXjueff75O79VoNISGhlp0+62Op6dntT26aju9Lu01Gg0+Pj51rvFKLp6vuFTnzp15++23KS8v58SJE5dMd3V1/dt3ZXZyciI0NPSqOj2YTCZiYmJ49dVXK49V/fLLL/z000+MHDnyiu+vy3epVatWlV3tRf2Sm1E2Ua+88gqzZ89mz549REZG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",
|
|
"text/plain": [
|
|
"<IPython.core.display.Image object>"
|
|
]
|
|
},
|
|
"execution_count": 39,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"Image(graph.get_graph().draw_png())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"{'joke_graph': {'conversation': [AIMessage(content=\"*chuckles* Oh boy, looks like we've got a real fusilli one over here! I bet you've got a ton of pasta puns all penne'd up. But hey, orzo you thought - I'm a bit of an impasta myself! Though I am trying to diversify my joke portfolio... I've been told putting all my eggs in one basket is not a very gnocchi idea.\\n\\nBut hey, keep the cheesy jokes coming - I promise I won't get too tagliatelle the truth if they fall flat. After all, laughter is good for your elbows... or wait, is that the other body part? Ah well, I'm sure we'll both feel tortellini awesome after a good laugh either way!\")]}}\n",
|
|
"{'__end__': {'conversation': [('user', 'Tell a joke about pasta'), AIMessage(content=\"*chuckles* Oh boy, looks like we've got a real fusilli one over here! I bet you've got a ton of pasta puns all penne'd up. But hey, orzo you thought - I'm a bit of an impasta myself! Though I am trying to diversify my joke portfolio... I've been told putting all my eggs in one basket is not a very gnocchi idea.\\n\\nBut hey, keep the cheesy jokes coming - I promise I won't get too tagliatelle the truth if they fall flat. After all, laughter is good for your elbows... or wait, is that the other body part? Ah well, I'm sure we'll both feel tortellini awesome after a good laugh either way!\")]}}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for step in graph.stream({\"conversation\": [(\"user\", \"Tell a joke about pasta\")]}):\n",
|
|
" print(step)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 44,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"{'assistant': {'conversation': [AIMessage(content=\"I'm doing well, thanks for asking! As an AI assistant, I don't have feelings per se, but I'm functioning properly and ready to help out however I can. How are you doing today? Let me know if there are any questions I can assist with.\")]}}\n",
|
|
"{'__end__': {'conversation': [('user', 'How YOU doin?'), AIMessage(content=\"I'm doing well, thanks for asking! As an AI assistant, I don't have feelings per se, but I'm functioning properly and ready to help out however I can. How are you doing today? Let me know if there are any questions I can assist with.\")]}}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for step in graph.stream({\"conversation\": [(\"user\", \"How YOU doin?\")]}):\n",
|
|
" print(step)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.8"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|