# 出价调整系统实际执行指南

## 演示执行结果 ✓

刚才的演示成功展示了完整的出价调整流程：

### 执行场景
- **昨日消耗**: 522,685 元（模拟数据）
- **今日预算**: 100,000 元
- **缩量幅度**: 81%
- **策略**: aggressive_scale_down（大幅缩量）

### 执行结果
- ✅ **Tier 1（30个）**: 出价 -5%~0%，保护高效广告
- ✅ **Tier 2（70个）**: 出价 -15%，适度缩量
- ✅ **Tier 3（116个）**: 出价 -30%，大幅削减
- ✅ **暂停（79个）**: 样本不足广告全部暂停
- ✅ **总计**: 调整 216 个，暂停 79 个

---

## 实际生产环境部署

### 前置条件

#### 1. 环境变量配置

```bash
# 腾讯广告 API
export TENCENT_AD_ACCESS_TOKEN="your_access_token_here"
export TENCENT_AD_ACCOUNT_ID="123456"
export TENCENT_AD_BASE_URL="https://api.e.qq.com/v3.0"

# ODPS（MaxCompute）数据仓库
export ODPS_ACCESS_ID="your_aliyun_access_key_id"
export ODPS_ACCESS_SECRET="your_aliyun_access_key_secret"
export ODPS_PROJECT="loghubods"
export ODPS_ENDPOINT="http://service.cn-shanghai.maxcompute.aliyun.com/api"
```

#### 2. 依赖安装

```bash
# 进入项目目录
cd /Users/liulidong/project/agent/Agent

# 安装 Python 依赖
pip install -r requirements.txt

# 确保安装了 ODPS 客户端
pip install pyodps

# 确保安装了 HTTP 客户端
pip install httpx
```

#### 3. 数据表准备

确保 ODPS 中存在以下表：

**表 1: `loghubods.creative_detail`**
- 字段：ad_id, ad_name, 首层小程序打开数, 裂变0层回流数, cost 等
- 分区：bizdate（格式：YYYYMMDD）

**表 2: `loghubods.ad_put_tencent_ad`**
- 字段：ad_id, ad_name, account_id, bid_amount, day_amount, ad_status, optimization_goal, targeting, create_time
- 说明：存储广告当前状态

---

## 执行方式

### 方式 1: 交互式执行（推荐）

```bash
# 启动 Agent 系统
python examples/auto_put_ad/run.py

# 在交互界面输入
> 账户 123456 今日预算 10 万，帮我调整出价
```

**系统流程：**
1. Budget Agent 自动调用 `budget_calculate_from_data`
2. 从 ODPS 拉取昨日效率数据和当前广告状态
3. 计算出价调整方案并展示
4. 等待用户确认
5. 用户输入"确认"后，调用 `bid_adjustment_execute` 执行
6. 报告执行结果

### 方式 2: 程序化调用

```python
import asyncio
from examples.auto_put_ad.tools.budget_calc import (
    budget_calculate_from_data,
    bid_adjustment_execute
)

async def main():
    # 步骤 1: 计算方案
    result = await budget_calculate_from_data(
        account_id=123456,
        total_budget_yuan=100000,
        bizdate="20260406"  # 或 "yesterday"
    )

    # 步骤 2: 展示方案
    print(result.output)

    # 步骤 3: 等待确认
    confirm = input("\n是否执行？(y/n): ")

    if confirm.lower() == 'y':
        # 步骤 4: 执行调整
        exec_result = await bid_adjustment_execute(
            adjustment_plan=result.data["adjustment_plan"],
            account_id=123456
        )
        print(exec_result.output)

if __name__ == "__main__":
    asyncio.run(main())
```

### 方式 3: 定时任务（自动化）

```bash
# 创建定时脚本
cat > /path/to/daily_bid_adjustment.sh << 'EOF'
#!/bin/bash
cd /Users/liulidong/project/agent/Agent
source venv/bin/activate

# 设置环境变量
export TENCENT_AD_ACCESS_TOKEN="..."
export ODPS_ACCESS_ID="..."
export ODPS_ACCESS_SECRET="..."

# 执行调整（需要实现自动确认逻辑）
python examples/auto_put_ad/auto_bid_adjustment.py \
    --account-id 123456 \
    --budget 100000 \
    --auto-confirm
EOF

chmod +x /path/to/daily_bid_adjustment.sh

# 添加到 crontab（每天早上 9:00 执行）
crontab -e
# 添加：0 9 * * * /path/to/daily_bid_adjustment.sh >> /var/log/bid_adjustment.log 2>&1
```

---

## 执行检查清单

### 执行前检查

- [ ] 环境变量已配置（TENCENT_AD_ACCESS_TOKEN, ODPS_ACCESS_ID 等）
- [ ] ODPS 数据表存在且有最新数据
- [ ] 腾讯广告 API 凭证有效（未过期）
- [ ] 账户余额充足（>= 今日预算 × 1.2）
- [ ] 网络连接正常（可访问腾讯广告 API 和 ODPS）

### 执行中监控

- [ ] 数据拉取成功（昨日效率数据 + 当前广告状态）
- [ ] 策略判断合理（缩量/扩量幅度符合预期）
- [ ] 分层结果正确（Tier 1/2/3 数量合理）
- [ ] 出价调整幅度在预期范围内
- [ ] 暂停广告数量可接受

### 执行后验证

- [ ] 检查执行结果（成功/失败数量）
- [ ] 抽查几个广告的出价是否已更新
- [ ] 监控实时消耗速度（是否符合预期）
- [ ] 记录调整历史（用于后续分析）

---

## 常见问题处理

### 1. ODPS 连接失败

**错误信息：**
```
ODPS 客户端初始化失败: Invalid access key
```

**解决方案：**
```bash
# 检查环境变量
echo $ODPS_ACCESS_ID
echo $ODPS_ACCESS_SECRET

# 重新设置
export ODPS_ACCESS_ID="your_correct_access_key_id"
export ODPS_ACCESS_SECRET="your_correct_access_key_secret"
```

### 2. 腾讯广告 API 调用失败

**错误信息：**
```
ad_update 失败: Invalid access token
```

**解决方案：**
```bash
# 检查 token 是否过期
# 重新获取 access_token（通过 OAuth2 流程）
export TENCENT_AD_ACCESS_TOKEN="new_access_token"
```

### 3. 数据查询为空

**错误信息：**
```
查询到 0 个广告的昨日效率数据
```

**解决方案：**
```python
# 检查 bizdate 是否正确
# 检查 account_id 是否正确
# 检查数据表分区是否存在

# 手动查询验证
from examples.auto_put_ad.tools.data_query import data_query

result = await data_query(
    table_name="creative_detail",
    bizdate="20260406",
    account_id=123456
)
print(result.output)
```

### 4. 批量执行超时

**错误信息：**
```
bid_adjustment_execute 超时
```

**解决方案：**
```python
# 分批执行（每批 50 个广告）
adjustment_plan = result.data["adjustment_plan"]

for i in range(0, len(adjustment_plan), 50):
    batch = adjustment_plan[i:i+50]
    await bid_adjustment_execute(
        adjustment_plan=batch,
        account_id=123456
    )
    await asyncio.sleep(6)  # QPS 限制：10/秒，休息 6 秒
```

---

## 监控与优化

### 1. 实时监控指标

```python
# 监控脚本示例
import asyncio
from examples.auto_put_ad.tools.ad_api import ad_get_report

async def monitor_realtime():
    """监控实时消耗"""
    while True:
        result = await ad_get_report(
            account_id=123456,
            date_range="today",
            level="ad"
        )

        # 解析消耗数据
        total_cost = sum(ad["cost"] for ad in result.data)
        print(f"当前消耗: {total_cost/100:.2f} 元")

        await asyncio.sleep(300)  # 每 5 分钟检查一次

asyncio.run(monitor_realtime())
```

### 2. 效果评估

**关键指标：**
- 实际消耗 vs 预算目标（偏差 <5%）
- 各层级广告表现（Tier 1 ROI 是否保持）
- 整体 ROI 变化（是否提升）
- 暂停广告数量（是否合理）

**评估周期：**
- 短期（2-4 小时）：消耗速度是否符合预期
- 中期（1 天）：整体 ROI 是否达标
- 长期（7 天）：策略效果是否稳定

### 3. 策略优化

**根据效果调整参数：**

```python
# 如果消耗过快，增加缩量幅度
result = await budget_calculate_from_data(
    account_id=123456,
    total_budget_yuan=80000,  # 降低预算
    tier1_ratio=0.10,  # 减少 Tier 1 占比
)

# 如果消耗过慢，减少缩量幅度
result = await budget_calculate_from_data(
    account_id=123456,
    total_budget_yuan=120000,  # 提高预算
    tier1_ratio=0.20,  # 增加 Tier 1 占比
)
```

---

## 安全建议

### 1. 权限控制
- 限制 API 凭证访问权限
- 使用只读账号查询数据
- 执行操作需要二次确认

### 2. 数据备份
- 执行前备份当前广告状态
- 记录每次调整的详细日志
- 保留历史调整方案（用于回滚）

### 3. 异常处理
- 设置消耗上限告警
- 监控异常广告（消耗突增）
- 准备紧急暂停脚本

```python
# 紧急暂停所有广告
from examples.auto_put_ad.tools.ad_api import ad_batch_update_status

await ad_batch_update_status(
    account_id=123456,
    adgroup_ids=[...],  # 所有广告 ID
    configured_status="AD_STATUS_SUSPEND"
)
```

---

## 总结

✅ **系统已就绪**：核心功能已实现并测试通过

✅ **演示成功**：模拟数据执行流程完整

✅ **文档完善**：提供详细的部署和执行指南

**下一步行动：**
1. 配置生产环境变量
2. 验证数据表连接
3. 小规模测试（10-20 个广告）
4. 全量执行并监控效果
5. 根据效果优化策略参数

---

**文档版本**: v1.0
**更新日期**: 2026-04-07
**联系人**: liulidong
