+ + 闲鱼商品搜索 +
+-
+
- 查询总页数:输入要获取的页数(1-20页),系统会一次性获取所有页面的数据 +
- 每页显示:前端分页显示的每页商品数量 +
- 数据来源:使用真实的闲鱼数据,通过浏览器自动化技术获取 +
diff --git a/.env.example b/.env similarity index 100% rename from .env.example rename to .env diff --git a/.gitignore b/.gitignore index 292795c..94e245b 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,6 @@ Thumbs.db *~ # Local environment files -.env + .env.local .env.*.local \ No newline at end of file diff --git a/AI回复指南.md b/AI回复指南.md deleted file mode 100644 index f700fd7..0000000 --- a/AI回复指南.md +++ /dev/null @@ -1,214 +0,0 @@ -# 🤖 AI回复功能使用指南 - -## 📋 功能概述 - -AI回复功能集成了先进的人工智能技术,为每个闲鱼账号提供智能化的客服回复能力。系统支持意图识别、智能议价、技术咨询等多种场景,让您的客服更加专业和高效。 - -## ✨ 核心特性 - -### 🎯 智能意图识别 -- **价格咨询**: 自动识别议价、优惠、降价等价格相关询问 -- **技术咨询**: 识别产品参数、使用方法、故障等技术问题 -- **通用咨询**: 处理商品介绍、物流、售后等常见问题 - -### 💰 智能议价系统 -- **阶梯式降价**: 根据议价轮数智能调整优惠幅度 -- **价值强调**: 突出商品优势,提高成交率 -- **议价限制**: 可设置最大优惠百分比和金额 - -### 🧠 多Agent专家系统 -- **分类Agent**: 负责意图识别和路由 -- **价格Agent**: 专业的议价专家 -- **技术Agent**: 产品技术支持专家 -- **默认Agent**: 通用客服助手 - -### 📝 上下文感知 -- **对话历史**: 记住完整的对话上下文 -- **商品信息**: 结合具体商品信息回复 -- **个性化**: 根据用户行为调整回复策略 - -## 🚀 快速开始 - -### 1. 启用AI回复 - -1. **进入账号管理页面** -2. **找到目标账号**,点击 🤖 **配置AI回复** 按钮 -3. **开启AI回复开关** -4. **配置API密钥** - -### 2. 配置API密钥 - -#### 通义千问 (推荐) -``` -模型: qwen-plus -API地址: https://dashscope.aliyuncs.com/compatible-mode/v1 -API密钥: 在阿里云DashScope控制台获取 -``` - -#### OpenAI GPT -``` -模型: gpt-3.5-turbo 或 gpt-4 -API地址: https://api.openai.com/v1 -API密钥: 在OpenAI控制台获取 -``` - -### 3. 议价策略配置 - -- **最大优惠百分比**: 建议设置5-15% -- **最大优惠金额**: 根据商品价值设置 -- **最大议价轮数**: 建议3-5轮 - -## ⚙️ 详细配置 - -### 基本设置 - -| 配置项 | 说明 | 推荐值 | -|--------|------|--------| -| AI模型 | 选择使用的AI模型 | qwen-plus | -| API地址 | AI服务的API地址 | 默认值 | -| API密钥 | 访问AI服务的密钥 | 必填 | - -### 议价设置 - -| 配置项 | 说明 | 推荐值 | -|--------|------|--------| -| 最大优惠百分比 | 最大可优惠的百分比 | 10% | -| 最大优惠金额 | 最大可优惠的金额 | 100元 | -| 最大议价轮数 | 最多允许议价的次数 | 3轮 | - -### 提示词自定义 - -可以自定义四种类型的提示词: - -```json -{ - "classify": "意图分类提示词", - "price": "议价专家提示词", - "tech": "技术专家提示词", - "default": "通用客服提示词" -} -``` - -## 🔄 工作流程 - -### 1. 消息接收 -系统接收到用户消息后,首先检查该账号是否启用AI回复。 - -### 2. 意图识别 -AI分析消息内容,识别用户意图: -- 价格相关 → 路由到价格专家 -- 技术相关 → 路由到技术专家 -- 其他咨询 → 路由到通用客服 - -### 3. 上下文构建 -- 获取对话历史 -- 加载商品信息 -- 统计议价次数 - -### 4. 智能回复 -根据意图类型和上下文信息,生成个性化回复。 - -### 5. 回复发送 -在回复前添加 `[AI回复]` 标识,便于区分。 - -## 📊 优先级说明 - -当账号启用AI回复后,系统回复优先级为: - -1. **🔥 API回复** (最高优先级) -2. **🤖 AI回复** (AI启用时) -3. **📝 关键词匹配** (AI禁用时) -4. **💬 默认回复** (最低优先级) - -> ⚠️ **重要**: 启用AI回复后,关键词匹配和默认回复将自动失效! - -## 🧪 功能测试 - -### 测试步骤 -1. 在AI回复配置页面,找到 **功能测试** 区域 -2. 输入测试消息,如:"这个商品能便宜点吗?" -3. 设置商品价格 -4. 点击 **测试AI回复** 按钮 -5. 查看生成的回复效果 - -### 测试场景 -- **议价测试**: "能便宜点吗?"、"最低多少钱?" -- **技术测试**: "这个怎么用?"、"有什么功能?" -- **通用测试**: "包邮吗?"、"什么时候发货?" - -## 💡 最佳实践 - -### 1. API密钥管理 -- 定期更换API密钥 -- 监控API使用量和费用 -- 设置合理的调用频率限制 - -### 2. 议价策略 -- 根据商品类型调整议价幅度 -- 高价值商品可设置更高的优惠金额 -- 低价商品建议限制议价轮数 - -### 3. 提示词优化 -- 根据实际业务场景自定义提示词 -- 定期分析回复效果,优化提示词 -- 保持回复风格的一致性 - -### 4. 监控和优化 -- 定期查看AI回复的效果 -- 分析用户反馈,调整配置 -- 监控API调用成本 - -## ⚠️ 注意事项 - -### 安全性 -- API密钥加密存储,但请定期更换 -- 建议使用子账号API密钥,限制权限 -- 监控异常调用,防止滥用 - -### 成本控制 -- AI回复会产生API调用费用 -- 建议设置合理的调用限制 -- 监控每日/每月的使用量 - -### 合规性 -- AI生成的内容可能需要人工审核 -- 确保回复内容符合平台规则 -- 避免过度承诺或误导用户 - -## 🔧 故障排除 - -### 常见问题 - -**Q: AI回复不生效?** -A: 检查以下项目: -- 账号是否启用AI回复 -- API密钥是否正确 -- 网络连接是否正常 -- API服务是否可用 - -**Q: 回复质量不佳?** -A: 尝试以下优化: -- 调整AI模型选择 -- 自定义提示词 -- 优化商品信息描述 -- 增加测试和调优 - -**Q: API调用失败?** -A: 检查以下方面: -- API密钥是否有效 -- API地址是否正确 -- 账户余额是否充足 -- 请求频率是否超限 - -## 📞 技术支持 - -如果您在使用过程中遇到问题,可以: - -1. 查看系统日志获取详细错误信息 -2. 使用测试功能验证配置是否正确 -3. 检查API服务商的状态页面 -4. 联系技术支持获取帮助 - ---- - -🎉 **恭喜!** 您已经掌握了AI回复功能的使用方法。开始享受智能化的客服体验吧! diff --git a/README.md b/README.md index 74a3715..3aa7824 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,14 @@ - **批量管理** - 支持批量查看、编辑商品信息 - **智能去重** - 自动去重,避免重复存储 -### 📊 系统监控 +### � 商品搜索功能 +- **真实数据获取** - 基于Playwright技术获取真实闲鱼商品数据 +- **智能排序** - 按"人想要"数量自动倒序排列 +- **多页搜索** - 支持一次性获取多页商品数据 +- **前端分页** - 灵活的前端分页显示 +- **商品详情** - 支持查看完整商品详情信息 + +### �📊 系统监控 - **实时日志** - 完整的操作日志记录和查看 - **性能监控** - 系统资源使用情况监控 - **健康检查** - 服务状态健康检查 @@ -87,10 +94,13 @@ cd xianyu-auto-reply # 2. 安装依赖 pip install -r requirements.txt -# 3. 启动系统 +# 3. 安装Playwright浏览器(商品搜索功能需要) +playwright install chromium + +# 4. 启动系统 python Start.py -# 4. 访问系统 +# 5. 访问系统 # http://localhost:8080 ``` @@ -143,6 +153,13 @@ docker rm -f xianyu-auto-reply - 支持文本内容和卡密文件两种发货方式 - 系统检测到付款消息时自动发货 +### 5. 使用商品搜索功能 +- 访问商品搜索页面(需要登录) +- 输入搜索关键词和查询页数 +- 系统自动获取真实闲鱼商品数据 +- 商品按"人想要"数量自动排序 +- 支持查看商品详情和跳转到闲鱼页面 + ## 🏗️ 系统架构 ``` @@ -183,11 +200,20 @@ xianyu-auto-reply/ ├── requirements.txt # Python依赖 ├── docker-compose.yml # Docker编排配置 ├── Dockerfile # Docker镜像构建 +├── utils/ # 工具模块 +│ ├── item_search.py # 商品搜索功能 +│ └── ... # 其他工具模块 ├── static/ # 前端静态文件 │ ├── index.html # 主界面 │ ├── login.html # 登录页面 │ ├── register.html # 注册页面 -│ └── ... # 其他页面和资源 +│ ├── item_search.html # 商品搜索页面 +│ ├── user_management.html # 用户管理页面 +│ ├── data_management.html # 数据管理页面 +│ ├── log_management.html # 日志管理页面 +│ └── lib/ # 本地静态资源库 +│ ├── bootstrap/ # Bootstrap框架 +│ └── bootstrap-icons/ # Bootstrap图标 ├── logs/ # 日志文件目录 ├── data/ # 数据库文件目录 └── backups/ # 备份文件目录 diff --git a/XianyuAutoAsync.py b/XianyuAutoAsync.py index 033e4fb..8364f8b 100644 --- a/XianyuAutoAsync.py +++ b/XianyuAutoAsync.py @@ -174,8 +174,7 @@ class XianyuLive: # 获取token token = None - if '_m_h5_tk' in self.cookies: - token = self.cookies['_m_h5_tk'].split('_')[0] + token = trans_cookies(self.cookies_str).get('_m_h5_tk', '').split('_')[0] if trans_cookies(self.cookies_str).get('_m_h5_tk') else '' sign = generate_sign(params['t'], token, data_val) params['sign'] = sign diff --git a/reply_server.py b/reply_server.py index 53ebc85..f45531c 100644 --- a/reply_server.py +++ b/reply_server.py @@ -180,6 +180,11 @@ def get_current_user(user_info: Dict[str, Any] = Depends(require_auth)) -> Dict[ return user_info +def get_current_user_optional(user_info: Optional[Dict[str, Any]] = Depends(verify_token)) -> Optional[Dict[str, Any]]: + """获取当前用户信息(可选,不强制要求登录)""" + return user_info + + def get_user_log_prefix(user_info: Dict[str, Any] = None) -> str: """获取用户日志前缀""" if user_info: @@ -433,6 +438,17 @@ async def data_management_page(): return HTMLResponse('
正在验证登录状态...
+