seedream4 / DELETE_GUIDE.md
wapadil
[FEATURE] 增强日志系统 - 支持 request_id 追踪与清理
e58e0a8

FAL 日志清理指南

从 Hugging Face Spaces 日志中提取 request_id 并删除输出文件的完整流程。

背景

由于你的 API key 没有 FAL Logs API 访问权限(需要 alpha 项目权限),我们使用变通方案:从 Hugging Face Spaces 应用日志中提取 request_id。

前置要求

  1. 从 Hugging Face Spaces 下载日志

  2. 获取 ADMIN scope 的 API key

    • Delete IO API 需要 ADMIN 权限
    • 如果你的当前 API key 没有 ADMIN 权限,需要在 FAL 网站创建新的 key
    • 访问: https://fal.ai/dashboard/keys

流程

步骤 1: 增强日志记录(已完成)

已更新应用代码,确保所有 request_id 被明确记录:

# monitoring.py - 新增函数
log_request_id(request_id, action="generated", model=..., prompt=...)

# api/routes.py - 在生成成功后调用
log_request_id(result['request_id'], ...)

日志格式示例:

2025-09-30 12:34:56 - seedream - INFO - [REQUEST_ID] abc123-def456 | action=generated | model=fal-ai/bytedance/seedream/v4/edit | prompt=...

重要: 需要重新部署应用到 Hugging Face Spaces 才能开始记录新的 request_id。

步骤 2: 从日志提取 request_id

运行提取脚本:

python extract_request_ids.py app_logs.txt

脚本功能:

  • 自动识别多种日志格式(结构化、通用、JSON)
  • 提取所有 request_id
  • 按模型分组统计
  • 保存到 request_ids.txtrequest_ids_context.json

输出示例:

✓ 从结构化日志提取: 245 个 request_id
✓ 从通用日志提取: 12 个 request_id

✓ 已保存 257 个 request_id 到 request_ids.txt
✓ 已保存详细上下文到 request_ids_context.json

按模型分组:
  - fal-ai/bytedance/seedream/v4/edit: 230 个
  - fal-ai/qwen-image-edit-plus: 27 个

步骤 3: 批量删除输出文件

运行删除脚本:

python delete_io_only.py request_ids.txt YOUR_ADMIN_API_KEY

或者交互式输入 API key:

python delete_io_only.py request_ids.txt
# 脚本会提示输入 API key

脚本功能:

  • 显示前5个 request_id 预览
  • 要求输入 'YES' 确认(防止误删)
  • 批量删除,自动重试失败的请求
  • 保存详细结果到 delete_results_YYYYMMDD_HHMMSS.json
  • 保存失败的 request_id 到 failed_request_ids_YYYYMMDD_HHMMSS.txt(用于重试)

输出示例:

[1/257] abc123-def456... ✓
[2/257] xyz789-uvw012... ✓
[3/257] ghi345-jkl678... ❌ HTTP 404: Not Found

--- 已完成 10/257,休息 0.5s ---

执行完成
==========================================
✓ 成功删除: 250 个 (97.3%)
❌ 删除失败: 7 个 (2.7%)
📊 总计: 257 个

步骤 4: 重试失败的删除(可选)

如果有失败的 request_id,可以重试:

python delete_io_only.py failed_request_ids_20250930_123456.txt YOUR_ADMIN_API_KEY

常见问题

Q1: 提取不到 request_id?

可能原因:

  1. 日志文件是旧版本应用生成的(没有增强的日志记录)
  2. 日志文件不完整

解决方案:

  • 确保下载了完整的 Hugging Face Spaces 日志
  • 如果日志太旧,需要等待新的请求生成(使用更新后的应用)
  • 尝试使用 extract_request_ids.py 的通用模式(自动尝试所有模式)

Q2: 删除时返回 403 Forbidden?

原因: API key 没有 ADMIN scope 或 alpha 项目权限

解决方案:

  1. 在 FAL 网站创建新的 API key,确保选择 ADMIN scope
  2. 联系 FAL 团队 (support@fal.ai) 申请 alpha 项目权限

Q3: 删除时返回 404 Not Found?

可能原因:

  1. request_id 对应的资源已经被删除
  2. request_id 格式错误或不存在

解决方案:

  • 忽略这些错误(可能是已经被删除的旧请求)
  • 检查 request_ids_context.json 确认提取的 ID 是否正确

Q4: 如何只删除特定时间段或特定模型的请求?

解决方案:

  1. 查看 request_ids_context.json,包含每个 request_id 的详细信息
  2. 手动筛选需要删除的 request_id
  3. 创建新的 txt 文件,每行一个 request_id
  4. 运行 delete_io_only.py 使用新文件

示例:

import json

# 加载上下文
with open('request_ids_context.json') as f:
    contexts = json.load(f)

# 只保留 seedream/v4/edit 模型的
filtered = [c['request_id'] for c in contexts
            if c.get('model') == 'fal-ai/bytedance/seedream/v4/edit']

# 保存
with open('request_ids_filtered.txt', 'w') as f:
    f.write('\n'.join(filtered))

文件说明

文件 用途
extract_request_ids.py 从日志提取 request_id
delete_io_only.py 批量删除输出文件
delete_logs.py 原始脚本(需要 Logs API 权限,已不可用)
monitoring.py 增强的日志系统(应用代码)
api/routes.py API 路由(应用代码,已添加 request_id 日志)

生成的文件

文件 说明
request_ids.txt 提取的 request_id 列表(每行一个)
request_ids_context.json 详细上下文(包含模型、提示词等)
delete_results_*.json 删除操作的完整结果
failed_request_ids_*.txt 删除失败的 request_id(用于重试)

数据隐私

  • 所有脚本都在本地运行
  • 不会上传日志内容到任何第三方
  • 只与 FAL API 通信执行删除操作

下一步优化

  1. 自动化清理:设置定期任务(如每周)自动清理旧日志
  2. 精细控制:基于时间范围、模型类型、提示词关键字过滤
  3. 日志导出:从 Hugging Face Spaces 自动下载日志(需要 API token)