This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
kb-skills/.planning/phases/10-proxy-pool/10-CONTEXT.md
T

3.6 KiB
Raw Blame History

Phase 10: Proxy Pool (代理池管理) - Context

Gathered: 2026-03-18 Status: Ready for planning

## Phase Boundary

建立代理池基础设施,支持多代理配置、自动轮换和健康检查。此阶段不涉及请求行为伪装(Phase 11)和验证码处理(Phase 12)。

核心能力:

  • 从配置文件加载多个代理地址
  • 每次请求自动轮换代理
  • 代理健康检查(被动检测)
  • 失效代理自动切换和恢复
## Implementation Decisions

代理池配置方式

  • 配置来源: YAML 文件(~/.kb_proxies.yaml)
  • 配置格式: 简单 URL 列表,认证信息嵌入 URL
    proxies:
      - "http://user:pass@proxy1.example.com:8080"
      - "http://proxy2.example.com:3128"
      - "socks5://user:pass@proxy3.example.com:1080"
    
  • 向后兼容: 如果未配置代理池文件,自动回退到现有的 HTTP_PROXY 环境变量(单代理模式)
  • 支持的协议: HTTP、HTTPS、SOCKS5

轮换策略

  • 策略: 顺序轮换(Round-Robin)
  • 时机: 每次请求自动轮换到下一个代理
  • 实现: 维护一个索引指针,每次请求后递增并循环

健康检查机制

  • 检测方式: 被动检测(请求失败时标记)
  • 失效判断: 连续 3 次请求失败后标记为失效
  • 失败类型: 网络超时、连接失败、代理返回错误

失效代理处理

  • 策略: 暂时移除 + 冷却恢复
  • 冷却时间: 5 分钟后自动恢复到轮换池
  • 全失效处理: 所有代理都失效时,回退到第一个代理继续尝试请求

Claude's Discretion

  • 冷却时间的具体实现方式(定时器 vs 惰性检查)
  • 代理统计信息的记录格式(可选功能)
  • 日志输出的详细程度
  • 失效代理的具体判断条件(HTTP 状态码范围)
## Specific Ideas
  • 配置文件示例:
    # ~/.kb_proxies.yaml
    proxies:
      - "http://127.0.0.1:7890"  # 本地代理
      - "http://user:pass@proxy.example.com:8080"  # 带认证
      - "socks5://127.0.0.1:1080"  # SOCKS5
    
  • 轮换实现: current_index = (current_index + 1) % len(available_proxies)
  • 冷却检查: if now() - proxy.failed_at > 300: proxy.available = True

<code_context>

Existing Code Insights

Reusable Assets

  • kb_workflow/crawler/config.py — CrawlerConfig、ProxyConfig 类,已有单代理支持
  • kb_workflow/crawler/config.py — to_playwright_format() 方法,代理格式转换
  • kb_workflow/crawler/zhihu_crawler.py — ZhihuCrawler 类,使用代理配置
  • kb_workflow/pipeline/config.py — KBSettings 配置类,pydantic-settings 模式

Established Patterns

  • 配置管理: pydantic BaseModel + 环境变量 + YAML 文件
  • 浏览器代理: Playwright browser.new_context(proxy=...)
  • 配置文件位置: ~/.kb_* 命名约定

Integration Points

  • ProxyPool 类替换现有的单代理逻辑
  • CrawlerConfig 扩展支持代理池
  • ZhihuCrawler._start_browser_with_proxy() 改为从代理池获取代理
  • 配置文件加载: 启动时读取 ~/.kb_proxies.yaml

</code_context>

## Deferred Ideas
  • API 获取代理 — 从代理服务商 API 自动获取代理,推迟到后续版本
  • 加权轮换 — 根据代理质量/速度加权,推迟到后续版本
  • 代理统计面板 — 展示每个代理的成功率、响应时间,推迟到后续版本
  • 配置热加载 — 运行时检测配置文件变化并重新加载,推迟到后续版本

Phase: 10-proxy-pool Context gathered: 2026-03-18