163 lines
3.8 KiB
Markdown
163 lines
3.8 KiB
Markdown
|
|
# Phase 3:Agent 集成
|
|||
|
|
|
|||
|
|
日期:2026-04-04
|
|||
|
|
状态:待实施
|
|||
|
|
|
|||
|
|
依赖:Phase 1 + Phase 2 完成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 本阶段目的
|
|||
|
|
|
|||
|
|
将代码指挥官接入 LangGraph:
|
|||
|
|
- Graph 节点
|
|||
|
|
- 边路由
|
|||
|
|
- 任务模型
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 详细任务
|
|||
|
|
|
|||
|
|
### 2.1 Graph 节点
|
|||
|
|
|
|||
|
|
**文件**: `backend/app/agents/graph.py`
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 新增 code_commander_node
|
|||
|
|
async def code_commander_node(state: AgentState) -> AgentState:
|
|||
|
|
"""代码指挥官节点"""
|
|||
|
|
# 1. 获取用户需求和选择的 AI 提供商
|
|||
|
|
user_message = state.messages[-1].content
|
|||
|
|
ai_provider = state.get("ai_provider", "claude")
|
|||
|
|
|
|||
|
|
# 2. 安全分级
|
|||
|
|
classifier = SecurityClassifier()
|
|||
|
|
risk_level = classifier.classify(user_message)
|
|||
|
|
|
|||
|
|
# 3. 根据风险等级选择执行器
|
|||
|
|
adapter = get_adapter(ai_provider)
|
|||
|
|
if risk_level == RiskLevel.LOW:
|
|||
|
|
executor = DirectExecutor(adapter)
|
|||
|
|
result = await executor.execute(user_message)
|
|||
|
|
else:
|
|||
|
|
sandbox = await SandboxEnvironment.create()
|
|||
|
|
executor = SandboxExecutor(adapter)
|
|||
|
|
result = await executor.execute(user_message, sandbox.session_id)
|
|||
|
|
state["workspace_path"] = str(sandbox.workspace_path)
|
|||
|
|
state["execution_session_id"] = sandbox.session_id
|
|||
|
|
|
|||
|
|
# 4. 更新状态
|
|||
|
|
state.messages.append(AIMessage(content=str(result)))
|
|||
|
|
state["next_step"] = None # 任务完成
|
|||
|
|
|
|||
|
|
return state
|
|||
|
|
|
|||
|
|
# 节点注册到 NODES
|
|||
|
|
NODES: dict[str, NodeCallable] = {
|
|||
|
|
# ... 现有节点 ...
|
|||
|
|
"code_commander": code_commander_node,
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.2 边路由
|
|||
|
|
|
|||
|
|
**文件**: `backend/app/agents/graph.py`
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def _should_route_to_code_commander(state: AgentState) -> str:
|
|||
|
|
"""判断是否路由到代码指挥官"""
|
|||
|
|
if state.current_agent == "code_commander":
|
|||
|
|
return "code_commander"
|
|||
|
|
# ... 其他条件
|
|||
|
|
return END
|
|||
|
|
|
|||
|
|
# 边注册
|
|||
|
|
def _build_graph() -> CompiledGraph:
|
|||
|
|
# ... 现有边 ...
|
|||
|
|
|
|||
|
|
# 新增代码指挥官相关边
|
|||
|
|
graph.add_conditional_edges(
|
|||
|
|
"master",
|
|||
|
|
_should_route_to_code_commander,
|
|||
|
|
{
|
|||
|
|
"code_commander": "code_commander",
|
|||
|
|
END: END,
|
|||
|
|
}
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
graph.add_edge("code_commander", END)
|
|||
|
|
|
|||
|
|
return graph.compile()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.3 任务模型
|
|||
|
|
|
|||
|
|
**文件**: `backend/app/agents/schemas/task.py`
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from pydantic import BaseModel, Field
|
|||
|
|
from typing import Literal
|
|||
|
|
|
|||
|
|
class CodeProviderType(str, Enum):
|
|||
|
|
CLAUDE = "claude"
|
|||
|
|
GEMINI = "gemini"
|
|||
|
|
CODEX = "codex"
|
|||
|
|
OPENCODE = "opencode"
|
|||
|
|
|
|||
|
|
class RiskLevelType(str, Enum):
|
|||
|
|
LOW = "low"
|
|||
|
|
HIGH = "high"
|
|||
|
|
|
|||
|
|
class CodeTask(BaseModel):
|
|||
|
|
"""代码任务"""
|
|||
|
|
id: str = Field(default_factory=lambda: f"code_{uuid.uuid4().hex[:8]}")
|
|||
|
|
provider: CodeProviderType
|
|||
|
|
prompt: str
|
|||
|
|
risk_level: RiskLevelType
|
|||
|
|
sandbox_mode: bool
|
|||
|
|
workspace_path: str | None = None
|
|||
|
|
session_id: str | None = None
|
|||
|
|
status: Literal["pending", "running", "completed", "failed"] = "pending"
|
|||
|
|
created_at: datetime = Field(default_factory=datetime.now)
|
|||
|
|
|
|||
|
|
class CodeExecutionResult(BaseModel):
|
|||
|
|
"""代码执行结果"""
|
|||
|
|
task_id: str
|
|||
|
|
success: bool
|
|||
|
|
exit_code: int
|
|||
|
|
stdout: str
|
|||
|
|
stderr: str
|
|||
|
|
files_created: list[str] = Field(default_factory=list)
|
|||
|
|
workspace_path: str | None = None
|
|||
|
|
completed_at: datetime = Field(default_factory=datetime.now)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 核心文件清单
|
|||
|
|
|
|||
|
|
| 文件 | 操作 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `graph.py` | 修改 | 新增 `code_commander_node` 和边路由 |
|
|||
|
|
| `schemas/task.py` | 修改 | 新增 `CodeTask`, `CodeExecutionResult` 等模型 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 验收标准
|
|||
|
|
|
|||
|
|
- [ ] `code_commander_node` 正确处理任务
|
|||
|
|
- [ ] `SecurityClassifier` 被正确调用
|
|||
|
|
- [ ] 高低风险任务路由到正确的执行器
|
|||
|
|
- [ ] `CodeTask` 和 `CodeExecutionResult` 模型正确
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 依赖关系
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Phase 1 + Phase 2
|
|||
|
|
↓
|
|||
|
|
本阶段 → Phase 4(流式交互)
|
|||
|
|
→ Phase 5(前端集成)
|
|||
|
|
```
|