引言:为什么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