# Config 目录重构计划

**日期**: 2026-03-02
**目标**: 重新整理 backend/src/core/config 下的配置文件，按领域分类

---

## 1. 需求背景

当前 `backend/src/core/config` 结构存在以下问题：

1. **职责不清**: `initialization` 模块放在 `core/` 根目录，但实际是配置初始化，应归属 `config/`
2. **分类粗放**: `static/agent/` 混入了不同领域的配置（LLM 目录、工具白名单、Agent 模板）
3. **配置不符规范**: CrewAI 模板缺少必要字段（backstory、expected_output），且 prompts 目录是冗余的

---

## 2. 目标结构

```
backend/src/core/
├── config/
│   ├── settings.py              # 运行时配置（不变）
│   ├── initial/
│   │   └── init_data.py        # 种子数据初始化（移动）
│   └── static/
│       ├── database/
│       │   ├── llm_catalog.yaml           # LLM 目录（移动）
│       │   └── user_agent_catalog.yaml   # 用户 Agent 种子（新增，置空）
│       └── crewai/
│           ├── agents.yaml                # Agent 定义（移动 + 补充字段）
│           ├── tasks.yaml                 # Task 定义（移动 + 补充 expected_output）
│           ├── workflow.yaml              # 工作流（移动）
│           └── tools.yaml                 # 工具白名单（移动）
└── agent/                         # 代码实现（不变）
    └── crewai/
        └── template_loader.py   # 需更新路径引用
```

---

## 3. 涉及代码清单

### 3.1 需要移动/删除的文件

| 操作 | 源路径 | 目标路径 |
|------|--------|----------|
| 移动 | `core/initialization/init_data.py` | `core/config/initial/init_data.py` |
| 移动 | `core/config/static/agent/llm_catalog.yaml` | `core/config/static/database/llm_catalog.yaml` |
| 新建 | - | `core/config/static/database/user_agent_catalog.yaml` |
| 移动 | `core/config/static/agent/crewai/agents.yaml` | `core/config/static/crewai/agents.yaml` |
| 移动 | `core/config/static/agent/crewai/tasks.yaml` | `core/config/static/crewai/tasks.yaml` |
| 移动 | `core/config/static/agent/crewai/workflow.yaml` | `core/config/static/crewai/workflow.yaml` |
| 移动 | `core/config/static/agent/tools.yaml` | `core/config/static/crewai/tools.yaml` |
| 删除 | `core/config/static/agent/crewai/prompts/` | - |

### 3.2 需要修改的代码文件

| 文件 | 修改内容 |
|------|----------|
| `core/config/initial/init_data.py` | 更新 `_default_catalog_path()` 指向 `static/database/` |
| `core/agent/crewai/template_loader.py` | 1. 更新 `_default_static_root()` 指向 `static/crewai/`<br>2. 移除 `CrewAITemplate.prompts` 字段<br>3. 移除 `_read_prompt()` 和 prompts 加载逻辑 |
| `core/runtime/cli.py` | 更新 import 路径 |
| `tests/unit/core/test_agent_init_data.py` | 更新 import 路径和路径断言 |
| `tests/unit/core/config/test_crewai_template_loader.py` | 1. 更新路径构造<br>2. 移除 prompts 目录创建<br>3. 移除 prompts 相关断言 |

### 3.3 需要更新的配置文件内容

#### agents.yaml - 补充 backstory

```yaml
intent:
  role: Intent Agent
  goal: Classify user intent and decide execution strategy
  backstory: >
    You are an expert intent classifier with deep understanding
    of user query patterns and dialogue acts. Your role is to
    analyze user input and determine the appropriate action.

execution:
  role: Execution Agent
  goal: Execute tasks with available tools
  backstory: >
    You are a skilled task executor with expertise in tool calling,
    API interactions, and result verification. You work systematically
    to complete user requests.

organization:
  role: Organization Agent
  goal: Format final response and references
  backstory: >
    You specialize in presenting results in a clear, user-friendly manner.
    You ensure responses are well-structured and actionable.
```

#### tasks.yaml - 补充 expected_output

```yaml
intent:
  description: Identify user intent and required capabilities
  expected_output: >
    Structured intent classification with intent type, confidence score,
    and recommended action plan

execution:
  description: Execute intent with tools and model calls
  expected_output: >
    Verified execution results with tool outputs, status, and any errors

organization:
  description: Format final response and references
  expected_output: >
    User-friendly response with structured output, citations, and
    clear next steps if applicable
```

#### user_agent_catalog.yaml - 置空

```yaml
agents: []
```

---

## 4. 实施步骤

### Phase 1: 移动配置文件

1. 创建 `core/config/static/database/` 目录
2. 创建 `core/config/static/crewai/` 目录
3. 移动并合并 LLM 目录配置
4. 创建空的 user_agent_catalog.yaml

### Phase 2: 更新代码引用

1. 移动 `initialization/init_data.py` → `config/initial/init_data.py`
2. 更新 `init_data.py` 中的路径函数 `_default_catalog_path()` → `static/database/`
3. 更新 `template_loader.py`:
   - 路径函数 `_default_static_root()` → `static/crewai/`
   - 移除 `_read_prompt()` 函数
   - 移除 `CrewAITemplate.prompts` 字段
   - 移除 prompts 加载逻辑
4. 更新 `cli.py` 的 import 路径
5. 删除旧的 `core/initialization/` 目录（如为空）

### Phase 4: 更新测试

1. 更新 `test_agent_init_data.py`:
   - import 路径: `core.initialization` → `core.config.initial`
   - 路径断言: `static/agent/` → `static/database/`
2. 更新 `test_crewai_template_loader.py`:
   - 路径构造: `agent/` → `crewai/`
   - 移除 prompts 目录创建代码
   - 移除 `template.prompts` 相关断言
3. 运行测试验证

---

## 5. 风险与回滚

### 风险

- 路径变更可能导致运行时找不到配置文件
- 测试路径断言需要同步更新

### 回滚方案

- 保留 git 分支，验证通过后再合并
- 如有问题，可通过 git revert 快速回滚

---

## 6. 验证方式

```bash
# 1. 运行单元测试
cd backend && uv run pytest tests/unit/core/test_agent_init_data.py tests/unit/core/config/test_crewai_template_loader.py -v

# 2. 运行 lint
cd backend && uv run ruff check src/core/config/ src/core/agent/crewai/ src/core/runtime/cli.py

# 3. 运行 typecheck
cd backend && uv run basedpyright src/core/config/ src/core/agent/crewai/ src/core/runtime/cli.py
```
