EXECUTION_GUIDE.md 8.6 KB

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

演示执行结果 ✓

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

执行场景

  • 昨日消耗: 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. 环境变量配置

# 腾讯广告 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. 依赖安装

# 进入项目目录
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: 交互式执行(推荐)

# 启动 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: 程序化调用

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: 定时任务(自动化)

# 创建定时脚本
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

解决方案:

# 检查环境变量
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

解决方案:

# 检查 token 是否过期
# 重新获取 access_token(通过 OAuth2 流程)
export TENCENT_AD_ACCESS_TOKEN="new_access_token"

3. 数据查询为空

错误信息:

查询到 0 个广告的昨日效率数据

解决方案:

# 检查 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 超时

解决方案:

# 分批执行(每批 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. 实时监控指标

# 监控脚本示例
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. 策略优化

根据效果调整参数:

# 如果消耗过快,增加缩量幅度
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. 异常处理

  • 设置消耗上限告警
  • 监控异常广告(消耗突增)
  • 准备紧急暂停脚本
# 紧急暂停所有广告
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