Skill: long1973m/price-comparison-analyzer (version 1.0.0)

--- name: price-comparison-analyzer description: 对多平台商品价格进行聚合分析与风险评估，输出可行动的购买建议，避免伪低价与条件陷阱误导 dependency: python: - numpy==1.24.0 - scipy==1.10.0 --- # 电商比价分析器 ## 任务目标 在给定明确商品定义的前提下，对多个主流电商平台的商品报价进行聚合、对齐与评估，输出最可行动的购买建议。 **核心目标**：不是"找最低价"，而是在价格、风险与购买成本之间，给出最可行动的购买建议。 ## 触发条件 典型用户表达或上下文信号： - "这个商品在各平台什么价格算正常？" - "帮我对比一下京东和拼多多的价格" - "这个价格是不是有问题，看起来太低了" - "我要买iPhone，现在哪个渠道合适？" - "这个价格是否值得冒风险？" ## 输出层级规范（强制遵守） ### L1：用户决策层（默认展示） **目标**：让用户在 5 秒内做出购买决策 **内容要求**： - 只输出"去哪里买 + 大概多少钱 + 风险等级" - 不展示任何分析过程、统计指标、分位数、计算逻辑 - 以"推荐购买方案"形式呈现 - 至少包含三类推荐之一： - 性价比最高（价格与风险平衡） - 最省心（售后/条件最简单） - 最低价（如风险可控，需明确提示风险） **输出格式（结构化）**： ```json { "recommendations": [ { "platform": "京东", "price": 5299, "risk_level": "低", "tag": "省心", "reason": "官方自营，售后无忧" }, { "platform": "拼多多", "price": 4899, "risk_level": "中", "tag": "性价比", "reason": "百亿补贴，限新用户" } ], "warnings": ["异常低价：拼多多某店铺 3500 元"] } ``` **禁止内容**： - ❌ P10 / P50 / P90 等分位数 - ❌ 标准差、样本量、统计描述 - ❌ "基于某某分析得出"的过程性表述 - ❌ 风险评分的计算方式 - ❌ 长段落叙述 ### L2：风险解释层（用户追问时展示） **目标**：用自然语言解释"为什么这么推荐 / 为什么有风险" **内容要求**： - 只解释结论原因 - 不展示计算过程或中间变量 - 聚焦用户关心的核心问题 **示例**： - "为什么推荐京东？因为它是官方自营，价格合理，售后保障完善。" - "拼多多价格低但风险中等，因为需要新用户资格，且库存有限。" ### L3：模型证据层（内部使用） **目标**：包含风险评分拆解、价格分布、异常判断规则等，用于模型调用、调试或后续 Agent 使用 **内容要求**： - 完整的价格分布指标（P10/P25/P50/P75/P90） - 风险评分拆解（渠道风险、条件复杂度、售后不确定性、价格偏离度） - 异常价格定量判断结果 - 原始数据 **注意**：不对用户展示，仅用于内部调用 ## 操作步骤 ### 1. 商品语义对齐 智能体根据用户输入的商品定义进行语义对齐： - 消除名称噪音（营销词、赠品词、套装描述） - 统一型号/SKU/配置 - 排除"相似但不可比"的商品 **关键风险**：不同 SKU 被错误当成同一商品。智能体需仔细识别关键规格差异。 ### 2. 价格信息采集 智能体通过网络搜索和公开渠道获取价格信息，参考 `references/price_collection_guide.md` 中的指导： - 抓取展示价、券后价、满减价 - 识别特殊条件：平台券、店铺券、会员条件、限时/限量 - 记录每个平台的商家性质：官方自营、旗舰店、授权店、普通商家 ### 3. 数据验证 调用 `scripts/data_validator.py` 验证采集的价格数据格式是否符合规范。 ### 4. 价格分布建模与风险评估 调用 `scripts/price_analyzer.py` 进行统计分析： - 计算价格分布指标（P10/P25/P50/P75/P90） - 使用定量规则判断异常价格： - 价格 < P10 × 0.9 → 强异常 - 价格 < P25 × 0.95 → 中异常 - 基于显性特征计算风险评分： - 渠道风险（官方/非官方/平台补贴） - 条件复杂度（是否依赖多重优惠、限时、限用户） - 售后不确定性（保修、退换、责任主体） - 价格偏离度（相对于主流价格区间） ### 5. 输出分层结果 根据用户需求决定输出层级： **默认输出（L1）**： - 调用 `price_analyzer.py` 的结构化推荐输出 - 只展示平台、价格、风险等级、标签、理由 - 异常价格仅作为警告信息存在 **追问时输出（L1 + L2）**： - 在 L1 基础上，增加风险解释层 - 用自然语言解释推荐理由和风险原因 **内部调用（L1 + L2 + L3）**： - 完整输出三层信息 - 用于调试或后续 Agent 使用 ### 6. 生成人群导向推荐 基于风险评估结果，智能体生成至少三类推荐： - 性价比最高：价格与风险平衡的选择 - 最省心：官方渠道，条件简单，售后完善 - 最低价：如风险可控，明确提示风险 ## 资源索引 - **必要脚本**： - [scripts/price_analyzer.py](scripts/price_analyzer.py)（价格分布建模、异常检测、风险评分、结构化推荐输出） - [scripts/data_validator.py](scripts/data_validator.py)（输入数据格式验证） - **领域参考**： - [references/input_format.md](references/input_format.md)（输入数据格式规范与示例） - [references/risk_assessment_rules.md](references/risk_assessment_rules.md)（显性特征评分规则） - [references/price_collection_guide.md](references/price_collection_guide.md)（价格采集指导与注意事项） ## 注意事项 ### 输出规范 - 默认只展示 L1 用户决策层 - 禁止暴露分析过程、统计指标、计算逻辑 - 输出必须可结构化，便于产品与 Agent 调用 - 推荐结果必须人群导向，禁止单一最优解 ### 风险评分 - 必须使用显性特征（rule-based）拆解 - 不得直接"拍值" - 对用户只展示低/中/高风险等级，不展示具体分数 ### 价格异常判断 - 必须使用定量规则 - 异常价格不得作为"推荐购买方案"输出 - 仅作为风险提示或警告信息存在 ### 免责声明 - 不保证价格实时性（存在分钟级/小时级延迟） - 不替代平台官方售后与纠纷裁决 - 不对商家履约行为做绝对保证 - 不对"明显低于市场合理区间"的价格背书 ## 使用示例 ### 场景 1：常规商品比价 用户："iPhone 15 128GB 现在各平台什么价格？" **L1 输出**： ```json { "recommendations": [ { "platform": "京东", "price": 5299, "risk_level": "低", "tag": "省心", "reason": "官方自营，售后无忧" }, { "platform": "天猫", "price": 5199, "risk_level": "低", "tag": "性价比", "reason": "官方旗舰店，需领券" } ], "warnings": [] } ``` ### 场景 2：异常价格判断 用户："拼多多上 iPhone 15 只要 4500，这个价格可信吗？" **L1 输出**： ```json { "recommendations": [ { "platform": "京东", "price": 5299, "risk_level": "低", "tag": "省心", "reason": "官方自营，售后无忧" } ], "warnings": [ "异常低价：拼多多某店铺 4500 元，显著低于主流价格区间" ] } ``` **用户追问：为什么？** **L2 输出**： "该价格显著低于市场主流区间（P10为5199元），偏离度超过13%，存在较高风险。且商家非官方渠道，无明确售后说明，建议谨慎选择。" ### 场景 3：定制化推荐 用户："我要买一台笔记本电脑，配置 i7/16G/512G，推荐哪个平台？" **L1 输出**： ```json { "recommendations": [ { "platform": "京东", "price": 6999, "risk_level": "低", "tag": "省心", "reason": "官方自营，售后无忧" }, { "platform": "拼多多", "price": 6799, "risk_level": "中", "tag": "性价比", "reason": "百亿补贴，限新用户" }, { "platform": "天猫", "price": 6899, "risk_level": "低", "tag": "性价比", "reason": "官方旗舰店，需领券" } ], "warnings": [] } ```

path: scripts/data_validator.py
content: #!/usr/bin/env python3
"""
电商比价数据格式验证脚本

功能：
- 验证输入数据格式是否符合规范
- 检查必填字段
- 验证数据类型和取值范围
"""

import json
import sys
from typing import Dict, Any, List


def parse_args():
    """解析命令行参数"""
    if len(sys.argv) < 2:
        print("用法: python data_validator.py <product_data_json>")
        print("示例: python data_validator.py '{\"product_name\": \"iPhone 15\", \"price_list\": [5000, 5200]}'")
        sys.exit(1)
    
    try:
        return json.loads(sys.argv[1])
    except json.JSONDecodeError as e:
        print(f"JSON解析错误: {e}")
        sys.exit(1)


def validate_product_data(data: Dict[str, Any]) -> Dict[str, Any]:
    """
    验证商品数据格式
    
    参数:
        data: 商品数据字典
        
    返回:
        包含 is_valid, errors, warnings 的验证结果
    """
    errors = []
    warnings = []
    
    # 验证必填字段
    required_fields = ["product_name", "price_list"]
    for field in required_fields:
        if field not in data:
            errors.append(f"缺少必填字段: {field}")
    
    # 验证 product_name
    if "product_name" in data:
        product_name = data["product_name"]
        if not isinstance(product_name, str) or len(product_name.strip()) == 0:
            errors.append("product_name 必须是非空字符串")
        elif len(product_name) < 3:
            warnings.append("product_name 过短，可能不够准确")
    
    # 验证 brand（如果存在）
    if "brand" in data:
        brand = data["brand"]
        if not isinstance(brand, str) or len(brand.strip()) == 0:
            errors.append("brand 必须是非空字符串")
    
    # 验证 key_specs（如果存在）
    if "key_specs" in data:
        key_specs = data["key_specs"]
        if not isinstance(key_specs, str) or len(key_specs.strip()) == 0:
            errors.append("key_specs 必须是非空字符串")
    
    # 验证 price_list
    if "price_list" in data:
        price_list = data["price_list"]
        if not isinstance(price_list, list):
            errors.append("price_list 必须是列表")
        elif len(price_list) == 0:
            errors.append("price_list 不能为空")
        else:
            # 验证每个价格
            for i, price in enumerate(price_list):
                if not isinstance(price, (int, float)):
                    errors.append(f"price_list[{i}] 必须是数字")
                elif price <= 0:
                    errors.append(f"price_list[{i}] 必须大于0")
                elif price > 10000000:  # 1千万
                    warnings.append(f"price_list[{i}] 价格异常高，请确认单位")
    
    # 验证 platform_info（如果存在）
    if "platform_info" in data:
        platform_info = data["platform_info"]
        if not isinstance(platform_info, list):
            errors.append("platform_info 必须是列表")
        else:
            for i, info in enumerate(platform_info):
                if not isinstance(info, dict):
                    errors.append(f"platform_info[{i}] 必须是字典")
                else:
                    # 验证必填字段
                    if "platform" not in info:
                        errors.append(f"platform_info[{i}] 缺少 platform 字段")
                    if "price" not in info:
                        errors.append(f"platform_info[{i}] 缺少 price 字段")
                    else:
                        price = info["price"]
                        if not isinstance(price, (int, float)) or price <= 0:
                            errors.append(f"platform_info[{i}].price 必须是有效数字")
    
    # 验证 platforms（如果存在）
    if "platforms" in data:
        platforms = data["platforms"]
        if not isinstance(platforms, list):
            errors.append("platforms 必须是列表")
        elif len(platforms) == 0:
            warnings.append("platforms 为空，将使用默认平台列表")
        else:
            valid_platforms = ["京东", "天猫", "拼多多", "抖音", "小红书", "亚马逊", "淘宝", "苏宁易购"]
            for platform in platforms:
                if platform not in valid_platforms:
                    warnings.append(f"platform '{platform}' 可能不是主流平台")
    
    # 验证 region（如果存在）
    if "region" in data:
        region = data["region"]
        if not isinstance(region, str) or len(region.strip()) == 0:
            errors.append("region 必须是非空字符串")
    
    # 验证 user_priority（如果存在）
    if "user_priority" in data:
        user_priority = data["user_priority"]
        valid_priorities = ["最低价优先", "官方/正品优先", "售后/发票优先"]
        if user_priority not in valid_priorities:
            warnings.append(f"user_priority '{user_priority}' 不是推荐值，推荐值: {valid_priorities}")
    
    # 判断是否有效
    is_valid = len(errors) == 0
    
    return {
        "is_valid": is_valid,
        "errors": errors,
        "warnings": warnings
    }


def main():
    """主函数"""
    # 解析输入
    input_data = parse_args()
    
    # 执行验证
    result = validate_product_data(input_data)
    
    # 输出结果
    print(json.dumps(result, ensure_ascii=False, indent=2))
    
    # 如果验证失败，返回非零退出码
    if not result["is_valid"]:
        sys.exit(1)


if __name__ == "__main__":
    main()


path: scripts/price_analyzer.py
content: #!/usr/bin/env python3
"""
电商价格分布建模与风险分析脚本

功能：
- 计算价格分布指标（P10/P25/P50/P75/P90）
- 使用定量规则判断异常价格
- 基于显性特征计算风险评分（渠道风险、条件复杂度、售后不确定性、价格偏离度）
- 生成三层输出：L1用户决策层、L2风险解释层、L3模型证据层
"""

import json
import sys
from typing import List, Dict, Any, Tuple
import numpy as np


def parse_args():
    """解析命令行参数"""
    if len(sys.argv) < 2:
        print("用法: python price_analyzer.py <price_data_json>")
        print("示例: python price_analyzer.py '{\"price_list\": [5000, 5200, 4800, 6000], \"platform_info\": [{\"platform\": \"京东\", \"price\": 5200}]}'")
        sys.exit(1)
    
    try:
        return json.loads(sys.argv[1])
    except json.JSONDecodeError as e:
        print(f"JSON解析错误: {e}")
        sys.exit(1)


def calculate_price_distribution(prices: List[float]) -> Dict[str, Any]:
    """
    计算价格分布指标
    
    参数:
        prices: 价格列表
        
    返回:
        包含 P10/P25/P50/P75/P90 的字典
    """
    if not prices:
        return {}
    
    prices_array = np.array(prices)
    
    return {
        "p10": float(np.percentile(prices_array, 10)),
        "p25": float(np.percentile(prices_array, 25)),
        "p50": float(np.percentile(prices_array, 50)),
        "p75": float(np.percentile(prices_array, 75)),
        "p90": float(np.percentile(prices_array, 90)),
        "mean": float(np.mean(prices_array)),
        "min": float(np.min(prices_array)),
        "max": float(np.max(prices_array))
    }


def detect_abnormal_prices(prices: List[float], distribution: Dict[str, Any]) -> Dict[str, Any]:
    """
    使用定量规则判断异常价格
    
    参数:
        prices: 价格列表
        distribution: 价格分布指标
        
    返回:
        包含异常价格检测结果和分类的字典
    """
    if not distribution:
        return {"abnormal_prices": [], "classification": {}}
    
    p10 = distribution.get("p10", 0)
    p25 = distribution.get("p25", 0)
    
    strong_abnormal_threshold = p10 * 0.9
    medium_abnormal_threshold = p25 * 0.95
    
    strong_abnormal = []
    medium_abnormal = []
    normal = []
    
    for price in prices:
        if price < strong_abnormal_threshold:
            strong_abnormal.append(price)
        elif price < medium_abnormal_threshold:
            medium_abnormal.append(price)
        else:
            normal.append(price)
    
    return {
        "strong_abnormal": strong_abnormal,
        "medium_abnormal": medium_abnormal,
        "thresholds": {
            "strong_abnormal_threshold": strong_abnormal_threshold,
            "medium_abnormal_threshold": medium_abnormal_threshold
        }
    }


def calculate_explicit_risk_features(price: float, distribution: Dict[str, Any], 
                                    conditions: str = "", seller_type: str = "") -> Dict[str, Any]:
    """
    基于显性特征计算风险评分
    
    参数:
        price: 当前价格
        distribution: 价格分布指标
        conditions: 价格条件描述（如"限新用户"、"官方自营"等）
        seller_type: 卖家类型
        
    返回:
        包含四个显性特征评分的字典
    """
    p10 = distribution.get("p10", 0)
    p25 = distribution.get("p25", 0)
    p90 = distribution.get("p90", 0)
    
    # 显性特征1：渠道风险（0-25分）
    channel_risk = 0
    if seller_type == "official":
        channel_risk = 0
    elif seller_type == "authorized":
        channel_risk = 5
    elif seller_type == "subsidized":
        channel_risk = 10
    else:  # third-party
        channel_risk = 15
    
    # 显性特征2：条件复杂度（0-25分）
    condition_complexity = 0
    high_risk_conditions = ["限新用户", "限地区", "需会员", "限时", "限量", "秒杀", "翻新", "官翻"]
    medium_risk_conditions = ["需领券", "满减", "返现"]
    
    for condition in high_risk_conditions:
        if condition in conditions:
            condition_complexity += 5
    
    for condition in medium_risk_conditions:
        if condition in conditions:
            condition_complexity += 2
    
    condition_complexity = min(condition_complexity, 25)
    
    # 显性特征3：售后不确定性（0-25分）
    after_sales_uncertainty = 0
    if seller_type == "official":
        after_sales_uncertainty = 0
    elif seller_type == "authorized":
        after_sales_uncertainty = 5
    elif "无售后" in conditions or "无保修" in conditions:
        after_sales_uncertainty = 25
    else:
        after_sales_uncertainty = 15
    
    # 显性特征4：价格偏离度（0-25分）
    price_deviation = 0
    if price < p10:
        deviation = (p10 - price) / p10
        if deviation > 0.15:
            price_deviation = 25
        elif deviation > 0.10:
            price_deviation = 20
        elif deviation > 0.05:
            price_deviation = 10
        else:
            price_deviation = 5
    elif price > p90:
        deviation = (price - p90) / p90
        if deviation > 0.15:
            price_deviation = 15
        elif deviation > 0.10:
            price_deviation = 10
        else:
            price_deviation = 5
    
    # 综合风险评分（0-100分）
    total_risk_score = channel_risk + condition_complexity + after_sales_uncertainty + price_deviation
    
    # 确定风险等级
    if total_risk_score >= 60:
        risk_level = "高"
    elif total_risk_score >= 30:
        risk_level = "中"
    else:
        risk_level = "低"
    
    return {
        "total_risk_score": total_risk_score,
        "risk_level": risk_level,
        "features": {
            "channel_risk": channel_risk,
            "condition_complexity": condition_complexity,
            "after_sales_uncertainty": after_sales_uncertainty,
            "price_deviation": price_deviation
        }
    }


def determine_recommendation_tag(price: float, risk_level: str, distribution: Dict[str, Any],
                                conditions: str = "", seller_type: str = "") -> Tuple[str, str]:
    """
    确定推荐标签和简短理由
    
    参数:
        price: 当前价格
        risk_level: 风险等级
        distribution: 价格分布指标
        conditions: 价格条件描述
        seller_type: 卖家类型
        
    返回:
        (推荐标签, 简短理由)
    """
    p25 = distribution.get("p25", 0)
    p75 = distribution.get("p75", 0)
    
    # 判断是否主流区间
    in_mainstream = p25 <= price <= p75
    
    # 判断是否低价
    is_low_price = price < p25
    
    # 判断是否官方渠道
    is_official = seller_type == "official" or "官方自营" in conditions or "旗舰店" in conditions
    
    # 判断条件是否简单
    has_complex_condition = any(x in conditions for x in ["限", "需领券", "满减", "限时", "限量"])
    
    # 确定标签
    if risk_level == "高":
        tag = "高风险"
        reason = "价格异常或条件复杂"
    elif is_official and not has_complex_condition:
        tag = "省心"
        reason = "官方自营，售后无忧"
    elif is_low_price and risk_level in ["低", "中"]:
        tag = "性价比"
        reason = "价格低于主流区间"
    elif in_mainstream and risk_level == "低":
        tag = "性价比"
        reason = "价格合理，风险低"
    else:
        tag = "中规中矩"
        reason = "价格在主流区间"
    
    # 限制理由长度在20字以内
    if len(reason) > 20:
        reason = reason[:17] + "..."
    
    return tag, reason


def generate_l1_output(prices: List[float], platform_info: List[Dict[str, Any]], 
                      distribution: Dict[str, Any], abnormal_prices: Dict[str, Any],
                      risk_assessments: List[Dict[str, Any]]) -> Dict[str, Any]:
    """
    生成L1用户决策层输出
    
    参数:
        prices: 价格列表
        platform_info: 平台信息列表
        distribution: 价格分布指标
        abnormal_prices: 异常价格检测结果
        risk_assessments: 风险评估结果列表
        
    返回:
        L1层输出（结构化推荐和警告）
    """
    recommendations = []
    
    # 为每个平台生成推荐
    for info, risk_assessment in zip(platform_info, risk_assessments):
        platform = info.get("platform", "未知")
        price = info.get("price")
        conditions = info.get("conditions", "")
        seller_type = info.get("seller_type", "")
        
        # 跳过异常价格
        is_abnormal = price in abnormal_prices.get("strong_abnormal", []) or \
                     price in abnormal_prices.get("medium_abnormal", [])
        if is_abnormal:
            continue
        
        risk_level = risk_assessment.get("risk_level", "中")
        tag, reason = determine_recommendation_tag(price, risk_level, distribution, conditions, seller_type)
        
        recommendations.append({
            "platform": platform,
            "price": price,
            "risk_level": risk_level,
            "tag": tag,
            "reason": reason
        })
    
    # 排序：按风险等级低→高，然后按价格低→高
    risk_order = {"低": 0, "中": 1, "高": 2}
    recommendations.sort(key=lambda x: (risk_order.get(x["risk_level"], 3), x["price"]))
    
    # 限制最多3个推荐
    recommendations = recommendations[:3]
    
    # 生成警告信息
    warnings = []
    strong_abnormal = abnormal_prices.get("strong_abnormal", [])
    medium_abnormal = abnormal_prices.get("medium_abnormal", [])
    
    for price in strong_abnormal:
        # 找到对应平台
        for info in platform_info:
            if info.get("price") == price:
                warnings.append(f"异常低价：{info.get('platform', '某平台')} {price} 元")
                break
    
    for price in medium_abnormal:
        for info in platform_info:
            if info.get("price") == price:
                warnings.append(f"偏低价格：{info.get('platform', '某平台')} {price} 元")
                break
    
    return {
        "recommendations": recommendations,
        "warnings": warnings
    }


def generate_l2_output(recommendations: List[Dict[str, Any]], 
                       risk_assessments: List[Dict[str, Any]]) -> List[str]:
    """
    生成L2风险解释层输出
    
    参数:
        recommendations: 推荐列表
        risk_assessments: 风险评估结果列表
        
    返回:
        L2层输出（自然语言解释列表）
    """
    explanations = []
    
    for rec in recommendations:
        platform = rec["platform"]
        risk_level = rec["risk_level"]
        reason = rec["reason"]
        
        if risk_level == "低":
            explanation = f"推荐{platform}：{reason}。"
        elif risk_level == "中":
            explanation = f"{platform}价格较低但风险中等，需要满足特定条件。"
        else:
            explanation = f"{platform}存在较高风险，不建议优先选择。"
        
        explanations.append(explanation)
    
    return explanations


def analyze_price_distribution(prices: List[float], platform_info: List[Dict[str, Any]]) -> Dict[str, Any]:
    """
    综合分析价格分布与风险，生成三层输出
    
    参数:
        prices: 价格列表
        platform_info: 平台信息列表，每个元素包含 platform, price, conditions, seller_type 等字段
        
    返回:
        包含三层输出的完整分析结果
    """
    # 1. 计算价格分布（L3）
    distribution = calculate_price_distribution(prices)
    
    # 2. 检测异常价格（L3）
    abnormal_prices = detect_abnormal_prices(prices, distribution)
    
    # 3. 为每个平台计算风险评分（L3）
    risk_assessments = []
    for info in platform_info:
        price = info.get("price")
        conditions = info.get("conditions", "")
        seller_type = info.get("seller_type", "third-party")
        
        if price is not None:
            risk_result = calculate_explicit_risk_features(price, distribution, conditions, seller_type)
            risk_assessments.append({
                "platform": info.get("platform", "未知"),
                "price": price,
                "risk_assessment": risk_result
            })
    
    # 4. 生成L1输出（用户决策层）
    l1_output = generate_l1_output(prices, platform_info, distribution, abnormal_prices, risk_assessments)
    
    # 5. 生成L2输出（风险解释层）
    l2_output = generate_l2_output(l1_output["recommendations"], risk_assessments)
    
    # 6. 汇总L3输出（模型证据层）
    l3_output = {
        "price_distribution": distribution,
        "abnormal_prices": abnormal_prices,
        "risk_assessments": risk_assessments,
        "mainstream_range": f"{int(distribution.get('p25', 0))} - {int(distribution.get('p75', 0))}"
    }
    
    # 返回三层输出
    return {
        "l1_user_decision": l1_output,
        "l2_risk_explanation": l2_output,
        "l3_model_evidence": l3_output
    }


def main():
    """主函数"""
    # 解析输入
    input_data = parse_args()
    
    # 提取价格列表
    prices = input_data.get("price_list", [])
    if not prices:
        print("错误: price_list 不能为空")
        sys.exit(1)
    
    # 提取平台信息
    platform_info = input_data.get("platform_info", [])
    
    # 执行分析
    result = analyze_price_distribution(prices, platform_info)
    
    # 输出 JSON 结果
    print(json.dumps(result, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()


path: references/risk_assessment_rules.md
content: # 电商比价风险评估规则

## 目录
- [概览](#概览)
- [风险等级定义](#风险等级定义)
- [显性特征评分规则](#显性特征评分规则)
- [价格异常判断规则](#价格异常判断规则)
- [推荐标签判定规则](#推荐标签判定规则)

## 概览
本文档定义了电商比价分析中的风险评估规则，采用显性特征（rule-based）的方式计算风险评分，避免直接"拍值"。

## 风险等级定义

### 低风险（Low Risk）
- **风险评分**: 0-29 分
- **特征**: 渠道可靠、条件简单、售后完善、价格合理
- **典型场景**: 官方自营、官方旗舰店、授权店铺
- **用户建议**: 可放心购买

### 中风险（Medium Risk）
- **风险评分**: 30-59 分
- **特征**: 部分特征存在风险，但整体可控
- **典型场景**: 百亿补贴、限时优惠、需领券、新用户专享
- **用户建议**: 谨慎购买，仔细阅读条款

### 高风险（High Risk）
- **风险评分**: 60-100 分
- **特征**: 多个特征存在显著风险
- **典型场景**: 疑似翻新、非官方渠道、无售后保障、价格异常
- **用户建议**: 高度警惕，不建议购买

## 显性特征评分规则

风险评分由四个显性特征组成，每个特征权重 25 分，总分 0-100 分：

### 1. 渠道风险（0-25 分）

**官方渠道（0 分）**:
- 京东官方自营
- 天猫官方旗舰店
- 官方授权店
- 亚马逊自营

**补贴渠道（10 分）**:
- 拼多多百亿补贴
- 平台补贴类渠道

**第三方渠道（15 分）**:
- 普通第三方店铺
- 个人店铺

**高风险渠道（25 分）**:
- 无明确商家信息
- 商家信誉差（评分 < 4.5）

### 2. 条件复杂度（0-25 分）

**无特殊条件（0 分）**:
- 官方价格，无任何附加条件

**简单条件（2-5 分）**:
- 需领券（2 分）
- 满减（2 分）
- 返现（2 分）
- 单项条件最多 5 分

**复杂条件（5-15 分）**:
- 限时（5 分）
- 限量（5 分）
- 限地区（5 分）
- 需会员（5 分）
- 多项条件累加

**极复杂条件（15-25 分）**:
- 限新用户（10 分）
- 多项复杂条件叠加
- 每项扣 5 分，最高 25 分

### 3. 售后不确定性（0-25 分）

**完善售后（0 分）**:
- 官方渠道
- 全国联保
- 明确退换货政策

**基础售后（5 分）**:
- 授权店铺
- 有保修说明

**不确定售后（15 分）**:
- 第三方渠道
- 售后说明不明确
- 保修期较短

**无售后保障（25 分）**:
- 明确标注"无售后"
- 无保修说明
- 无退换货政策

### 4. 价格偏离度（0-25 分）

**价格合理（0-5 分）**:
- 价格在 P25-P75 主流区间（0 分）
- 价格略低于 P25（< 5%）（5 分）
- 价格略高于 P75（< 10%）（5 分）

**价格偏低（10-20 分）**:
- 价格低于 P25（5-10%）（10 分）
- 价格低于 P10（5-10%）（15 分）
- 价格低于 P10（10-15%）（20 分）

**价格异常（25 分）**:
- 价格低于 P10（> 15%）（25 分）
- 价格高于 P90（> 15%）（25 分）

## 价格异常判断规则

价格异常判断必须使用定量规则：

### 强异常
- **规则**: 价格 < P10 × 0.9
- **含义**: 价格显著低于市场主流区间，超过 10% 偏离
- **处理**: 禁止作为"推荐购买方案"输出，仅作为风险警告
- **示例**: P10 = 5199，价格 < 4679（5199 × 0.9）→ 强异常

### 中异常
- **规则**: 价格 < P25 × 0.95
- **含义**: 价格略低于市场主流区间，接近异常边缘
- **处理**: 可作为推荐，但需标注风险
- **示例**: P25 = 5299，价格 < 5034（5299 × 0.95）→ 中异常

### 正常价格
- **规则**: P25 × 0.95 ≤ 价格 ≤ P90
- **含义**: 价格处于合理区间
- **处理**: 可正常推荐

### 溢价
- **规则**: 价格 > P90 × 1.1
- **含义**: 价格高于市场主流区间
- **处理**: 可作为推荐，但需标注溢价

## 推荐标签判定规则

### 省心
**判定条件**:
- 风险等级 = 低
- 渠道 = 官方自营/官方旗舰店
- 条件 = 无复杂条件
- 价格 = 在主流区间或略高于主流

**理由模板**:
- "官方自营，售后无忧"
- "官方旗舰店，价格合理"

### 性价比
**判定条件**:
- 风险等级 = 低 或 中
- 价格 = 低于主流区间（P25）
- 且不是强异常价格

**理由模板**:
- "价格低于主流区间"
- "价格合理，风险低"

### 高风险
**判定条件**:
- 风险等级 = 高

**理由模板**:
- "价格异常或条件复杂"
- "渠道不可靠，风险较高"

### 中规中矩
**判定条件**:
- 价格 = 在主流区间（P25-P75）
- 风险等级 = 中

**理由模板**:
- "价格在主流区间"
- "条件适中，需注意"

## 人群导向推荐规则

### 性价比最高（价格与风险平衡）
**目标用户**: 追求性价比，愿意承担一定风险
**推荐标准**:
- 价格 ≤ P25（低于主流区间）
- 风险等级 = 中（低风险更佳）
- 条件复杂度 ≤ 10 分

**输出示例**:
```json
{
  "platform": "拼多多",
  "price": 4899,
  "risk_level": "中",
  "tag": "性价比",
  "reason": "百亿补贴，限新用户"
}
```

### 最省心（售后/条件最简单）
**目标用户**: 追求购买便捷，售后无忧
**推荐标准**:
- 风险等级 = 低
- 渠道 = 官方自营/官方旗舰店
- 条件复杂度 = 0 分
- 售后不确定性 = 0 分

**输出示例**:
```json
{
  "platform": "京东",
  "price": 5299,
  "risk_level": "低",
  "tag": "省心",
  "reason": "官方自营，售后无忧"
}
```

### 最低价（如风险可控）
**目标用户**: 追求最低价，能接受一定风险
**推荐标准**:
- 价格 = 所有选项中最低
- 风险等级 ≤ 中（高风险不推荐）
- 不是强异常价格

**输出示例**:
```json
{
  "platform": "拼多多",
  "price": 4899,
  "risk_level": "中",
  "tag": "性价比",
  "reason": "百亿补贴，需注意条件"
}
```

## 典型场景评分示例

### 场景 1：京东官方自营 + 主流价格
**数据**:
- 价格: 5299
- P25-P75: 5199-5499
- 条件: 官方自营，无额外券
- 卖家类型: official

**评分计算**:
1. 渠道风险: 0 分（官方自营）
2. 条件复杂度: 0 分（无特殊条件）
3. 售后不确定性: 0 分（官方渠道）
4. 价格偏离度: 0 分（价格在 P25-P75 区间）
5. **总分**: 0 分
6. **风险等级**: 低
7. **推荐标签**: 省心
8. **推荐理由**: "官方自营，售后无忧"

### 场景 2：拼多多百亿补贴 + 新用户限制
**数据**:
- 价格: 4899
- P10: 5199
- 条件: 百亿补贴，限新用户
- 卖家类型: subsidized

**评分计算**:
1. 渠道风险: 10 分（补贴渠道）
2. 条件复杂度: 10 分（限新用户）
3. 售后不确定性: 15 分（第三方渠道）
4. 价格偏离度: 10 分（低于 P10，5-10%）
5. **总分**: 45 分
6. **风险等级**: 中
7. **推荐标签**: 性价比
8. **推荐理由**: "百亿补贴，限新用户"

### 场景 3：异常低价 + 疑似翻新
**数据**:
- 价格: 3500
- P10: 5199
- 条件: 疑似翻新，非官方渠道
- 卖家类型: third-party

**评分计算**:
1. 渠道风险: 15 分（第三方渠道）
2. 条件复杂度: 5 分（疑似翻新）
3. 售后不确定性: 25 分（无售后保障）
4. 价格偏离度: 25 分（低于 P10，> 15%）
5. **总分**: 70 分
6. **风险等级**: 高
7. **推荐标签**: 高风险
8. **推荐理由**: "价格异常或条件复杂"
9. **异常判断**: 强异常（3500 < 5199 × 0.9 = 4679）

### 场景 4：天猫旗舰店 + 需领券
**数据**:
- 价格: 5199
- P25: 5299
- 条件: 官方旗舰店，需领券200
- 卖家类型: official

**评分计算**:
1. 渠道风险: 0 分（官方旗舰店）
2. 条件复杂度: 2 分（需领券）
3. 售后不确定性: 0 分（官方渠道）
4. 价格偏离度: 5 分（略低于 P25，< 5%）
5. **总分**: 7 分
6. **风险等级**: 低
7. **推荐标签**: 性价比
8. **推荐理由**: "官方旗舰店，需领券"

## 注意事项

1. **显性特征必须定量**: 所有评分必须基于明确的规则，不能主观判断
2. **风险等级统一**: 对用户只展示低/中/高，不展示具体分数
3. **异常价格隔离**: 强异常价格不得作为"推荐购买方案"输出
4. **人群导向**: 推荐结果必须至少包含三类之一（性价比/省心/最低价）
5. **理由简洁**: 简短理由不超过 20 字
6. **结构化输出**: L1 层输出必须可结构化，便于产品与 Agent 调用


path: references/input_format.md
content: # 电商比价输入数据格式规范

## 目录
- [概览](#概览)
- [核心数据结构](#核心数据结构)
- [字段说明](#字段说明)
- [验证规则](#验证规则)
- [完整示例](#完整示例)

## 概览
本规范定义了电商比价分析器的输入数据格式。所有输入数据必须符合此格式，才能被脚本正确处理。

## 核心数据结构

### 1. 产品定义（必填）
```json
{
  "product_name": "Apple iPhone 15 128GB 黑色",
  "brand": "Apple",
  "key_specs": "A2890/6.1英寸/128GB/黑色"
}
```

### 2. 价格数据（必填）
```json
{
  "price_list": [5199, 5299, 4899, 5499, 5200]
}
```

### 3. 平台详情（必填）
```json
{
  "platform_info": [
    {
      "platform": "京东",
      "price": 5299,
      "conditions": "官方自营，无额外券",
      "seller_type": "official"
    },
    {
      "platform": "拼多多",
      "price": 4899,
      "conditions": "百亿补贴，限新用户",
      "seller_type": "subsidized"
    }
  ]
}
```

## 字段说明

### 必填字段

#### product_name（必填）
- **类型**: string
- **说明**: 商品名称，应包含品牌、型号、关键规格
- **长度**: 3-200 字符
- **示例**: "Apple iPhone 15 128GB 黑色", "华为 Mate 60 Pro 12GB+256GB 雅川青"

#### price_list（必填）
- **类型**: array of number
- **说明**: 所有采集到的价格列表（原始价格，未考虑任何折扣）
- **元素类型**: float/int
- **取值范围**: > 0
- **示例**: [5199, 5299, 4899, 5499, 5200]

### 可选字段

#### brand（可选）
- **类型**: string
- **说明**: 品牌名，用于商品语义对齐
- **示例**: "Apple", "华为", "小米", "Sony"

#### key_specs（可选）
- **类型**: string
- **说明**: 关键规格描述，用于排除不可比商品
- **示例**: "A2890/6.1英寸/128GB/黑色", "i7-13700H/16GB/512GB"

#### platforms（可选）
- **类型**: array of string
- **说明**: 指定比价平台列表
- **推荐值**: ["京东", "天猫", "拼多多", "抖音", "小红书", "亚马逊", "淘宝"]
- **默认**: ["京东", "天猫", "拼多多"]

#### region（可选）
- **类型**: string
- **说明**: 地区，影响税费、仓储、渠道
- **示例**: "中国大陆", "香港", "美国"

#### time_window（可选）
- **类型**: string
- **说明**: 价格采集时间范围
- **示例**: "最近7天", "最近30天", "当前"

#### user_priority（可选）
- **类型**: string
- **说明**: 用户优先级，影响推荐结果
- **推荐值**: "最低价优先", "官方/正品优先", "售后/发票优先"
- **默认**: "官方/正品优先"

#### platform_info（可选但推荐）
- **类型**: array of object
- **说明**: 平台详细信息列表
- **每个对象包含**:
  - platform (string): 平台名称
  - price (number): 价格
  - conditions (string): 价格条件描述
  - seller_type (string): 卖家类型（official/authorized/third-party/subsidized）

## 验证规则

### 1. 必填字段验证
- `product_name` 必须存在且非空
- `price_list` 必须存在且至少包含一个有效价格

### 2. 数据类型验证
- 所有价格必须是数字类型（int 或 float）
- 价格必须大于 0
- 价格建议不超过 1,000 万

### 3. 业务逻辑验证
- 同一商品的价格列表应该来自可比的 SKU
- `platform_info` 中的价格应包含在 `price_list` 中
- `seller_type` 值必须在预定义范围内

### 4. 格式规范
- 商品名称应避免使用营销词汇（如"热销"、"爆款"）
- 条件描述应简洁明确（如"官方自营"而不是"京东自营官方直营店"）

## 完整示例

### 最小可用示例
```json
{
  "product_name": "iPhone 15 128GB",
  "price_list": [5199, 5299, 4899, 5499, 5200]
}
```

### 完整示例
```json
{
  "product_name": "Apple iPhone 15 128GB 黑色",
  "brand": "Apple",
  "key_specs": "A2890/6.1英寸/128GB/黑色",
  "platforms": ["京东", "天猫", "拼多多"],
  "region": "中国大陆",
  "time_window": "最近7天",
  "user_priority": "官方/正品优先",
  "price_list": [5199, 5299, 4899, 5499, 5200, 5300, 5100],
  "platform_info": [
    {
      "platform": "京东",
      "price": 5299,
      "conditions": "官方自营，无额外券",
      "seller_type": "official"
    },
    {
      "platform": "拼多多",
      "price": 4899,
      "conditions": "百亿补贴，限新用户",
      "seller_type": "subsidized"
    },
    {
      "platform": "天猫",
      "price": 5199,
      "conditions": "官方旗舰店，需领券200",
      "seller_type": "official"
    }
  ]
}
```

### 测试用例 1：标准场景
```json
{
  "product_name": "华为 Mate 60 Pro 12GB+256GB",
  "price_list": [6999, 6899, 7199, 6799, 7299],
  "platform_info": [
    {"platform": "京东", "price": 6999, "conditions": "官方自营", "seller_type": "official"},
    {"platform": "天猫", "price": 6899, "conditions": "官方旗舰店", "seller_type": "official"},
    {"platform": "拼多多", "price": 6799, "conditions": "百亿补贴", "seller_type": "subsidized"}
  ]
}
```

### 测试用例 2：异常价格检测
```json
{
  "product_name": "Sony WH-1000XM5",
  "price_list": [2999, 2990, 2980, 2995, 1500],
  "platform_info": [
    {"platform": "京东", "price": 2999, "conditions": "官方自营", "seller_type": "official"},
    {"platform": "天猫", "price": 2990, "conditions": "官方旗舰店", "seller_type": "official"},
    {"platform": "淘宝", "price": 1500, "conditions": "疑似翻新", "seller_type": "third-party"}
  ]
}
```

### 测试用例 3：复杂条件场景
```json
{
  "product_name": "戴森 V15 Detect",
  "price_list": [4990, 4899, 5290, 5490],
  "platform_info": [
    {"platform": "京东", "price": 5290, "conditions": "官方自营，无折扣", "seller_type": "official"},
    {"platform": "拼多多", "price": 4990, "conditions": "百亿补贴，限新用户", "seller_type": "subsidized"},
    {"platform": "天猫", "price": 4899, "conditions": "需领券300+满减200", "seller_type": "official"}
  ]
}
```

## 注意事项

1. **SKU 一致性**: 确保所有价格来自相同的商品规格，不同配置（如颜色、容量、版本）不应混合在同一个 `price_list` 中。

2. **价格时效性**: `time_window` 字段建议设置，以便智能体判断价格的时效性。

3. **条件完整性**: `conditions` 字段应尽量完整描述获得该价格所需的所有条件，包括：
   - 是否需要优惠券
   - 是否是会员专享价
   - 是否有限时/限量
   - 是否有地区限制

4. **数据采集**: 智能体在采集价格时应遵循以下原则：
   - 优先采集官方渠道价格
   - 标注特殊条件（如"百亿补贴"、"秒杀"）
   - 记录采集时间
   - 区分展示价和到手价

## 验证工具

使用 `data_validator.py` 脚本验证输入数据：

```bash
python data_validator.py '<json_data>'
```

示例：
```bash
python data_validator.py '{"product_name": "iPhone 15", "price_list": [5000, 5200]}'
```

输出：
```json
{
  "is_valid": true,
  "errors": [],
  "warnings": []
}
```


path: references/price_collection_guide.md
content: # 电商价格采集指导

## 目录
- [概览](#概览)
- [采集原则](#采集原则)
- [平台特性](#平台特性)
- [采集流程](#采集流程)
- [数据规范](#数据规范)
- [注意事项](#注意事项)

## 概览
本文档为智能体提供电商价格信息的采集指导，包括各平台的特性、采集流程和数据规范。

## 采集原则

### 1. SKU 一致性原则
- 确保采集的价格来自完全相同的商品规格
- 不同颜色、容量、版本、配置的商品不能混在一起
- 示例：iPhone 15 128GB 黑色 vs iPhone 15 256GB 白色（不可比）

### 2. 价格可比性原则
- 优先采集"到手价"（最终支付价格）
- 区分展示价、券后价、满减价
- 不含运费的价格应标注"不含运费"

### 3. 信息完整性原则
- 不仅采集价格，还需采集条件、商家类型、售后政策
- 记录采集时间，便于时效性判断

### 4. 可信度优先原则
- 优先采集官方渠道价格
- 对非官方渠道的价格需额外验证

## 平台特性

### 京东
**渠道类型**:
- 官方自营（京东自营，最高可信度）
- 官方旗舰店
- 授权店
- 第三方商家

**价格特点**:
- 价格通常较稳定
- 自营商品有明确售后保障
- 促销活动：京东618、双11、京东超市日等

**采集要点**:
- 优先采集自营价格
- 标注是否需要领券
- 区分京东PLUS会员价

**常见条件**:
- 自营现货
- 需领券
- 限时秒杀
- PLUS会员专享

### 天猫
**渠道类型**:
- 官方旗舰店（最高可信度）
- 授权店
- 普通店铺

**价格特点**:
- 价格波动较大，常有优惠券活动
- 店铺活动较多：聚划算、百亿补贴等
- 跨店满减是常见促销方式

**采集要点**:
- 确认是否为官方旗舰店
- 区分店铺券和跨店券
- 记录优惠券领取条件和有效期

**常见条件**:
- 店铺满减
- 跨店满减
- 需领券（店铺券/跨店券）
- 88VIP专享价

### 拼多多
**渠道类型**:
- 百亿补贴（平台补贴，价格低但可能有条件）
- 官方品牌店
- 普通店铺

**价格特点**:
- 百亿补贴价格通常最低，但限制较多
- 价格波动频繁，需实时确认
- 同款商品可能有多个店铺

**采集要点**:
- 重点采集百亿补贴价格
- 确认补贴条件（限新用户、限地区等）
- 查看店铺评分和商品评价
- 注意区分"补贴价"和"活动价"

**常见条件**:
- 百亿补贴（通常限新用户）
- 限地区
- 限时秒杀
- 多件优惠
- 关注店铺享优惠

### 抖音
**渠道类型**:
- 品牌自播（官方直播）
- 授权店直播
- 达人带货

**价格特点**:
- 直播间价格可能低于店铺价
- 限时、限量是常见条件
- 价格受主播影响大

**采集要点**:
- 确认是否为品牌官方直播
- 区分直播间价和店铺价
- 记录优惠码和领取方式
- 注意是否为"赠品"而非低价

**常见条件**:
- 直播间专属价
- 限时限量
- 需领券
- 拍一发N（赠品）

### 小红书
**渠道类型**:
- 品牌官方号
- 达人推荐
- 普通用户分享

**价格特点**:
- 多为推荐和分享，非直接购买
- 价格信息可能来自不同平台
- 需甄别广告和真实分享

**采集要点**:
- 小红书主要用于价格参考，而非直接采集
- 关注官方号发布的价格信息
- 查看评论区是否有真实购买反馈

### 淘宝
**渠道类型**:
- 天猫官方旗舰店（同天猫）
- 授权店
- 淘宝个人店铺

**价格特点**:
- 价格区间大，质量参差不齐
- 个人店铺风险较高
- 促销活动多

**采集要点**:
- 区分天猫和淘宝
- 查看店铺评分（皇冠、钻石、心级）
- 查看商品评价和销量
- 注意"包邮"、"假一赔十"等承诺

### 亚马逊（海外）
**渠道类型**:
- 亚马逊自营
- 第三方商家

**价格特点**:
- 价格含税费（如增值税）
- 运费可能较高
- 受汇率影响

**采集要点**:
- 确认是否含税
- 确认运费
- 注意关税政策
- 确认保修政策（是否全球联保）

## 采集流程

### 步骤 1：商品语义对齐
1. 识别商品品牌、型号、关键规格
2. 去除营销词、赠品词、套装描述
3. 确认目标 SKU
4. 排除不可比商品

**示例**:
- 用户输入："iPhone 15 Pro Max 256GB"
- 语义对齐：Apple iPhone 15 Pro Max A3108 256GB
- 排除：iPhone 15 Pro Max 512GB（容量不同）、iPhone 15 Pro（型号不同）

### 步骤 2：平台选择
1. 根据用户指定平台采集
2. 若未指定，默认采集：京东、天猫、拼多多
3. 考虑地区限制（如用户在香港，优先考虑香港平台）

### 步骤 3：价格信息采集
1. **采集展示价**: 商品页面标注的价格
2. **采集到手价**: 计算最终支付价格（考虑优惠券、满减等）
3. **采集条件**: 记录获得该价格的所有条件
4. **采集商家信息**: 商家类型、店铺评分、售后政策
5. **采集时间**: 记录采集时间戳

### 步骤 4：数据标准化
1. 统一价格单位（如均为人民币元）
2. 统一条件描述格式
3. 统一商家类型分类
4. 标注数据来源

## 数据规范

### 价格数据格式
```json
{
  "price": 5299,           // 数字类型，单位：元
  "display_price": 5999,  // 展示价
  "coupon_price": 700,    // 优惠金额
  "shipping": 0,          // 运费（0表示包邮）
  "effective_price": 5299  // 到手价（price + shipping）
}
```

### 条件描述格式
```json
{
  "conditions": "官方自营，无额外券",  // 简洁描述
  "details": {                        // 详细条件
    "need_coupon": false,
    "is_limited_time": false,
    "is_limited_quantity": false,
    "new_user_only": false,
    "region_limited": false,
    "membership_required": false
  }
}
```

### 商家信息格式
```json
{
  "seller_type": "official",          // official/authorized/third-party/subsidized
  "seller_name": "京东自营",
  "seller_rating": 4.9,              // 店铺评分（如果有）
  "after_sales": "全国联保"          // 售后政策
}
```

### 完整数据示例
```json
{
  "platform": "京东",
  "product_name": "Apple iPhone 15 128GB 黑色",
  "price": 5299,
  "display_price": 5999,
  "conditions": "官方自营，无额外券",
  "details": {
    "need_coupon": false,
    "is_limited_time": false,
    "is_limited_quantity": false
  },
  "seller_info": {
    "seller_type": "official",
    "seller_name": "京东自营",
    "seller_rating": 4.9,
    "after_sales": "全国联保"
  },
  "collect_time": "2024-01-15T10:30:00Z"
}
```

## 注意事项

### 1. 时效性
- 电商价格变化频繁，采集时应记录时间
- 建议在回复中标注价格采集时间
- 提醒用户价格可能随时变化

### 2. 条件验证
- 采集后应验证条件的真实性
- 对可疑条件（如"零元购"、"免费领"）应特别警惕
- 避免采集明显不合理的价格

### 3. SKU 验证
- 仔细核对商品规格，确保 SKU 一致
- 对疑似混充不同 SKU 的商品应排除
- 示例：同一型号不同容量的商品价格不能直接对比

### 4. 赠品与捆绑销售
- 区分"低价"和"赠品"
- 拍一发N的赠品不计入价格对比
- 捆绑销售（如+配件）应标注

### 5. 运费与税费
- 查询是否包邮
- 如果有运费，应计入到手价
- 海外商品需考虑关税和增值税

### 6. 促销活动识别
- 识别平台大促（如618、双11）期间的异常低价
- 识别限时秒杀、限量优惠等不稳定价格
- 标注促销活动，提醒用户注意时效

### 7. 用户评价参考
- 查看商品评价，了解真实体验
- 特别关注"中评"和"差评"
- 注意区分"刷单"评价

### 8. 风险商品识别
- 价格显著低于市场价（如低于 P10 20%以上）
- 商家非官方且评分低（< 4.5）
- 无明确售后说明
- 需要预付定金、分期等特殊支付方式
- 要求线下交易、微信转账等

## 采集工具建议

### 优先级 1：网络搜索
- 搜索关键词："商品名 + 平台 + 价格"
- 示例："iPhone 15 128GB 京东价格"
- 查看搜索结果中的商品信息

### 优先级 2：官方应用/网站
- 访问平台官方网站或APP
- 搜索商品
- 查看价格和活动信息

### 优先级 3：比价网站
- 如有比价网站，可作为辅助参考
- 注意比价网站的数据时效性

## 常见问题

### Q1: 如何确认商品是官方旗舰店？
**A**: 
- 查看店铺名称是否包含"官方旗舰店"
- 查看店铺是否有品牌授权证书
- 查看店铺评分和商品评价

### Q2: 如何判断价格是否为"到手价"？
**A**:
- 查看商品详情页是否标注"到手价"
- 计算优惠券、满减等优惠
- 加上运费（如果不包邮）

### Q3: 如何识别"伪低价"？
**A**:
- 价格显著低于市场价（如低于 P10 20%以上）
- 商家非官方且信息不透明
- 需要满足复杂条件（如预付定金、分期等）
- 有大量负面评价

### Q4: 如何处理不同地区的价格差异？
**A**:
- 标注地区信息
- 考虑税费差异
- 考虑运费差异
- 如果用户未指定地区，默认以大陆地区为准

### Q5: 如何确保采集的数据时效性？
**A**:
- 记录采集时间
- 在回复中标注"价格采集时间"
- 提醒用户价格可能随时变化
- 对于大促期间的价格，特别标注时效性

## 总结

智能体在采集价格信息时，应遵循以下核心原则：

1. **准确性**: 确保 SKU 一致，价格准确
2. **完整性**: 不仅采集价格，还需采集条件、商家信息
3. **时效性**: 记录采集时间，标注价格变化
4. **可比性**: 确保采集的价格来自可比的来源
5. **可信度**: 优先采集官方渠道，验证数据真实性

通过遵循本指导，智能体可以采集到高质量的价格数据，为后续的价格分析和风险评估提供可靠基础。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)