真实面经题目 · 原创解析

把 Skill 放进 Agent 沙箱后,主 Agent、Skill 运行时和文件系统之间应如何通信,并怎样做最小暴露和渐进式披露?

这题考 Agent 工程里的沙箱通信边界:不能让 Skill 直接拿到宿主进程和完整文件系统,而要用受控协议、能力句柄、文件视图和审计链路把调用、数据和权限拆开。

出现于:快手 · 后端开发

60 秒回答模板

我会把这个问题拆成三个边界:控制面、数据面和文件系统面。主 Agent 不应该把 Skill 当成同进程插件随意调用,也不应该把完整工作目录直接挂进沙箱。更稳妥的方式是由宿主运行时做中介:主 Agent 发起带有 skillId、输入参数、能力范围、超时和 traceId 的调用请求;Skill 在沙箱里运行,只通过标准输入输出、RPC、消息队列或受限的工具协议返回结构化结果;宿主负责参数校验、权限校验、资源限制、结果截断、敏感信息过滤和审计。文件系统跨边界时不能暴露真实绝对路径和全量目录,而应该暴露文件句柄、虚拟路径、只读快照或临时工作区。渐进式披露的核心是先给最小上下文,例如文件名、类型、摘要、相关片段和可操作能力;只有当 Skill 明确需要更多内容并说明用途时,宿主再按策略追加片段、只读文件、可写临时文件或更高权限。这样做的好处是主 Agent 能利用 Skill 的专业能力,Skill 又无法越权读写、扫描无关文件、泄露密钥或把沙箱逃逸变成宿主风险。最后要补上工程闭环:每次披露、读写、网络访问和结果返回都要可追踪;失败时要能回滚临时文件并给主 Agent 返回可恢复错误,而不是把沙箱内部异常直接抛给用户。

考点 通信边界
难度 真实面经题
回答目标 让候选人能把沙箱内 Skill 通信讲成一套可落地的运行时边界设计:宿主中介、结构化协议、文件虚拟化、最小权限、渐进披露和审计恢复,而不是停留在“用接口调用”这种浅层答案。

深入解析

01

先明确为什么不能直接通信

Skill 一旦进入沙箱,就应该被视为不完全可信或至少需要最小授权的执行单元。直接把宿主对象、真实路径、环境变量、用户凭证或完整仓库交给 Skill,会让模型误调用、第三方 Skill 缺陷、提示注入和依赖漏洞都放大成宿主风险。因此回答要先说明:沙箱不是为了让调用更麻烦,而是为了把能力边界、数据边界和责任边界显式化。

02

通信走宿主中介和结构化协议

主 Agent 和 Skill 运行时之间最好通过宿主 runtime 中介通信。调用请求至少包含 Skill 标识、版本、输入 schema、能力声明、允许访问的资源、超时、最大输出长度、调用目的和 traceId。返回结果也应结构化,例如状态码、产物引用、摘要、错误类型、可重试性和需要追加披露的资源请求。这样主 Agent 不需要理解沙箱内部实现,宿主也能统一做鉴权、限流、审计和隔离。

03

控制面和数据面分离

控制面负责启动、取消、超时、配额、网络策略和工具授权;数据面负责传入片段、文件引用、用户输入和 Skill 输出。两者分开后,可以避免一个普通数据字段偷偷携带权限,也能避免 Skill 通过输出诱导主 Agent 执行更高权限操作。比如 Skill 可以返回“需要读取 config.ts 第 20-80 行”的请求,但真正读取文件、脱敏和追加内容必须由宿主策略决定。

04

跨文件系统使用虚拟视图和句柄

跨文件系统时,不应把宿主目录完整挂载进沙箱。常见设计是只读快照、虚拟文件树、临时工作区、内容片段、文件摘要、文件句柄和产物引用。Skill 看到的是受控路径或资源 ID,而不是宿主真实绝对路径。写操作也应落在临时目录或 patch 产物中,由主 Agent 或宿主审核后再应用,避免 Skill 直接覆盖用户文件。

05

渐进式披露按需求升级

渐进式披露不是简单少给一点上下文,而是按任务阶段逐步开放信息。第一层给目录索引、文件名、类型、摘要和相关片段;第二层给只读文件片段或完整文件;第三层才给跨文件引用、写入临时文件或执行命令能力。每次升级都要有理由、范围、时效和审计记录。这样既降低 token 和数据暴露,也能控制提示注入导致的大范围读取。

06

结果返回要可验证可恢复

Skill 的输出不应被主 Agent 直接当成事实或最终变更。宿主可以对结果做 schema 校验、引用校验、敏感信息扫描、长度限制和产物哈希记录。对于文件修改,最好返回 patch、diff 或产物 ID,再由主流程验证、测试和应用。失败时返回明确错误类型,例如权限不足、输入不完整、超时、资源超限或需要更多上下文,让主 Agent 可以补充信息、降级或重试。

易错点

  • 把 Skill 沙箱理解成普通插件机制,默认同进程共享对象和目录,忽略隔离边界。
  • 只说用 RPC 或消息队列通信,没有说明权限、资源范围、超时、审计和结果校验。
  • 把完整项目目录挂进沙箱,认为只读就安全,忽略敏感文件、密钥、隐私数据和提示注入读取风险。
  • 渐进式披露只按 token 预算截断文件,没有按任务相关性、敏感等级和权限升级来设计。
  • 允许 Skill 直接写宿主文件,没有临时工作区、patch 审核、回滚和测试验证。
  • 把 Skill 输出直接拼回主 Agent 上下文,缺少 schema 校验、引用校验和敏感信息过滤。

面试官追问

Skill 为什么不能直接读宿主工作目录?

因为 Skill 可能被错误提示、依赖漏洞或模型误判影响,直接读全量目录会扩大敏感文件泄露和越权修改风险。更合理的是给只读快照、文件片段或经过授权的虚拟路径。

渐进式披露和 RAG 检索有什么区别?

RAG 更强调从知识库召回相关内容,渐进式披露更强调权限和上下文开放策略。它可以使用检索结果,但还要决定是否允许读取、读取多少、是否脱敏、是否允许写入。

Skill 请求更多文件内容时应该自动批准吗?

不应该默认自动批准。宿主要检查请求理由、资源范围、当前任务相关性、敏感等级和用户授权,必要时只给片段、摘要或脱敏版本。

如果 Skill 需要修改文件,怎样降低风险?

让 Skill 输出 patch 或写入临时工作区,再由主流程做 diff 展示、测试、策略校验和人工或自动批准。不要让 Skill 直接覆盖宿主真实文件。

通信协议里最关键的字段是什么?

至少要有调用身份、输入 schema、能力声明、资源范围、超时、最大输出、traceId、错误类型和产物引用。它们决定了调用是否可控、可审计、可恢复。