199 lines
5.0 KiB
Plaintext
199 lines
5.0 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"id": "initial_id",
|
|
"metadata": {
|
|
"collapsed": true,
|
|
"ExecuteTime": {
|
|
"end_time": "2026-07-29T13:09:26.374024Z",
|
|
"start_time": "2026-07-29T13:09:26.349210Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"from time import sleep\n",
|
|
"\n",
|
|
"from langgraph.graph import StateGraph, START, END\n",
|
|
"\n",
|
|
"\n",
|
|
"def my_reducer(left: list[str], right: list[str]) -> list[str]:\n",
|
|
" return left + right\n",
|
|
"\n",
|
|
"\n",
|
|
"def id_reducer(left: str, right: str) -> str:\n",
|
|
" if not left:\n",
|
|
" return right\n",
|
|
" if not right:\n",
|
|
" return left\n",
|
|
" print(f\"----> {left}+{right}={int(left) + int(right)}\")\n",
|
|
" return str(int(left) + int(right))\n",
|
|
"\n",
|
|
"\n",
|
|
"from typing import Annotated, TypedDict\n",
|
|
"\n",
|
|
"\n",
|
|
"class OverAllState(TypedDict):\n",
|
|
" logs: Annotated[list[str], my_reducer]\n",
|
|
" id: Annotated[str, id_reducer] # 如果存在并行节点往同一个节点传递数据,没有reducer会报错\n",
|
|
"\n",
|
|
"\n",
|
|
"def node_1(state: OverAllState) -> OverAllState:\n",
|
|
" for k, v in state.items():\n",
|
|
" print(k, v)\n",
|
|
" return {\n",
|
|
" \"logs\": [\"node_1\"],\n",
|
|
" \"id\": state[\"id\"]\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"def node_2(state: OverAllState) -> OverAllState:\n",
|
|
" for k, v in state.items():\n",
|
|
" print(f\"2,{k},{v}\")\n",
|
|
" return {\n",
|
|
" \"logs\": [\"node_2\"],\n",
|
|
" \"id\": state[\"id\"]\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"def node_3(state: OverAllState) -> OverAllState:\n",
|
|
" sleep(1)\n",
|
|
" for k, v in state.items():\n",
|
|
" print(f\"3,{k},{v}\")\n",
|
|
" return {\n",
|
|
" \"logs\": [\"node_3\"],\n",
|
|
" \"id\": state[\"id\"]\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"def node_4(state: OverAllState) -> OverAllState:\n",
|
|
" sleep(2)\n",
|
|
" for k, v in state.items():\n",
|
|
" print(f\"4,{k},{v}\")\n",
|
|
" return {\n",
|
|
" \"logs\": [\"node_4\"],\n",
|
|
" \"id\": state[\"id\"]\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"builder = StateGraph(state_schema=OverAllState)\n",
|
|
"\n",
|
|
"builder.add_node(node_1)\n",
|
|
"builder.add_node(node_2)\n",
|
|
"builder.add_node(node_3)\n",
|
|
"builder.add_node(node_4)\n",
|
|
"\n",
|
|
"builder.add_edge(START, \"node_1\")\n",
|
|
"builder.add_edge(\"node_1\", \"node_2\")\n",
|
|
"builder.add_edge(\"node_1\", \"node_3\")\n",
|
|
"builder.add_edge(\"node_2\", \"node_4\")\n",
|
|
"builder.add_edge(\"node_3\", \"node_4\")\n",
|
|
"builder.add_edge(\"node_4\", END)\n",
|
|
"\n",
|
|
"graph = builder.compile()\n",
|
|
"mermaid_text = graph.get_graph().draw_mermaid()\n",
|
|
"print(mermaid_text)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"---\n",
|
|
"config:\n",
|
|
" flowchart:\n",
|
|
" curve: linear\n",
|
|
"---\n",
|
|
"graph TD;\n",
|
|
"\t__start__([<p>__start__</p>]):::first\n",
|
|
"\tnode_1(node_1)\n",
|
|
"\tnode_2(node_2)\n",
|
|
"\tnode_3(node_3)\n",
|
|
"\tnode_4(node_4)\n",
|
|
"\t__end__([<p>__end__</p>]):::last\n",
|
|
"\t__start__ --> node_1;\n",
|
|
"\tnode_1 --> node_2;\n",
|
|
"\tnode_1 --> node_3;\n",
|
|
"\tnode_2 --> node_4;\n",
|
|
"\tnode_3 --> node_4;\n",
|
|
"\tnode_4 --> __end__;\n",
|
|
"\tclassDef default fill:#f2f0ff,line-height:1.2\n",
|
|
"\tclassDef first fill-opacity:0\n",
|
|
"\tclassDef last fill:#bfb6fc\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 24
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-07-29T13:09:29.449187Z",
|
|
"start_time": "2026-07-29T13:09:26.375281Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "result = graph.invoke({\"id\": \"2\"})",
|
|
"id": "110aed99961c8afb",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"logs []\n",
|
|
"id 2\n",
|
|
"----> 2+2=4\n",
|
|
"2,logs,['node_1']\n",
|
|
"2,id,4\n",
|
|
"3,logs,['node_1']\n",
|
|
"3,id,4\n",
|
|
"----> 4+4=8\n",
|
|
"----> 8+4=12\n",
|
|
"4,logs,['node_1', 'node_2', 'node_3']\n",
|
|
"4,id,12\n",
|
|
"----> 12+12=24\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 25
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-07-29T13:09:29.470822Z",
|
|
"start_time": "2026-07-29T13:09:29.460635Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "",
|
|
"id": "88718dd1bf2453c1",
|
|
"outputs": [],
|
|
"execution_count": 25
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 2
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython2",
|
|
"version": "2.7.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|