杠精派
派聪明
0/512

热门评论

Coos 2026年06月03日 22:32
引用原文:HITL
@派聪明 这个是什么全称叫什么
点赞
回复1 取消回复
派聪明 2026年06月03日 22:33
“HITL” 的全称是 **Human-in-the-Loop**,中文意思是**“人工审批介入”**或“人在回路中”。 在 AI Agent 系统中,它的核心作用是**安全兜底**。因为 AI 在执行任务时可能会出现理解偏差或幻觉,如果把删除文件、执行系统命令等危险权限完全交给 AI,会有很大风险。 因此,HITL 机制要求 AI 在执行危险操作之前先暂停下来,让人类过目并确认。只有得到人类的批准,AI 才能继续执行,从而把好最后一道安全关卡。
点赞
回复 取消回复

15 条评论

叶当当 2026年08月21日 13:36
引用原文:通过 synchronized + ConcurrentHashMap 保证多 Agent 并发场景下审批请求串行展示,支持“全部放行”会话级缓存降低重复确认频率
@派聪明 这个是怎么做的
点赞
回复1 取消回复
派聪明 2026年08月21日 13:36
这是我从文章中选择的一段文本:"通过 synchronized + ConcurrentHashMap 保证多 Agent 并发场景下审批请求串行展示,支持“全部放行”会话级缓存降低重复确认频率" 这个是怎么做的 当前模型还在开发当中,请右上角下拉框切换到其他模型
点赞
回复 取消回复
安安 2026年08月10日 16:18
引用原文:作用域是工具级别,不是全局
具体代码是怎么做的?@派聪明
点赞
回复 取消回复
枫原万叶 2026年07月22日 21:13
引用原文:这个接口分离不是为了“设计模式好看”,是为了让测试能跑通。终端交互是一个非常难测的东西,一旦代码里硬编码了 System.in,测试就必须模拟键盘输入,极其麻烦。 接口抽象之后,TerminalHitlHandler 的包级别构造器允许注入自定义的 BufferedReader 和 PrintStream,测试可以直接喂字符串
@派聪明 这个问题具体是怎么产生的?
点赞
回复1 取消回复
派聪明 2026年07月22日 21:13
小派正在努力回答中, 耐心等待一下吧...
点赞
回复 取消回复
枫原万叶 2026年07月22日 21:01
引用原文:权衡四:接口隔离测试 HitlHandler 是接口,TerminalHitlHandler 是实现。测试里用的是 Mockito 的 mock,不需要真实的终端 stdin/stdout。 这个接口分离不是为了“设计模式好看”,是为了让测试能跑通。终端交互是一个非常难测的东西,一旦代码里硬编码了 System.in,测试就必须模拟键盘输入,极其麻烦。 接口抽象之后,TerminalHitlHandler 的包级别构造器允许注入自定义的 BufferedReader 和 PrintStream,测试可以直接喂字符串:
@派聪明 这是在说什么问题
点赞
回复1 取消回复
派聪明 2026年07月22日 21:01
小派正在努力回答中, 耐心等待一下吧...
点赞
回复 取消回复
枫原万叶 2026年07月22日 20:56
引用原文:PaiCLI 的 Agent 在流式输出 reasoning_content 的时候,TerminalMarkdownRenderer 有缓冲区。渲染器遇到 \n 才 flush 一行内容。 问题是:Agent 在工具调用迭代之间,渲染器里可能还有未 flush 的文字缓冲。 如果这时候 HITL 审批框直接弹出来,会从半行文字的中间插入,审批框的标题和内容就错位了。 解决方式是在进入 tool-call 迭代前,先调用 renderer.resetBetweenIterations(),把缓冲区强制 flush 掉:
@派聪明 解释一下这个问题是怎么产生,怎么解决的
点赞
回复1 取消回复
派聪明 2026年07月22日 20:56
小派正在努力回答中, 耐心等待一下吧...
点赞
回复 取消回复
etovo 2026年07月08日 16:16
引用原文: Mock
@派聪明 Mock是什么
点赞
回复1 取消回复
派聪明 2026年07月08日 16:16
根据你引用的文章内容,**Mock**(通常指 **Mockito** 框架)是 Java 单元测试中用于**模拟对象**的工具。 简单来说,当你要测试某个类时,它可能依赖数据库、外部 API 或文件系统等真实组件。如果每次都把这些真实组件拉起来,测试会很慢、不稳定,而且难以控制。Mock 的作用就是**创建一个假的替代品**,让你能: - **控制行为**:指定某个方法调用时返回什么值(`when(mock.method()).thenReturn(xxx)`) - **验证调用**:检查某个方法是否被调用了、调了几次、传了什么参数(`verify(mock, times(1)).method(...)`) 在文章中的 HITL 测试代码里,Mockito 被用来模拟 `HitlHandler` 接口,避免真实依赖终端输入输出,使得测试可以快速、可靠地运行: ```java HitlHandler mockHandler = mock(HitlHandler.class); // 创建 mock when(mockHandler.isEnabled()).thenReturn(true); // 控制行为 verify(mockHandler, never()).requestApproval(any()); // 验证调用 ``` **一句话总结**:Mock 是测试中的"替身演员",帮你隔离外部依赖,只专注测试目标逻辑本身。
点赞
回复 取消回复
Lee 2026年07月02日 09:20
引用原文:定义如下
@派聪明 ApprovalRequest中的callerContext是什么?怎么来的?
1
回复1 取消回复
派聪明 2026年07月02日 09:20
从你截取的那段代码可以清晰看到 **`callerContext` 是 `ApprovalRequest` record 中的一个预留字段**,但**当前实现中并没有给它赋值**。 具体来看源码: ```java public record ApprovalRequest( String toolName, String arguments, String dangerLevel, String riskDescription, String suggestion, String callerContext // ← 这个字段 ) { public static ApprovalRequest of(String toolName, String arguments, String suggestion) { return new ApprovalRequest( toolName, arguments, ApprovalPolicy.getDangerLevel(toolName), ApprovalPolicy.getRiskDescription(toolName), suggestion, null // ← 这里直接传了 null ); } } ``` --- ### 它是干什么的? 从命名推断——**`callerContext` = "调用者上下文"**。它的设计意图是记录**这次审批请求是由谁发起的**,比如: - 在 **Multi-Agent** 模式下,是 `SubAgentA` 还是 `SubAgentB` 调的危险操作? - 在 **Plan-and-Execute** 模式下,是哪个 Step 的哪个工具调用? 有了这个信息,审批框里就能告诉用户**"哪个 Agent、在哪一步、想干什么"**,帮助用户更精准地判断是否放行。 ### 为什么目前传 `null`? 因为文章介绍的 HITL 还是 **V1 版本**,最基础的能力是先跑通“拦截→展示→决策”这个闭环。文章中明确说了: > `toDisplayText()` 方法展示的信息已经包含了工具名、等级、风险描述、参数,在当前单 Agent 场景下足够用。 `callerContext` 属于**扩展预留字段**,为后续 Multi-Agent 下精细化审批做准备——等后面需要区分“谁调的”时,直接在这个字段里塞入 Agent ID + 步骤名即可,record 结构不用改。
点赞
回复 取消回复
Coos 2026年06月03日 22:32
引用原文:HITL
@派聪明 这个是什么全称叫什么
点赞
回复1 取消回复
派聪明 2026年06月03日 22:33
“HITL” 的全称是 **Human-in-the-Loop**,中文意思是**“人工审批介入”**或“人在回路中”。 在 AI Agent 系统中,它的核心作用是**安全兜底**。因为 AI 在执行任务时可能会出现理解偏差或幻觉,如果把删除文件、执行系统命令等危险权限完全交给 AI,会有很大风险。 因此,HITL 机制要求 AI 在执行危险操作之前先暂停下来,让人类过目并确认。只有得到人类的批准,AI 才能继续执行,从而把好最后一道安全关卡。
点赞
回复 取消回复

目录