# Agent 架构与能力边界(系统现状记录) — 2026-06-14 > 性质: 系统现状盘点 / 能力边界(查实的事实,非构想) > 关联: [任务推进设计](../构想审查/任务推进构想-2026-06-14.md)(AI 执行层依据本文档能力边界) > 关联: [三层模型-流程模板与人设体系](../专项设计/三层模型-流程模板与人设体系-2026-06-28.md)(人设层是本架构的下一阶段演进方向) > 关联: [AI-Native方向与路线图](../构想审查/AI-Native方向与路线图-2026-06-29.md)(AI Native 优先级矩阵与推进路线图) > 用途: 作为「AI 执行层」「AI 自审」等设计的真实能力依据,避免在超出系统现状的能力上做设计 --- ## 1. Agent 引擎:单链 ReAct ### 核心:`run_agentic_loop`(`src-tauri/src/commands/ai/agentic.rs`) 完整的 ReAct(Reason+Act)循环:**LLM 流式接收 → 工具调用 → 执行工具 → 结果回传 LLM → 循环**。 ``` ┌─ for iteration in 0..MAX_AGENT_ITERATIONS(10) ─────────────┐ │ 1. 用户停止? → 收尾退出 │ │ 2. 构建请求消息(超预算裁剪旧消息,保护工具三元组+最近6条) │ │ 3. stream_llm(流式,含 idle timeout/断连检测/停止信号) │ │ 4. 有 tool_calls? │ │ ├ 无 → 最终文本,break(正常结束) │ │ └ 有 → process_tool_calls(Low 自动 / Medium+High 待审批)│ │ ├ 有 pending 审批 → 暂停循环(generating 保持 true)│ │ └ 全自动完成 → 继续下一轮 │ └─ 达 10 轮 → 正常结束 ────────────────────────────────────────┘ ``` | 退出条件 | 处理 | |---|---| | LLM 只返回文本(无 tool_calls) | 正常结束,emit AiCompleted | | 有工具待审批 | 暂停循环,`generating` 保持 true,等 `ai_approve` → `try_continue_agent_loop` 恢复 | | 达 MAX_AGENT_ITERATIONS(10) | 正常结束 | | 用户请求停止 | 已生成文本入库后退出 | **配套设施**: - `TokenEstimator`:超预算裁剪历史(保护工具调用三元组 + 最近 6 条) - `LlmConcurrency`:全局 + 单对话双层并发限流(仅覆盖 stream_llm,工具执行本地操作不限流) - `AiAgentRound` 事件:每轮通知前端新建 assistant 消息 - 知识提炼(`maybe_spawn_extraction`)、标题生成(`ensure_conversation_title`)后台化 ### 服务场景 当前**服务于交互式 AI 对话**(侧边栏 aichat 式),不是任务执行。会话级状态在 `AiSession`(`generating`/`messages`/`pending_approvals`/`stop_flag`)。 ### 协调器:空壳 `crates/df-ai/src/coordinator.rs` 的 `AgentCoordinator` 是 **B 路线占位空壳**,注释明示: > ⚠ B 路线占位:当前单链 ReAct 够用,多 Agent 协作待 B 路线立项。有意保留空壳,勿删。 `run()` 返回 `"TODO: Agent 协作结果"`。**多 Agent 协作、Agent 间消息传递、任务分配——全部未实现**。当前是单链 ReAct。 --- ## 2. 工具系统 ### 注册:编译期硬编码 `build_ai_tool_registry`(`src-tauri/src/commands/ai/tool_registry.rs:77`)启动时构建注册表。**所有工具 Rust 写死,无运行时动态注册**。 ### 工具三要素同源 每个工具一次 `registry.register` 同时定义:`name + description + schema + RiskLevel + handler 闭包`。注释明示「handler 即唯一执行路径,schema+risk+实现同源,消除双轨」。 ### 风险分级 + 审批 | RiskLevel | 执行 | 机制 | |---|---|---| | `Low` | 自动执行 | `process_tool_calls` 直接跑 | | `Medium` / `High` | **待人工审批** | 进 `ai_pending_tool_calls`(持久化到 `ai_tool_executions` 表 status='pending'),启动可恢复;`ai_approve`/`ai_reject` 决定 | 审批机制现成——**这是「人工核对」可直接复用的基础设施**。 ### 路径安全 - `validate_path`:禁 `..` 路径遍历、禁 `.ssh/.aws/.gnupg/AppData/ProgramData/Windows/System32` 等敏感目录 - `resolve_workspace_path`:双层校验(词法 starts_with + canonicalize 解析 symlink),防越界和符号链接逃逸,锚定 workspace_root ### 审计 `ai_tool_executions` 表(migration V9 建)记录每次工具调用,`audit_finalize` 落盘 executed/rejected + 结果。 --- ## 3. 内置工具清单(固定工具集) | 风险 | 工具 | 说明 | |---|---|---| | Low | `list_projects` / `list_tasks` / `list_ideas` | 列表查询(truncate 50 防 context 膨胀,排软删) | | Low | `read_file` / `list_directory` | 文件读取(offset/limit 分页) | | Medium | `create_project` / `create_task` | 创建(create_project 可选 path/stack 一步绑定) | | Medium | `update_project` | 改字段(复用 CRUD 白名单校验) | | Medium | `write_file` | 写文件(自动建父目录) | | Medium | `bind_directory` | 项目绑定代码目录 + 探测技术栈 | | — | knowledge 相关(search 等) | 对齐 MCP 语义 | 完整清单见 `tool_registry.rs`(约 12+ 个 register)。 --- ## 4. 能力边界(查实的四个「无」) | 能力 | 现状 | 证据 | |---|---|---| | **配置/调用外部工具** | ❌ 无 | 无 MCP 客户端(`knowledge.rs` 注释提「MCP 语义」只是概念对齐,非实现);无 HTTP 工具;无动态注册;工具全编译期硬编码 | | **自造/迭代工具** | ❌ 无 | 工具定义(schema+risk+handler)是 Rust 代码,AI 运行时不能新增/修改;AI 能 `write_file` 写代码但不会变成可调用工具(要重编译) | | **执行类工具**(run shell/script) | ❌ 无 | grep `exec/shell/run_command` 零命中;AI 能写代码**没有工具运行它**;agentic coding「写→跑→改」闭环做不到 | | **agent ↔ workflow 打通** | ❌ 未打通 | `run_workflow` AI 工具是**空壳**(返回「请通过工作流页面运行」);ScriptNode 能跑 shell 但那是工作流节点不是 agent 工具,两套执行能力割裂 | --- ## 5. 关键缺口 1. **执行能力**:AI 能写不能跑。要做真 agentic coding 必须补执行类工具(`run_command`/`run_script`,或把 ScriptNode 能力暴露给 agent)。 2. **外部工具接入**:无 MCP 客户端,无法消费外部 MCP server 工具,工具集封闭。 3. **工具自造闭环**:AI 不能为特定任务临时造工具、不能迭代改进工具。 4. **agent ↔ workflow 割裂**:两套执行能力(agent ReAct / workflow DAG)未打通,AI 不能在 agent loop 内触发工作流。 5. **多 Agent 协作**:coordinator 空壳,单链 ReAct,无 Agent 间消息/任务分配。 --- ## 6. 对任务推进 AI 执行层的影响 [任务推进构想-2026-06-14.md](任务推进构想-2026-06-14.md) 的 AI 执行层(start 闸门)依赖系统 Agent 能力。本文档查实的边界直接框定其可达范围: | 设计点 | 受能力边界约束的真实情况 | |---|---| | **AI 执行任务** | 现状只能用固定工具集(主要 `write_file` 写代码 + CRUD),**不能运行/验证代码**。「AI 执行」≠「AI 写码并跑通」,当前只能前者的一半(写) | | **AI 自审** | AiNode 现成(通用 LLM 调用),可配 review prompt 做 code review。但要审得准需 AI 能读 diff(`read_file` 可)+ 判断(LLM 可),可行 | | **人工核对** | `ai_pending_tool_calls`(Medium+High 审批)现成,可直接复用为 merge 关卡 | | **advance_task 默认 AI 触发** | agent loop 现成,AI 执行完成事件可触发推进 | **结论**:AI 执行层要在当前 Agent 能力上落地,**真实可达**的是「AI 用固定工具干活(写文件/CRUD)+ AI 自审(LLM review)+ 人工审批(现成)」。要做到「AI 写码并运行验证」的真 agentic coding,**必须先补执行能力**(执行类工具 + agent/workflow 打通),否则 start 闸门的「AI 执行」实质只是「AI 写文件」。 --- ## 7. 演进方向(待定,非承诺) | 方向 | 内容 | 依赖 | |---|---|---| | **执行工具补全** | 暴露 `run_command`/`run_script` 为 agent 工具(沙箱化),或把 `run_workflow` 空壳做实让 agent 能触发工作流 | 安全沙箱、风险分级 | | **MCP 外部工具** | 接 MCP 客户端,消费外部 server 工具,工具集从封闭走向开放 | MCP 协议实现、工具配置 UI | | **工具自造闭环** | AI 写脚本 → 注册成工具 → agent 可调用 → 迭代改进 | 动态工具注册、工具持久化 | | **多 Agent 协作**(B 路线) | coordinator 实化,Agent 间消息/任务分配 | 立项 | 这些是补齐「真正 AI 执行」的方向,是否纳入、何时纳入,取决于任务推进 AI 执行层的目标定位(保守=AI 写文件为主 / 激进=补执行能力做真 agentic coding)。 --- ## 附:关键文件 | 文件 | 职责 | |---|---| | `src-tauri/src/commands/ai/agentic.rs` | ReAct 循环(run_agentic_loop / try_continue_agent_loop) | | `src-tauri/src/commands/ai/tool_registry.rs` | 工具注册(build_ai_tool_registry)+ 路径校验 | | `src-tauri/src/commands/ai/audit.rs` | 工具执行审计(process_tool_calls / audit_finalize) | | `src-tauri/src/commands/ai/commands.rs` | 审批 IPC(ai_approve/ai_reject)+ pending 恢复 | | `crates/df-ai/src/coordinator.rs` | 协调器空壳(B 路线占位) | | `crates/df-ai/src/context.rs` | TokenEstimator(上下文裁剪) | | `crates/df-ai/src/ai_tools.rs` | AiToolRegistry + RiskLevel + schema | | `crates/df-nodes/src/ai_node.rs` | AiNode(工作流用的单次 LLM 调用节点,非 agent loop) |