
在AI辅助编程时代,一个核心问题摆在面前:如何让LLM既能高效执行,又能保持对用户意图的忠实? OODER平台通过创新的五级交互层级设计,给出了一个优雅的答案。
OODER的HUMAN交互设计,正是为了解决这些问题而生。
OODER定义了五级交互层级,形成从"完全信任"到"完全拒绝"的智能光谱:

定义:安全操作,LLM直接执行,无需确认。
适用场景:
设计哲学:这些操作不涉及业务语义变更,属于"纯技术实现",LLM可以完全自主执行。
定义:灰色建议块,Tab接受/Esc忽略,不打断流程。
适用场景:
设计哲学:建议不阻断流程,用户可以快速接受或忽略,实现"零摩擦"交互。
定义:展示变更差异,逐项Accept/Reject。
适用场景:
设计哲学:让用户"看见"LLM的决策过程,逐项确认,避免批量误操作。
定义:弹窗确认,必须点击Allow/Deny,LLM提供决策建议。
适用场景:
设计哲学:关键决策点必须用户确认,但LLM提供推荐方案,降低决策负担。
定义:危险操作直接阻止,需管理员解锁。
适用场景:
设计哲学:安全红线不可逾越,LLM必须"学会拒绝"。
OODER的HUMAN交互设计,采用了SSE流式推送 + HTTP回传确认的异步架构,实现了流畅的用户体验。

BuildConfirmManager是OODER交互设计的核心组件,实现了CountDownLatch阻塞等待机制:
@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;
}
}LlmInteractionManager是OODER交互设计的"大脑",负责动态决定交互层级:
@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自动修复但需要用户确认。
错误:UserEntity.java: 找不到符号 DeptEntity
原因:SPI层缺少DeptEntity定义
LLM修复建议:在SPI层补充DeptEntity定义
业务语义保护校验:检测到修复方案未删除任何字段,符合语义保护约束
BuildRecoveryLoop内置了语义校验,防止LLM偷懒:
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的HUMAN交互设计,实现了三大核心价值:
通过语义校验机制,防止LLM偷懒删除代码,确保功能完整性优先于编译通过。
通过五级交互层级,只在真正需要用户决策时才打断,避免Alert Fatigue。
通过信任进度模型,随着使用次数增加,自动扩大AI自主权,实现"越用越智能"。
{
"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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。