初始化项目:langgraph 学习笔记与 lg_common 通用组件包

This commit is contained in:
gqt
2026-08-16 00:25:21 +08:00
commit b3f3b72f07
29 changed files with 25395 additions and 0 deletions
+198
View File
@@ -0,0 +1,198 @@
{
"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
}