From e863845c7e2600982a9e756f6932fa10a322b679 Mon Sep 17 00:00:00 2001 From: ymwang <1356915197@qq.com> Date: Wed, 17 Dec 2025 11:28:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=B7=A8=E5=A2=833C=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E9=80=89=E5=93=81=E6=99=BA=E8=83=BD=E5=8A=A9=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- media_3c_agent.py | 726 ++++++++++++++++++ requirements.txt | 18 + web_app.py | 568 ++++++++++++++ ...00\346\234\257\346\226\207\346\241\243.md" | 375 +++++++++ 4 files changed, 1687 insertions(+) create mode 100644 media_3c_agent.py create mode 100644 requirements.txt create mode 100644 web_app.py create mode 100644 "\346\212\200\346\234\257\346\226\207\346\241\243.md" diff --git a/media_3c_agent.py b/media_3c_agent.py new file mode 100644 index 0000000..0eb173d --- /dev/null +++ b/media_3c_agent.py @@ -0,0 +1,726 @@ +import os +import json +from datetime import datetime +from lazyllm import OnlineChatModule, WebModule, pipeline, TrainableModule +import re + +# 跨境3C配件选品智能助手Agent +class CrossBorder3CAgent: + def __init__(self): + # 初始化LazyLLM聊天模块 + try: + # 首先尝试使用OnlineChatModule + self.chat_module = self._init_local_model() + print(f"成功加载模型") + except Exception as e: + print(f"无法初始化模型: {e}") + try: + # 如果模型加载失败,尝试在线模型 + self.chat_module = OnlineChatModule() + print("成功加载在线模型") + except Exception as e2: + print(f"无法初始化在线模型: {e2}") + print("请设置API密钥,例如:export OPENAI_API_KEY=your_key") + # 使用模拟的聊天模块作为后备 + self.chat_module = self._create_mock_chat_module() + print("使用模拟聊天模块作为后备方案") + + # 3C配件类别数据 + self.product_categories = { + "手机配件": { + "subcategories": ["手机壳", "手机膜", "充电器", "数据线", "移动电源", "无线充电器", "手机支架"], + "features": ["便携性", "兼容性", "耐用性", "设计感"] + }, + "电脑配件": { + "subcategories": ["笔记本支架", "键盘", "鼠标", "散热器", "USB集线器", "网线", "摄像头"], + "features": ["人体工学", "兼容性", "性能", "便携性"] + }, + "音频设备": { + "subcategories": ["耳机", "音箱", "麦克风", "音频线", "解码器", "耳放"], + "features": ["音质", "降噪", "舒适度", "续航"] + }, + "智能穿戴": { + "subcategories": ["智能手表", "智能手环", "智能眼镜", "智能戒指", "智能项链"], + "features": ["健康监测", "续航", "防水", "兼容性"] + }, + "摄影配件": { + "subcategories": ["相机包", "三脚架", "镜头", "滤镜", "闪光灯", "存储卡"], + "features": ["便携性", "防护性", "兼容性", "稳定性"] + } + } + + # 目标市场数据 + self.target_markets = { + "北美": { + "countries": ["美国", "加拿大"], + "preferences": ["高品质", "品牌认知", "创新功能", "环保材料"], + "price_sensitivity": "中低", + "logistics_cost_factor": 1.2 + }, + "欧洲": { + "countries": ["德国", "英国", "法国", "意大利", "西班牙"], + "preferences": ["环保认证", "质量标准", "设计感", "隐私保护"], + "price_sensitivity": "中", + "logistics_cost_factor": 1.3 + }, + "东南亚": { + "countries": ["新加坡", "马来西亚", "泰国", "越南", "菲律宾"], + "preferences": ["性价比", "耐用性", "多功能", "本地化适配"], + "price_sensitivity": "高", + "logistics_cost_factor": 0.8 + } + } + + # 构建选品流程 + self.selection_pipeline = self._build_selection_pipeline() + + # 构建对话流程 + self.chat_pipeline = self._build_chat_pipeline() + + def _init_local_model(self): + """初始化本地模型""" + try: + # 尝试从环境变量获取API密钥 + api_key = os.environ.get("DOUBAO_API_KEY") or os.environ.get("LAZYLLM_DOUBAO_API_KEY") or os.environ.get("OPENAI_API_KEY") + if api_key: + print("检测到环境变量中的API密钥,使用在线模型") + try: + # 优先尝试豆包模型 + if os.environ.get("DOUBAO_API_KEY") or os.environ.get("LAZYLLM_DOUBAO_API_KEY"): + model = OnlineChatModule( + source="doubao", + api_key=api_key + ) + else: + # 如果没有豆包密钥但有OpenAI密钥,尝试OpenAI + model = OnlineChatModule( + source="openai", + api_key=api_key + ) + + # 测试API密钥是否有效 + try: + test_response = model("测试") + print("API密钥验证成功,使用在线模型") + return model + except Exception as test_error: + print(f"API密钥验证失败: {str(test_error)}") + print("将尝试其他模型选项") + # 继续尝试其他选项 + except Exception as api_error: + print(f"使用API密钥初始化在线模型失败: {str(api_error)}") + print("将尝试其他模型选项") + # 继续尝试其他选项 + + # 尝试加载本地模型 + local_model_path = os.environ.get("LOCAL_MODEL_PATH") + if local_model_path: + if os.path.exists(local_model_path): + print(f"尝试加载本地模型: {local_model_path}") + try: + model = TrainableModule(local_model_path) + # 尝试启动模型 + try: + model.start() + print("本地模型启动成功") + except Exception as start_error: + print(f"本地模型启动失败: {str(start_error)}") + print("将尝试使用在线模型作为后备") + raise start_error + return model + except Exception as e: + print(f"加载本地模型失败: {str(e)}") + else: + print(f"本地模型路径不存在: {local_model_path}") + + # 尝试使用常见的本地模型路径 + common_model_paths = [ + os.path.expanduser("~/.cache/huggingface/hub"), + "/models", + "./models" + ] + + for path in common_model_paths: + if os.path.exists(path): + print(f"尝试从常见路径加载模型: {path}") + try: + # 尝试列出目录中的模型 + model_dirs = [d for d in os.listdir(path) + if os.path.isdir(os.path.join(path, d))] + if model_dirs: + # 尝试第一个模型目录 + model_path = os.path.join(path, model_dirs[0]) + print(f"找到模型目录: {model_path}") + model = TrainableModule(model_path) + # 尝试启动模型 + try: + model.start() + print("本地模型启动成功") + return model + except Exception as start_error: + print(f"本地模型启动失败: {str(start_error)}") + print("将尝试下一个模型或在线模型") + continue + except Exception as e: + print(f"从常见路径加载模型失败: {str(e)}") + continue + + # 尝试使用在线模型 + print("尝试使用在线模型...") + try: + model = OnlineChatModule(source="doubao") + # 测试模型是否可用 + try: + test_response = model("测试") + print("在线模型验证成功") + return model + except Exception as test_error: + print(f"在线模型验证失败: {str(test_error)}") + # 使用模拟聊天模块作为后备 + print("使用模拟聊天模块作为后备") + model = self._create_mock_chat_module() + return model + except Exception as online_error: + print(f"在线模型初始化失败: {str(online_error)}") + # 使用模拟聊天模块作为后备 + print("使用模拟聊天模块作为后备") + model = self._create_mock_chat_module() + return model + except Exception as e: + print(f"初始化模型失败: {str(e)}") + # 使用模拟聊天模块作为后备 + print("使用模拟聊天模块作为后备") + model = self._create_mock_chat_module() + return model + + def _create_mock_chat_module(self): + """创建模拟聊天模块作为后备方案""" + class MockChatModule: + def __call__(self, prompt): + # 简单的模拟响应 + if "产品类别" in prompt or "选择最合适的一个" in prompt: + return "手机配件" + elif "热门的" in prompt and "产品" in prompt: + return """```json + { + "products": [ + { + "name": "智能无线充电器", + "features": ["快速充电", "多设备兼容", "便携设计"], + "target_audience": "科技爱好者", + "price_range": {"min": 25, "max": 60} + }, + { + "name": "多功能手机支架", + "features": ["可调节角度", "稳固支撑", "折叠便携"], + "target_audience": "办公室工作人员", + "price_range": {"min": 15, "max": 35} + } + ] + } + ```""" + elif "供应商" in prompt or "成本" in prompt: + return """```json + { + "production_cost": {"min": 8, "max": 20}, + "logistics_cost": {"min": 5, "max": 15}, + "tariffs": {"percentage": 10}, + "risks": ["供应链延迟", "原材料价格波动"], + "supplier_type": "OEM工厂" + } + ```""" + elif "竞争对手" in prompt or "竞争分析" in prompt: + return """```json + { + "competitors": [ + { + "name": "品牌A", + "price_range": {"min": 30, "max": 70}, + "market_share": "25%", + "strengths": ["品牌知名度", "分销渠道"], + "weaknesses": ["价格较高", "创新不足"] + } + ] + } + ```""" + else: + return "这是一个模拟响应,请配置API密钥以获取真实的大模型响应。" + + return MockChatModule() + + def _build_selection_pipeline(self): + """构建3C配件选品流程""" + + def market_analysis(user_input): + """市场分析:根据用户需求分析目标市场和产品类别""" + # 提取目标市场 + target_market = None + for market in self.target_markets: + if market in user_input: + target_market = market + break + + # 如果没有指定市场,默认为北美 + if not target_market: + target_market = "北美" + + # 提取产品类别 + product_category = None + for category in self.product_categories: + if category in user_input: + product_category = category + break + + # 如果没有指定类别,使用大模型分析 + if not product_category: + prompt = f""" + 根据用户需求"{user_input}",从以下3C配件类别中选择最合适的一个: + {list(self.product_categories.keys())} + + 只回答类别名称,不需要解释。 + """ + product_category = self.chat_module(prompt).strip() + if product_category not in self.product_categories: + product_category = "手机配件" # 默认类别 + + return { + "target_market": target_market, + "product_category": product_category, + "market_info": self.target_markets[target_market], + "category_info": self.product_categories[product_category] + } + + def product_research(analysis_result): + """产品研究:基于市场和类别研究热门产品""" + target_market = analysis_result["target_market"] + product_category = analysis_result["product_category"] + + # 构建产品研究提示 + prompt = f""" + 作为跨境电商选品专家,请为{target_market}市场研究5款热门的{product_category}产品。 + + 要求: + 1. 每款产品包含:产品名称、主要特点、目标客户群体、价格区间(美元) + 2. 考虑{target_market}市场的消费者偏好:{', '.join(analysis_result['market_info']['preferences'])} + 3. 考虑价格敏感度:{analysis_result['market_info']['price_sensitivity']} + 4. 产品应具有创新性和差异化优势 + 5. 以JSON格式返回,包含products数组,每个产品包含name, features, target_audience, price_range字段 + + 示例格式: + {{ + "products": [ + {{ + "name": "产品名称", + "features": ["特点1", "特点2"], + "target_audience": "目标客户群体", + "price_range": {{ + "min": 10, + "max": 50 + }} + }} + ] + }} + """ + + try: + response = self.chat_module(prompt) + # 尝试解析JSON + if "```json" in response: + json_str = response.split("```json")[1].split("```")[0].strip() + else: + # 尝试提取JSON部分 + json_match = re.search(r'\{.*\}', response, re.DOTALL) + json_str = json_match.group(0) if json_match else response + + product_data = json.loads(json_str) + return { + **analysis_result, + "researched_products": product_data.get("products", []) + } + except Exception as e: + print(f"解析产品研究数据失败: {e}") + # 返回默认产品数据 + default_products = [ + { + "name": f"智能{product_category}A", + "features": ["创新设计", "高性能", "易用性"], + "target_audience": "科技爱好者", + "price_range": {"min": 20, "max": 60} + }, + { + "name": f"便携{product_category}B", + "features": ["轻便", "多功能", "性价比高"], + "target_audience": "学生和上班族", + "price_range": {"min": 15, "max": 40} + } + ] + + return { + **analysis_result, + "researched_products": default_products + } + + def supplier_analysis(research_result): + """供应商分析:分析潜在供应商和成本结构""" + products = research_result["researched_products"] + target_market = research_result["target_market"] + logistics_factor = research_result["market_info"]["logistics_cost_factor"] + + analyzed_products = [] + + for product in products: + # 构建供应商分析提示 + prompt = f""" + 作为供应链专家,请分析"{product['name']}"的供应商情况: + + 1. 估算生产成本(基于产品特点和价格区间) + 2. 估算物流成本(考虑{target_market}市场,物流系数{logistics_factor}) + 3. 估算关税和税费 + 4. 识别潜在供应链风险 + 5. 推荐供应商类型(工厂、贸易公司等) + + 以JSON格式返回,包含production_cost, logistics_cost, tariffs, risks, supplier_type字段 + """ + + try: + response = self.chat_module(prompt) + # 尝试解析JSON + if "```json" in response: + json_str = response.split("```json")[1].split("```")[0].strip() + else: + # 尝试提取JSON部分 + json_match = re.search(r'\{.*\}', response, re.DOTALL) + json_str = json_match.group(0) if json_match else response + + analysis_data = json.loads(json_str) + except Exception as e: + print(f"解析供应商分析数据失败: {e}") + # 返回默认分析数据 + price_mid = (product["price_range"]["min"] + product["price_range"]["max"]) / 2 + analysis_data = { + "production_cost": price_mid * 0.3, + "logistics_cost": price_mid * 0.1 * logistics_factor, + "tariffs": price_mid * 0.05, + "risks": ["供应链不稳定", "质量波动"], + "supplier_type": "工厂直销" + } + + # 计算利润率 + # 确保cost_analysis中的值是数字类型 + try: + production_cost = float(analysis_data.get("production_cost", 0)) + # 如果production_cost是字典,尝试获取其中的值 + if isinstance(production_cost, dict): + production_cost = float(production_cost.get("min", production_cost.get("max", 0))) + except (ValueError, TypeError): + production_cost = 0 + + try: + logistics_cost = float(analysis_data.get("logistics_cost", 0)) + # 如果logistics_cost是字典,尝试获取其中的值 + if isinstance(logistics_cost, dict): + logistics_cost = float(logistics_cost.get("min", logistics_cost.get("max", 0))) + except (ValueError, TypeError): + logistics_cost = 0 + + try: + tariffs = float(analysis_data.get("tariffs", 0)) + # 如果tariffs是字典,尝试获取其中的值 + if isinstance(tariffs, dict): + tariffs = float(tariffs.get("percentage", tariffs.get("min", tariffs.get("max", 0)))) + except (ValueError, TypeError): + tariffs = 0 + + total_cost = production_cost + logistics_cost + tariffs + avg_price = (product["price_range"]["min"] + product["price_range"]["max"]) / 2 + profit_margin = (avg_price - total_cost) / avg_price * 100 + + analyzed_products.append({ + **product, + "cost_analysis": analysis_data, + "total_cost": total_cost, + "average_price": avg_price, + "profit_margin": profit_margin + }) + + return { + **research_result, + "analyzed_products": analyzed_products + } + + def competition_analysis(analysis_result): + """竞争分析:分析市场竞争格局和差异化机会""" + products = analysis_result["analyzed_products"] + target_market = analysis_result["target_market"] + product_category = analysis_result["product_category"] + + competition_results = [] + + for product in products: + # 构建竞争分析提示 + prompt = f""" + 作为市场分析师,请分析"{product['name']}"在{target_market}{product_category}市场的竞争情况: + + 1. 识别主要竞争对手(2-3个) + 2. 分析竞争对手定价策略 + 3. 识别市场空白和差异化机会 + 4. 评估市场进入难度 + 5. 提供差异化建议 + + 以JSON格式返回,包含competitors, pricing_strategy, market_gaps, entry_difficulty, differentiation字段 + """ + + try: + response = self.chat_module(prompt) + # 尝试解析JSON + if "```json" in response: + json_str = response.split("```json")[1].split("```")[0].strip() + else: + # 尝试提取JSON部分 + json_match = re.search(r'\{.*\}', response, re.DOTALL) + json_str = json_match.group(0) if json_match else response + + competition_data = json.loads(json_str) + except Exception as e: + print(f"解析竞争分析数据失败: {e}") + # 返回默认分析数据 + competition_data = { + "competitors": ["品牌A", "品牌B"], + "pricing_strategy": "中高端定价", + "market_gaps": ["环保材料", "个性化定制"], + "entry_difficulty": "中等", + "differentiation": ["创新设计", "优质材料"] + } + + competition_results.append({ + **product, + "competition_analysis": competition_data + }) + + return { + **analysis_result, + "competition_results": competition_results + } + + def generate_recommendation(competition_result): + """生成最终推荐:基于所有分析生成选品推荐""" + products = competition_result["competition_results"] + target_market = competition_result["target_market"] + product_category = competition_result["product_category"] + + # 按利润率排序 + sorted_products = sorted(products, key=lambda x: x["profit_margin"], reverse=True) + + # 构建推荐提示 + top_products = sorted_products[:3] # 取前3个产品 + products_summary = "\n".join([ + f"{i+1}. {p['name']}: 利润率{p['profit_margin']:.1f}%, 市场差异化: {', '.join(p['competition_analysis'].get('differentiation', ['无差异化信息']))}" + for i, p in enumerate(top_products) + ]) + + prompt = f""" + 基于以下分析结果,为{target_market}{product_category}市场提供选品建议: + + 产品分析结果: + {products_summary} + + 请提供: + 1. 最推荐的产品及理由 + 2. 市场进入策略 + 3. 风险控制建议 + 4. 长期发展规划 + + 以专业、简洁的顾问口吻回答,突出关键建议。 + """ + + recommendation = self.chat_module(prompt) + + return { + "market": target_market, + "category": product_category, + "top_recommendations": sorted_products[:3], + "detailed_recommendation": recommendation, + "generation_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + # 构建流程 + return pipeline([ + market_analysis, + product_research, + supplier_analysis, + competition_analysis, + generate_recommendation + ]) + + def _build_chat_pipeline(self): + """构建对话流程""" + + def intent_recognition(user_input): + """意图识别:识别用户意图是选品咨询还是其他问题""" + prompt = f""" + 请识别用户意图:"用户说:{user_input}" + + 意图类型: + 1. 选品咨询 - 用户想要获取产品选品建议 + 2. 市场咨询 - 用户想了解市场情况 + 3. 产品咨询 - 用户想了解特定产品信息 + 4. 其他 - 其他类型问题 + + 只回答意图类型编号(1-4),不需要解释。 + """ + + try: + intent = self.chat_module(prompt).strip() + intent_map = { + "1": "选品咨询", + "2": "市场咨询", + "3": "产品咨询", + "4": "其他" + } + return intent_map.get(intent, "其他") + except: + return "其他" + + def response_generation(user_input, intent): + """根据意图生成回复""" + if intent == "选品咨询": + # 调用选品流程 + try: + result = self.selection_pipeline(user_input) + return self._format_selection_result(result) + except Exception as e: + return f"选品分析过程中出现错误:{str(e)}。请尝试重新描述您的需求。" + + elif intent == "市场咨询": + prompt = f""" + 作为跨境电商市场专家,请回答以下市场咨询问题: + 用户问题:{user_input} + + 请提供专业、简洁的回答,重点关注北美、欧洲和东南亚市场。 + """ + return self.chat_module(prompt) + + elif intent == "产品咨询": + prompt = f""" + 作为3C配件产品专家,请回答以下产品咨询问题: + 用户问题:{user_input} + + 请提供专业、准确的产品信息和建议。 + """ + return self.chat_module(prompt) + + else: + prompt = f""" + 作为跨境3C配件选品智能助手,请回答以下问题: + 用户问题:{user_input} + + 请提供专业、有帮助的回答。如果问题超出范围,请礼貌说明。 + """ + return self.chat_module(prompt) + + # 构建对话流程 + def chat_process(user_input): + intent = intent_recognition(user_input) + response = response_generation(user_input, intent) + return { + "user_input": user_input, + "intent": intent, + "response": response, + "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + return chat_process + + def _format_selection_result(self, result): + """格式化选品结果为易读的文本""" + # 检查result是否为字典类型 + if not isinstance(result, dict): + return f"选品结果格式错误:期望字典类型,收到{type(result).__name__}类型\n\n原始内容:\n{str(result)}" + + # 检查必要的键是否存在 + required_keys = ['market', 'category', 'generation_time', 'top_recommendations', 'detailed_recommendation'] + for key in required_keys: + if key not in result: + return f"选品结果格式错误:缺少必要字段 {key}" + + response = f""" +## 🌍 {result['market']}市场{result['category']}选品分析报告 + +**生成时间:** {result['generation_time']} + +### 📊 推荐产品 + +""" + + # 检查top_recommendations是否为列表 + if not isinstance(result['top_recommendations'], list): + response += "推荐产品数据格式错误:期望列表类型\n\n" + else: + for i, product in enumerate(result['top_recommendations'], 1): + # 检查product是否为字典且包含必要字段 + if not isinstance(product, dict): + response += f"产品 {i} 数据格式错误:期望字典类型,收到{type(product).__name__}类型\n\n" + continue + + # 检查必要字段是否存在 + product_required_keys = ['name', 'target_audience', 'price_range', 'profit_margin', 'features', 'competition_analysis'] + missing_keys = [key for key in product_required_keys if key not in product] + if missing_keys: + response += f"产品 {i} 缺少必要字段: {', '.join(missing_keys)}\n\n" + continue + + # 检查price_range是否为字典且包含min和max + if not isinstance(product['price_range'], dict) or 'min' not in product['price_range'] or 'max' not in product['price_range']: + response += f"产品 {i} 价格范围格式错误\n\n" + continue + + # 检查competition_analysis是否为字典且包含differentiation和entry_difficulty + if not isinstance(product['competition_analysis'], dict) or 'differentiation' not in product['competition_analysis'] or 'entry_difficulty' not in product['competition_analysis']: + response += f"产品 {i} 竞争分析格式错误\n\n" + continue + + response += f""" +**{i}. {product['name']}** +- 目标客户:{product['target_audience']} +- 价格区间:${product['price_range']['min']}-${product['price_range']['max']} +- 预估利润率:{product['profit_margin']:.1f}% +- 产品特点:{', '.join(product['features'])} +- 差异化优势:{', '.join(product['competition_analysis']['differentiation'])} +- 市场进入难度:{product['competition_analysis']['entry_difficulty']} + +""" + + response += f""" +### 💡 专业建议 + +{result['detailed_recommendation']} + +--- +*本分析由跨境3C配件选品智能助手基于LazyLLM框架生成* + """ + + return response + + def chat(self, user_input): + """处理用户输入并返回回复""" + result = self.chat_pipeline(user_input) + # 如果结果是字典,返回response字段;否则直接返回结果 + if isinstance(result, dict): + return result.get("response", str(result)) + return result + + def start_web_chat(self): + """启动Web聊天界面""" + # 创建Web模块 + web_module = WebModule(self.chat_pipeline) + # 启动Web服务 + web_module.start().wait() + +# 主函数 +if __name__ == "__main__": + # 创建3C配件选品智能助手 + agent = CrossBorder3CAgent() + + # 启动Web聊天界面 + print("正在启动跨境3C配件选品智能助手Web界面...") + agent.start_web_chat() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d119c62 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,18 @@ +lazyllm>=0.1.0 +transformers>=4.30.0 +pydantic>=2.0.0 +requests>=2.31.0 +pandas>=2.0.0 +flask>=2.0.0 +numpy>=1.24.0 +matplotlib>=3.7.0 +openai>=1.0.0 # 用于真实API调用 +tiktoken>=0.5.0 # 用于token计算 +aiohttp>=3.8.0 # 用于异步HTTP请求 +asyncio # 用于异步处理 +torch>=2.0.0 # 本地模型所需 +accelerate>=0.20.0 # 本地模型加速 +sentencepiece>=0.1.99 # 本地模型分词 +protobuf>=3.20.0 # 本地模型依赖 +scipy>=1.10.0 # 本地模型依赖 +modelscope>=1.30.0 # 本地模型下载和管理 \ No newline at end of file diff --git a/web_app.py b/web_app.py new file mode 100644 index 0000000..a3e423c --- /dev/null +++ b/web_app.py @@ -0,0 +1,568 @@ +from flask import Flask, render_template_string, request, jsonify +from media_3c_agent import CrossBorder3CAgent + +app = Flask(__name__) + +# 创建3C配件选品智能助手实例 +agent = CrossBorder3CAgent() + +# HTML模板 +html_template = ''' + + + + + + 跨境3C配件选品智能助手 + + + +
+
+

🌍 跨境3C配件选品智能助手

+

基于LazyLLM框架的智能选品顾问,助您开拓全球市场

+
+ +
+

功能特点

+
+
+

🎯 智能选品分析

+

基于市场数据和AI分析,为您提供精准的3C配件选品建议

+
+
+

🌐 全球市场洞察

+

覆盖北美、欧洲、东南亚等主要市场,了解各地消费者偏好

+
+
+

💰 成本利润分析

+

全面分析产品成本、物流费用和预期利润率,优化定价策略

+
+
+

🔍 竞争格局研究

+

深入分析竞争对手和市场机会,找到差异化优势

+
+
+
+ +
+
+
🤖
+
+

3C选品助手

+

基于LazyLLM的智能顾问

+
+
+ +
+
北美手机配件
+
欧洲智能穿戴
+
东南亚音频设备
+
北美电脑配件
+
摄影配件趋势
+
+ +
+
+
+ 您好!我是跨境3C配件选品智能助手,基于LazyLLM框架为您提供专业的选品建议和市场分析。请问您想了解哪个市场或品类的选品信息? +
+
3C选品助手 · 刚刚
+
+
+ +
+
+ + + +
+ 正在分析您的需求... +
+ +
+ + +
+
+
+ + + + +''' + +@app.route('/') +def index(): + return render_template_string(html_template) + +@app.route('/chat', methods=['POST']) +def chat(): + data = request.json + message = data.get('message', '') + + try: + # 调用智能助手处理消息 + response = agent.chat(message) + + # 检查response是否为字典类型 + if isinstance(response, dict): + return jsonify({ + 'response': response.get('response', str(response)), + 'intent': response.get('intent', '未知') + }) + else: + # 如果response不是字典,创建一个包含response的字典 + return jsonify({ + 'response': str(response), + 'intent': '未知' + }) + except Exception as e: + return jsonify({ + 'response': f'处理请求时出现错误: {str(e)}', + 'intent': '错误' + }), 500 + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=3000, debug=True) \ No newline at end of file diff --git "a/\346\212\200\346\234\257\346\226\207\346\241\243.md" "b/\346\212\200\346\234\257\346\226\207\346\241\243.md" new file mode 100644 index 0000000..21011e9 --- /dev/null +++ "b/\346\212\200\346\234\257\346\226\207\346\241\243.md" @@ -0,0 +1,375 @@ +# 跨境3C配件选品智能助手技术文档 + +## 1. 项目介绍 +本项目是一款基于LazyLLM框架的跨境3C配件选品智能助手,专为跨境电商卖家设计。助手结合AI技术和市场数据分析,解决3C配件选品复杂性和市场分析难题,提供精准选品建议、成本利润分析和竞争格局研究,优化卖家产品选择和定价策略。支持Web和命令行交互,提供直观选品报告和可视化结果,适用于全球主要市场(北美、欧洲、东南亚)。 + +## 2. 成员详情 + +| 姓名 | 角色 | 职责描述 | 联系方式 | +|------|------|----------|----------| +| 王英明 | 项目负责人/开发工程师 | 负责整体架构设计、核心算法实现、前端界面开发和系统集成 | - | + +## 3. 技术栈 + +### 3.1 核心框架 +- **LazyLLM**:低代码AI应用开发框架,构建完整选品流水线 +- **Flask**:轻量级Web框架,搭建用户友好Web界面 + +### 3.2 编程语言 +- **Python**:项目主要开发语言 + +### 3.3 主要依赖 +- `lazyllm>=0.1.0`:AI应用开发框架 +- `Flask>=2.0.0`:Web服务框架 +- `transformers>=4.30.0`:Hugging Face模型库 +- `pydantic>=2.0.0`:数据验证 +- `requests>=2.31.0`:网络请求 +- `pandas>=2.0.0`:数据处理 +- `numpy>=1.24.0`:数值计算 +- `matplotlib>=3.7.0`:数据可视化 +- `openai>=1.0.0`:OpenAI API客户端 +- `torch>=2.0.0`:PyTorch深度学习框架 + +## 4. 接口设计 + +### 4.1 核心类接口 +```python +class CrossBorder3CAgent: + def __init__(self): + """初始化智能助手,加载模型和数据""" + + def get_product_recommendations(self, category, market, budget=None): + """获取产品推荐 + Args: + category (str): 产品类别 + market (str): 目标市场 + budget (float, optional): 预算限制 + Returns: + dict: 包含产品推荐、市场分析、成本利润分析的结果 + """ + + def analyze_market_trends(self, category, market): + """分析市场趋势 + Args: + category (str): 产品类别 + market (str): 目标市场 + Returns: + dict: 包含市场趋势、消费者偏好、竞争格局的分析结果 + """ + + def calculate_profit_margin(self, product_cost, shipping_cost, market_price): + """计算利润率 + Args: + product_cost (float): 产品成本 + shipping_cost (float): 运输成本 + market_price (float): 市场价格 + Returns: + dict: 包含利润率、总成本、净利润的计算结果 + """ +``` + +### 4.2 Web接口 +- **POST /api/chat**:处理用户聊天请求 +- **POST /api/product-recommendations**:获取产品推荐 +- **POST /api/market-analysis**:获取市场分析 +- **POST /api/profit-calculation**:计算利润率 + +### 4.3 数据格式 +- **请求格式**:JSON格式,包含用户输入参数 +- **响应格式**:JSON格式,包含分析结果和建议 + +## 5. 系统架构 + +### 5.1 整体架构 +本系统采用分层架构设计,包括: +1. **用户界面层**:提供Web和命令行两种交互方式 +2. **业务逻辑层**:处理用户请求,调用核心算法和数据处理模块 +3. **数据层**:存储产品数据、市场数据和用户配置信息 +4. **AI模型层**:集成多种AI模型,用于自然语言处理、数据分析和预测 + +### 5.2 核心模块 +- **选品分析模块**:基于AI模型和市场数据,提供产品推荐和市场分析 +- **成本利润分析模块**:计算产品成本、运输成本和利润率,提供定价建议 +- **竞争格局分析模块**:分析市场竞争情况,提供差异化优势建议 +- **用户交互模块**:处理用户输入和输出,提供友好的交互体验 + +## 6. 部署说明 + +### 6.1 环境要求 +- Python 3.8+ +- 16GB+内存 +- 4GB+显存(可选,用于本地模型运行) + +### 6.2 安装步骤 +1. 克隆项目仓库 +2. 安装依赖:`pip install -r requirements.txt` +3. 设置API密钥(可选,用于在线模型) +4. 启动Web服务:`python web_app.py` + +### 6.3 运行方式 +- **Web方式**:访问`http://localhost:5000` +- **命令行方式**:运行`python media_3c_agent.py` + +## 7. 使用说明 + +### 7.1 基本使用流程 +1. 选择产品类别和目标市场 +2. 输入预算限制(可选) +3. 点击"获取推荐"按钮 +4. 查看产品推荐、市场分析和成本利润分析结果 +5. 根据建议调整选品策略 + +### 7.2 示例 +**用户输入**: +```json +{ + "category": "手机配件", + "market": "北美", + "budget": 50.0 +} +``` + +**响应输出**: +```json +{ + "status": "success", + "recommendations": [ + { + "product_name": "无线充电器", + "recommendation_score": 0.95, + "estimated_profit_margin": 0.45, + "market_analysis": "北美市场对无线充电器需求旺盛,消费者偏好高品质、品牌认知的产品" + }, + { + "product_name": "手机壳", + "recommendation_score": 0.88, + "estimated_profit_margin": 0.52, + "market_analysis": "手机壳市场竞争激烈,但个性化设计和环保材料的产品仍有机会" + } + ], + "market_trends": { + "overall_growth": 0.12, + "consumer_preferences": ["高品质", "品牌认知", "创新功能", "环保材料"], + "competition_level": "中高" + } +} +``` + +## 8. 技术亮点 + +### 8.1 AI驱动的选品分析 +采用先进的AI模型,结合市场数据和用户需求,提供精准的产品推荐和市场分析。 + +### 8.2 多市场支持 +覆盖全球主要市场(北美、欧洲、东南亚),提供本地化的市场分析和选品建议。 + +### 8.3 全流程支持 +从产品选品到成本利润分析,再到竞争格局研究,提供全流程的选品支持。 + +### 8.4 友好的用户界面 +提供Web和命令行两种交互方式,界面简洁直观,易于使用。 + +## 9. 未来规划 + +### 9.1 功能扩展 +- 增加更多产品类别和市场覆盖 +- 提供更详细的成本利润分析和供应链管理建议 +- 增加产品评论和社交媒体数据分析功能 + +### 9.2 技术优化 +- 优化AI模型性能,提高推荐准确率 +- 优化系统架构,提高系统稳定性和扩展性 +- 增加数据可视化功能,提供更直观的分析结果 + +### 9.3 用户体验改进 +- 增加个性化推荐功能,根据用户历史记录和偏好提供定制化建议 +- 优化Web界面设计,提高用户体验 +- 增加移动端支持,方便用户随时随地使用 + +- `accelerate`:模型加速库 +- `sentencepiece`:分词工具 +- `protobuf`:Protocol Buffers +- `scipy`:科学计算库 +- `modelscope`:模型下载和管理 + +## 4. 接口设计 + +### 4.1 核心类接口 + +#### CrossBorder3CAgent类 +- **初始化方法**:`__init__()` + - 功能:初始化Agent,构建选品流程和地区信息 + - 参数:无 + - 返回值:无 + +- **模型初始化**:`_init_local_model()` + - 功能:初始化本地模型或在线模型 + - 参数:无 + - 返回值:聊天模块对象 + +- **模拟聊天模块**:`_create_mock_chat_module()` + - 功能:创建模拟聊天模块作为后备方案 + - 参数:无 + - 返回值:模拟聊天模块对象 + +- **构建选品流程**:`_build_selection_pipeline()` + - 功能:构建3C配件选品的处理管道 + - 参数:无 + - 返回值:LazyLLM Pipeline对象 + +- **构建对话流程**:`_build_chat_pipeline()` + - 功能:构建对话处理流程 + - 参数:无 + - 返回值:LazyLLM Pipeline对象 + +- **对话入口**:`chat(user_input)` + - 功能:执行用户对话的主入口 + - 参数: + - `user_input`:用户输入(字符串) + - 返回值:助手回复字符串或字典 + +### 4.2 Web API接口 + +- **首页**:`/` (GET) + - 功能:提供选品界面 + - 请求方法:GET + - 返回值:HTML页面 + +- **聊天接口**:`/chat` (POST) + - 功能:接收聊天请求并执行分析 + - 请求方法:POST + - 请求体:JSON格式,包含message参数 + - 返回值:JSON格式的回复 + +## 5. 系统架构 + +### 5.1 整体架构 +系统采用模块化设计,主要包含以下核心模块: +- **Agent核心模块**:实现3C配件选品的主要逻辑 +- **Pipeline处理模块**:构建和管理选品流程 +- **模型管理模块**:处理本地模型和在线模型的加载与切换 +- **数据分析模块**:包含市场分析、产品研究、供应商分析和竞争分析等子模块 +- **用户界面模块**:提供Web和命令行两种交互方式 + +### 5.2 模块关系 +``` +用户 -> 用户界面模块(Web/CLI) -> Agent核心模块 -> Pipeline处理模块 -> 数据分析模块 -> 模型管理模块 -> 结果返回 +``` + +### 5.3 数据流向 +1. 用户通过界面输入选品需求 +2. Agent接收请求并启动选品流程 +3. 通过Pipeline依次执行市场分析、产品研究、供应商分析和竞争分析 +4. 生成选品报告并返回给用户 + +## 6. 功能模块详解 + +### 6.1 市场分析模块 +- **功能**:根据用户输入分析目标市场和产品类别 +- **实现**: + - 从用户输入中提取目标市场(北美、欧洲、东南亚) + - 从用户输入中提取产品类别(手机配件、电脑配件、音频设备等) + - 获取市场信息和产品类别信息 +- **输出**:包含目标市场、产品类别、市场信息和类别信息的字典 + +### 6.2 产品研究模块 +- **功能**:基于市场和类别研究热门产品 +- **实现**: + - 使用大模型分析目标市场的热门产品 + - 考虑市场消费者偏好和价格敏感度 + - 生成产品名称、特点、目标客户和价格区间 +- **输出**:包含产品列表的字典 + +### 6.3 供应商分析模块 +- **功能**:分析潜在供应商和成本结构 +- **实现**: + - 估算生产成本、物流成本和关税 + - 识别潜在供应链风险 + - 推荐供应商类型 + - 计算利润率 +- **输出**:包含成本分析和利润率的产品信息 + +### 6.4 竞争分析模块 +- **功能**:分析竞争对手和市场机会 +- **实现**: + - 识别主要竞争对手 + - 分析竞争对手的价格和市场份额 + - 识别竞争对手的优势和劣势 + - 提供差异化建议 +- **输出**:包含竞争分析的产品信息 + +### 6.5 报告生成模块 +- **功能**:整合分析结果,生成结构化选品报告 +- **实现**: + - 汇总所有分析数据 + - 生成最终的选品建议 + - 提供市场机会分析 +- **输出**:完整的选品报告 + +## 7. 数据模型 + +### 7.1 产品类别数据结构 +```python +self.product_categories = { + "类别名称": { + "subcategories": ["子类别1", "子类别2"], + "features": ["特性1", "特性2"] + } +} +``` + +### 7.2 目标市场数据结构 +```python +self.target_markets = { + "市场名称": { + "countries": ["国家1", "国家2"], + "preferences": ["偏好1", "偏好2"], + "price_sensitivity": "价格敏感度", + "logistics_cost_factor": 物流成本系数 + } +} +``` + +### 7.3 产品数据结构 +```python +{ + "name": "产品名称", + "features": ["特点1", "特点2"], + "target_audience": "目标客户群体", + "price_range": { + "min": 最低价格, + "max": 最高价格 + }, + "production_cost": 生产成本, + "logistics_cost": 物流成本, + "tariffs": 关税, + "risks": ["风险1", "风险2"], + "supplier_type": "供应商类型", + "profit_margin": 利润率, + "competitors": [ + { + "name": "竞争对手名称", + "price_range": {"min": 最低价格, "max": 最高价格}, + "market_share": "市场份额", + "strengths": ["优势1", "优势2"], + "weaknesses": ["劣势1", "劣势2"] + } + ] +} +``` + +## 8. 部署说明 + +### 8.1 环境要求 +- Python 3.8+ +- 所需依赖包(见requirements.txt) + +### 8.2 安装步骤 +1. 安装依赖:`pip install -r requirements.txt` +2. 配置API密钥(豆包或OpenAI) +3. 启动Web应用:`python web_app.py` +4. 访问Web界面:http://localhost:3333 + +### 8.3 运行模式 +- **Web模式**:默认启动,提供图形化界面 +- **命令行模式**:可通过直接运行`python media_3c_agent.py`切换 -- Gitee From a68db4e153bed8135723c5b4f46d149f6c425d13 Mon Sep 17 00:00:00 2001 From: wangpangzhi <1356915197@qq.com> Date: Tue, 23 Dec 2025 17:27:43 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=B7=A8=E5=A2=833C=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E9=80=89=E5=93=81=E6=99=BA=E8=83=BD=E5=8A=A9=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- media_3c_agent.py | 231 ++-------- requirements.txt | 17 +- web_app.py | 25 +- ...00\346\234\257\346\226\207\346\241\243.md" | 415 ++++-------------- 4 files changed, 145 insertions(+), 543 deletions(-) diff --git a/media_3c_agent.py b/media_3c_agent.py index 0eb173d..522f968 100644 --- a/media_3c_agent.py +++ b/media_3c_agent.py @@ -1,29 +1,38 @@ import os import json from datetime import datetime -from lazyllm import OnlineChatModule, WebModule, pipeline, TrainableModule +from lazyllm import OnlineChatModule, WebModule import re # 跨境3C配件选品智能助手Agent class CrossBorder3CAgent: def __init__(self): - # 初始化LazyLLM聊天模块 + # 初始化LazyLLM聊天模块 - 只使用在线模型 try: - # 首先尝试使用OnlineChatModule - self.chat_module = self._init_local_model() - print(f"成功加载模型") - except Exception as e: - print(f"无法初始化模型: {e}") + # 从环境变量获取API密钥 + api_key = os.environ.get("LAZYLLM_DOUBAO_API_KEY") + if not api_key: + raise ValueError("api_key is required") + + print("检测到环境变量中的API密钥,使用在线模型") try: - # 如果模型加载失败,尝试在线模型 - self.chat_module = OnlineChatModule() - print("成功加载在线模型") - except Exception as e2: - print(f"无法初始化在线模型: {e2}") - print("请设置API密钥,例如:export OPENAI_API_KEY=your_key") - # 使用模拟的聊天模块作为后备 - self.chat_module = self._create_mock_chat_module() - print("使用模拟聊天模块作为后备方案") + if os.environ.get("LAZYLLM_DOUBAO_API_KEY"): + self.chat_module = OnlineChatModule( + source="doubao", + api_key=api_key + ) + # 测试API密钥是否有效 + try: + test_response = self.chat_module("测试") + print("API密钥验证成功,使用在线模型") + except Exception as test_error: + raise Exception(f"API密钥验证失败: {str(test_error)}") + except Exception as api_error: + raise Exception(f"使用API密钥初始化在线模型失败: {str(api_error)}") + except Exception as e: + print(f"无法初始化在线模型: {e}") + # 不使用任何后备模型,直接抛出异常 + raise Exception(f"模型初始化失败:{e}") # 3C配件类别数据 self.product_categories = { @@ -77,177 +86,6 @@ class CrossBorder3CAgent: # 构建对话流程 self.chat_pipeline = self._build_chat_pipeline() - def _init_local_model(self): - """初始化本地模型""" - try: - # 尝试从环境变量获取API密钥 - api_key = os.environ.get("DOUBAO_API_KEY") or os.environ.get("LAZYLLM_DOUBAO_API_KEY") or os.environ.get("OPENAI_API_KEY") - if api_key: - print("检测到环境变量中的API密钥,使用在线模型") - try: - # 优先尝试豆包模型 - if os.environ.get("DOUBAO_API_KEY") or os.environ.get("LAZYLLM_DOUBAO_API_KEY"): - model = OnlineChatModule( - source="doubao", - api_key=api_key - ) - else: - # 如果没有豆包密钥但有OpenAI密钥,尝试OpenAI - model = OnlineChatModule( - source="openai", - api_key=api_key - ) - - # 测试API密钥是否有效 - try: - test_response = model("测试") - print("API密钥验证成功,使用在线模型") - return model - except Exception as test_error: - print(f"API密钥验证失败: {str(test_error)}") - print("将尝试其他模型选项") - # 继续尝试其他选项 - except Exception as api_error: - print(f"使用API密钥初始化在线模型失败: {str(api_error)}") - print("将尝试其他模型选项") - # 继续尝试其他选项 - - # 尝试加载本地模型 - local_model_path = os.environ.get("LOCAL_MODEL_PATH") - if local_model_path: - if os.path.exists(local_model_path): - print(f"尝试加载本地模型: {local_model_path}") - try: - model = TrainableModule(local_model_path) - # 尝试启动模型 - try: - model.start() - print("本地模型启动成功") - except Exception as start_error: - print(f"本地模型启动失败: {str(start_error)}") - print("将尝试使用在线模型作为后备") - raise start_error - return model - except Exception as e: - print(f"加载本地模型失败: {str(e)}") - else: - print(f"本地模型路径不存在: {local_model_path}") - - # 尝试使用常见的本地模型路径 - common_model_paths = [ - os.path.expanduser("~/.cache/huggingface/hub"), - "/models", - "./models" - ] - - for path in common_model_paths: - if os.path.exists(path): - print(f"尝试从常见路径加载模型: {path}") - try: - # 尝试列出目录中的模型 - model_dirs = [d for d in os.listdir(path) - if os.path.isdir(os.path.join(path, d))] - if model_dirs: - # 尝试第一个模型目录 - model_path = os.path.join(path, model_dirs[0]) - print(f"找到模型目录: {model_path}") - model = TrainableModule(model_path) - # 尝试启动模型 - try: - model.start() - print("本地模型启动成功") - return model - except Exception as start_error: - print(f"本地模型启动失败: {str(start_error)}") - print("将尝试下一个模型或在线模型") - continue - except Exception as e: - print(f"从常见路径加载模型失败: {str(e)}") - continue - - # 尝试使用在线模型 - print("尝试使用在线模型...") - try: - model = OnlineChatModule(source="doubao") - # 测试模型是否可用 - try: - test_response = model("测试") - print("在线模型验证成功") - return model - except Exception as test_error: - print(f"在线模型验证失败: {str(test_error)}") - # 使用模拟聊天模块作为后备 - print("使用模拟聊天模块作为后备") - model = self._create_mock_chat_module() - return model - except Exception as online_error: - print(f"在线模型初始化失败: {str(online_error)}") - # 使用模拟聊天模块作为后备 - print("使用模拟聊天模块作为后备") - model = self._create_mock_chat_module() - return model - except Exception as e: - print(f"初始化模型失败: {str(e)}") - # 使用模拟聊天模块作为后备 - print("使用模拟聊天模块作为后备") - model = self._create_mock_chat_module() - return model - - def _create_mock_chat_module(self): - """创建模拟聊天模块作为后备方案""" - class MockChatModule: - def __call__(self, prompt): - # 简单的模拟响应 - if "产品类别" in prompt or "选择最合适的一个" in prompt: - return "手机配件" - elif "热门的" in prompt and "产品" in prompt: - return """```json - { - "products": [ - { - "name": "智能无线充电器", - "features": ["快速充电", "多设备兼容", "便携设计"], - "target_audience": "科技爱好者", - "price_range": {"min": 25, "max": 60} - }, - { - "name": "多功能手机支架", - "features": ["可调节角度", "稳固支撑", "折叠便携"], - "target_audience": "办公室工作人员", - "price_range": {"min": 15, "max": 35} - } - ] - } - ```""" - elif "供应商" in prompt or "成本" in prompt: - return """```json - { - "production_cost": {"min": 8, "max": 20}, - "logistics_cost": {"min": 5, "max": 15}, - "tariffs": {"percentage": 10}, - "risks": ["供应链延迟", "原材料价格波动"], - "supplier_type": "OEM工厂" - } - ```""" - elif "竞争对手" in prompt or "竞争分析" in prompt: - return """```json - { - "competitors": [ - { - "name": "品牌A", - "price_range": {"min": 30, "max": 70}, - "market_share": "25%", - "strengths": ["品牌知名度", "分销渠道"], - "weaknesses": ["价格较高", "创新不足"] - } - ] - } - ```""" - else: - return "这是一个模拟响应,请配置API密钥以获取真实的大模型响应。" - - return MockChatModule() - def _build_selection_pipeline(self): """构建3C配件选品流程""" @@ -543,14 +381,17 @@ class CrossBorder3CAgent: "generation_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") } - # 构建流程 - return pipeline([ - market_analysis, - product_research, - supplier_analysis, - competition_analysis, - generate_recommendation - ]) + # 手动实现流程,不使用pipeline + def selection_process(user_input): + """手动实现的选品流程,按顺序调用各个分析函数""" + market_result = market_analysis(user_input) + research_result = product_research(market_result) + supplier_result = supplier_analysis(research_result) + competition_result = competition_analysis(supplier_result) + final_result = generate_recommendation(competition_result) + return final_result + + return selection_process def _build_chat_pipeline(self): """构建对话流程""" diff --git a/requirements.txt b/requirements.txt index d119c62..43965d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,18 +1,3 @@ lazyllm>=0.1.0 -transformers>=4.30.0 -pydantic>=2.0.0 -requests>=2.31.0 -pandas>=2.0.0 flask>=2.0.0 -numpy>=1.24.0 -matplotlib>=3.7.0 -openai>=1.0.0 # 用于真实API调用 -tiktoken>=0.5.0 # 用于token计算 -aiohttp>=3.8.0 # 用于异步HTTP请求 -asyncio # 用于异步处理 -torch>=2.0.0 # 本地模型所需 -accelerate>=0.20.0 # 本地模型加速 -sentencepiece>=0.1.99 # 本地模型分词 -protobuf>=3.20.0 # 本地模型依赖 -scipy>=1.10.0 # 本地模型依赖 -modelscope>=1.30.0 # 本地模型下载和管理 \ No newline at end of file +requests>=2.31.0 \ No newline at end of file diff --git a/web_app.py b/web_app.py index a3e423c..f595008 100644 --- a/web_app.py +++ b/web_app.py @@ -4,7 +4,13 @@ from media_3c_agent import CrossBorder3CAgent app = Flask(__name__) # 创建3C配件选品智能助手实例 -agent = CrossBorder3CAgent() +try: + agent = CrossBorder3CAgent() +except Exception as e: + print(f"创建智能助手实例时出错: {str(e)}") + import traceback + traceback.print_exc() + agent = None # HTML模板 html_template = ''' @@ -107,7 +113,7 @@ html_template = ''' .message-bubble { max-width: 70%; - padding: 1rem; + padding: 1rem 1rem 1rem 1.5rem; border-radius: 18px; word-wrap: break-word; position: relative; @@ -142,7 +148,7 @@ html_template = ''' } .message-bubble li { - margin-bottom: 0.25rem; + margin: 0.25rem; } .message.user .message-bubble { @@ -543,6 +549,12 @@ def chat(): message = data.get('message', '') try: + if agent is None: + return jsonify({ + 'response': '智能助手未初始化成功,请检查服务器日志。', + 'intent': '错误' + }), 500 + # 调用智能助手处理消息 response = agent.chat(message) @@ -565,4 +577,9 @@ def chat(): }), 500 if __name__ == "__main__": - app.run(host='0.0.0.0', port=3000, debug=True) \ No newline at end of file + try: + app.run(host='0.0.0.0', port=3000, debug=True) + except Exception as e: + print(f"运行应用时出现错误: {str(e)}") + import traceback + traceback.print_exc() \ No newline at end of file diff --git "a/\346\212\200\346\234\257\346\226\207\346\241\243.md" "b/\346\212\200\346\234\257\346\226\207\346\241\243.md" index 21011e9..84cf161 100644 --- "a/\346\212\200\346\234\257\346\226\207\346\241\243.md" +++ "b/\346\212\200\346\234\257\346\226\207\346\241\243.md" @@ -1,375 +1,134 @@ # 跨境3C配件选品智能助手技术文档 ## 1. 项目介绍 -本项目是一款基于LazyLLM框架的跨境3C配件选品智能助手,专为跨境电商卖家设计。助手结合AI技术和市场数据分析,解决3C配件选品复杂性和市场分析难题,提供精准选品建议、成本利润分析和竞争格局研究,优化卖家产品选择和定价策略。支持Web和命令行交互,提供直观选品报告和可视化结果,适用于全球主要市场(北美、欧洲、东南亚)。 -## 2. 成员详情 - -| 姓名 | 角色 | 职责描述 | 联系方式 | -|------|------|----------|----------| -| 王英明 | 项目负责人/开发工程师 | 负责整体架构设计、核心算法实现、前端界面开发和系统集成 | - | - -## 3. 技术栈 +### 1.1 项目背景 -### 3.1 核心框架 -- **LazyLLM**:低代码AI应用开发框架,构建完整选品流水线 -- **Flask**:轻量级Web框架,搭建用户友好Web界面 - -### 3.2 编程语言 -- **Python**:项目主要开发语言 +随着全球跨境电商的快速发展,3C配件市场呈现出产品种类繁多、市场需求多变、竞争激烈等特点。跨境电商卖家在选品过程中面临着市场分析困难、成本计算复杂、竞争格局不清晰等挑战。为解决这些问题,我们开发了一款基于LazyLLM框架的跨境3C配件选品智能助手,帮助卖家实现精准选品和市场分析。 -### 3.3 主要依赖 -- `lazyllm>=0.1.0`:AI应用开发框架 -- `Flask>=2.0.0`:Web服务框架 -- `transformers>=4.30.0`:Hugging Face模型库 -- `pydantic>=2.0.0`:数据验证 -- `requests>=2.31.0`:网络请求 -- `pandas>=2.0.0`:数据处理 -- `numpy>=1.24.0`:数值计算 -- `matplotlib>=3.7.0`:数据可视化 -- `openai>=1.0.0`:OpenAI API客户端 -- `torch>=2.0.0`:PyTorch深度学习框架 - -## 4. 接口设计 - -### 4.1 核心类接口 -```python -class CrossBorder3CAgent: - def __init__(self): - """初始化智能助手,加载模型和数据""" - - def get_product_recommendations(self, category, market, budget=None): - """获取产品推荐 - Args: - category (str): 产品类别 - market (str): 目标市场 - budget (float, optional): 预算限制 - Returns: - dict: 包含产品推荐、市场分析、成本利润分析的结果 - """ - - def analyze_market_trends(self, category, market): - """分析市场趋势 - Args: - category (str): 产品类别 - market (str): 目标市场 - Returns: - dict: 包含市场趋势、消费者偏好、竞争格局的分析结果 - """ - - def calculate_profit_margin(self, product_cost, shipping_cost, market_price): - """计算利润率 - Args: - product_cost (float): 产品成本 - shipping_cost (float): 运输成本 - market_price (float): 市场价格 - Returns: - dict: 包含利润率、总成本、净利润的计算结果 - """ -``` +### 1.2 项目目标 -### 4.2 Web接口 -- **POST /api/chat**:处理用户聊天请求 -- **POST /api/product-recommendations**:获取产品推荐 -- **POST /api/market-analysis**:获取市场分析 -- **POST /api/profit-calculation**:计算利润率 +- 提供精准的3C配件选品建议,帮助卖家优化产品选择 +- 实现全面的市场分析,包括消费者偏好、竞争格局和价格趋势 +- 提供成本利润分析,帮助卖家制定合理的定价策略 +- 支持多市场(北美、欧洲、东南亚)选品分析 +- 提供友好的用户交互界面,支持Web和命令行两种交互方式 -### 4.3 数据格式 -- **请求格式**:JSON格式,包含用户输入参数 -- **响应格式**:JSON格式,包含分析结果和建议 +### 1.3 项目功能 -## 5. 系统架构 +- **智能选品分析**:基于AI模型和市场数据,提供个性化选品建议 +- **市场趋势分析**:分析目标市场的消费者偏好、价格敏感度和竞争格局 +- **成本利润计算**:估算产品成本、物流成本和利润率,提供定价建议 +- **供应链风险评估**:识别潜在的供应链风险,提供风险规避建议 +- **差异化优势分析**:分析市场机会和差异化优势,帮助卖家制定竞争策略 -### 5.1 整体架构 -本系统采用分层架构设计,包括: -1. **用户界面层**:提供Web和命令行两种交互方式 -2. **业务逻辑层**:处理用户请求,调用核心算法和数据处理模块 -3. **数据层**:存储产品数据、市场数据和用户配置信息 -4. **AI模型层**:集成多种AI模型,用于自然语言处理、数据分析和预测 +### 1.4 应用场景 -### 5.2 核心模块 -- **选品分析模块**:基于AI模型和市场数据,提供产品推荐和市场分析 -- **成本利润分析模块**:计算产品成本、运输成本和利润率,提供定价建议 -- **竞争格局分析模块**:分析市场竞争情况,提供差异化优势建议 -- **用户交互模块**:处理用户输入和输出,提供友好的交互体验 - -## 6. 部署说明 - -### 6.1 环境要求 -- Python 3.8+ -- 16GB+内存 -- 4GB+显存(可选,用于本地模型运行) - -### 6.2 安装步骤 -1. 克隆项目仓库 -2. 安装依赖:`pip install -r requirements.txt` -3. 设置API密钥(可选,用于在线模型) -4. 启动Web服务:`python web_app.py` - -### 6.3 运行方式 -- **Web方式**:访问`http://localhost:5000` -- **命令行方式**:运行`python media_3c_agent.py` - -## 7. 使用说明 - -### 7.1 基本使用流程 -1. 选择产品类别和目标市场 -2. 输入预算限制(可选) -3. 点击"获取推荐"按钮 -4. 查看产品推荐、市场分析和成本利润分析结果 -5. 根据建议调整选品策略 - -### 7.2 示例 -**用户输入**: -```json -{ - "category": "手机配件", - "market": "北美", - "budget": 50.0 -} -``` +- 跨境电商卖家进行3C配件选品决策 +- 市场分析师进行3C配件市场研究 +- 产品经理进行新产品开发和定价策略制定 -**响应输出**: -```json -{ - "status": "success", - "recommendations": [ - { - "product_name": "无线充电器", - "recommendation_score": 0.95, - "estimated_profit_margin": 0.45, - "market_analysis": "北美市场对无线充电器需求旺盛,消费者偏好高品质、品牌认知的产品" - }, - { - "product_name": "手机壳", - "recommendation_score": 0.88, - "estimated_profit_margin": 0.52, - "market_analysis": "手机壳市场竞争激烈,但个性化设计和环保材料的产品仍有机会" - } - ], - "market_trends": { - "overall_growth": 0.12, - "consumer_preferences": ["高品质", "品牌认知", "创新功能", "环保材料"], - "competition_level": "中高" - } -} -``` +## 2. 成员详情 -## 8. 技术亮点 -### 8.1 AI驱动的选品分析 -采用先进的AI模型,结合市场数据和用户需求,提供精准的产品推荐和市场分析。 +| 姓名 | 角色 | 职责描述 | 联系方式 | +| ------ | --------------------- | ------------------------------------------------------ | -------- | +| 王英明 | 项目负责人/开发工程师 | 负责整体架构设计、核心算法实现、前端界面开发和系统集成 | - | -### 8.2 多市场支持 -覆盖全球主要市场(北美、欧洲、东南亚),提供本地化的市场分析和选品建议。 +## 3. 技术栈 -### 8.3 全流程支持 -从产品选品到成本利润分析,再到竞争格局研究,提供全流程的选品支持。 +### 3.1 核心框架 -### 8.4 友好的用户界面 -提供Web和命令行两种交互方式,界面简洁直观,易于使用。 +- **LazyLLM**:低代码AI应用开发框架,用于构建聊天模块和系统集成 +- **Flask**:轻量级Web框架,用于搭建用户友好的Web界面 -## 9. 未来规划 +### 3.2 编程语言 -### 9.1 功能扩展 -- 增加更多产品类别和市场覆盖 -- 提供更详细的成本利润分析和供应链管理建议 -- 增加产品评论和社交媒体数据分析功能 +- **Python**:项目主要开发语言,用于实现核心算法和业务逻辑 -### 9.2 技术优化 -- 优化AI模型性能,提高推荐准确率 -- 优化系统架构,提高系统稳定性和扩展性 -- 增加数据可视化功能,提供更直观的分析结果 +### 3.3 主要依赖 -### 9.3 用户体验改进 -- 增加个性化推荐功能,根据用户历史记录和偏好提供定制化建议 -- 优化Web界面设计,提高用户体验 -- 增加移动端支持,方便用户随时随地使用 -- `accelerate`:模型加速库 -- `sentencepiece`:分词工具 -- `protobuf`:Protocol Buffers -- `scipy`:科学计算库 -- `modelscope`:模型下载和管理 +| 依赖名称 | 版本要求 | 用途说明 | +| -------- | -------- | ---------------------------- | +| lazyllm | >=0.1.0 | AI应用开发框架,构建聊天模块 | +| flask | >=2.0.0 | Web服务框架,提供界面支持 | +| requests | >=2.31.0 | 网络请求库,用于API调用 | ## 4. 接口设计 ### 4.1 核心类接口 #### CrossBorder3CAgent类 -- **初始化方法**:`__init__()` - - 功能:初始化Agent,构建选品流程和地区信息 - - 参数:无 - - 返回值:无 - -- **模型初始化**:`_init_local_model()` - - 功能:初始化本地模型或在线模型 - - 参数:无 - - 返回值:聊天模块对象 - -- **模拟聊天模块**:`_create_mock_chat_module()` - - 功能:创建模拟聊天模块作为后备方案 - - 参数:无 - - 返回值:模拟聊天模块对象 - -- **构建选品流程**:`_build_selection_pipeline()` - - 功能:构建3C配件选品的处理管道 - - 参数:无 - - 返回值:LazyLLM Pipeline对象 - -- **构建对话流程**:`_build_chat_pipeline()` - - 功能:构建对话处理流程 - - 参数:无 - - 返回值:LazyLLM Pipeline对象 - -- **对话入口**:`chat(user_input)` - - 功能:执行用户对话的主入口 - - 参数: - - `user_input`:用户输入(字符串) - - 返回值:助手回复字符串或字典 + + +| 方法名 | 功能描述 | 参数列表 | 返回值类型 | +| ----------------------------- | ------------------------------ | -------------------------------- | ------------------------ | +| `__init__()` | 初始化智能助手,加载模型和数据 | 无 | 无 | +| `_build_selection_pipeline()` | 构建3C配件选品的处理流程 | 无 | 选品流程处理函数 | +| `_build_chat_pipeline()` | 构建对话处理流程 | 无 | 对话流程处理函数 | +| `chat(user_input)` | 执行用户对话的主入口 | `user_input`: 用户输入(字符串) | 助手回复(字符串或字典) | +| `start_web_chat()` | 启动Web聊天界面 | 无 | 无 | ### 4.2 Web API接口 -- **首页**:`/` (GET) - - 功能:提供选品界面 - - 请求方法:GET - - 返回值:HTML页面 -- **聊天接口**:`/chat` (POST) - - 功能:接收聊天请求并执行分析 - - 请求方法:POST - - 请求体:JSON格式,包含message参数 - - 返回值:JSON格式的回复 +| 接口路径 | 请求方法 | 功能描述 | 请求体格式 | 响应体格式 | +| -------- | -------- | ---------------------- | ----------------------------- | ------------------------------------------------ | +| `/` | GET | 提供选品界面 | 无 | HTML页面 | +| `/chat` | POST | 接收聊天请求并执行分析 | `{"message": "用户输入内容"}` | `{"response": "助手回复", "intent": "意图类型"}` | ## 5. 系统架构 ### 5.1 整体架构 -系统采用模块化设计,主要包含以下核心模块: -- **Agent核心模块**:实现3C配件选品的主要逻辑 -- **Pipeline处理模块**:构建和管理选品流程 -- **模型管理模块**:处理本地模型和在线模型的加载与切换 -- **数据分析模块**:包含市场分析、产品研究、供应商分析和竞争分析等子模块 -- **用户界面模块**:提供Web和命令行两种交互方式 - -### 5.2 模块关系 + +本系统采用分层架构设计,包括以下几层: + +1. **用户界面层**:提供Web和命令行两种交互方式,处理用户输入和输出 +2. **Agent核心层**:系统的核心组件,负责协调各个模块的工作流程 +3. **流程处理层**:管理选品流程,依次执行市场分析、产品研究、供应商分析和竞争分析 +4. **数据分析层**:包含多个子模块,负责具体的数据分析和处理 +5. **模型管理层**:处理本地模型和在线模型的加载与切换 + +### 5.2 核心模块 + +- **Agent核心模块**:实现3C配件选品的主要逻辑,协调各个子模块的工作 +- **流程处理模块**:构建和管理选品流程,使用手动实现的流程函数替代LazyLLM pipeline +- **模型管理模块**:处理本地模型和在线模型的加载与切换,确保系统的可靠性 +- **数据分析模块**:包含市场分析、产品研究、供应商分析和竞争分析等子模块,提供数据支持 +- **用户界面模块**:提供Web和命令行两种交互方式,确保良好的用户体验 + +### 5.3 模块关系 + ``` -用户 -> 用户界面模块(Web/CLI) -> Agent核心模块 -> Pipeline处理模块 -> 数据分析模块 -> 模型管理模块 -> 结果返回 +用户 -> 用户界面模块(Web/CLI) -> Agent核心模块 -> 流程处理模块 -> 数据分析模块 -> 模型管理模块 -> 结果返回 ``` -### 5.3 数据流向 +### 5.4 数据流向 + 1. 用户通过界面输入选品需求 -2. Agent接收请求并启动选品流程 -3. 通过Pipeline依次执行市场分析、产品研究、供应商分析和竞争分析 -4. 生成选品报告并返回给用户 - -## 6. 功能模块详解 - -### 6.1 市场分析模块 -- **功能**:根据用户输入分析目标市场和产品类别 -- **实现**: - - 从用户输入中提取目标市场(北美、欧洲、东南亚) - - 从用户输入中提取产品类别(手机配件、电脑配件、音频设备等) - - 获取市场信息和产品类别信息 -- **输出**:包含目标市场、产品类别、市场信息和类别信息的字典 - -### 6.2 产品研究模块 -- **功能**:基于市场和类别研究热门产品 -- **实现**: - - 使用大模型分析目标市场的热门产品 - - 考虑市场消费者偏好和价格敏感度 - - 生成产品名称、特点、目标客户和价格区间 -- **输出**:包含产品列表的字典 - -### 6.3 供应商分析模块 -- **功能**:分析潜在供应商和成本结构 -- **实现**: - - 估算生产成本、物流成本和关税 - - 识别潜在供应链风险 - - 推荐供应商类型 - - 计算利润率 -- **输出**:包含成本分析和利润率的产品信息 - -### 6.4 竞争分析模块 -- **功能**:分析竞争对手和市场机会 -- **实现**: - - 识别主要竞争对手 - - 分析竞争对手的价格和市场份额 - - 识别竞争对手的优势和劣势 - - 提供差异化建议 -- **输出**:包含竞争分析的产品信息 - -### 6.5 报告生成模块 -- **功能**:整合分析结果,生成结构化选品报告 -- **实现**: - - 汇总所有分析数据 - - 生成最终的选品建议 - - 提供市场机会分析 -- **输出**:完整的选品报告 - -## 7. 数据模型 - -### 7.1 产品类别数据结构 -```python -self.product_categories = { - "类别名称": { - "subcategories": ["子类别1", "子类别2"], - "features": ["特性1", "特性2"] - } -} -``` +2. Agent核心模块接收请求并启动选品流程 +3. 流程处理模块依次调用市场分析、产品研究、供应商分析和竞争分析模块 +4. 各分析模块调用模型管理模块获取AI模型支持 +5. 生成选品报告并通过用户界面返回给用户 -### 7.2 目标市场数据结构 -```python -self.target_markets = { - "市场名称": { - "countries": ["国家1", "国家2"], - "preferences": ["偏好1", "偏好2"], - "price_sensitivity": "价格敏感度", - "logistics_cost_factor": 物流成本系数 - } -} -``` +## 6. 使用说明 -### 7.3 产品数据结构 -```python +### 输入输出示例 + +#### 用户输入 + +```json { - "name": "产品名称", - "features": ["特点1", "特点2"], - "target_audience": "目标客户群体", - "price_range": { - "min": 最低价格, - "max": 最高价格 - }, - "production_cost": 生产成本, - "logistics_cost": 物流成本, - "tariffs": 关税, - "risks": ["风险1", "风险2"], - "supplier_type": "供应商类型", - "profit_margin": 利润率, - "competitors": [ - { - "name": "竞争对手名称", - "price_range": {"min": 最低价格, "max": 最高价格}, - "market_share": "市场份额", - "strengths": ["优势1", "优势2"], - "weaknesses": ["劣势1", "劣势2"] - } - ] + "message": "推荐北美市场的手机配件" } ``` -## 8. 部署说明 +#### 系统输出 -### 8.1 环境要求 -- Python 3.8+ -- 所需依赖包(见requirements.txt) - -### 8.2 安装步骤 -1. 安装依赖:`pip install -r requirements.txt` -2. 配置API密钥(豆包或OpenAI) -3. 启动Web应用:`python web_app.py` -4. 访问Web界面:http://localhost:3333 - -### 8.3 运行模式 -- **Web模式**:默认启动,提供图形化界面 -- **命令行模式**:可通过直接运行`python media_3c_agent.py`切换 +```json +{ + "response": "## 🌍 北美市场手机配件选品分析报告\n\n**生成时间:** 2025-05-20 14:30:45\n\n### 📊 推荐产品\n\n**1. 无线充电器**\n- 目标客户:注重生活品质的消费者\n- 价格区间:$20-$50\n- 预估利润率:45.0%\n- 产品特点:快速充电、多设备兼容、智能温控\n- 差异化优势:创新设计、优质材料\n- 市场进入难度:中等\n\n**2. 环保材料手机壳**\n- 目标客户:环保意识强的年轻消费者\n- 价格区间:$15-$30\n- 预估利润率:52.0%\n- 产品特点:环保认证、个性化设计、防滑耐磨\n- 差异化优势:环保材料、个性化定制\n- 市场进入难度:低\n\n### 💡 专业建议\n\n基于北美市场的分析,我为您推荐以下选品策略:\n\n1. **最推荐产品**:无线充电器\n - 理由:北美消费者对便捷充电需求旺盛,市场渗透率仍有提升空间,高利润率且竞争相对可控\n\n2. **市场进入策略**:\n - 先从亚马逊平台切入,利用FBA物流服务\n - 打造品牌形象,突出产品的快速充电和智能保护功能\n - 针对环保理念,推出可回收包装选项\n\n3. **风险控制建议**:\n - 多样化供应商,避免单一来源风险\n - 注意北美市场的认证要求(如FCC认证)\n - 建立库存预警机制,避免断货风险\n\n4. **长期发展规划**:\n - 开发自有品牌APP,建立用户社群\n - 扩展产品线,覆盖更多智能设备配件\n - 考虑与本地零售商合作,扩大线下渠道\n\n---\n*本分析由跨境3C配件选品智能助手基于LazyLLM框架生成*", + "intent": "选品咨询" +} +``` -- Gitee