Files

973 lines
118 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-08-08T04:53:29.334892Z",
"start_time": "2026-08-08T04:53:28.808380Z"
}
},
"source": [
"import os\n",
"from langchain.chat_models import init_chat_model\n",
"from dotenv import load_dotenv\n",
"from langchain_core.messages import HumanMessage\n",
"from langgraph.types import Command, interrupt\n",
"from loguru import logger\n",
"\n",
"load_dotenv(override=True)\n",
"\n",
"llm = init_chat_model(\n",
" model=\"openai:qwen3.6-flash\",\n",
" base_url=os.getenv(\"BASE_URL\"),\n",
" api_key=os.getenv(\"API_KEY\")\n",
")"
],
"outputs": [],
"execution_count": 1
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T04:53:29.345814Z",
"start_time": "2026-08-08T04:53:29.341327Z"
}
},
"cell_type": "code",
"source": [
"from typing import TypedDict, Literal\n",
"\n",
"\n",
"class OverAllState(TypedDict):\n",
" topic: str\n",
" poem: str\n",
" is_approved: bool\n",
"\n",
"\n",
"def approve_node(state: OverAllState) -> Command[Literal[\"llm_node\", \"default_node\"]]:\n",
" is_approved = interrupt(\"是否同意调用模型?\")\n",
" goto = \"llm_node\" if is_approved else \"default_node\"\n",
" return Command(\n",
" goto=goto,\n",
" update={\"is_approved\": is_approved}\n",
" )\n",
"\n",
"\n",
"def llm_node(state: OverAllState) -> OverAllState:\n",
" topic = state[\"topic\"]\n",
" res = llm.invoke([HumanMessage(f\"帮我写一首关于{topic}的诗\")])\n",
" return {\n",
" \"poem\": res\n",
" }\n",
"\n",
"\n",
"def default_node(state: OverAllState) -> OverAllState:\n",
" return {\n",
" \"poem\": \"请求被拒绝\"\n",
" }\n",
"\n",
"\n"
],
"id": "eaeb7057bfa0c0cb",
"outputs": [],
"execution_count": 2
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T04:53:29.387360Z",
"start_time": "2026-08-08T04:53:29.346263Z"
}
},
"cell_type": "code",
"source": [
"from langgraph.graph import StateGraph, START, END\n",
"\n",
"builder = StateGraph(state_schema=OverAllState)\n",
"\n",
"builder.add_node(\"approve_node\", approve_node)\n",
"builder.add_node(\"llm_node\", llm_node)\n",
"builder.add_node(\"default_node\", default_node)\n",
"builder.add_edge(START, \"approve_node\")\n",
"builder.add_edge(\"llm_node\", END)\n",
"builder.add_edge(\"default_node\", END)"
],
"id": "ed713dbe23cebaf9",
"outputs": [
{
"data": {
"text/plain": [
"<langgraph.graph.state.StateGraph at 0x10c3ae7b0>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 3
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T04:53:29.396295Z",
"start_time": "2026-08-08T04:53:29.387958Z"
}
},
"cell_type": "code",
"source": [
"from langgraph.checkpoint.memory import InMemorySaver\n",
"\n",
"checkpointer = InMemorySaver()\n",
"graph = builder.compile(checkpointer=checkpointer)"
],
"id": "78c76401419dea90",
"outputs": [],
"execution_count": 4
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T04:53:29.798462Z",
"start_time": "2026-08-08T04:53:29.397753Z"
}
},
"cell_type": "code",
"source": [
"from IPython.display import display\n",
"\n",
"display(graph)"
],
"id": "230037b482df29d4",
"outputs": [
{
"data": {
"text/plain": [
"<langgraph.graph.state.CompiledStateGraph object at 0x10c71f4d0>"
],
"image/png": "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"
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 5
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T04:53:29.880811Z",
"start_time": "2026-08-08T04:53:29.822544Z"
}
},
"cell_type": "code",
"source": [
"config = {\n",
" \"configurable\": {\n",
" \"thread_id\": \"123456\"\n",
" }\n",
"}\n",
"from rich import print as rp\n",
"\n",
"rp(list(graph.get_state_history(config=config)))"
],
"id": "c133a0465bca7dc7",
"outputs": [
{
"data": {
"text/plain": [
"\u001B[1m[\u001B[0m\u001B[1m]\u001B[0m\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">[]</span>\n",
"</pre>\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 6
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T04:53:29.912605Z",
"start_time": "2026-08-08T04:53:29.884629Z"
}
},
"cell_type": "code",
"source": [
"res1 = graph.invoke({\"topic\": \"莲花\"}, config=config)\n",
"# rp(res1)\n",
"rp(list(graph.get_state_history(config=config)))"
],
"id": "1cbdba605cce87bd",
"outputs": [
{
"data": {
"text/plain": [
"\u001B[1m[\u001B[0m\n",
" \u001B[1;35mStateSnapshot\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mvalues\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'topic'\u001B[0m: \u001B[32m'莲花'\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mnext\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'approve_node'\u001B[0m,\u001B[1m)\u001B[0m,\n",
" \u001B[33mconfig\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-98b3-674a-8000-5762fb54a298'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mmetadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'source'\u001B[0m: \u001B[32m'loop'\u001B[0m, \u001B[32m'step'\u001B[0m: \u001B[1;36m0\u001B[0m, \u001B[32m'parents'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mcreated_at\u001B[0m=\u001B[32m'2026-08-08T04:53:29.891613+00:00'\u001B[0m,\n",
" \u001B[33mparent_config\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-98b2-664c-bfff-020fbebc602d'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mtasks\u001B[0m=\u001B[1m(\u001B[0m\n",
" \u001B[1;35mPregelTask\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mid\u001B[0m=\u001B[32m'ca6568b1-b152-b116-17f7-d9fd913efdef'\u001B[0m,\n",
" \u001B[33mname\u001B[0m=\u001B[32m'approve_node'\u001B[0m,\n",
" \u001B[33mpath\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'__pregel_pull'\u001B[0m, \u001B[32m'approve_node'\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33merror\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1;35mInterrupt\u001B[0m\u001B[1m(\u001B[0m\u001B[33mvalue\u001B[0m=\u001B[32m'是否同意调用模型?'\u001B[0m, \u001B[33mid\u001B[0m=\u001B[32m'062a13c08e433c99caa3ca936179c144'\u001B[0m\u001B[1m)\u001B[0m,\u001B[1m)\u001B[0m,\n",
" \u001B[33mstate\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33mresult\u001B[0m=\u001B[3;35mNone\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1;35mInterrupt\u001B[0m\u001B[1m(\u001B[0m\u001B[33mvalue\u001B[0m=\u001B[32m'是否同意调用模型?'\u001B[0m, \u001B[33mid\u001B[0m=\u001B[32m'062a13c08e433c99caa3ca936179c144'\u001B[0m\u001B[1m)\u001B[0m,\u001B[1m)\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mStateSnapshot\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mvalues\u001B[0m=\u001B[1m{\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mnext\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'__start__'\u001B[0m,\u001B[1m)\u001B[0m,\n",
" \u001B[33mconfig\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-98b2-664c-bfff-020fbebc602d'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mmetadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'source'\u001B[0m: \u001B[32m'input'\u001B[0m, \u001B[32m'step'\u001B[0m: \u001B[1;36m-1\u001B[0m, \u001B[32m'parents'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mcreated_at\u001B[0m=\u001B[32m'2026-08-08T04:53:29.891178+00:00'\u001B[0m,\n",
" \u001B[33mparent_config\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33mtasks\u001B[0m=\u001B[1m(\u001B[0m\n",
" \u001B[1;35mPregelTask\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mid\u001B[0m=\u001B[32m'f28a1086-f36c-8943-a7f3-4c963ba3f0e1'\u001B[0m,\n",
" \u001B[33mname\u001B[0m=\u001B[32m'__start__'\u001B[0m,\n",
" \u001B[33mpath\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'__pregel_pull'\u001B[0m, \u001B[32m'__start__'\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33merror\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33mstate\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33mresult\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'topic'\u001B[0m: \u001B[32m'莲花'\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m\n",
" \u001B[1m)\u001B[0m\n",
"\u001B[1m]\u001B[0m\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">[</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">StateSnapshot</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">values</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'topic'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'莲花'</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">next</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'approve_node'</span>,<span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-98b3-674a-8000-5762fb54a298'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">metadata</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'source'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'loop'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'step'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'parents'</span>: <span style=\"font-weight: bold\">{}}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">created_at</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'2026-08-08T04:53:29.891613+00:00'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">parent_config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-98b2-664c-bfff-020fbebc602d'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tasks</span>=<span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">PregelTask</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'ca6568b1-b152-b116-17f7-d9fd913efdef'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">name</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'approve_node'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">path</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'__pregel_pull'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'approve_node'</span><span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">error</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">Interrupt</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">value</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'是否同意调用模型?'</span>, <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'062a13c08e433c99caa3ca936179c144'</span><span style=\"font-weight: bold\">)</span>,<span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">state</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">result</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">Interrupt</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">value</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'是否同意调用模型?'</span>, <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'062a13c08e433c99caa3ca936179c144'</span><span style=\"font-weight: bold\">)</span>,<span style=\"font-weight: bold\">)</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">StateSnapshot</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">values</span>=<span style=\"font-weight: bold\">{}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">next</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'__start__'</span>,<span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-98b2-664c-bfff-020fbebc602d'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">metadata</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'source'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'input'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'step'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">-1</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'parents'</span>: <span style=\"font-weight: bold\">{}}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">created_at</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'2026-08-08T04:53:29.891178+00:00'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">parent_config</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tasks</span>=<span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">PregelTask</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'f28a1086-f36c-8943-a7f3-4c963ba3f0e1'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">name</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'__start__'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">path</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'__pregel_pull'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'__start__'</span><span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">error</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">state</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">result</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'topic'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'莲花'</span><span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>\n",
" <span style=\"font-weight: bold\">)</span>\n",
"<span style=\"font-weight: bold\">]</span>\n",
"</pre>\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 7
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T04:54:07.945317Z",
"start_time": "2026-08-08T04:53:29.916351Z"
}
},
"cell_type": "code",
"source": [
"input1 = input(res1['__interrupt__'][0].value) == 'y'\n",
"res2 = graph.invoke(Command(resume=input1), config=config)\n",
"# rp(res2)\n",
"rp(list(graph.get_state_history(config=config)))"
],
"id": "4e7f08d80ff688e0",
"outputs": [
{
"data": {
"text/plain": [
"\u001B[1m[\u001B[0m\n",
" \u001B[1;35mStateSnapshot\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mvalues\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'topic'\u001B[0m: \u001B[32m'莲花'\u001B[0m,\n",
" \u001B[32m'poem'\u001B[0m: \u001B[1;35mAIMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\u001B[32m'这是一首为您原创的七言律诗,遵循古典诗词格律(平水韵下平十一尤),以传统咏物手法写莲之形、\u001B[0m\n",
"\u001B[32m之神、之格:\\n\\n**《咏莲》** \\n澄潭不动自生幽,独拔青茎破浊流。 \\n叶展田田承晓露,花燃灼灼照轻舟。 \u001B[0m\n",
"\u001B[32m\\n纤埃不染君子骨,清气长涵世外秋。 \\n莫问繁华何处觅,炎光深处立汀洲。\\n\\n---\\n\\n📜 **简注与赏析** \\n- \u001B[0m\n",
"\u001B[32m**首联**以“澄潭”“浊流”对照,点明莲生于淤泥却挺立而出的环境,暗合周敦颐“出淤泥而不染”之境。 \\n- \u001B[0m\n",
"\u001B[32m**颔联**“田田”“灼灼”叠字摹态,一写叶承清露的静雅,一写日照繁花的光彩,动静相生。 \\n- \u001B[0m\n",
"\u001B[32m**颈联**转入神韵,“君子骨”“世外秋”将物象升华为人格象征,不倚丹青而自具高洁,呼应古人“中通外直,不蔓不枝”的君子之喻\u001B[0m\n",
"\u001B[32m。 \\n- \u001B[0m\n",
"\u001B[32m**尾联**以问作结,不逐春色,独向盛夏最炽烈处静静生长,喻坚守本心、不随流俗的生命姿态。\\n\\n如需调整为现代自由诗、五\u001B[0m\n",
"\u001B[32m言体、或加入特定意象(如禅意、江南水乡、残荷秋景等),可告知您的偏好,我可为您重新定制。'\u001B[0m,\n",
" \u001B[33madditional_kwargs\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'refusal'\u001B[0m: \u001B[3;35mNone\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mresponse_metadata\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'token_usage'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'completion_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m,\n",
" \u001B[32m'prompt_tokens'\u001B[0m: \u001B[1;36m17\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m3401\u001B[0m,\n",
" \u001B[32m'completion_tokens_details'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'accepted_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'audio_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'reasoning_tokens'\u001B[0m: \u001B[1;36m3053\u001B[0m,\n",
" \u001B[32m'rejected_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'text_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[32m'prompt_tokens_details'\u001B[0m: \u001B[3;35mNone\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[32m'model_provider'\u001B[0m: \u001B[32m'openai'\u001B[0m,\n",
" \u001B[32m'model_name'\u001B[0m: \u001B[32m'qwen3.6-flash'\u001B[0m,\n",
" \u001B[32m'system_fingerprint'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'id'\u001B[0m: \u001B[32m'chatcmpl-7795634a-2f17-95e3-ab44-62a0b510c37a'\u001B[0m,\n",
" \u001B[32m'finish_reason'\u001B[0m: \u001B[32m'stop'\u001B[0m,\n",
" \u001B[32m'logprobs'\u001B[0m: \u001B[3;35mNone\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mid\u001B[0m=\u001B[32m'lc_run--019fdfb8-22e1-7760-b906-cbbc1152bc1d-0'\u001B[0m,\n",
" \u001B[33mtool_calls\u001B[0m=\u001B[1m[\u001B[0m\u001B[1m]\u001B[0m,\n",
" \u001B[33minvalid_tool_calls\u001B[0m=\u001B[1m[\u001B[0m\u001B[1m]\u001B[0m,\n",
" \u001B[33musage_metadata\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'input_tokens'\u001B[0m: \u001B[1;36m17\u001B[0m,\n",
" \u001B[32m'output_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m3401\u001B[0m,\n",
" \u001B[32m'input_token_details'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[32m'output_token_details'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'reasoning'\u001B[0m: \u001B[1;36m3053\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[32m'is_approved'\u001B[0m: \u001B[3;92mTrue\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mnext\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33mconfig\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e53-032e-60d8-8002-97550c7040fb'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mmetadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'source'\u001B[0m: \u001B[32m'loop'\u001B[0m, \u001B[32m'step'\u001B[0m: \u001B[1;36m2\u001B[0m, \u001B[32m'parents'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mcreated_at\u001B[0m=\u001B[32m'2026-08-08T04:54:07.900271+00:00'\u001B[0m,\n",
" \u001B[33mparent_config\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-c538-6b08-8001-1ef3f73723eb'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mtasks\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mStateSnapshot\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mvalues\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'topic'\u001B[0m: \u001B[32m'莲花'\u001B[0m, \u001B[32m'is_approved'\u001B[0m: \u001B[3;92mTrue\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mnext\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'llm_node'\u001B[0m,\u001B[1m)\u001B[0m,\n",
" \u001B[33mconfig\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-c538-6b08-8001-1ef3f73723eb'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mmetadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'source'\u001B[0m: \u001B[32m'loop'\u001B[0m, \u001B[32m'step'\u001B[0m: \u001B[1;36m1\u001B[0m, \u001B[32m'parents'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mcreated_at\u001B[0m=\u001B[32m'2026-08-08T04:53:34.559897+00:00'\u001B[0m,\n",
" \u001B[33mparent_config\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-98b3-674a-8000-5762fb54a298'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mtasks\u001B[0m=\u001B[1m(\u001B[0m\n",
" \u001B[1;35mPregelTask\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mid\u001B[0m=\u001B[32m'90683863-b626-b46a-64b2-ae7a6c7d30ee'\u001B[0m,\n",
" \u001B[33mname\u001B[0m=\u001B[32m'llm_node'\u001B[0m,\n",
" \u001B[33mpath\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'__pregel_pull'\u001B[0m, \u001B[32m'llm_node'\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33merror\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33mstate\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33mresult\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'poem'\u001B[0m: \u001B[1;35mAIMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\u001B[32m'这是一首为您原创的七言律诗,遵循古典诗词格律(平水韵下平十一尤),以传统咏物手法写\u001B[0m\n",
"\u001B[32m莲之形、之神、之格:\\n\\n**《咏莲》** \\n澄潭不动自生幽,独拔青茎破浊流。 \\n叶展田田承晓露,花燃灼灼照轻舟。 \u001B[0m\n",
"\u001B[32m\\n纤埃不染君子骨,清气长涵世外秋。 \\n莫问繁华何处觅,炎光深处立汀洲。\\n\\n---\\n\\n📜 **简注与赏析** \\n- \u001B[0m\n",
"\u001B[32m**首联**以“澄潭”“浊流”对照,点明莲生于淤泥却挺立而出的环境,暗合周敦颐“出淤泥而不染”之境。 \\n- \u001B[0m\n",
"\u001B[32m**颔联**“田田”“灼灼”叠字摹态,一写叶承清露的静雅,一写日照繁花的光彩,动静相生。 \\n- \u001B[0m\n",
"\u001B[32m**颈联**转入神韵,“君子骨”“世外秋”将物象升华为人格象征,不倚丹青而自具高洁,呼应古人“中通外直,不蔓不枝”的君子之喻\u001B[0m\n",
"\u001B[32m。 \\n- \u001B[0m\n",
"\u001B[32m**尾联**以问作结,不逐春色,独向盛夏最炽烈处静静生长,喻坚守本心、不随流俗的生命姿态。\\n\\n如需调整为现代自由诗、五\u001B[0m\n",
"\u001B[32m言体、或加入特定意象(如禅意、江南水乡、残荷秋景等),可告知您的偏好,我可为您重新定制。'\u001B[0m,\n",
" \u001B[33madditional_kwargs\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'refusal'\u001B[0m: \u001B[3;35mNone\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mresponse_metadata\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'token_usage'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'completion_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m,\n",
" \u001B[32m'prompt_tokens'\u001B[0m: \u001B[1;36m17\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m3401\u001B[0m,\n",
" \u001B[32m'completion_tokens_details'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'accepted_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'audio_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'reasoning_tokens'\u001B[0m: \u001B[1;36m3053\u001B[0m,\n",
" \u001B[32m'rejected_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'text_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[32m'prompt_tokens_details'\u001B[0m: \u001B[3;35mNone\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[32m'model_provider'\u001B[0m: \u001B[32m'openai'\u001B[0m,\n",
" \u001B[32m'model_name'\u001B[0m: \u001B[32m'qwen3.6-flash'\u001B[0m,\n",
" \u001B[32m'system_fingerprint'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'id'\u001B[0m: \u001B[32m'chatcmpl-7795634a-2f17-95e3-ab44-62a0b510c37a'\u001B[0m,\n",
" \u001B[32m'finish_reason'\u001B[0m: \u001B[32m'stop'\u001B[0m,\n",
" \u001B[32m'logprobs'\u001B[0m: \u001B[3;35mNone\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mid\u001B[0m=\u001B[32m'lc_run--019fdfb8-22e1-7760-b906-cbbc1152bc1d-0'\u001B[0m,\n",
" \u001B[33mtool_calls\u001B[0m=\u001B[1m[\u001B[0m\u001B[1m]\u001B[0m,\n",
" \u001B[33minvalid_tool_calls\u001B[0m=\u001B[1m[\u001B[0m\u001B[1m]\u001B[0m,\n",
" \u001B[33musage_metadata\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'input_tokens'\u001B[0m: \u001B[1;36m17\u001B[0m,\n",
" \u001B[32m'output_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m3401\u001B[0m,\n",
" \u001B[32m'input_token_details'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[32m'output_token_details'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'reasoning'\u001B[0m: \u001B[1;36m3053\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mStateSnapshot\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mvalues\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'topic'\u001B[0m: \u001B[32m'莲花'\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mnext\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'approve_node'\u001B[0m,\u001B[1m)\u001B[0m,\n",
" \u001B[33mconfig\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-98b3-674a-8000-5762fb54a298'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mmetadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'source'\u001B[0m: \u001B[32m'loop'\u001B[0m, \u001B[32m'step'\u001B[0m: \u001B[1;36m0\u001B[0m, \u001B[32m'parents'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mcreated_at\u001B[0m=\u001B[32m'2026-08-08T04:53:29.891613+00:00'\u001B[0m,\n",
" \u001B[33mparent_config\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-98b2-664c-bfff-020fbebc602d'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mtasks\u001B[0m=\u001B[1m(\u001B[0m\n",
" \u001B[1;35mPregelTask\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mid\u001B[0m=\u001B[32m'ca6568b1-b152-b116-17f7-d9fd913efdef'\u001B[0m,\n",
" \u001B[33mname\u001B[0m=\u001B[32m'approve_node'\u001B[0m,\n",
" \u001B[33mpath\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'__pregel_pull'\u001B[0m, \u001B[32m'approve_node'\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33merror\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1;35mInterrupt\u001B[0m\u001B[1m(\u001B[0m\u001B[33mvalue\u001B[0m=\u001B[32m'是否同意调用模型?'\u001B[0m, \u001B[33mid\u001B[0m=\u001B[32m'062a13c08e433c99caa3ca936179c144'\u001B[0m\u001B[1m)\u001B[0m,\u001B[1m)\u001B[0m,\n",
" \u001B[33mstate\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33mresult\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'is_approved'\u001B[0m: \u001B[3;92mTrue\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1;35mInterrupt\u001B[0m\u001B[1m(\u001B[0m\u001B[33mvalue\u001B[0m=\u001B[32m'是否同意调用模型?'\u001B[0m, \u001B[33mid\u001B[0m=\u001B[32m'062a13c08e433c99caa3ca936179c144'\u001B[0m\u001B[1m)\u001B[0m,\u001B[1m)\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mStateSnapshot\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mvalues\u001B[0m=\u001B[1m{\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mnext\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'__start__'\u001B[0m,\u001B[1m)\u001B[0m,\n",
" \u001B[33mconfig\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-98b2-664c-bfff-020fbebc602d'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mmetadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'source'\u001B[0m: \u001B[32m'input'\u001B[0m, \u001B[32m'step'\u001B[0m: \u001B[1;36m-1\u001B[0m, \u001B[32m'parents'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mcreated_at\u001B[0m=\u001B[32m'2026-08-08T04:53:29.891178+00:00'\u001B[0m,\n",
" \u001B[33mparent_config\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33mtasks\u001B[0m=\u001B[1m(\u001B[0m\n",
" \u001B[1;35mPregelTask\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mid\u001B[0m=\u001B[32m'f28a1086-f36c-8943-a7f3-4c963ba3f0e1'\u001B[0m,\n",
" \u001B[33mname\u001B[0m=\u001B[32m'__start__'\u001B[0m,\n",
" \u001B[33mpath\u001B[0m=\u001B[1m(\u001B[0m\u001B[32m'__pregel_pull'\u001B[0m, \u001B[32m'__start__'\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33merror\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33mstate\u001B[0m=\u001B[3;35mNone\u001B[0m,\n",
" \u001B[33mresult\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'topic'\u001B[0m: \u001B[32m'莲花'\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m\n",
" \u001B[1m)\u001B[0m\n",
"\u001B[1m]\u001B[0m\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">[</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">StateSnapshot</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">values</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'topic'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'莲花'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'poem'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">AIMessage</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">content</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'这是一首为您原创的七言律诗,遵循古典诗词格律(平水韵下平十一尤),以传统咏物手法写莲之形、</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">之神、之格:\\n\\n**《咏莲》** \\n澄潭不动自生幽,独拔青茎破浊流。 \\n叶展田田承晓露,花燃灼灼照轻舟。 </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">\\n纤埃不染君子骨,清气长涵世外秋。 \\n莫问繁华何处觅,炎光深处立汀洲。\\n\\n---\\n\\n📜 **简注与赏析** \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**首联**以“澄潭”“浊流”对照,点明莲生于淤泥却挺立而出的环境,暗合周敦颐“出淤泥而不染”之境。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**颔联**“田田”“灼灼”叠字摹态,一写叶承清露的静雅,一写日照繁花的光彩,动静相生。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**颈联**转入神韵,“君子骨”“世外秋”将物象升华为人格象征,不倚丹青而自具高洁,呼应古人“中通外直,不蔓不枝”的君子之喻</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**尾联**以问作结,不逐春色,独向盛夏最炽烈处静静生长,喻坚守本心、不随流俗的生命姿态。\\n\\n如需调整为现代自由诗、五</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">言体、或加入特定意象(如禅意、江南水乡、残荷秋景等),可告知您的偏好,我可为您重新定制。'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">additional_kwargs</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'refusal'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">response_metadata</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'token_usage'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'completion_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">17</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3401</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'completion_tokens_details'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'accepted_prediction_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'audio_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'reasoning_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3053</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'rejected_prediction_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'text_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens_details'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'model_provider'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'openai'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'model_name'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'qwen3.6-flash'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'system_fingerprint'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'chatcmpl-7795634a-2f17-95e3-ab44-62a0b510c37a'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'finish_reason'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'stop'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'logprobs'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'lc_run--019fdfb8-22e1-7760-b906-cbbc1152bc1d-0'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tool_calls</span>=<span style=\"font-weight: bold\">[]</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">invalid_tool_calls</span>=<span style=\"font-weight: bold\">[]</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">usage_metadata</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'input_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">17</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3401</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'input_token_details'</span>: <span style=\"font-weight: bold\">{}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_token_details'</span>: <span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'reasoning'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3053</span><span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'is_approved'</span>: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">next</span>=<span style=\"font-weight: bold\">()</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e53-032e-60d8-8002-97550c7040fb'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">metadata</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'source'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'loop'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'step'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'parents'</span>: <span style=\"font-weight: bold\">{}}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">created_at</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'2026-08-08T04:54:07.900271+00:00'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">parent_config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-c538-6b08-8001-1ef3f73723eb'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tasks</span>=<span style=\"font-weight: bold\">()</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">StateSnapshot</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">values</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'topic'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'莲花'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'is_approved'</span>: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">next</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'llm_node'</span>,<span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-c538-6b08-8001-1ef3f73723eb'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">metadata</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'source'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'loop'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'step'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'parents'</span>: <span style=\"font-weight: bold\">{}}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">created_at</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'2026-08-08T04:53:34.559897+00:00'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">parent_config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-98b3-674a-8000-5762fb54a298'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tasks</span>=<span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">PregelTask</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'90683863-b626-b46a-64b2-ae7a6c7d30ee'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">name</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'llm_node'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">path</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'__pregel_pull'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'llm_node'</span><span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">error</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">state</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">result</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'poem'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">AIMessage</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">content</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'这是一首为您原创的七言律诗,遵循古典诗词格律(平水韵下平十一尤),以传统咏物手法写</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">莲之形、之神、之格:\\n\\n**《咏莲》** \\n澄潭不动自生幽,独拔青茎破浊流。 \\n叶展田田承晓露,花燃灼灼照轻舟。 </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">\\n纤埃不染君子骨,清气长涵世外秋。 \\n莫问繁华何处觅,炎光深处立汀洲。\\n\\n---\\n\\n📜 **简注与赏析** \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**首联**以“澄潭”“浊流”对照,点明莲生于淤泥却挺立而出的环境,暗合周敦颐“出淤泥而不染”之境。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**颔联**“田田”“灼灼”叠字摹态,一写叶承清露的静雅,一写日照繁花的光彩,动静相生。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**颈联**转入神韵,“君子骨”“世外秋”将物象升华为人格象征,不倚丹青而自具高洁,呼应古人“中通外直,不蔓不枝”的君子之喻</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**尾联**以问作结,不逐春色,独向盛夏最炽烈处静静生长,喻坚守本心、不随流俗的生命姿态。\\n\\n如需调整为现代自由诗、五</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">言体、或加入特定意象(如禅意、江南水乡、残荷秋景等),可告知您的偏好,我可为您重新定制。'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">additional_kwargs</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'refusal'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">response_metadata</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'token_usage'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'completion_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">17</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3401</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'completion_tokens_details'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'accepted_prediction_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'audio_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'reasoning_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3053</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'rejected_prediction_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'text_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens_details'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'model_provider'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'openai'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'model_name'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'qwen3.6-flash'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'system_fingerprint'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'chatcmpl-7795634a-2f17-95e3-ab44-62a0b510c37a'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'finish_reason'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'stop'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'logprobs'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'lc_run--019fdfb8-22e1-7760-b906-cbbc1152bc1d-0'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tool_calls</span>=<span style=\"font-weight: bold\">[]</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">invalid_tool_calls</span>=<span style=\"font-weight: bold\">[]</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">usage_metadata</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'input_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">17</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3401</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'input_token_details'</span>: <span style=\"font-weight: bold\">{}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_token_details'</span>: <span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'reasoning'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3053</span><span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">)</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">StateSnapshot</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">values</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'topic'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'莲花'</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">next</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'approve_node'</span>,<span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-98b3-674a-8000-5762fb54a298'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">metadata</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'source'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'loop'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'step'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'parents'</span>: <span style=\"font-weight: bold\">{}}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">created_at</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'2026-08-08T04:53:29.891613+00:00'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">parent_config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-98b2-664c-bfff-020fbebc602d'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tasks</span>=<span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">PregelTask</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'ca6568b1-b152-b116-17f7-d9fd913efdef'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">name</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'approve_node'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">path</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'__pregel_pull'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'approve_node'</span><span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">error</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">Interrupt</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">value</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'是否同意调用模型?'</span>, <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'062a13c08e433c99caa3ca936179c144'</span><span style=\"font-weight: bold\">)</span>,<span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">state</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">result</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'is_approved'</span>: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span><span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">Interrupt</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">value</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'是否同意调用模型?'</span>, <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'062a13c08e433c99caa3ca936179c144'</span><span style=\"font-weight: bold\">)</span>,<span style=\"font-weight: bold\">)</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">StateSnapshot</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">values</span>=<span style=\"font-weight: bold\">{}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">next</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'__start__'</span>,<span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-98b2-664c-bfff-020fbebc602d'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">metadata</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'source'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'input'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'step'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">-1</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'parents'</span>: <span style=\"font-weight: bold\">{}}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">created_at</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'2026-08-08T04:53:29.891178+00:00'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">parent_config</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tasks</span>=<span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">PregelTask</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'f28a1086-f36c-8943-a7f3-4c963ba3f0e1'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">name</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'__start__'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">path</span>=<span style=\"font-weight: bold\">(</span><span style=\"color: #008000; text-decoration-color: #008000\">'__pregel_pull'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'__start__'</span><span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">error</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">state</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">result</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'topic'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'莲花'</span><span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>\n",
" <span style=\"font-weight: bold\">)</span>\n",
"<span style=\"font-weight: bold\">]</span>\n",
"</pre>\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 8
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-08T05:02:42.597576Z",
"start_time": "2026-08-08T05:02:42.562927Z"
}
},
"cell_type": "code",
"source": [
"for snapshot in graph.get_state_history(config=config):\n",
" rp(snapshot)\n",
" break\n",
" # print(f\"superstep:{snapshot.metadata.get('step')},next={snapshot.next}\")\n",
" # print(f\"values={snapshot.values}\")\n",
" # print(\"=\"*50)"
],
"id": "699307bed61aaa2",
"outputs": [
{
"data": {
"text/plain": [
"\u001B[1;35mStateSnapshot\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mvalues\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'topic'\u001B[0m: \u001B[32m'莲花'\u001B[0m,\n",
" \u001B[32m'poem'\u001B[0m: \u001B[1;35mAIMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\u001B[32m'这是一首为您原创的七言律诗,遵循古典诗词格律(平水韵下平十一尤),以传统咏物手法写莲之形、之神\u001B[0m\n",
"\u001B[32m、之格:\\n\\n**《咏莲》** \\n澄潭不动自生幽,独拔青茎破浊流。 \\n叶展田田承晓露,花燃灼灼照轻舟。 \u001B[0m\n",
"\u001B[32m\\n纤埃不染君子骨,清气长涵世外秋。 \\n莫问繁华何处觅,炎光深处立汀洲。\\n\\n---\\n\\n📜 **简注与赏析** \\n- \u001B[0m\n",
"\u001B[32m**首联**以“澄潭”“浊流”对照,点明莲生于淤泥却挺立而出的环境,暗合周敦颐“出淤泥而不染”之境。 \\n- \u001B[0m\n",
"\u001B[32m**颔联**“田田”“灼灼”叠字摹态,一写叶承清露的静雅,一写日照繁花的光彩,动静相生。 \\n- \u001B[0m\n",
"\u001B[32m**颈联**转入神韵,“君子骨”“世外秋”将物象升华为人格象征,不倚丹青而自具高洁,呼应古人“中通外直,不蔓不枝”的君子之喻\u001B[0m\n",
"\u001B[32m。 \\n- \u001B[0m\n",
"\u001B[32m**尾联**以问作结,不逐春色,独向盛夏最炽烈处静静生长,喻坚守本心、不随流俗的生命姿态。\\n\\n如需调整为现代自由诗、五\u001B[0m\n",
"\u001B[32m言体、或加入特定意象(如禅意、江南水乡、残荷秋景等),可告知您的偏好,我可为您重新定制。'\u001B[0m,\n",
" \u001B[33madditional_kwargs\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'refusal'\u001B[0m: \u001B[3;35mNone\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mresponse_metadata\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'token_usage'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'completion_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m,\n",
" \u001B[32m'prompt_tokens'\u001B[0m: \u001B[1;36m17\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m3401\u001B[0m,\n",
" \u001B[32m'completion_tokens_details'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'accepted_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'audio_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'reasoning_tokens'\u001B[0m: \u001B[1;36m3053\u001B[0m,\n",
" \u001B[32m'rejected_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'text_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[32m'prompt_tokens_details'\u001B[0m: \u001B[3;35mNone\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[32m'model_provider'\u001B[0m: \u001B[32m'openai'\u001B[0m,\n",
" \u001B[32m'model_name'\u001B[0m: \u001B[32m'qwen3.6-flash'\u001B[0m,\n",
" \u001B[32m'system_fingerprint'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'id'\u001B[0m: \u001B[32m'chatcmpl-7795634a-2f17-95e3-ab44-62a0b510c37a'\u001B[0m,\n",
" \u001B[32m'finish_reason'\u001B[0m: \u001B[32m'stop'\u001B[0m,\n",
" \u001B[32m'logprobs'\u001B[0m: \u001B[3;35mNone\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mid\u001B[0m=\u001B[32m'lc_run--019fdfb8-22e1-7760-b906-cbbc1152bc1d-0'\u001B[0m,\n",
" \u001B[33mtool_calls\u001B[0m=\u001B[1m[\u001B[0m\u001B[1m]\u001B[0m,\n",
" \u001B[33minvalid_tool_calls\u001B[0m=\u001B[1m[\u001B[0m\u001B[1m]\u001B[0m,\n",
" \u001B[33musage_metadata\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'input_tokens'\u001B[0m: \u001B[1;36m17\u001B[0m,\n",
" \u001B[32m'output_tokens'\u001B[0m: \u001B[1;36m3384\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m3401\u001B[0m,\n",
" \u001B[32m'input_token_details'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[32m'output_token_details'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'reasoning'\u001B[0m: \u001B[1;36m3053\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[32m'is_approved'\u001B[0m: \u001B[3;92mTrue\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mnext\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33mconfig\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e53-032e-60d8-8002-97550c7040fb'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mmetadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[32m'source'\u001B[0m: \u001B[32m'loop'\u001B[0m, \u001B[32m'step'\u001B[0m: \u001B[1;36m2\u001B[0m, \u001B[32m'parents'\u001B[0m: \u001B[1m{\u001B[0m\u001B[1m}\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mcreated_at\u001B[0m=\u001B[32m'2026-08-08T04:54:07.900271+00:00'\u001B[0m,\n",
" \u001B[33mparent_config\u001B[0m=\u001B[1m{\u001B[0m\n",
" \u001B[32m'configurable'\u001B[0m: \u001B[1m{\u001B[0m\n",
" \u001B[32m'thread_id'\u001B[0m: \u001B[32m'123456'\u001B[0m,\n",
" \u001B[32m'checkpoint_ns'\u001B[0m: \u001B[32m''\u001B[0m,\n",
" \u001B[32m'checkpoint_id'\u001B[0m: \u001B[32m'1f192e51-c538-6b08-8001-1ef3f73723eb'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m,\n",
" \u001B[33mtasks\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m,\n",
" \u001B[33minterrupts\u001B[0m=\u001B[1m(\u001B[0m\u001B[1m)\u001B[0m\n",
"\u001B[1m)\u001B[0m\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">StateSnapshot</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">values</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'topic'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'莲花'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'poem'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">AIMessage</span><span style=\"font-weight: bold\">(</span>\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">content</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'这是一首为您原创的七言律诗,遵循古典诗词格律(平水韵下平十一尤),以传统咏物手法写莲之形、之神</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">、之格:\\n\\n**《咏莲》** \\n澄潭不动自生幽,独拔青茎破浊流。 \\n叶展田田承晓露,花燃灼灼照轻舟。 </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">\\n纤埃不染君子骨,清气长涵世外秋。 \\n莫问繁华何处觅,炎光深处立汀洲。\\n\\n---\\n\\n📜 **简注与赏析** \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**首联**以“澄潭”“浊流”对照,点明莲生于淤泥却挺立而出的环境,暗合周敦颐“出淤泥而不染”之境。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**颔联**“田田”“灼灼”叠字摹态,一写叶承清露的静雅,一写日照繁花的光彩,动静相生。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**颈联**转入神韵,“君子骨”“世外秋”将物象升华为人格象征,不倚丹青而自具高洁,呼应古人“中通外直,不蔓不枝”的君子之喻</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">。 \\n- </span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">**尾联**以问作结,不逐春色,独向盛夏最炽烈处静静生长,喻坚守本心、不随流俗的生命姿态。\\n\\n如需调整为现代自由诗、五</span>\n",
"<span style=\"color: #008000; text-decoration-color: #008000\">言体、或加入特定意象(如禅意、江南水乡、残荷秋景等),可告知您的偏好,我可为您重新定制。'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">additional_kwargs</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'refusal'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">response_metadata</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'token_usage'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'completion_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">17</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3401</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'completion_tokens_details'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'accepted_prediction_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'audio_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'reasoning_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3053</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'rejected_prediction_tokens'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'text_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens_details'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'model_provider'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'openai'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'model_name'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'qwen3.6-flash'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'system_fingerprint'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'chatcmpl-7795634a-2f17-95e3-ab44-62a0b510c37a'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'finish_reason'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'stop'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'logprobs'</span>: <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'lc_run--019fdfb8-22e1-7760-b906-cbbc1152bc1d-0'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tool_calls</span>=<span style=\"font-weight: bold\">[]</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">invalid_tool_calls</span>=<span style=\"font-weight: bold\">[]</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">usage_metadata</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'input_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">17</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3384</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3401</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'input_token_details'</span>: <span style=\"font-weight: bold\">{}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_token_details'</span>: <span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'reasoning'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3053</span><span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'is_approved'</span>: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">next</span>=<span style=\"font-weight: bold\">()</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e53-032e-60d8-8002-97550c7040fb'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">metadata</span>=<span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'source'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'loop'</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'step'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2</span>, <span style=\"color: #008000; text-decoration-color: #008000\">'parents'</span>: <span style=\"font-weight: bold\">{}}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">created_at</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'2026-08-08T04:54:07.900271+00:00'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">parent_config</span>=<span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'configurable'</span>: <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'thread_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'123456'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_ns'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">''</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'checkpoint_id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'1f192e51-c538-6b08-8001-1ef3f73723eb'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tasks</span>=<span style=\"font-weight: bold\">()</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">interrupts</span>=<span style=\"font-weight: bold\">()</span>\n",
"<span style=\"font-weight: bold\">)</span>\n",
"</pre>\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 12
}
],
"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
}