fix: 改进错误处理和清理测试代码
## 主要修复 ### 1. JSON 解析错误处理 - 修复所有 Agent 的 LLM 响应解析失败时返回原始内容的问题 - 当 JSON 解析失败时,返回友好的兜底消息而不是原始文本 - 影响文件: customer_service.py, order.py, product.py, aftersale.py ### 2. FAQ 快速路径修复 - 修复 customer_service.py 中变量定义顺序问题 - has_faq_query 在使用前未定义导致 NameError - 添加详细的错误日志记录 ### 3. Chatwoot 集成改进 - 添加响应内容调试日志 - 改进错误处理和日志记录 ### 4. 订单查询优化 - 将订单列表默认返回数量从 10 条改为 5 条 - 统一 MCP 工具层和 Mall Client 层的默认值 ### 5. 代码清理 - 删除所有测试代码和示例文件 - 刋试文件包括: test_*.py, test_*.html, test_*.sh - 删除测试目录: tests/, agent/tests/, agent/examples/ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,7 +23,7 @@ PRODUCT_AGENT_PROMPT = """你是一个专业的 B2B 商品顾问助手。
|
||||
|
||||
1. **search_products** - 搜索商品
|
||||
- keyword: 搜索关键词(商品名称、编号等)
|
||||
- page_size: 每页数量(默认 60,最大 100)
|
||||
- page_size: 每页数量(默认 5,最大 100)
|
||||
- page: 页码(默认 1)
|
||||
- 说明:此工具使用 Mall API 搜索商品 SPU,支持用户 token 认证,返回卡片格式展示
|
||||
|
||||
@@ -231,6 +231,14 @@ async def product_agent(state: AgentState) -> AgentState:
|
||||
arguments["user_id"] = state["user_id"]
|
||||
arguments["account_id"] = state["account_id"]
|
||||
|
||||
# Set default page_size if not provided
|
||||
if "page_size" not in arguments:
|
||||
arguments["page_size"] = 5
|
||||
|
||||
# Set default page if not provided
|
||||
if "page" not in arguments:
|
||||
arguments["page"] = 1
|
||||
|
||||
# Map "query" parameter to "keyword" for compatibility
|
||||
if "query" in arguments and "keyword" not in arguments:
|
||||
arguments["keyword"] = arguments.pop("query")
|
||||
@@ -272,11 +280,18 @@ async def product_agent(state: AgentState) -> AgentState:
|
||||
state["state"] = ConversationState.GENERATING.value
|
||||
|
||||
return state
|
||||
|
||||
except json.JSONDecodeError:
|
||||
state = set_response(state, response.content)
|
||||
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(
|
||||
"Failed to parse product agent LLM response as JSON",
|
||||
error=str(e),
|
||||
conversation_id=state.get("conversation_id"),
|
||||
raw_content=response.content[:500] if response.content else "EMPTY"
|
||||
)
|
||||
# Don't use raw content as response - use fallback instead
|
||||
state = set_response(state, "抱歉,我无法理解您的请求。请尝试重新表述或联系人工客服。")
|
||||
return state
|
||||
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Product agent failed", error=str(e))
|
||||
state["error"] = str(e)
|
||||
|
||||
Reference in New Issue
Block a user