wangliang
|
0f13102a02
|
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>
|
2026-01-27 13:15:58 +08:00 |
|
wangliang
|
f4e77f39ce
|
fix: 修复 Mall API 数据提取逻辑和添加配置字段
## 问题 1: Settings 缺少 Mall API 配置
**错误**: `'Settings' object has no attribute 'mall_api_url'`
**原因**: Settings 类只有 hyperf 配置,缺少 Mall API 相关字段
**解决方案**: 添加 Mall API 配置字段(第 20-25 行)
```python
mall_api_url: str
mall_tenant_id: str = "2"
mall_currency_code: str = "EUR"
mall_language_id: str = "1"
mall_source: str = "us.qa1.gaia888.com"
```
## 问题 2: Mall API 数据结构解析错误
**现象**: 商品搜索始终返回 0 个商品
**原因**: Mall API 返回的数据结构与预期不符
**Mall API 实际返回**:
```json
{
"total": 0,
"data": {
"data": [], // ← 商品列表在这里
"isClothesClassification": false,
"ad": {...}
}
}
```
**代码原来查找**: `result.get("list", [])` ❌
**修复后查找**: `result["data"]["data"]` ✅
**解决方案**: 修改数据提取逻辑(第 317-323 行)
```python
if "data" in result and isinstance(result["data"], dict):
products = result["data"].get("data", [])
else:
products = result.get("list", []) # 向后兼容
total = result.get("total", 0)
```
## 调试增强
添加 print 调试语句:
- 第 292 行:打印调用参数
- 第 315 行:打印 Mall API 返回结果
便于诊断 API 调用问题。
## 测试结果
修复前:
```
'Settings' object has no attribute 'mall_api_url'
```
修复后:
```json
{
"success": true,
"products": [],
"total": 0,
"keyword": "61607"
}
```
✅ 工具调用成功
⚠️ 返回 0 商品(可能是关键词无匹配)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-26 18:43:46 +08:00 |
|
wangliang
|
74c28eb838
|
fix: 添加工具注册表和 HTTP 路由,修复 MCP 工具调用 404 错误
## 问题
Product MCP 工具调用返回 404:
```
POST /tools/search_products HTTP/1.1 404 Not Found
```
## 根本原因
1. Product MCP 缺少 `/tools/{tool_name}` HTTP 路由
2. FastMCP 的 `mcp.http_app()` 默认不暴露此路由
3. Order MCP 有自定义路由处理,Product MCP 没有
## 解决方案
### 1. 添加工具注册表
**位置**: 第 32-41 行
```python
# Tool registry for HTTP access
_tools: Dict[str, Any] = {}
def register_tool(name: str):
"""Decorator to register tool in _tools dict"""
def decorator(func):
_tools[name] = func
return func
return decorator
```
### 2. 为所有工具添加注册装饰器
**修改的工具**:
- `get_product_detail`
- `recommend_products`
- `get_quote`
- `check_inventory`
- `get_categories`
- `search_products`
- `health_check`
**示例**:
```python
@register_tool("search_products")
@mcp.tool()
async def search_products(...):
```
### 3. 添加 HTTP 路由处理
**位置**: 第 352-401 行
参考 Order MCP 实现,添加:
- `/tools/{tool_name}` POST 路由
- 工具调用逻辑:`tool_obj.run(arguments)`
- 结果提取和 JSON 解析
- 错误处理(404, 400, 500)
### 4. 配置路由列表
**位置**: 第 407-415 行
```python
routes = [
Route('/health', health_check, methods=['GET']),
Route('/tools/{tool_name}', execute_tool, methods=['POST'])
]
```
## 测试结果
```bash
curl -X POST http://localhost:8004/tools/search_products \
-H "Content-Type: application/json" \
-d '{"keyword": "ring"}'
```
返回:
```json
{
"success": true,
"result": {
"success": false,
"error": "用户未登录,请先登录账户以搜索商品",
"products": [],
"total": 0,
"require_login": true
}
}
```
✅ 工具调用成功(user_token 缺失是预期行为)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-26 18:32:16 +08:00 |
|
wangliang
|
ad7f30d54c
|
fix: 删除旧的 search_products 工具,解决工具名冲突
## 问题
Product MCP 启动时出现警告:
```
WARNING Tool already exists: search_products
```
导致工具调用时返回 404 错误:
```
POST /tools/search_products HTTP/1.1 404 Not Found
```
## 根本原因
Product MCP 中有两个同名工具:
1. **第 40-99 行**:旧的 `search_products`(使用 Hyperf API)
2. **第 292-378 行**:新的 `search_products`(使用 Mall API)
FastMCP 无法注册同名工具,导致注册失败。
## 解决方案
删除旧的 `search_products` 工具定义(第 40-99 行),保留新的使用 Mall API 的版本。
## 修改内容
**文件**: mcp_servers/product_mcp/server.py
- 删除第 40-99 行(旧的 search_products 工具)
- 保留第 291 行开始的新的 search_products 工具
## 影响
- 移除了基于 Hyperf API 的旧搜索功能
- 所有商品搜索统一使用 Mall API
- 不再支持复杂过滤条件(category, brand, price_range 等)
- 简化为关键词搜索,返回商品卡片格式
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-26 18:25:06 +08:00 |
|
wangliang
|
7b676f8015
|
refactor: 将 search_spu_products 重命名为 search_products
## 修改内容
### 1. Product Agent prompt
- 将工具名从 `search_spu_products` 改为 `search_products`
- 更新所有示例代码
- 保持功能说明不变(Mall API SPU 搜索)
### 2. Product Agent 代码
**文件**: agent/agents/product.py
**修改**:
- 第 24 行:工具名改为 `search_products`
- 第 65、77 行:示例中的工具名更新
- 第 219-230 行:注入逻辑改为检查 `search_products`
- 第 284 行:工具结果检查改为 `search_products`
- 第 279-333 行:变量名 `spu_products` → `products`
- 第 280 行:`has_spu_search_result` → `has_product_search_result`
### 3. Product MCP Server
**文件**: mcp_servers/product_mcp/server.py
**修改**:
- 第 292 行:函数名 `search_spu_products` → `search_products`
- 第 300 行:文档字符串更新
- 功能完全相同,只是重命名
### 4. 移除映射逻辑
- 移除了 `search_products` → `search_spu_products` 的工具名映射
- 保留了 `query` → `keyword` 的参数映射(向后兼容)
## 好处
1. **简化命名**:`search_products` 比 `search_spu_products` 更简洁
2. **统一接口**:与系统中其他搜索工具命名一致
3. **降低复杂度**:减少名称长度和冗余
## 向后兼容
参数映射保留:
```python
# 仍然支持旧参数名
{"query": "ring"} → {"keyword": "ring"}
```
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-26 18:22:23 +08:00 |
|
wangliang
|
0b5d0a8086
|
feat: 重构订单和物流信息展示格式
主要改动:
- 订单列表:使用 order_list 格式,展示 5 个订单(全部状态)
- 订单详情:使用 order_detail 格式,优化价格和时间显示
- 物流信息:使用 logistics 格式,根据 track id 动态生成步骤
- 商品图片:从 orderProduct.imageUrl 字段获取
- 时间格式:统一为 YYYY-MM-DD HH:MM:SS
- 多语言支持:amountLabel、orderTime 支持中英文
- 配置管理:新增 FRONTEND_URL 环境变量
- API 集成:改进 Mall API tracks 数据解析
- 认证优化:account_id 从 webhook 动态获取
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-23 18:49:40 +08:00 |
|
wangliang
|
e8e89601a5
|
feat: 修复订单查询和物流查询功能
主要修改:
1. 订单数据解析修复 (agent/agents/order.py)
- 修复 Mall API 返回数据的嵌套结构解析
- 更新字段映射:orderId→order_id, orderProduct→items, statusText→status_text
- 支持多种商品图片字段:image, pic, thumb, productImg
- 添加详细的调试日志
2. 物流查询修复 (mcp_servers/order_mcp/server.py)
- 修复物流接口返回数据结构解析 (data[].trackingCode→tracking_number)
- 添加 print() 日志用于调试
- 支持多种字段名映射
3. Chatwoot 集成优化 (agent/integrations/chatwoot.py)
- 添加 json 模块导入
- 完善订单卡片和表单展示功能
4. API 请求头优化 (mcp_servers/shared/mall_client.py)
- 更新 User-Agent 和 Accept 头
- 修正 Origin 和 Referer 大小写
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-20 19:10:21 +08:00 |
|
wangliang
|
c4e97cf312
|
feat: 添加物流查询功能和完善 token 传递
- 添加 get_logistics 工具查询 Mall API /mall/api/order/parcel
- 修复 Cookie token 传递到 MCP 的问题
- 增强 LLM 客户端超时处理和日志
- 移除 MALL_API_TOKEN,使用用户登录 token
- 更新测试页面使用 setUser 设置用户属性
- 增强 webhook 调试日志
|
2026-01-16 18:36:17 +08:00 |
|
wangliang
|
e093995368
|
feat: 增强 Agent 系统和完善项目结构
主要改进:
- Agent 增强: 订单查询、售后支持、客服路由等功能优化
- 新增语言检测和 Token 管理模块
- 改进 Chatwoot webhook 处理和用户标识
- MCP 服务器增强: 订单 MCP 和 Strapi MCP 功能扩展
- 新增商城客户端、知识库、缓存和同步模块
- 添加多语言提示词系统 (YAML)
- 完善项目结构: 整理文档、脚本和测试文件
- 新增调试和测试工具脚本
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-16 16:28:47 +08:00 |
|
wangliang
|
0e59f3067e
|
feat: 添加 Strapi 配置文件支持
- 新增 config.yaml:集中管理 Strapi API 配置
- 新增 config_loader.py:配置加载模块
- 更新 http_routes.py:从配置文件读取 API 端点
- 支持从 YAML 文件配置 FAQ 分类和语言
- 更新 requirements.txt:添加 pyyaml 依赖
优势:
- 配置与代码分离,易于维护
- 添加新分类无需修改代码
- 支持热加载配置
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-15 10:39:25 +08:00 |
|
|
|
3ad6eee0d9
|
feat: 初始化 B2B AI Shopping Assistant 项目
- 配置 Docker Compose 多服务编排
- 实现 Chatwoot + Agent 集成
- 配置 Strapi MCP 知识库
- 支持 7 种语言的 FAQ 系统
- 实现 LangGraph AI 工作流
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-14 19:25:22 +08:00 |
|