--- description: >- 后台循环,评估用户/系统任务相对于工作区的状态, 并决定做什么。 icon: loader --- # 潜意识循环 一个后台任务评估和执行系统。在每个周期 tick 上,它加载用户定义和系统任务列表,读取你工作区的当前状态,决定对每项做什么,然后要么自主行动,要么升级给你审批。 把它想象成智能体的空闲线程:你停止打字后仍在继续思考的部分。 *** ## 一个 tick 如何工作 ```text ┌─────────────────────────────────────────────────────────┐ │ Heartbeat │ │ (tick 之间睡眠几分钟) │ └──────────────────────┬──────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Subconscious Engine │ │ │ │ 1. 加载到期任务 │ │ 2. 将每项标记为进行中 │ │ 3. 构建情况报告(记忆 + 工作区) │ │ 4. 用本地模型评估每个任务 │ │ 5. 执行决定(act / noop / escalate) │ │ 6. 将结果写回活动日志 │ └─────────────────────────────────────────────────────────┘ │ ┌───────────┼───────────┐ ▼ ▼ ▼ noop act escalate (skip) (execute) (deeper agent) ``` 每个 tick 是独立的。如果一个 tick 在下一个开始时仍在运行(慢速模型调用、网络抖动),新的 tick 接管,旧的在进行中的条目被标记为已取消。Tick 永远不会堆叠。 *** ## 任务类型 ### 系统任务 引擎启动时自动播种。不能删除,只能禁用。默认覆盖你希望任何助手监视的事情: * 检查已连接技能的错误或断开 * 审查新记忆更新中的可操作项目 * 监控系统健康(本地模型、记忆、连接) 你可以通过在 workspace 的 `HEARTBEAT.md` 文件中列出额外的系统任务来扩展,每行一个任务。 ### 用户任务 你从 UI 手动添加的任何内容。切换开/关、编辑、删除。例如: * "检查紧急邮件"(只读) * "发送每日摘要到 Slack"(写意图) * "总结 Notion 更新"(只读) *** ## 决策 对于每个到期任务,本地模型返回三个决策之一: | 决策 | 含义 | | -------- | --------------------------------------------------- | | Skip | 现在没什么相关的 | | Act | 发现了相关的东西,执行任务 | | Escalate | 需要更深入的推理,交给云端智能体 | 决定如何执行取决于任务是否有**写意图**(它要求智能体执行一个操作)还是**只读**(它要求智能体查看和报告): ```text Decision: Skip → 记录"没什么新东西",调度下一次运行 Decision: Act → 在本地模型上执行(读或写) Decision: Escalate ├─ 写意图任务 │ → 用完整权限运行云端智能体 │ → 不需要批准(你明确要求了该操作) │ └─ 只读任务 → 用仅分析模式运行云端智能体 → 如果智能体浮出未经请求的推荐操作 │ → 为你审批创建升级卡片 │ → 批准后 → 用完整权限重新运行 └─ 否则 → 记录结果,完成 ``` 每个任务评估都带着彩色点和简短状态落在活动日志中: | 状态 | 颜色 | 文本 | | ----------------- | -------------- | ---------------------- | | 进行中 | 蓝色(脉冲) | "评估中…" | | 已行动 | 绿色 | 结果文本 | | 已跳过 | 灰色 | "没什么新东西" | | 等待批准 | 琥珀色 | "等待批准" | | 失败 | 珊瑚色 | 错误消息 | | 已取消 | 灰色 | "已取消" | | 已忽略 | 灰色 | "已跳过" | *** ## 两个模型,一个循环 | 阶段 | 运行位置 | 为什么 | | -------------------------------------- | ----------------------- | -------------------------------------------- | | 每个任务评估(每个 tick) | 本地模型(Ollama) | 免费,无速率限制,适合端侧 | | 仅文本执行(摘要、检查) | 本地模型 | 相同 | | 工具使用执行(发送、发布…) | 云端智能体 | 工具、更大上下文、速率限制重试 | | 升级读取的分析模式 | 云端智能体(只读) | 本地模型 defer 时更深入的推理 | 这种分割保持了循环便宜:只有当任务真正需要时你才为云端调用付费。 *** ## 审批门 只有当智能体想要采取**你没有明确要求的写操作**时才需要审批。 | 任务意图 | 智能体想要写 | 需要审批? | | ------------------------------ | -------------------- | -------------------------- | | "发送摘要到 Slack"(写) | 是 | 否,你要求的 | | "检查紧急邮件"(读) | 否 | 否,只读结果 | | "检查紧急邮件"(读) | 是(转发它们) | **是**,未经请求的写 | 审批流程: 1. 云端智能体以仅分析模式运行。 2. 它浮出一个推荐,例如 _"将 3 封紧急邮件转发到 #team-alerts。"_ 3. 升级卡片出现在 UI 的**需要审批**下。 4. **继续**用完整权限重新运行。 5. **跳过**什么都不做。 与技能相关的升级(断开的集成、过期的 OAuth、缺失的范围)显示一个**在技能中修复**按钮,直接带你到技能页面而不是。 *** ## 失败处理 失败计数器跟踪连续 tick 全评估步骤失败(本地模型宕机、网络断开)。任何成功 tick 将其重置为零,并在 UI 状态栏中以珊瑚色显示(当非零时)。 每任务失败不会触发此计数器,tick 本身仍被认为成功。 如果一个 tick 失败或被取消,引擎不会推进其"上次看到"时间戳,所以下一次成功 tick 覆盖相同的窗口。你工作区中的任何内容都不会被跳过。 *** ## 配置 循环可在桌面 app 中配置: * **启用 / 禁用。** 打开或关闭整个后台循环。 * **Tick 间隔。** tick 触发的频率。默认为 5 分钟;这也是最小值。 * **推理。** 本地模型是否在每个 tick 评估任务。如果你想仅通过手动**立即运行**按钮运行,则禁用。 * **上下文预算。** 情况报告一次可以传入多少工作区。默认值是合理的;为更丰富的上下文调高,为更紧密的成本调低。 *** ## 在 UI 中 位于**智能 → 潜意识**。 * **状态栏。** 任务数、总 tick 数、上次 tick 时间、失败计数器(如果有)。 * **进行中的任务。** 系统任务(只读,带"默认"badge)和你自己的任务(切换 + 删除)。 * **需要审批。** 待处理升级的琥珀色卡片。每张有标题、描述和优先级。按钮:**继续**、**在技能中修复**(当相关时)、或**跳过**。 * **活动日志。** 每个任务评估的按时间顺序的 feed,彩色点 + 结果。当任何内容进行中时自动刷新。 * **立即运行。** 手动触发一个 tick。立即返回;UI 轮询结果。 *** ## 另见 * [记忆树](obsidian-wiki/memory-tree.zh-CN.md),情况报告从中读取。 * [从集成自动拉取](obsidian-wiki/auto-fetch.zh-CN.md),tick 之间工作区如何保持新鲜。 * [本地 AI(可选)](model-routing/local-ai.zh-CN.md),为评估提供支持的端侧模型。