From caf8088eacb5a99eecca0faab32219bc953dbcb6 Mon Sep 17 00:00:00 2001 From: Annyfee <2287551746@qq.com> Date: Wed, 14 Jan 2026 11:29:42 +0800 Subject: [PATCH] fix(m11/s02): optimize and correct code implementation --- m11_mcp_advanced/s02_final_mcp_main.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/m11_mcp_advanced/s02_final_mcp_main.py b/m11_mcp_advanced/s02_final_mcp_main.py index fb05dbf..9afb43b 100644 --- a/m11_mcp_advanced/s02_final_mcp_main.py +++ b/m11_mcp_advanced/s02_final_mcp_main.py @@ -1,3 +1,4 @@ +import json import os import asyncio @@ -6,7 +7,7 @@ from langchain_mcp_adapters.client import MultiServerMCPClient # LangChain/LangGraph 组件 from langchain_openai import ChatOpenAI -from langchain_core.messages import SystemMessage +from langchain_core.messages import SystemMessage, ToolMessage from langgraph.graph import StateGraph, MessagesState, START, END from langgraph.prebuilt import ToolNode @@ -64,7 +65,20 @@ def build_graph(available_tools): sys_prompt = "你是一个地理位置助手,请根据用户需求调用工具查询信息。" async def agent_node(state: MessagesState): - messages = [SystemMessage(content=sys_prompt)] + state["messages"] + # 格式化消息,确保ToolMessage的content是字符串 + formatted_messages = [] + for msg in state["messages"]: + if isinstance(msg,ToolMessage) and not isinstance(msg.content,str): + # 将list/dict转为JSON字符串 + formatted_messages.append( + ToolMessage( + content=json.dumps(msg.content,ensure_ascii=False), + tool_call_id=msg.tool_call_id + ) + ) + else: + formatted_messages.append(msg) + messages = [SystemMessage(content=sys_prompt)] + formatted_messages return {"messages": [await llm_with_tools.ainvoke(messages)]} workflow = StateGraph(MessagesState)