diff --git a/init.py b/init.py new file mode 100644 index 0000000000000000000000000000000000000000..45cff07e5a3e96d66edc12e46b548b64f23dfc83 --- /dev/null +++ b/init.py @@ -0,0 +1,690 @@ +from flask import Flask, render_template_string, request, jsonify +from main import SmallApplianceAgent + +app = Flask(__name__) + +# 创建跨境小家电智能选品实例 +try: + agent = SmallApplianceAgent() + print("跨境小家电智能选品实例创建成功") +except Exception as e: + print(f"创建跨境小家电智能选品实例失败: {str(e)}") + agent = None + +# HTML模板 +html_template = ''' + + + + + + 跨境小家电智能选品 + + + +
+
+

跨境跨境小家电智能选品

+

专业的小家电选品分析,助您拓展跨境电商市场

+
+ + +
+

快速选品分析

+
+
+ + +
+
+ + +
+ +
+
+ + + + + +
+
+
🤖
+
+

智能助手

+

随时为您提供小家电市场分析和选品建议

+
+
+ +
+
+
您好!我是跨境跨境小家电智能选品,很高兴为您服务。我可以帮助您: +
    +
  • 分析小家电市场趋势
  • +
  • 推荐适合不同市场的产品
  • +
  • 提供选品策略和建议
  • +
+ 您可以直接问我问题,或者使用下方的快速选项。 +
+
刚刚
+
+
+ +
+
厨房小家电北美市场趋势
+
个人护理电器东南亚市场
+
家居清洁电器选品策略
+
户外电器热门产品
+
+ +
+ + +
+
+
+ + + + + +''' + +# API路由 +@app.route('/api/select-products', methods=['POST']) +def select_products(): + """选品API""" + if agent is None: + return jsonify({"error": "智能助手实例未初始化,请检查模型配置"}), 500 + + data = request.get_json() + category = data.get('category') + market = data.get('market') + + if not category or not market: + return jsonify({"error": "缺少必要的选品参数"}), 400 + + try: + result = agent.select_products(category, market) + return jsonify(result) + except Exception as e: + return jsonify({"error": str(e)}), 500 + +@app.route('/api/chat', methods=['POST']) +def chat(): + """聊天API""" + if agent is None: + return jsonify({"error": "智能助手实例未初始化,请检查模型配置"}), 500 + + data = request.get_json() + message = data.get('message') + + if not message: + return jsonify({"error": "缺少消息内容"}), 400 + + try: + response = agent.chat(message) + return jsonify({"response": response}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + +@app.route('/', methods=['GET']) +def index(): + """主页""" + return render_template_string(html_template) + +if __name__ == "__main__": + # 运行Flask应用(使用端口8081,因为8080已被占用) + app.run(debug=True, host='0.0.0.0', port=8081) diff --git a/main.py b/main.py new file mode 100644 index 0000000000000000000000000000000000000000..c7484de3ab46e1aac1b981978382859edff89a90 --- /dev/null +++ b/main.py @@ -0,0 +1,291 @@ +import os +import json +from datetime import datetime +from lazyllm import OnlineChatModule, WebModule, pipeline, TrainableModule +import re + +# 跨境小家电智能选品Agent +class SmallApplianceAgent: + def __init__(self): + # 初始化LazyLLM聊天模块 + try: + # 首先尝试使用OnlineChatModule + self.chat_module = self._init_local_model() + print(f"成功加载模型") + except Exception as e: + print(f"无法初始化模型: {e}") + raise Exception("无法初始化模型,请确保已正确配置API密钥或本地模型") from e + + # 小家电类别数据 + self.product_categories = { + "厨房小家电": { + "subcategories": ["电饭煲", "电磁炉", "电热水壶", "咖啡机", "搅拌机", "面包机", "空气炸锅", "电烤箱"], + "features": ["多功能", "节能", "智能控制", "安全设计"] + }, + "个人护理电器": { + "subcategories": ["电吹风", "直发器", "卷发棒", "电动牙刷", "剃须刀", "美容仪", "按摩器"], + "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 + }, + "日本": { + "countries": ["日本"], + "preferences": ["精致设计", "高品质", "智能功能", "节能"], + "price_sensitivity": "中", + "logistics_cost_factor": 1.4 + } + } + + # 构建选品流程 + 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)}") + raise Exception("在线模型验证失败,请确保API密钥正确") from test_error + except Exception as online_error: + print(f"在线模型初始化失败: {str(online_error)}") + raise Exception("在线模型初始化失败,请检查网络连接或API配置") from online_error + except Exception as e: + print(f"初始化模型失败: {str(e)}") + raise Exception("模型初始化失败,请检查配置") from e + + + + def _build_selection_pipeline(self): + """构建选品流程""" + def selection_process(input_data): + category = input_data.get("category") + market = input_data.get("market") + + if not category or not market: + return {"error": "缺少必要的选品参数"} + + # 获取产品类别信息 + category_info = self.product_categories.get(category) + if not category_info: + return {"error": "不支持的产品类别"} + + # 获取目标市场信息 + market_info = self.target_markets.get(market) + if not market_info: + return {"error": "不支持的目标市场"} + + # 生成选品建议 + suggestions = self._generate_product_suggestions(category_info, market_info) + + return { + "category": category, + "market": market, + "suggestions": suggestions, + "timestamp": datetime.now().isoformat() + } + + return pipeline(selection_process) + + def _build_chat_pipeline(self): + """构建对话流程""" + def chat_process(message): + # 处理用户消息并生成响应 + response = self.chat_module(message) + return response + + return pipeline(chat_process) + + def _generate_product_suggestions(self, category_info, market_info): + """生成产品建议""" + subcategories = category_info["subcategories"] + features = category_info["features"] + market_preferences = market_info["preferences"] + + # 简单的建议生成逻辑 + suggestions = [] + for subcategory in subcategories[:3]: # 取前3个子类 + suggestion = { + "product_type": subcategory, + "key_features": [feature for feature in features if feature in market_preferences], + "market_focus": market_preferences[:2], + "recommendation": f"{subcategory}是{category_info['features']}的理想选择,特别适合{market_info['preferences']}的市场需求" + } + suggestions.append(suggestion) + + return suggestions + + def select_products(self, category, market): + """选品方法 - 通过模型返回选品建议""" + # 构建选品请求的提示词 + prompt = f""" + 请为跨境电商提供小家电选品建议,基于以下信息: + - 产品类别:{category} + - 目标市场:{market} + + 请提供详细的选品建议,包括: + 1. 热门产品类型 + 2. 关键功能特点 + 3. 市场偏好和趋势 + 4. 具体产品推荐及理由 + + 请以结构化的Markdown格式返回结果。 + """ + + # 通过聊天模型获取选品建议 + response = self.chat_module(prompt) + + # 构建返回结果 + return { + "category": category, + "market": market, + "suggestions": response, + "timestamp": datetime.now().isoformat() + } + + def chat(self, message): + """对话方法""" + response = self.chat_pipeline(message) + return response + +if __name__ == "__main__": + # 测试代码 + agent = SmallApplianceAgent() + + # 测试选品功能 + print("测试选品功能...") + result = agent.select_products("厨房小家电", "北美") + print(json.dumps(result, ensure_ascii=False, indent=2)) + + # 测试对话功能 + print("\n测试对话功能...") + response = agent.chat("你好,我想了解跨境小家电市场趋势") + print(f"用户: 你好,我想了解跨境小家电市场趋势") + print(f"助手: {response}") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..a47cef7e55691a06121bf642281b5bb09d59fee9 --- /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 +tiktoken>=0.5.0 +aiohttp>=3.8.0 +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 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 0000000000000000000000000000000000000000..01ba0fa47fbbbabda58b9f645fe3da1025a685e3 --- /dev/null +++ "b/\346\212\200\346\234\257\346\226\207\346\241\243.md" @@ -0,0 +1,469 @@ +# 跨境小家电智能选品技术文档 + +## 1. 项目介绍 + +本项目是一款基于LazyLLM框架的跨境小家电选品助手,专为跨境电商卖家设计。助手结合AI技术和市场数据分析,解决小家电选品复杂性和市场分析难题,提供精准选品建议、成本利润分析和竞争格局研究,优化卖家产品选择和定价策略。支持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 SmallApplianceAgent: + 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 main.py` + +### 6.3 运行方式 + +- **Web方式**:访问`http://localhost:5000` +- **命令行方式**:运行`python main.py` + +## 7. 使用说明 + +### 7.1 基本使用流程 + +1. 选择产品类别和目标市场 +2. 输入预算限制(可选) +3. 点击"获取推荐"按钮 +4. 查看产品推荐、市场分析和成本利润分析结果 +5. 根据建议调整选品策略 + +### 7.2 示例 + +**用户输入**: + +```json +{ + "category": "厨房小家电", + "market": "欧洲", + "budget": 100.0 +} +``` + +**响应输出**: + +```json +{ + "status": "success", + "recommendations": [ + { + "product_name": "空气炸锅", + "recommendation_score": 0.92, + "estimated_profit_margin": 0.48, + "market_analysis": "欧洲市场对空气炸锅需求旺盛,消费者偏好节能认证、智能控制的产品" + }, + { + "product_name": "咖啡机", + "recommendation_score": 0.87, + "estimated_profit_margin": 0.55, + "market_analysis": "咖啡机市场竞争激烈,但高品质、设计感强的产品仍有机会" + } + ], + "market_trends": { + "overall_growth": 0.15, + "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界面设计,提高用户体验 +- 增加移动端支持,方便用户随时随地使用 + +```def + # 初始化本地模型 + + def _create_mock_chat_module(self): + # 创建模拟聊天模块作为后备 + + def _build_selection_pipeline(self): + # 构建选品流程 + + def _build_chat_pipeline(self): + # 构建对话流程 + + def _generate_product_suggestions(self, category_info, market_info): + # 生成产品建议 + + def select_products(self, category, market): + # 选品方法(对外接口) + + def chat(self, message): + # 对话方法(对外接口) +``` + +#### 2.1.2 模型初始化流程 + +1. 尝试从环境变量获取API密钥(豆包或OpenAI) +2. 如果有API密钥,尝试初始化在线模型并验证 +3. 如果没有API密钥或在线模型验证失败,尝试加载本地模型 +4. 如果本地模型加载失败,使用模拟聊天模块作为最后的后备方案 + +#### 2.1.3 选品流程 + +``` +用户输入产品类别和目标市场 + ↓ +验证输入参数 + ↓ +获取产品类别信息 + ↓ +获取目标市场信息 + ↓ +生成产品建议(基于类别特征和市场偏好) + ↓ +返回选品结果 +``` + +### 2.2 产品类别和市场数据 + +#### 2.2.1 产品类别数据结构 + +```python +product_categories = { + "厨房小家电": { + "subcategories": ["电饭煲", "电磁炉", ...], # 子品类列表 + "features": ["多功能", "节能", ...] # 核心特征 + }, + # 其他产品类别... +} +``` + +#### 2.2.2 目标市场数据结构 + +```python +target_markets = { + "北美": { + "countries": ["美国", "加拿大"], # 包含的国家 + "preferences": ["高品质", "智能功能", ...], # 市场偏好 + "price_sensitivity": "中低", # 价格敏感度 + "logistics_cost_factor": 1.2 # 物流成本系数 + }, + # 其他目标市场... +} +``` + +## 3. Web应用设计 + +### 3.1 Flask应用结构 + +```python +app = Flask(__name__) + +# API路由 +@app.route('/api/select-products', methods=['POST']) +def select_products(): + # 处理选品请求 + +@app.route('/api/chat', methods=['POST']) +def chat(): + # 处理聊天请求 + +@app.route('/', methods=['GET']) +def index(): + # 返回主页 +``` + +### 3.2 API接口 + +#### 3.2.1 选品接口 (`/api/select-products`) + +**请求方法**: POST + +**请求体**: + +```json +{ + "category": "厨房小家电", # 产品类别 + "market": "北美" # 目标市场 +} +``` + +**响应体**: + +```json +{ + "category": "厨房小家电", + "market": "北美", + "suggestions": [ + { + "product_type": "电饭煲", + "key_features": ["多功能", "智能控制"], + "market_focus": ["高品质", "智能功能"], + "recommendation": "电饭煲是多功能、节能、智能控制、安全设计的理想选择..." + } + # 其他产品建议... + ], + "timestamp": "2023-01-01T12:00:00.000000" +} +``` + +#### 3.2.2 聊天接口 (`/api/chat`) + +**请求方法**: POST + +**请求体**: + +```json +{ + "message": "厨房小家电在北美市场的趋势如何?" # 用户消息 +} +``` + +**响应体**: + +```json +{ + "response": "根据市场分析,厨房小家电在北美市场呈现以下趋势..." # 助手回复 +} +``` + +### 3.3 前端交互流程 + +#### 3.3.1 选品功能交互 + +1. 用户在选品表单中选择产品类别和目标市场 +2. 用户点击"生成选品建议"按钮 +3. 前端发送POST请求到 `/api/select-products` +4. 后端处理请求并返回选品结果 +5. 前端将选品结果显示在页面上 + +#### 3.3.2 聊天功能交互 + +1. 用户在聊天输入框中输入消息 +2. 用户点击"发送"按钮或按Enter键 +3. 前端将用户消息显示在聊天界面中 +4. 前端发送POST请求到 `/api/chat` +5. 后端处理请求并返回助手回复 +6. 前端将助手回复显示在聊天界面中 +7. 聊天界面自动滚动到最新消息 + +## 4. 扩展和定制 + +### 4.1 添加新的产品类别 + +1. 在 `cross_border_small_appliance_agent.py` 中的 `product_categories` 字典中添加新的类别 +2. 为新类别添加子品类列表和核心特征 +3. 在Web界面的选品表单中添加新类别的选项 + +### 4.2 添加新的目标市场 + +1. 在 `cross_border_small_appliance_agent.py` 中的 `target_markets` 字典中添加新的市场 +2. 为新市场添加包含的国家、市场偏好、价格敏感度和物流成本系数 +3. 在Web界面的选品表单中添加新市场的选项 + +### 4.3 自定义选品逻辑 + +1. 修改 `_generate_product_suggestions` 方法中的选品逻辑 +2. 可以根据需要添加更复杂的算法,如: + - 市场趋势分析 + - 竞争产品分析 + - 价格策略分析 + - 物流成本计算 + +### 4.4 集成新的AI模型 + +1. 在 `_init_local_model` 方法中添加新模型的初始化代码 +2. 确保新模型与现有的API接口兼容 +3. 可以添加模型选择功能,允许用户选择使用不同的模型 + +## 5. 部署和运行 + +### 5.1 本地运行 + +1. 安装所需的依赖库: + + ```bash + pip install -r requirements.txt + ``` +2. 运行Web应用: + + ```bash + python init.py + ``` +3. 在浏览器中访问 `http://localhost:5000` + +### 5.2 生产环境部署 + +#### 5.2.1 使用Gunicorn + +1. 安装Gunicorn: + + ```bash + pip install gunicorn + ``` +2. 运行Gunicorn: + + ```bash + gunicorn -w 4 -b 0.0.0.0:5000 init:app + ``` + +#### 5.2.2 使用Docker + +1. 创建Dockerfile: + + ```dockerfile + FROM python:3.9-slim + + WORKDIR /app + + COPY requirements.txt . + RUN pip install --no-cache-dir -r requirements.txt + + COPY . . + + EXPOSE 5000 + + CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "init:app"] + ``` +2. 构建Docker镜像: + + ```bash + docker build -t cross-border-small-appliance-agent . + ``` +3. 运行Docker容器: + + ```bash + docker run -p 5000:5000 cross-border-small-appliance-agent + ```