From 15a4bdeb750c506c270ac26670b56f9d897d215c Mon Sep 17 00:00:00 2001 From: wangliang Date: Mon, 26 Jan 2026 18:10:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=BA=20search=5Fspu=5Fproducts=20?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E6=B3=A8=E5=85=A5=20user=5Ftoken=20=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 问题 即使更新了 Product Agent prompt,LLM 仍然调用 search_products 而非 search_spu_products ## 根本原因 search_spu_products 工具需要 user_token 参数(Mall API 认证必需), 但 product_agent 函数中没有注入此参数,导致工具调用失败或被忽略 ## 修改内容 ### agent/agents/product.py:169-173 在工具调用前注入 user_token、user_id、account_id 参数: ```python # Inject context for SPU product search (Mall API) if result["tool_name"] == "search_spu_products": arguments["user_token"] = state.get("user_token") arguments["user_id"] = state["user_id"] arguments["account_id"] = state["account_id"] ``` ## 参数来源 - user_token: 从 Chatwoot webhook 提取(contact.custom_attributes.jwt_token) - user_id: 从 AgentState 获取 - account_id: 从 AgentState 获取 ## 预期效果 LLM 现在可以成功调用 search_spu_products 工具, 返回 Mall API 商品数据并以 Chatwoot cards 格式展示 Co-Authored-By: Claude Sonnet 4.5 --- agent/agents/product.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/agent/agents/product.py b/agent/agents/product.py index beae1e9..44cfe57 100644 --- a/agent/agents/product.py +++ b/agent/agents/product.py @@ -165,12 +165,18 @@ async def product_agent(state: AgentState) -> AgentState: if action == "call_tool": arguments = result.get("arguments", {}) - + + # Inject context for SPU product search (Mall API) + if result["tool_name"] == "search_spu_products": + arguments["user_token"] = state.get("user_token") + arguments["user_id"] = state["user_id"] + arguments["account_id"] = state["account_id"] + # Inject context for recommendation if result["tool_name"] == "recommend_products": arguments["user_id"] = state["user_id"] arguments["account_id"] = state["account_id"] - + # Inject context for quote if result["tool_name"] == "get_quote": arguments["account_id"] = state["account_id"]