问题域/PD-09

Human-in-the-Loop

Human-Agent Interaction

Agent 执行中如何在关键节点暂停、向用户澄清、获取审批。人机协作的关键。

子问题

1.暂停点设计:哪些操作需要人工确认

2.澄清请求:Agent 不确定时如何向用户提问

3.审批流程:危险操作的审批机制

4.反馈整合:用户反馈如何影响后续执行

5.多轮交互:复杂任务中的多轮人机对话

6.升级策略:retries 次数与 escalateAfter 时间的双条件升级判定

7.通知容错:单个 Notifier 插件失败不影响其他通道的隔离机制

8.全局完成检测:所有 session 完成后的 all-complete 聚合通知

9.操作边界声明:用 DO NOT 清单显式定义 Agent 不可越权的操作范围

10.环境感知交互:根据本地/服务器环境自动调整人机交互策略(自动提取 vs 手动导入)

11.Doctor 驱动修复循环:Agent 不记忆修复步骤,每次依赖诊断输出决定下一步

12.输入源抽象化:如何统一处理 CLI、Web UI、桌面应用等不同环境的用户输入

13.非阻塞中断:如何在不阻塞事件循环的前提下实现实时中断与恢复

14.中断后消息历史修复:如何为未完成的工具调用生成假结果,保持上下文完整性

15.结构化输入 UI 自动生成:如何从 Pydantic schema 自动生成表单并验证

16.人类作为 Agent:如何将人类包装为 Agent 角色,使其可参与任何工作流

17.输入源运行时切换:如何在不修改 Agent 代码的前提下切换输入源(如测试时用 Mock)

18.WebSocket 连接管理:如何处理断线重连、超时等网络异常

19.多模态输入简化:如何自动简化单文本块为字符串,同时保留多模态列表结构

20.澄清回环无上限保护:用户反复提供模糊回复时缺少最大轮次熔断

21.Gradio 前端与 interrupt 的集成模式:chat_handler 需区分新查询与暂停恢复两种调用路径

22.命令式 vs 请求式 HITL:用户直接发命令绕过 LLM 与通过 LLM 理解意图的取舍

23.首次交互检测:如何准确判定用户是否为首次使用并触发引导流程

24.引导可跳过性:强制引导 vs 允许跳过的用户体验权衡

25.双通道控制一致性:REST API 和 CLI 对同一资源操作时的状态同步

26.批量并行工具调用的一次性审批:多个工具同时触发 interrupt 时的合并审批策略

27.审批 UI 焦点锁定:防止用户在未做决策前切换焦点导致审批悬挂

28.工具描述格式化器:为不同工具类型定制审批上下文展示(diff、命令、文件路径)

29.HITL 迭代上限:Agent 反复重试被拒绝命令时的安全熔断

30.插件优先级冲突:同一 hook point 多个插件的执行顺序与上下文竞争

31.交互补发机制:WebSocket 连接晚于交互请求时的竞态条件处理

32.多轮修改上限:用户反复修改计划时的收敛策略(max_modification_rounds)

33.中间件注册顺序:ClarificationMiddleware 必须在管道末尾,与其他中间件的执行顺序依赖关系

34.空壳工具与中间件的职责边界:工具定义 schema 供 LLM 调用,中间件实现真实逻辑的分工模式

35.前端消息分组渲染:将 ToolMessage 按工具名分类为独立消息组的 UI 适配策略

36.反作弊 attestation 设计:如何用关键词检查而非 checkbox 强制用户描述具体修改

37.批量操作分数影响预估:大规模 wontfix 前 deepcopy 预演计算 strict score delta

38.盲审 provenance 注入:CLI 层覆盖审查者自报来源,确保来源不可伪造

39.skip 自动 resurface:temporary skip 设置 review_after 扫描次数后自动回到队列

40.外部审查 attestation 差异化:resolve 要求 'not gaming',external 要求 'without awareness' + 'unbiased'

41.反馈有效性判定:用户反馈是纠正、补充还是无关内容的自动分类

42.LLM 输出 ID 幻觉:LLM 生成的记忆 ID 可能不存在,需要去幻觉修正

43.修改比例失控:LLM 可能生成与原文完全不同的'更新',需要比例安全阀

44.关键词替换 vs 语义修改路由:同一反馈入口需自动分流到精确替换或语义理解路径

45.批量 UPDATE 审核:多条更新操作时 LLM 幻觉风险累积,需二次审核机制

46.结构化字段级修订:用户逐字段修改 Agent 产出的结构化内容时的类型校验与交互流程

47.复合确认指令:用户在确认当前任务的同时附带修改后续任务的指令解析

48.人机角色互换:将人类包装为 LLM 接口,使任何 Agent 角色可无缝切换为人类驱动

49.安全地板设计:即使审批关闭,危险命令仍强制拦截的不可绕过机制

50.已审批命令缓存:用户批准后相同命令自动放行的记忆策略

51.Hook 熔断器:外部脚本 handler 连续失败后的自动禁用与冷却恢复

52.dry-run 审计:Block/Modify 仅记录日志不实际生效的调试模式

53.六层策略合并:Global→Provider→Agent→Group→Sender→Sandbox 的 deny 累积优先策略

54.审批身份绑定:防止其他客户端重放审批 ID 的安全机制

55.多通道审批路由:同一审批请求转发到多个交互渠道的路由策略

56.审批超时降级:人工不响应时的 askFallback 安全降级策略

57.防重复提问:LLM 在多轮对话中反复提出相同澄清问题的抑制策略

58.澄清与执行的图拓扑选择:END 返回 vs interrupt 暂停两种暂停模式的适用场景

59.空壳工具注入:将澄清能力定义为工具 schema 而非图节点的条件注入策略

60.工具优先级排序:多工具并存时如何引导 LLM 优先使用自主工具而非求助人工

61.跨环境适配:同一 AskHuman 接口在 CLI/沙箱/A2A 不同运行环境下的输入源切换

62.Prompt 驱动 vs 代码驱动 HITL:纯靠系统提示词约束 LLM 行为的可靠性与可审计性权衡

63.递归依赖补全深度控制:缺失依赖链过长时的递归深度限制与性能影响

64.三模式语义一致性:不同节点对 skip 和 default 的语义定义不统一时的用户困惑

65.计划与执行的一致性验证:Agent 展示的计划与实际工具调用序列不一致时的检测机制

66.passthrough 旁路:特定 Agent 跳过 Planner 直接执行时的 HITL 绕过策略

67.asyncio.Task 不可序列化:进程重启后暂停状态丢失的恢复策略

68.双层暂停协调:Agno 框架工具级 is_paused 与 Planner 级 adequate:false 的优先级和互斥关系

69.LLM 判定可靠性:纯依赖 LLM 判定查询清晰度的准确性保证

70.澄清成本控制:多轮澄清累积的 LLM 调用成本优化

71.Gate 物化命名冲突:多个 formula 组合时 gate ID 的全局唯一性保证

72.发现式恢复延迟:轮询间隔与 gate 关闭到工作流恢复的响应时间权衡

73.角色推断误判:SSH URL 启发式对 fork contributor 的误分类及降级警告

74.运行模式运行时切换:用户在任务执行中动态调整信任级别而不中断会话

75.Hook stdin/stdout 协议:外部脚本通过 JSON stdin 接收参数、exit code 返回决策的标准化协议

76.影子仓库隔离:Checkpoint 快照不干扰项目原有 Git 仓库的隔离存储策略

77.SubAgent 权限继承控制:isInheritTools 开关决定子代理是否继承父代理全部工具权限

78.自动确认降级:测试/CI/快速模式下如何优雅跳过人工确认而不改变图拓扑

79.悬挂工具调用修复:interrupt 中断导致消息历史中 tool_call 未配对时的恢复策略

80.后台线程恢复:HTTP 请求线程与图执行线程分离时的上下文传递(Flask app_context/contextvars)

各项目的解法25 solutions

Signals

横向对比

维度DeerFlowAgent-OrchestratorAgentReachAgentScopeAgenticRAGForDummiesCoPawDeepAgentsDeepCodeDeepTutorDesloppifyGPT-ResearcherMemOSMetaGPTMoltisOpenClawOpenOpenManusOpenStorylineValueCellagentic-rag-for-dummiesBeadsiflow-cliseedance-2vibe-blog
暂停机制Command(goto=END) 中断图执行,LangGraph checkpointer 持久化状态LifecycleManager 30s 轮询检测 waiting_input/stuck,非阻塞式三模式分流:--dry-run 纯预览 / --safe 只检查打印 / 默认自动执行asyncio.CancelledError 异步中断,不阻塞事件循环LangGraph interrupt_before 在 request_clarification 节点前暂停APScheduler pause_job/resume_job + asyncio.Lock 保护LangGraph interrupt() + checkpointer 持久化,Command(resume=) 恢复Plugin hook point + asyncio.Future 异步等待,工作流在 run_hook 处暂停CLI 命令式暂停:用户主动执行 resolve/skip/done 命令触发确认,非自动 interrupt无显式暂停,反馈通过独立 API 端点异步提交,不中断对话流Planner.ask_review 在 plan 生成和 task 完成后同步阻塞等待人类输入oneshot channel + tokio::timeout 120s 异步等待Promise-based 异步等待,register() 返回 Promise,resolve()/expire() 触发主版本用 Command(goto=END) 返回提问终止图;Legacy 用 LangGraph interrupt() 原语暂停无显式暂停,LLM 自主决定调用 ask_human 工具Prompt 驱动:系统提示词要求 Agent 先输出 Markdown 计划,用户文字确认后才调用工具,无代码级 interruptasyncio.Event.wait() 协程级挂起,100ms 轮询检测 + SSE 推送LangGraph interrupt_before 在空壳节点前暂停Gate Issue 物化:gate 编译为独立 issue,通过 blocks 依赖阻塞后续 step四模式分级:yolo/accept-edits/plan/default,Shift+Tab 运行时切换LangGraph 原生 interrupt(),图执行自动暂停,MemorySaver 持久化状态
澄清类型5 种 Literal 枚举:missing_info/ambiguous_requirement/approach_choice/risk_confirmation/suggestion无结构化澄清类型,依赖 Agent 自身的 terminal output 检测input() 阻塞式逐步收集,每步支持回车跳过通过 UserAgent 获取自由文本或结构化输入QueryAnalysis Pydantic 结构化输出,is_clear 布尔判断无澄清机制,用户通过 /command 直接控制无独立澄清机制,仅工具级 Approve/Reject/Auto-approve 三选项结构化 InteractionRequest(type/title/data/options),LLM 生成引导问题关键词 attestation:要求自然语言包含 'I have actually' + 'not gaming' 两个短语LLM 判定三类态度(dissatisfied/satisfied/irrelevant),非枚举式澄清confirm/change/redo/exit 四种关键词 + 自由文本复合指令无结构化澄清,仅 Approved/Denied/Timeout 三态决策三级决策模型:allow-once / allow-always / denyClarifyWithUser 结构化输出(need_clarification + question + verification 三字段)自由文本,单一 inquire 字符串参数自然语言对话式:Agent 用 Markdown 展示计划,用户用自然语言确认或修改双层:Agno UserControlFlowTools 结构化字段 + PlannerResponse.adequate 自然语言LLM 结构化输出判定(Pydantic QueryAnalysis)5 种 Gate 类型枚举:human/mail/timer/gh:run/gh:pr结构化大纲确认(confirm_outline),含 title/sections/narrative_mode 完整字段
状态持久化LangGraph ThreadState + checkpointer,中断后状态自动保存flat file metadata(key=value),updateMetadata 原子写入YAML 文件 ~/.agent-reach/config.yaml + chmod 600中断时生成假 tool_result 保持消息历史完整性InMemorySaver checkpointer,支持跨请求恢复文件标记(.bootstrap_completed)+ 内存状态(CronJobState)依赖 LangGraph checkpointer(InMemorySaver 或 PostgresSaver)WorkflowTask.pending_interaction 内存存储,WebSocket 补发解决竞态JSON state 文件持久化 attestation_log + assessment_import_audit 审计链GraphStore 持久化,旧记忆 archived + covered_history 版本链working_memory 暂存未确认反馈,confirm 后清空,无磁盘持久化内存 HashMap + HashSet,进程重启丢失已审批缓存纯内存 Map + 15s grace period,不持久化,重启丢失interrupt 依赖 MemorySaver checkpointer;主版本无需持久化(END 后重新进入)无持久化,input() 同步阻塞等待ArtifactStore 按 session_id + node_id 隔离存储 JSON,支持跨轮次复用内存 ExecutionContext + ConversationStatus 数据库持久化,asyncio.Task 不可序列化InMemorySaver + thread_id 会话绑定Dolt 数据库持久化 gate issue,状态通过 issue 生命周期管理Checkpoint Git 影子仓库快照,保存文件+会话+工具调用三维状态MemorySaver checkpointer 自动保存,snapshot.next 检测暂停,Command(resume=...) 恢复
实现层级三层:Prompt 强制优先级 → 空壳工具 → 中间件拦截核心层 LifecycleManager + 4 个 Notifier 插件 + Reaction 引擎CLI argparse 参数级,无中间件/Hook 层输入抽象层 + Agent 包装层 + 中断处理层三层设计图拓扑级:空壳节点 + 条件边 + 回环边三层:reply() 命令拦截 → pre_reasoning 钩子 → Cron REST/CLI三层:HumanInTheLoopMiddleware → LangGraph interrupt → CLI ApprovalMenu四层架构:Plugin → Registry → Integration → WebSocket/APICLI 命令层:attestation 验证在 argparse handler 中,非中间件或图节点独立 MemFeedback 模块,与对话引擎解耦,通过 SingleCubeView 路由三层:Planner(计划级) + ActionNode(节点级) + HumanProvider(LLM级)三层:ApprovalManager 命令级 + HookRegistry 事件级 + ToolPolicy 策略级四层架构:Agent→Gateway→安全校验→多通道 UI图节点级:clarify_with_user 和 human_feedback 均为独立图节点工具层,AskHuman 继承 BaseTool三层:Prompt 层(计划审批)+ 拦截器层(依赖补全)+ 节点层(mode 分发)四层分离:Planner(信号) → PlanService(注册表) → Orchestrator(上下文) → SSE(推送)图节点级(rewrite_query 判定 + request_clarification 暂停)Formula 声明层 → Cook 物化层 → 验证层 → 发现层四层架构外部脚本 Hook(spawn 子进程)+ 配置驱动,不改 CLI 源码节点内部 3 行代码(interrupt 调用),不改变图拓扑结构
身份绑定无审批身份绑定,ao send 通过 CLI 直接发送,无鉴权无身份绑定,凭据存本地文件,依赖文件系统权限保护BootstrapHook 引导用户创建 PROFILE.md 建立身份无显式身份绑定,审批通过 asyncio.Future 在同一进程内传递task_id 绑定,POST /respond/{task_id} 需匹配 waiting_for_input 状态session token 绑定:128-bit 随机 token + session_id 双重验证防重放无身份绑定,任何终端用户均可响应审查请求requestId 为 UUID,resolve 时无身份校验(任何客户端可响应)deviceId 优先 + connId fallback,防审批 ID 重放攻击无,终端 input() 无身份验证ExecutionContext.validate_user() 校验 user_id 一致性,防跨用户重放gate issue 通过 ID 命名规范绑定到 molecule({mol}.gate-{step})task_id 绑定 _interrupted_tasks 字典,无显式身份校验
多通道转发notificationRouting 按 4 级 priority 路由到多个 Notifier 插件交互式用 Textual ApprovalMenu,非交互式用 allow-list 自动决策WebSocket 广播 + REST API 响应,前端 useStreaming 统一处理set_human_input_func 全局替换输入源,支持 CLI/WebSocket/API 切换GatewayApprovalBroadcaster 广播到所有 WebSocket 客户端Discord 按钮 + Slack Actions + Web UI + Unix Socket 四通道并行仅终端 stdin,A2A 协议可暴露但未实现路由mail gate 通过 BD_MAIL_DELEGATE 委托外部邮件服务Notification Hook 支持 Slack/Email 等多通道路由转发SSE 单通道推送 outline_ready 事件到前端
审查粒度控制Reaction 引擎 auto/retries/escalateAfter 三参数控制自动化程度Tier 0/1/2 三级渠道分类,按平台复杂度分级interrupt_on 字典按工具名配置,每个工具独立 InterruptOnConfig四级风险分层:temporary(无)→permanent(attest+note)→batch(二次确认)→external(盲审token)LLM 三级审核链:judgement → compare → compare_judge,≥5 条 UPDATE 触发二次审核ReviewMode/ReviseMode 枚举按 ActionNode 粒度控制 HUMAN/AUTO 策略ApprovalMode×SecurityLevel 矩阵 + SAFE_BINS + DANGEROUS regex 三层过滤节点级:每个节点独立的 mode 参数,用户可逐节点控制执行策略Planner 级(adequate:false 整体暂停)+ 工具级(is_paused 逐字段收集)Step 级粒度,每个 Step 可独立声明 GateautoAccept 区分只读/写操作,只读自动放行写操作强制确认大纲级别:用户可编辑标题、章节列表、叙事模式
人机角色互换Terminal 插件(iTerm2/Web)提供人类 attach 能力,ao send 单向消息UserAgent 将人类包装为 Agent,可插入任何工作流HumanProvider 实现 BaseLLM 接口,Role.is_human=True 即切换为人类驱动不支持,interrupt 仅用于人工确认/编辑
升级策略retries 次数 + escalateAfter 时间双条件升级,支持 per-project 覆盖doctor 驱动循环:Agent 自动修能修的,不能修的才问用户无自动升级,reject 后由 Agent 自主决定下一步超时直接 bail!,无自动升级或降级TTL 过期(默认 1h)后 _cleanup_expired_contexts 自动取消并重置会话Gate.Timeout 字段支持超时升级,checkGateSatisfaction 返回 escalated 标志无超时升级,依赖用户主动操作
通知容错Webhook 指数退避重试,Composio 30s 超时,各插件独立 try-catchbroadcast 失败仅 warn 日志,不阻塞审批流程SSE 单通道,无多通道容错
dry-run 模式完整支持:--dry-run 打印所有操作预览不执行任何变更deepcopy 预演:批量 wontfix 前 deepcopy state 计算 strict score deltaHookRegistry.dry_run 标志,Block/Modify 仅日志不生效bd create --dry-run 预览 issue 创建,不实际写入数据库Plan Mode 先生成计划供用户审批,审批通过后才执行
自动跳过机制无显式自动跳过,依赖 Prompt 引导 LLM 判断是否需要澄清Tier 0 渠道全自动,本地环境自动提取 Cookie 失败静默降级Bootstrap 明确支持用户跳过引导直接提问auto_approve 会话标志 + shell allow-list 白名单门控temporary skip 支持 review_after 参数,N 次扫描后自动 resurfacevalidity=false 且 attitude=irrelevant 时自动跳过修改,降级为纯添加SAFE_BINS 60+ 命令 + custom allowlist + 已审批缓存三级自动放行allow_clarification=False 配置开关跳过澄清;ask_for_clarification=False 跳过 Question 工具注入三模式 mode 参数(auto/skip/default),LLM 根据对话上下文自主选择isMachineCheckableGate 自动验证 CI/PR/timer gate,human/mail 跳过验证直接允许关闭YOLO 模式自动批准所有工具调用,CI 环境零交互三条件降级:mini 模式 / OUTLINE_AUTO_CONFIRM 环境变量 / 非交互式标志
操作边界声明Prompt 中 STRICT ENFORCEMENT ❌/✅ 清单定义禁止行为install.md 5 条 DO NOT 规则 + SKILL.md 不记忆步骤指令SYSTEM_COMMANDS frozenset 白名单限定可用命令集ATTEST_EXAMPLE 模板显式要求用户描述具体修改内容,不允许空泛声明系统提示词声明 Agent 只能使用可用工具列表中的工具,不可用时必须告知用户Gate 类型枚举限定可声明的等待条件,非法类型在 Validate() 阶段拒绝SubAgent isInheritTools=false 显式限制工具集,最小权限原则
多源输入抽象UserInputBase 基类支持 Terminal/Studio/自定义输入源
结构化输入验证Pydantic schema 自动生成 JSON Schema 并验证
中断恢复策略handle_interrupt 钩子生成友好提示,支持子类自定义
工具调用中断_async_generator_wrapper 捕获中断并设置 is_interrupted 标记
输入源动态切换override_instance/class_input_method 支持运行时切换
多模态输入支持blocks_input 支持文本/图片/音频/视频多种类型
WebSocket 实时通信StudioUserInput 通过 socketio 与前端双向通信
多轮交互支持Command(goto=END) 后用户响应触发图恢复,支持多轮澄清回环边支持无限轮澄清,但无迭代上限保护Bootstrap 引导为单轮注入,命令为单次执行无多轮最多 50 次 HITL 迭代循环,reject 后 Agent 可调整策略重试plan describe/note 支持多轮注释,skip→unskip→reopen 支持状态反转单轮反馈模式,取 chat_history[-4:] 作为上下文,不支持多轮反馈对话单轮审批,approved_commands 缓存避免重复询问Legacy 通过 feedback_on_report_plan 列表累积多轮反馈,用 operator.add reducerCLI while-True 循环 + messages 列表累积,支持无限轮次对话式迭代修改_continue_planning 循环检测 has_pending_request,支持 Planner 连续多次请求输入循环边(request_clarification → rewrite_query)支持无限轮澄清
自动确认降级无降级机制,查询不清晰时必须等待用户回复命令式设计无需确认,直接执行测试中 ask_for_clarification=False 跳过交互;无超时自动批准机制拦截器自动以 default 模式递归执行缺失依赖,无需用户手动确认前置步骤
反馈分类路由无分类,用户回复统一注入 messages 重新分析关键词替换 vs 语义修改双路径,LLM 自动分类路由isinstance(feedback, bool) vs isinstance(feedback, str) 类型化分流UserPromptSubmit Hook 正则匹配敏感信息,exit code 区分 block/allow
悬挂工具调用修复DanglingToolCallMiddleware 注入合成 error ToolMessage不涉及,interrupt 发生在工具调用之前的查询分析阶段_build_interrupted_ai_message 重建中断时的 AIMessage + tool_calls
澄清与执行的图拓扑选择interrupt_before 暂停模式,非 END 返回interrupt 暂停模式,用户回复后自动恢复
空壳节点设计request_clarification 函数体为空,纯锚点request_clarification 返回空字典,纯暂停点
命令分发模式getattr 动态分发,统一 _process_{cmd} 签名plan action 分发器:cmd_plan 按 plan_action 字符串分发到独立 handler 函数
双通道控制Cron 同时暴露 REST API 和 Click CLI 两个控制通道
首次交互检测计数 user/assistant 消息数判定首次交互
工具优先级排序Prompt 中 PRIORITY CHECK 强制先澄清再行动,❌ DO NOT 规则禁止跳过无显式优先级,所有受审批工具平等对待Multi-Agent 版本通过 ask_for_clarification 开关控制 Question 工具是否注入coreTools/excludeTools 配置显式控制可用工具集
passthrough 旁路auto_approve=True 时 interrupt_on={} 空字典,完全跳过审批沙箱内自动跳过审批(is_sandboxed 条件)planner_passthrough 标记的 Agent 跳过 LLM 规划直接创建单任务 Plan
SubAgent 权限继承控制子代理默认继承父代理 interrupt_on,可通过 spec 覆盖
熔断器保护_MAX_HITL_ITERATIONS=50 防止无限重试循环HookStats 连续失败计数 + 冷却期自动恢复Hook timeout 超时终止,超时不中断主流程仅记录警告
反作弊评分保护wontfix 计入 strict score 债务,批量 >10 条强制预估分数影响
盲审隔离协议blind packet + SHA256 哈希 + TTL 过期 + CLI 注入 provenance 四重保护
审计追溯链attestation_log + assessment_import_audit + query log 三层审计记录
ID去幻觉三级策略:精确匹配→大小写容错→difflib模糊匹配(cutoff=0.8)
修改比例安全阀短文本<70%、长文本<20%的动态阈值,防止LLM生成完全不同的更新
递归依赖补全拦截器检测缺失 kind 后递归执行前置节点(default 模式),按 priority 尝试候选实现
LLM 判定策略LLM 自主判断查询清晰度,无硬编码规则
并行查询拆分清晰查询拆分为多个子查询,Send 并行执行
防重复提问无(依赖 LLM 自身能力,可能重复提问)
澄清回环熔断无最大轮次限制(潜在风险)
降级处理空澄清请求时使用默认消息
发现式恢复轮询 closed gate + ready work 交集,无需 waiter 注册表/restore 命令交互式选择 Checkpoint 回滚点

最佳实践

1.CLARIFY→PLAN→ACT 优先级:Agent 不确定时必须先澄清,严格禁止先做再问

2.结构化澄清类型:用枚举类型(missing_info 等)而非自由文本,便于前端渲染不同 UI

3.中间件拦截优于节点内硬编码:wrap_tool_call 钩子让澄清逻辑与业务逻辑解耦

4.interrupt() 优于 threading.Event:不阻塞线程,支持持久化,可扩展为多个中断点

5.超时自动处理:用户长时间不响应时有默认行为,避免任务永久挂起

6.Push not Pull:人类不轮询,Notifier 主动推送,减少认知负担

7.Reaction 先自动后人工:CI 失败等可自动修复事件先 send-to-agent,失败后才升级通知人类

8.状态转换时清零重试计数:避免跨状态的 reaction tracker 污染

9.per-project reaction 覆盖:全局默认 + 项目级覆盖,灵活控制自动化程度

10.Tier 分级人机边界:按功能模块的配置复杂度分 tier,不同 tier 有不同的自动化程度

11.三模式渐进信任:dry-run→safe→auto 让用户按信任级别选择 Agent 自主程度

12.Doctor 驱动优于步骤记忆:SKILL.md 明确禁止 Agent 记忆配置步骤,每次依赖 doctor 实时输出

13.输入抽象优于硬编码:用 UserInputBase 基类而非直接调用 input(),支持跨环境部署

14.人类即 Agent:UserAgent 继承 AgentBase,使人机交互可无缝融入编排图

15.中断不丢失上下文:为未完成的 tool_use 生成假 tool_result,避免 LLM 混乱

16.结构化验证前置:在输入层用 jsonschema 验证,而非依赖 LLM 推理,降低成本

17.finally 块保证持久化:即使中断也要保存 msg 到 memory,确保状态一致性

18.is_interrupted 标记传递:通过 ToolResponse.is_interrupted 而非重新抛出异常,解耦中断逻辑

19.类级/实例级切换分离:override_class_input_method 全局切换,override_instance_input_method 单例切换

20.WebSocket 自动重连:用 socketio.Client 的 reconnection 参数处理网络抖动

21.空壳节点作 interrupt 锚点:函数体为空,暂停逻辑与业务逻辑零耦合

22.结构化输出低温度调用:temperature=0.1 确保 is_clear 判断稳定性,减少随机翻转

23.frozenset 白名单注册命令:不可变集合防止运行时篡改命令列表

24.文件标记实现跨会话一次性触发:零依赖、重启安全、易于调试

25.getattr 动态分发优于 if-elif 链:新增命令只需添加 _process_xxx 方法

26.命令拦截在 LLM 推理之前:避免 token 浪费和理解歧义

27.interrupt_on 字典声明式配置优于逐工具硬编码:一处定义所有审批策略

28.HumanInTheLoopMiddleware 放在 middleware 栈末尾:确保其他中间件先完成处理

29.子代理默认继承父代理审批配置:防止权限泄漏,同时允许 spec 级覆盖

30.非交互模式用 allow-list + 迭代上限双重保护:防止无人值守时的安全风险和死循环

31.三方法协议(should_trigger→create_interaction→process_response)让插件可独立测试

32.asyncio.Future 桥接模式:后端 await Future + 前端 REST set_result,解耦通道与逻辑

33.全局默认 registry + 懒加载:避免循环导入,支持按需启用插件

34.空壳工具模式:工具函数体留空,用 return_direct=True 标记,真实逻辑委托给中间件处理

35.ToolMessage 配对完整性:中断时必须为 tool_call 生成配对的 ToolMessage,否则 LLM API 报错

36.中间件顺序即架构:ClarificationMiddleware 放最后确保其他中间件先完成处理

37.自然语言 attestation 优于 checkbox:要求包含特定短语的自由文本,强迫用户描述具体行为

38.风险分层确认:按操作影响程度分 4 级确认强度,低风险不打断流程

39.批量操作 deepcopy 预演:执行前在副本上模拟,展示分数影响后再让用户决策

40.CLI 层 provenance 注入:不信任外部审查者的自报来源,由可信 CLI 覆盖写入

41.session TTL + token 双重绑定:防止过期重放和跨会话冒用

42.LLM 多级审核优于单次判定:judgement→compare→compare_judge 三级链降低幻觉风险

43.修改比例动态阈值:短文本允许更大修改幅度,长文本严格限制,防止语义漂移

44.归档而非删除:旧记忆标记 archived 而非物理删除,covered_history 建立版本链支持回溯

45.ID 去幻觉三级策略:精确匹配→大小写容错→模糊匹配,逐级放宽容忍度

46.三层审查粒度:计划级(Planner)→节点级(ActionNode)→LLM级(HumanProvider),不同场景选择不同粒度

47.HUMAN_REVIEW 混合模式:人类提供审查意见 + LLM 自动修改,兼顾可控性和效率

48.输入源全局可插拔:一处 set_human_input_func 替换,所有交互点自动生效,避免逐组件适配

49.安全地板不可绕过:dangerous pattern 检测在所有 mode/security 判断之前执行

50.白名单默认模式:OnMiss + Allowlist 为默认值,未知命令需审批比黑名单更安全

51.沙箱内跳过审批:已有隔离保护的环境不重复审批,避免效率损失

52.oneshot channel 优于共享状态轮询:零拷贝单次通知,无锁竞争

53.熔断器保护外部 Hook:连续失败自动禁用,冷却后恢复,防止坏 hook 拖垮系统

54.两阶段响应模式:先返回 accepted 确认注册,再异步等待最终决策,避免调用方无法区分注册失败和等待中

55.参数白名单过滤:转发审批参数时只允许已知安全字段,防止控制字段注入

56.grace period 处理竞态:审批 resolve 后保留短暂窗口供迟到的 awaitDecision 调用获取结果

57.无审批客户端时自动过期:检测到无 operator 连接时立即 expire,避免无人审批的请求永久挂起

58.prompt 内置防重复提问约束:在澄清 prompt 中显式要求 LLM 检查历史是否已问过

59.反馈累积优于覆盖:用 Annotated[list, operator.add] 保留所有历史反馈供 LLM 参考

60.类型化路由区分意图:用 isinstance 区分 bool(批准) 和 str(修改) 而非字符串匹配

61.工具即交互:将人机交互实现为标准工具而非特殊节点,复用已有工具管道零成本集成

62.prompt 约束优于硬编码:用 system prompt 中 'only for extreme cases' 引导 LLM 控制调用频率,而非代码层面限制

63.mode 作为工具参数而非图拓扑:将执行模式编码为工具参数让 LLM 自主决策,避免修改图结构

64.双依赖集设计:auto 和 default 模式使用不同的依赖列表,skip 时只需最小依赖集

65.拦截器层自动补全优于用户手动执行:缺失依赖时静默以 default 模式递归执行,不打断用户流程

66.asyncio.Event 优于 threading.Event:协程级挂起不占线程,事件循环可继续服务其他请求

67.信号对象封装:将 prompt/response/event 封装为 UserInputRequest,Planner 只需 await 不关心通信细节

68.注册表解耦:UserInputRegistry 按 conversation_id 索引,Planner 和 Orchestrator 无直接引用

69.事件循环时钟计时:ExecutionContext 用 asyncio.get_event_loop().time() 而非 datetime.now(),避免系统时钟调整影响 TTL

70.结构化澄清输出:使用 Pydantic + with_structured_output 确保输出格式

71.空壳节点模式:澄清节点不执行逻辑,只作为暂停点

72.低温度采样:澄清判定使用 temperature=0.1 减少随机性

73.并行查询拆分:清晰查询拆分为多个子查询并行执行,提高效率

74.Gate 即 Issue:复用 issue 生命周期管理 gate 状态,避免引入新状态机

75.人机分流分类器:machine-checkable gate 自动验证,human/mail gate 直接放行,减少不必要人工干预

76.发现式恢复优于回调注册:轮询 closed gate 交集无需维护 waiter 表,简化系统复杂度

77.四模式连续光谱优于二元开关:yolo/accept-edits/plan/default 覆盖从全自动到全受控的所有场景

78.Hook 外部化优于内置逻辑:用户通过外部脚本自定义安全策略,无需修改 CLI 源码

79.autoAccept 安全地板:即使开启自动批准,写操作仍强制拦截,防止误操作

80.Checkpoint 三维快照:同时保存文件状态+会话历史+工具调用,支持完整状态回滚

81.interrupt 数据应包含完整结构化内容,前端可直接渲染编辑 UI 而无需额外查询

82.编辑操作后清空下游产出(sections=[]),确保后续节点基于新输入重新执行

83.resume 前检查并修复悬挂工具调用,防止 LangGraph 恢复时因消息历史不完整报错