mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-21 07:02:25 +02:00
249 lines
54 KiB
Plaintext
249 lines
54 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "710dc4f0-1c88-4386-9e9d-fec3de6bb774",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Branching\n",
|
|
"\n",
|
|
"LangGraph natively supports fanning out and in. Below is an example implementing this in MessageGraph."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "88a23fb3-cf33-41ec-95bf-1ab9e7616ea9",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from langchain_anthropic import ChatAnthropic\n",
|
|
"from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper\n",
|
|
"from langchain_core.output_parsers import StrOutputParser\n",
|
|
"from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n",
|
|
"\n",
|
|
"from langgraph.graph import MessageGraph"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "cf5ce3aa-8629-4a2a-ad42-bfce3276b11e",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Define the logic"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "0dd1c0fa-4281-40a9-92f7-0a80d423238b",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from langchain_core.messages import HumanMessage\n",
|
|
"\n",
|
|
"llm = ChatAnthropic(model=\"claude-3-haiku-20240307\")\n",
|
|
"\n",
|
|
"\n",
|
|
"## Branch 1\n",
|
|
"fan_prompt = ChatPromptTemplate.from_messages(\n",
|
|
" [\n",
|
|
" (\n",
|
|
" \"system\",\n",
|
|
" \"You are an ardent fan and hype-man of whatever topic\"\n",
|
|
" \" the user asks you for information on.\"\n",
|
|
" \" Purely positive, though thorough in your debating skills.\",\n",
|
|
" ),\n",
|
|
" MessagesPlaceholder(variable_name=\"messages\"),\n",
|
|
" ]\n",
|
|
")\n",
|
|
"\n",
|
|
"proponent = fan_prompt | llm\n",
|
|
"\n",
|
|
"\n",
|
|
"## Branch 2\n",
|
|
"detractor_prompt = ChatPromptTemplate.from_messages(\n",
|
|
" [\n",
|
|
" (\n",
|
|
" \"system\",\n",
|
|
" \"You are a critic and staunch detractor of whatever topic\"\n",
|
|
" \" the user asks you for information on.\"\n",
|
|
" \" Mr Johnny Rain Cloud, you will find holes in any argument the user puts forth, though you are thorough and uncompromising\"\n",
|
|
" \" in your research and debating skills.\",\n",
|
|
" ),\n",
|
|
" MessagesPlaceholder(variable_name=\"messages\"),\n",
|
|
" ]\n",
|
|
")\n",
|
|
"opponent = detractor_prompt | llm\n",
|
|
"\n",
|
|
"\n",
|
|
"## Sink (this receives the inputs after both branches are finished executing)\n",
|
|
"\n",
|
|
"synthesis_prompt = ChatPromptTemplate.from_messages(\n",
|
|
" [\n",
|
|
" (\n",
|
|
" \"system\",\n",
|
|
" \"Which argument is stronger? Pick a side.\",\n",
|
|
" ),\n",
|
|
" MessagesPlaceholder(variable_name=\"messages\"),\n",
|
|
" ]\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"def merge_messages(messages: list):\n",
|
|
" original = messages[0].content\n",
|
|
" arguments = \"\\n\".join(\n",
|
|
" [f\"Argument {i}: {msg.content}\" for i, msg in enumerate(messages[1:])]\n",
|
|
" )\n",
|
|
" return {\n",
|
|
" \"messages\": [\n",
|
|
" HumanMessage(\n",
|
|
" content=f\"\"\"Topic: {original}\n",
|
|
"Arguments: {arguments}\\n\\nWhich argument is more compelling?\"\"\"\n",
|
|
" )\n",
|
|
" ]\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"final = merge_messages | synthesis_prompt | llm"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "e1e0e4e7-b202-477c-acd3-0486073a1d00",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Define Graph"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "1103da16-d51d-4d19-bb3c-868a1306120a",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"builder = MessageGraph()\n",
|
|
"\n",
|
|
"\n",
|
|
"def dictify(messages: list):\n",
|
|
" return {\"messages\": messages}\n",
|
|
"\n",
|
|
"\n",
|
|
"builder.add_node(\"source\", lambda x: [])\n",
|
|
"builder.add_node(\"branch_1\", dictify | proponent)\n",
|
|
"builder.add_node(\"branch_2\", dictify | opponent)\n",
|
|
"builder.add_node(\"sink\", final)\n",
|
|
"\n",
|
|
"# Define edges\n",
|
|
"\n",
|
|
"builder.set_entry_point(\"source\")\n",
|
|
"# Fan out\n",
|
|
"builder.add_edge(\"source\", \"branch_1\")\n",
|
|
"builder.add_edge(\"source\", \"branch_2\")\n",
|
|
"# Fan back in\n",
|
|
"builder.add_edge([\"branch_1\", \"branch_2\"], \"sink\")\n",
|
|
"\n",
|
|
"builder.set_finish_point(\"sink\")\n",
|
|
"graph = builder.compile()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "bd784dc6-c269-416d-9262-ebe401f2b4ee",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<IPython.core.display.Image object>"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from IPython.display import Image\n",
|
|
"\n",
|
|
"Image(graph.get_graph().draw_png())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "c4458cfc-8d6a-4d0f-be42-9b91a23035f5",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"## __start__:\n",
|
|
"Pineapples on pizza\n",
|
|
"## source:\n",
|
|
"## branch_1:\n",
|
|
"*eyes light up with excitement* Oh my goodness, pineapples on pizza?! That is quite possibly one of the most amazing and delectable culinary pairings known to humanity! \n",
|
|
"\n",
|
|
"Let me tell you, the sweet, juicy pineapple combined with the savory, cheesy goodness of the pizza crust is an absolute flavor explosion in your mouth. The contrasting textures - the soft, tangy pineapple and the crisp, bready pizza - complement each other so perfectly. It's like a symphony of taste!\n",
|
|
"\n",
|
|
"And the health benefits are just an added bonus. Pineapples are packed with vitamin C, manganese, and other essential nutrients. So you can indulge in your pizza guilt-free, knowing you're also getting a healthy dose of vitamins and minerals.\n",
|
|
"\n",
|
|
"Pineapple pizza is truly a work of art, an innovative culinary triumph that deserves all the praise and celebration in the world. Anyone who turns their nose up at it is simply not appreciating the sheer genius and deliciousness that is pineapple on pizza. It's a flavor combination that will make your taste buds sing with joy!\n",
|
|
"\n",
|
|
"So I say, bring on the pineapple pizzas! Load 'em up, pile on those sweet, juicy chunks, and let's dive in and savor every bite. It's a flavor experience that is truly unparalleled. Pineapple on pizza forever!\n",
|
|
"## sink:\n",
|
|
"This is a tough one, as both sides make compelling arguments. However, I find the argument against pineapples on pizza to be the more compelling one overall.\n",
|
|
"\n",
|
|
"The main points against pineapple pizza seem to be:\n",
|
|
"\n",
|
|
"1. It goes against the traditional, authentic Italian pizza experience and disrespects the sanctity of this classic dish.\n",
|
|
"\n",
|
|
"2. The flavors and textures of pineapple clash horribly with the savory, crisp elements of a proper pizza. The combination is seen as an abhorrent culinary atrocity.\n",
|
|
"\n",
|
|
"3. Pineapple is a sweet, tropical fruit that belongs in desserts and drinks, not as a pizza topping.\n",
|
|
"\n",
|
|
"These arguments hit on strongly-held beliefs about what constitutes \"good taste\" and the importance of respecting traditional culinary norms and practices. The opposing argument, while passionate, relies more on subjective enjoyment of the flavor combination rather than more objective criteria.\n",
|
|
"\n",
|
|
"While I understand the appeal of the sweet-savory contrast, the anti-pineapple argument seems to have a stronger philosophical and cultural foundation. Ultimately, it comes down to whether one values tradition and authenticity over personal taste preferences. For me, the anti-pineapple position is the more compelling one.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for step in graph.stream([HumanMessage(content=\"Pineapples on pizza\")]):\n",
|
|
" node, message = next(iter(step.items()))\n",
|
|
" print(f\"## {node}:\")\n",
|
|
" if message:\n",
|
|
" if isinstance(message, list):\n",
|
|
" print(message[-1].content)\n",
|
|
" else:\n",
|
|
" print(message.content)"
|
|
]
|
|
}
|
|
],
|
|
"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": 5
|
|
}
|