Files
langgraph-learning/chapter02/04_ReAct_static_loop.ipynb

561 lines
61 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-08-01T06:25:04.231749Z",
"start_time": "2026-08-01T06:25:04.212936Z"
}
},
"source": [
"\"\"\"\n",
"使用 builder.add_conditional_edges(\"llm_node\", router) 做静态分支路由来实现ReAct模型\n",
"\"\"\"\n",
"\n",
"import os\n",
"\n",
"from dotenv import load_dotenv\n",
"from langchain.chat_models import init_chat_model\n",
"from langchain.tools import tool\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",
")\n",
"\n",
"\n",
"@tool(description=\"查询天气的工具,如果出现网络波动调用失败请重试(概率性问题)\")\n",
"def get_weather(city):\n",
" return \"It's sunny in %s\" % city\n",
"\n",
"\n",
"llm_with_tool = llm.bind_tools(tools=[get_weather])"
],
"outputs": [],
"execution_count": 67
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-01T06:25:04.242598Z",
"start_time": "2026-08-01T06:25:04.233604Z"
}
},
"cell_type": "code",
"source": [
"from rich import print as rp\n",
"\n",
"# res = llm_with_tool.invoke(\"今天北京天气怎么样?\")\n",
"# rp(res)"
],
"id": "94bff18fdf2f54e1",
"outputs": [],
"execution_count": 68
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-01T06:25:04.248423Z",
"start_time": "2026-08-01T06:25:04.243048Z"
}
},
"cell_type": "code",
"source": [
"from random import randint\n",
"from langgraph.graph import MessagesState\n",
"from langchain_core.messages import HumanMessage, ToolMessage\n",
"\n",
"\n",
"class OverallState(MessagesState):\n",
" user_input: str\n",
" final_output: str\n",
"\n",
"\n",
"def input_node(state: OverallState) -> OverallState:\n",
" return {\n",
" \"messages\": [HumanMessage(state[\"user_input\"])]\n",
" }\n",
"\n",
"\n",
"def llm_node(state: OverallState) -> OverallState:\n",
" ai_msg = llm_with_tool.invoke(state[\"messages\"])\n",
" return {\n",
" \"messages\": [ai_msg]\n",
" }\n",
"\n",
"\n",
"def tool_node(state: OverallState) -> OverallState:\n",
" messages = state[\"messages\"]\n",
" ai_msg = messages[-1]\n",
" tool_calls = ai_msg.tool_calls\n",
" for tool_call in tool_calls:\n",
" # tool_calls=[\n",
" # {\n",
" # 'name': 'get_weather',\n",
" # 'args': {'city': '北京'},\n",
" # 'id': 'call_dd68b38a18d146d3bccc27ac',\n",
" # 'type': 'tool_call'\n",
" # }\n",
" # ],\n",
" if tool_call[\"name\"] == \"get_weather\":\n",
" if randint(0, 9) < 6:\n",
" messages.append(ToolMessage(\n",
" content=\"网络波动请重试\",\n",
" tool_call_id=tool_call[\"id\"]\n",
" ))\n",
" else:\n",
" messages.append(get_weather.invoke(tool_call))\n",
" elif tool_call[\"name\"] == \"get_news\":\n",
" pass\n",
" else:\n",
" messages.append(ToolMessage(\n",
" content=\"工具名称错误\",\n",
" tool_call_id=tool_call[\"id\"]\n",
" ))\n",
" return {\n",
" \"messages\": messages\n",
" }\n",
"\n",
"\n",
"def output_node(state: OverallState) -> OverallState:\n",
" return {\n",
" \"final_output\": state[\"messages\"][-1].content\n",
" }"
],
"id": "8704e6159960c974",
"outputs": [],
"execution_count": 69
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-01T06:25:04.259422Z",
"start_time": "2026-08-01T06:25:04.251235Z"
}
},
"cell_type": "code",
"source": [
"from typing import Literal\n",
"\n",
"\n",
"def router(state: OverallState) -> Literal[\"tool_node\", \"output_node\"]:\n",
" messages = state[\"messages\"]\n",
" last_msg = messages[-1]\n",
" if last_msg.tool_calls:\n",
" return \"tool_node\"\n",
" else:\n",
" return \"output_node\""
],
"id": "1abb612dd382567b",
"outputs": [],
"execution_count": 70
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-01T06:25:04.273994Z",
"start_time": "2026-08-01T06:25:04.260661Z"
}
},
"cell_type": "code",
"source": [
"from langgraph.graph import StateGraph, START, END\n",
"\n",
"builder = StateGraph(state_schema=OverallState)\n",
"builder.add_node(\"input_node\", input_node)\n",
"builder.add_node(\"llm_node\", llm_node)\n",
"builder.add_node(\"tool_node\", tool_node)\n",
"builder.add_node(\"output_node\", output_node)\n",
"\n",
"builder.add_edge(START, \"input_node\")\n",
"builder.add_edge(\"input_node\", \"llm_node\")\n",
"builder.add_conditional_edges(\"llm_node\", router)\n",
"builder.add_edge(\"tool_node\", \"llm_node\")\n",
"builder.add_edge(\"output_node\", END)"
],
"id": "19a3dccbc99528be",
"outputs": [
{
"data": {
"text/plain": [
"<langgraph.graph.state.StateGraph at 0x111251350>"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 71
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-01T06:25:04.710996Z",
"start_time": "2026-08-01T06:25:04.278884Z"
}
},
"cell_type": "code",
"source": [
"graph=builder.compile()\n",
"\n",
"from IPython.display import display\n",
"display(graph)"
],
"id": "d21399d1e5e0d13e",
"outputs": [
{
"data": {
"text/plain": [
"<langgraph.graph.state.CompiledStateGraph object at 0x1100adf90>"
],
"image/png": "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"
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 72
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-08-01T06:25:10.410791Z",
"start_time": "2026-08-01T06:25:04.712121Z"
}
},
"cell_type": "code",
"source": [
"res=graph.invoke({\"user_input\": \"今天北京天气怎么样?\"})\n",
"rp(res)"
],
"id": "a59abf813489ce59",
"outputs": [
{
"data": {
"text/plain": [
"\u001B[1m{\u001B[0m\n",
" \u001B[32m'messages'\u001B[0m: \u001B[1m[\u001B[0m\n",
" \u001B[1;35mHumanMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\u001B[32m'今天北京天气怎么样?'\u001B[0m,\n",
" \u001B[33madditional_kwargs\u001B[0m=\u001B[1m{\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mresponse_metadata\u001B[0m=\u001B[1m{\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[33mid\u001B[0m=\u001B[32m'1faaf739-e9b1-466c-afe5-66a2adb4a56a'\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mAIMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\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;36m445\u001B[0m,\n",
" \u001B[32m'prompt_tokens'\u001B[0m: \u001B[1;36m277\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m722\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;36m415\u001B[0m,\n",
" \u001B[32m'rejected_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'text_tokens'\u001B[0m: \u001B[1;36m445\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-e4455be0-ae94-94c1-822e-aba8ab733caa'\u001B[0m,\n",
" \u001B[32m'finish_reason'\u001B[0m: \u001B[32m'tool_calls'\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--019fbbff-64ca-7472-945f-04d88c4591e7-0'\u001B[0m,\n",
" \u001B[33mtool_calls\u001B[0m=\u001B[1m[\u001B[0m\n",
" \u001B[1m{\u001B[0m\n",
" \u001B[32m'name'\u001B[0m: \u001B[32m'get_weather'\u001B[0m,\n",
" \u001B[32m'args'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'city'\u001B[0m: \u001B[32m'北京'\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[32m'id'\u001B[0m: \u001B[32m'call_e6943007c96f4f68b1cf347a'\u001B[0m,\n",
" \u001B[32m'type'\u001B[0m: \u001B[32m'tool_call'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \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;36m277\u001B[0m,\n",
" \u001B[32m'output_tokens'\u001B[0m: \u001B[1;36m445\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m722\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;36m415\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mToolMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\u001B[32m'网络波动请重试'\u001B[0m,\n",
" \u001B[33mid\u001B[0m=\u001B[32m'f910e3c6-10ab-451c-b245-bcee5df7cc5e'\u001B[0m,\n",
" \u001B[33mtool_call_id\u001B[0m=\u001B[32m'call_e6943007c96f4f68b1cf347a'\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mAIMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\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;36m76\u001B[0m,\n",
" \u001B[32m'prompt_tokens'\u001B[0m: \u001B[1;36m324\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m400\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;36m46\u001B[0m,\n",
" \u001B[32m'rejected_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'text_tokens'\u001B[0m: \u001B[1;36m76\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-dad4c739-5e80-9372-b198-ecd7b6d74f59'\u001B[0m,\n",
" \u001B[32m'finish_reason'\u001B[0m: \u001B[32m'tool_calls'\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--019fbbff-722d-7c62-9855-7ecc715fd002-0'\u001B[0m,\n",
" \u001B[33mtool_calls\u001B[0m=\u001B[1m[\u001B[0m\n",
" \u001B[1m{\u001B[0m\n",
" \u001B[32m'name'\u001B[0m: \u001B[32m'get_weather'\u001B[0m,\n",
" \u001B[32m'args'\u001B[0m: \u001B[1m{\u001B[0m\u001B[32m'city'\u001B[0m: \u001B[32m'北京'\u001B[0m\u001B[1m}\u001B[0m,\n",
" \u001B[32m'id'\u001B[0m: \u001B[32m'call_46ea25112281427198ef735a'\u001B[0m,\n",
" \u001B[32m'type'\u001B[0m: \u001B[32m'tool_call'\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \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;36m324\u001B[0m,\n",
" \u001B[32m'output_tokens'\u001B[0m: \u001B[1;36m76\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m400\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;36m46\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mToolMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\u001B[32m\"It\u001B[0m\u001B[32m's sunny in 北京\"\u001B[0m,\n",
" \u001B[33mname\u001B[0m=\u001B[32m'get_weather'\u001B[0m,\n",
" \u001B[33mid\u001B[0m=\u001B[32m'c0370ecc-dd74-4f49-9c10-edf9db1952c8'\u001B[0m,\n",
" \u001B[33mtool_call_id\u001B[0m=\u001B[32m'call_46ea25112281427198ef735a'\u001B[0m\n",
" \u001B[1m)\u001B[0m,\n",
" \u001B[1;35mAIMessage\u001B[0m\u001B[1m(\u001B[0m\n",
" \u001B[33mcontent\u001B[0m=\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;36m120\u001B[0m,\n",
" \u001B[32m'prompt_tokens'\u001B[0m: \u001B[1;36m373\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m493\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;36m111\u001B[0m,\n",
" \u001B[32m'rejected_prediction_tokens'\u001B[0m: \u001B[3;35mNone\u001B[0m,\n",
" \u001B[32m'text_tokens'\u001B[0m: \u001B[1;36m120\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-f17bc70e-1954-9db1-a384-1ce904a1c118'\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--019fbbff-7554-7ed0-b994-e91d6be44b61-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;36m373\u001B[0m,\n",
" \u001B[32m'output_tokens'\u001B[0m: \u001B[1;36m120\u001B[0m,\n",
" \u001B[32m'total_tokens'\u001B[0m: \u001B[1;36m493\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;36m111\u001B[0m\u001B[1m}\u001B[0m\n",
" \u001B[1m}\u001B[0m\n",
" \u001B[1m)\u001B[0m\n",
" \u001B[1m]\u001B[0m,\n",
" \u001B[32m'user_input'\u001B[0m: \u001B[32m'今天北京天气怎么样?'\u001B[0m,\n",
" \u001B[32m'final_output'\u001B[0m: \u001B[32m'北京今天晴天。'\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: #008000; text-decoration-color: #008000\">'messages'</span>: <span style=\"font-weight: bold\">[</span>\n",
" <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">HumanMessage</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: #808000; text-decoration-color: #808000\">additional_kwargs</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: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'1faaf739-e9b1-466c-afe5-66a2adb4a56a'</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <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: #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\">445</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">277</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">722</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\">415</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\">445</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-e4455be0-ae94-94c1-822e-aba8ab733caa'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'finish_reason'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tool_calls'</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--019fbbff-64ca-7472-945f-04d88c4591e7-0'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tool_calls</span>=<span style=\"font-weight: bold\">[</span>\n",
" <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'name'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'get_weather'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'args'</span>: <span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'city'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'北京'</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'call_e6943007c96f4f68b1cf347a'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'type'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tool_call'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <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\">277</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">445</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">722</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\">415</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: #800080; text-decoration-color: #800080; font-weight: bold\">ToolMessage</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: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'f910e3c6-10ab-451c-b245-bcee5df7cc5e'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tool_call_id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'call_e6943007c96f4f68b1cf347a'</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <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: #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\">76</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">324</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">400</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\">46</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\">76</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-dad4c739-5e80-9372-b198-ecd7b6d74f59'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'finish_reason'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tool_calls'</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--019fbbff-722d-7c62-9855-7ecc715fd002-0'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tool_calls</span>=<span style=\"font-weight: bold\">[</span>\n",
" <span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'name'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'get_weather'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'args'</span>: <span style=\"font-weight: bold\">{</span><span style=\"color: #008000; text-decoration-color: #008000\">'city'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'北京'</span><span style=\"font-weight: bold\">}</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'id'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'call_46ea25112281427198ef735a'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'type'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tool_call'</span>\n",
" <span style=\"font-weight: bold\">}</span>\n",
" <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\">324</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">76</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">400</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\">46</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: #800080; text-decoration-color: #800080; font-weight: bold\">ToolMessage</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\">\"It's sunny in 北京\"</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">name</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'get_weather'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'c0370ecc-dd74-4f49-9c10-edf9db1952c8'</span>,\n",
" <span style=\"color: #808000; text-decoration-color: #808000\">tool_call_id</span>=<span style=\"color: #008000; text-decoration-color: #008000\">'call_46ea25112281427198ef735a'</span>\n",
" <span style=\"font-weight: bold\">)</span>,\n",
" <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: #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\">120</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prompt_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">373</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">493</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\">111</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\">120</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-f17bc70e-1954-9db1-a384-1ce904a1c118'</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--019fbbff-7554-7ed0-b994-e91d6be44b61-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\">373</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'output_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">120</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'total_tokens'</span>: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">493</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\">111</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=\"color: #008000; text-decoration-color: #008000\">'user_input'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'今天北京天气怎么样?'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'final_output'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'北京今天晴天。'</span>\n",
"<span style=\"font-weight: bold\">}</span>\n",
"</pre>\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 73
}
],
"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
}