OODER HUMAN交互设计深度解析——LLM时代的智能人机协作范式

引言:为什么LLM需要HUMAN确认交互?

在AI辅助编程时代,一个核心问题摆在面前:如何让LLM既能高效执行,又能保持对用户意图的忠实? OODER平台通过创新的五级交互层级设计,给出了一个优雅的答案。

传统LLM编程助手的三大痛点
  • 过度自主:LLM可能"偷懒",通过删除代码来通过编译,而非真正解决问题
  • 打断疲劳:频繁的确认弹窗导致用户疲劳,降低效率
  • 歧义风险:模糊需求被LLM自行解读,可能偏离用户真实意图

OODER的HUMAN交互设计,正是为了解决这些问题而生。

一、五级交互层级:从自动到拒绝的智能光谱

OODER定义了五级交互层级,形成从"完全信任"到"完全拒绝"的智能光谱:

1.1 AUTO_ALLOW(自动允许)

定义:安全操作,LLM直接执行,无需确认。

适用场景

  • SPI接口层生成(Entity/DTO定义)
  • View层基础结构生成
  • API绑定(ESB注册)
  • 最终化编译(getAggroot)

设计哲学:这些操作不涉及业务语义变更,属于"纯技术实现",LLM可以完全自主执行。

1.2 MICRO_SUGGESTION(微建议)

定义:灰色建议块,Tab接受/Esc忽略,不打断流程。

适用场景

  • 字段类型推断建议
  • 命名规范建议
  • 代码风格优化建议

设计哲学:建议不阻断流程,用户可以快速接受或忽略,实现"零摩擦"交互。

1.3 DIFF_PREVIEW(差异预览)

定义:展示变更差异,逐项Accept/Reject。

适用场景

  • NavTree/Tree组件子视图布局设计
  • 聚合根业务方法设计(FULL档构建)
  • 复杂业务逻辑变更

设计哲学:让用户"看见"LLM的决策过程,逐项确认,避免批量误操作。

1.4 EXPLICIT_APPROVAL(显式审批)

定义:弹窗确认,必须点击Allow/Deny,LLM提供决策建议。

适用场景

  • Repository层生成(数据源选择)
  • 应用聚合(接入标准CLI)
  • 编译错误恢复方案

设计哲学:关键决策点必须用户确认,但LLM提供推荐方案,降低决策负担。

1.5 AUTO_DENY(自动拒绝)

定义:危险操作直接阻止,需管理员解锁。

适用场景

  • 删除核心业务字段
  • 破坏性架构变更
  • 安全敏感操作

设计哲学:安全红线不可逾越,LLM必须"学会拒绝"。

二、OODER交互架构:异步确认的优雅实现

OODER的HUMAN交互设计,采用了SSE流式推送 + HTTP回传确认的异步架构,实现了流畅的用户体验。

2.1 BuildConfirmManager:异步确认的"阻塞器"

BuildConfirmManager是OODER交互设计的核心组件,实现了CountDownLatch阻塞等待机制:

javascript 复制代码
@Component
public class BuildConfirmManager {
    // 等待中的确认请求(按confirmId索引)
    private final Map<String, ConfirmEntry> pendingConfirms = new ConcurrentHashMap<>();

    private static class ConfirmEntry {
        final String confirmId;
        final CountDownLatch latch = new CountDownLatch(1);  // ★阻塞锁
        final AtomicBoolean confirmed = new AtomicBoolean(true);
        volatile ConfirmType type;  // CONFIRM/INPUT/CHOICE
        volatile TimeoutBehavior timeoutBehavior;  // AUTO_CONFIRM/AUTO_REJECT
    }

    /**
     * 后端调用此方法阻塞等待用户确认
     * @return true=用户确认,false=用户拒绝
     */
    public boolean awaitConfirm(String sessionId, String phase, String message,
                                long timeoutSeconds, ConfirmType type,
                                TimeoutBehavior timeoutBehavior, String confirmId) {
        ConfirmEntry entry = new ConfirmEntry(confirmId);
        pendingConfirms.put(confirmId, entry);

        // ★阻塞等待,直到前端回传或超时
        boolean received = entry.latch.await(timeoutSeconds, TimeUnit.SECONDS);

        if (!received) {
            // 超时后根据配置自动确认或拒绝
            boolean autoResult = timeoutBehavior == TimeoutBehavior.AUTO_CONFIRM;
            entry.confirmed.set(autoResult);
        }

        return entry.confirmed.get();
    }

    /**
     * 前端回传确认结果,唤醒阻塞线程
     */
    public boolean signalConfirm(String confirmId, String action, Map<String, Object> modifications) {
        ConfirmEntry entry = pendingConfirms.get(confirmId);
        if (entry == null) return false;

        switch (action.toUpperCase()) {
            case "CONFIRM":
                entry.confirmed.set(true);
                break;
            case "REJECT":
                entry.confirmed.set(false);
                break;
        }

        // ★唤醒阻塞线程
        entry.latch.countDown();
        return true;
    }
}
设计亮点
  • 异步解耦:后端阻塞等待,前端独立渲染,互不干扰
  • 超时兜底:用户不响应时,根据配置自动确认或拒绝
  • confirmId防重复:同一确认只渲染一次,避免重复弹窗

2.2 LlmInteractionManager:LLM驱动的动态决策

LlmInteractionManager是OODER交互设计的"大脑",负责动态决定交互层级

javascript 复制代码
@Service
public class LlmInteractionManager {
    // 五级交互层级枚举
    public enum InteractionLevel {
        AUTO_ALLOW(0, "自动允许"),
        MICRO_SUGGESTION(1, "微建议"),
        DIFF_PREVIEW(2, "差异预览"),
        EXPLICIT_APPROVAL(3, "显式审批"),
        AUTO_DENY(4, "自动拒绝");
    }

    /**
     * 核心决策方法:根据上下文决定交互层级
     */
    public InteractionDecision decideInteraction(InteractionContext context) {
        // Step1: 获取阶段模板配置
        JSONObject phaseConfig = getInteractionConfig(context.getPhase());

        // Step2: 尝试LLM决策(如果启用)
        InteractionDecision decision;
        if (llmInteractionModeConfig.getBooleanValue("enabled") && llmService.isAvailable()) {
            decision = decideWithLlm(context, phaseConfig);
        } else {
            decision = decideWithTemplate(context, phaseConfig);
        }

        // Step3: 应用信任进度规则(渐进式信任)
        InteractionLevel effectiveLevel = getEffectiveLevel(context.getSessionId(), context.getPhase());
        if (effectiveLevel.getOrder() < decision.getLevel().getOrder()) {
            decision.setLevel(effectiveLevel);  // 降级为更自动的层级
        }

        return decision;
    }
}

三、渐进式信任模型:越用越智能

OODER引入了渐进式信任模型,随着用户交互次数增加,自动扩大AI自主权:

设计哲学
  • 新手保护:初期频繁确认,防止误操作
  • 信任积累:用户每次确认,都是对LLM的"信任投票"
  • 效率提升:熟练用户无需频繁确认,LLM自主执行

四、用户故事:真实场景的交互示例

4.1 故事一:创建用户管理模块

用户输入:"创建用户管理模块,包含用户列表、角色分配、部门归属"

4.2 故事二:编译错误恢复

场景:构建过程中编译失败,LLM自动修复但需要用户确认。

错误:UserEntity.java: 找不到符号 DeptEntity

原因:SPI层缺少DeptEntity定义

LLM修复建议:在SPI层补充DeptEntity定义

业务语义保护校验:检测到修复方案未删除任何字段,符合语义保护约束

业务语义保护机制

BuildRecoveryLoop内置了语义校验,防止LLM偷懒:

javascript 复制代码
private static String validateLlmFixSemantics(String llmResponse) {
    // 检测删除关键词
    String[] deletePatterns = {"删除了", "已移除", "removed", "deleted"};
    for (String pat : deletePatterns) {
        if (llmResponse.toLowerCase().contains(pat)) {
            return "检测到删除关键词'" + pat + "',LLM可能以删除方式通过编译";
        }
    }

    // 检测代码行数过少(正常修复应>=10行)
    String codeBlock = extractCodeBlock(llmResponse, "java");
    if (codeBlock != null && codeBlock.lines().count() < 10) {
        return "修复代码仅" + lineCount + "行,可能不完整";
    }

    return null;  // 通过校验
}

五、总结:OODER交互设计的核心价值

OODER的HUMAN交互设计,实现了三大核心价值:

1. 业务语义保护

通过语义校验机制,防止LLM偷懒删除代码,确保功能完整性优先于编译通过。

2. 最小打断原则

通过五级交互层级,只在真正需要用户决策时才打断,避免Alert Fatigue。

3. 渐进式信任

通过信任进度模型,随着使用次数增加,自动扩大AI自主权,实现"越用越智能"。

附录:交互模板配置示例

javascript 复制代码
{
  "interactionLevels": {
    "AUTO_ALLOW": {
      "order": 0,
      "label": "自动允许",
      "color": "#22c55e",
      "icon": "ri-checkbox-circle-line"
    },
    "MICRO_SUGGESTION": {
      "order": 1,
      "label": "微建议",
      "color": "#64748b",
      "icon": "ri-lightbulb-line"
    },
    "DIFF_PREVIEW": {
      "order": 2,
      "label": "差异预览",
      "color": "#3b82f6",
      "icon": "ri-file-diff-line"
    },
    "EXPLICIT_APPROVAL": {
      "order": 3,
      "label": "显式审批",
      "color": "#f59e0b",
      "icon": "ri-shield-check-line"
    },
    "AUTO_DENY": {
      "order": 4,
      "label": "自动拒绝",
      "color": "#ef4444",
      "icon": "ri-forbid-line"
    }
  },

  "buildPhases": {
    "getRepository": {
      "defaultLevel": "EXPLICIT_APPROVAL",
      "interactionTrigger": {
        "condition": "always",
        "level": "EXPLICIT_APPROVAL",
        "llmPrompt": "Repository层是数据持久化的关键决策点..."
      }
    }
  },

  "trustProgression": {
    "levels": [
      {"minInteractions": 0,  "autoAllowPhases": ["genSPI", "genView"]},
      {"minInteractions": 15, "autoAllowPhases": ["genSPI", "genView", "getRepository"]}
    ]
  }
}

OODER Platform - 智能人机协作范式

© 2024 OODER Studio | GitHub