SearchAgentCore 和 harness/runner 都在加载策略,职责不清tests/output、tests/traces 等路径到处都是pipeline/runner.py 同时做装配、CLI、知识源定义run_pipeline.py 和 run_search_agent.py 职责不清search_agent/
├── core/ # 核心领域逻辑(纯业务)
│ ├── __init__.py
│ ├── models.py # 数据模型(Policy, Context, Article 等)
│ ├── policy.py # 策略定义和应用
│ └── repository.py # 策略仓储(DB 访问)
│
├── pipeline/ # 流水线引擎(可复用)
│ ├── __init__.py
│ ├── orchestrator.py # 流水线编排器
│ ├── base.py # Stage/Gate/Hook 基类
│ ├── context.py # 上下文数据结构
│ ├── stages/ # 各个阶段实现
│ │ ├── __init__.py
│ │ ├── demand_analysis.py
│ │ ├── query_expansion.py
│ │ ├── content_search.py
│ │ ├── content_filter.py
│ │ ├── account_precipitate.py
│ │ └── output_persist.py
│ ├── gates/ # 质量门禁
│ │ ├── __init__.py
│ │ ├── search_completeness.py
│ │ ├── filter_sufficiency.py
│ │ └── output_schema.py
│ ├── hooks/ # 观察者钩子
│ │ ├── __init__.py
│ │ ├── trace_hook.py
│ │ ├── progress_hook.py
│ │ └── database_hook.py
│ └── adapters/ # 外部工具适配器
│ ├── __init__.py
│ ├── weixin.py
│ └── knowledge.py
│
├── config/ # 配置管理(统一入口)
│ ├── __init__.py
│ ├── settings.py # 配置类定义
│ ├── defaults.py # 默认配置
│ └── loader.py # 配置加载器
│
├── application/ # 应用层(组装和编排)
│ ├── __init__.py
│ ├── builder.py # Pipeline 构建器
│ ├── runner.py # 执行器(带预算、超时等约束)
│ └── service.py # 对外服务接口
│
├── infrastructure/ # 基础设施
│ ├── __init__.py
│ ├── database.py # 数据库连接池
│ ├── http_client.py # HTTP 客户端
│ └── logging.py # 日志配置
│
└── cli/ # 命令行入口
├── __init__.py
└── main.py # 统一 CLI 入口
# 根目录
run_search_agent.py # 简化为 CLI 入口的薄壳
configs/ # 外部配置文件
├── default.json # 默认配置
├── production.json # 生产配置
└── knowledge_sources.json # 知识源配置
目标: 消除硬编码,统一配置入口
步骤:
src/config/settings.py - 定义完整的配置类src/config/loader.py - 统一加载环境变量和配置文件default_knowledge_sources() 移到 configs/knowledge_sources.json文件变更:
src/config/settings.py, src/config/loader.pysrc/pipeline/runner.py, src/domain/search/core.pyconfigs/knowledge_sources.json目标: 修复 domain 层反向依赖 pipeline 层的问题
步骤:
src/application/builder.py - 负责组装 pipelinebuild_default_pipeline() 从 pipeline/runner.py 移到 application/builder.pySearchAgentCore 不再导入 pipeline.runner,改为接受 PipelineOrchestrator 注入pipeline/runner.py 为 pipeline/factory.py(只做工厂职责)文件变更:
src/application/builder.pysrc/domain/search/core.pysrc/pipeline/runner.py → src/pipeline/factory.py目标: 消除策略加载重复逻辑
步骤:
harness/runner.py 重命名为 application/runner.pySearchAgentCore.run() 移除 use_db_policy 参数和内部策略加载逻辑SearchAgentCore.run() 只接受 policy: SearchAgentPolicy 参数(必填)application/runner.py 负责文件变更:
src/harness/search_agent/runner.py → src/application/runner.pysrc/domain/search/core.py - 简化接口run_search_agent.py - 调用新接口目标: 统一 CLI 入口,消除重复
步骤:
src/cli/main.py - 统一 CLI 入口run_search_agent.py 简化为薄壳,只调用 cli.main()run_pipeline.py(功能已被 run_search_agent.py 覆盖)文件变更:
src/cli/main.pyrun_search_agent.pyrun_pipeline.py(或移到 scripts/legacy/)目标: 清晰的模块边界
步骤:
src/harness/ 内容整合到 src/application/src/harness/ 目录文件变更:
src/harness/search_agent/* → src/application/src/harness/ 目录run_search_agent.py (薄壳)
↓
src/cli/main.py (CLI 解析)
↓
src/application/runner.py (策略加载 + 预算控制)
↓
src/application/builder.py (组装 pipeline)
↓
src/domain/search/core.py (执行业务逻辑)
↓
src/pipeline/orchestrator.py (编排各阶段)
↓
src/pipeline/stages/* (具体阶段实现)
1. 环境变量 (PIPELINE_*, SEARCH_AGENT_*)
2. 命令行参数 (--config, --strategy-file)
3. 配置文件 (configs/*.json)
4. 代码默认值 (src/config/defaults.py)
重构完成后,确保: