持久Shell会话 | Middleware 中间件 | 产品经理学Langchian | 第19篇

内容纲要

概述

在前面的章节中,我们讨论了如何通过上下文清理管理工具输出。现在我们要关注一个特殊但很有用的功能:让AI智能体能够执行系统命令,进行文件系统操作、运行脚本等

想象一下,如果AI智能体能够执行Shell命令,就可以:

  • 在代码库中查找文件
  • 运行测试脚本
  • 构建和部署项目
  • 管理系统配置

这些能力对于开发自动化、部署任务、测试验证等场景非常有用。

Shell tool中间件就是为了提供这种能力而设计的。它为AI智能体提供持久化的Shell会话,允许AI智能体执行系统命令、进行文件系统操作、运行脚本等。但同时,这也带来了安全风险,必须根据部署环境选择适当的安全策略。

使用场景

系统命令执行

AI智能体需要执行系统命令(如ls、grep、find)进行文件系统操作或系统诊断。比如查找日志文件、检查系统状态等。

开发与部署自动化

自动化开发任务(如运行测试、构建项目、管理依赖)和部署任务(如部署脚本、配置管理)。这在CI/CD场景中特别有用。

测试与验证工作流

执行测试脚本、验证配置、检查系统状态等测试验证任务。AI智能体可以自动化这些流程。

文件系统操作

创建、读取、修改、删除文件,管理目录结构等文件系统操作。AI智能体可以像开发者一样操作文件系统。

核心功能需求

安全策略设计

Shell工具提供直接系统访问,存在安全风险。必须根据部署环境选择适当的安全策略。

Host执行策略(主机执行)

  • 特点:原生执行,完整主机访问,性能最好
  • 适用场景:AI智能体已在容器或VM中运行,环境已隔离
  • 安全级别:低(需完全信任AI智能体)
  • 使用建议:只在可信环境中使用

Docker隔离策略(容器执行)

  • 特点:为每次AI智能体运行启动独立Docker容器,提供容器级隔离
  • 适用场景:需要更强隔离,但不需要沙箱级限制
  • 安全级别:中(容器隔离)
  • 使用建议:测试和生产环境推荐使用

沙箱执行策略

  • 特点:使用沙箱环境,提供额外的系统调用和文件系统限制
  • 适用场景:需要最高安全级别,执行不可信代码
  • 安全级别:高(沙箱隔离)
  • 使用建议:执行不可信代码时必须使用

产品建议:在PRD中明确各环境的安全策略要求,开发环境可以用Host策略,测试和生产环境必须使用Docker或沙箱策略。

持久会话机制

Shell工具提供持久Shell会话,在AI智能体运行期间保持状态。

状态保持

  • 环境变量:会话中的环境变量会保留
  • 工作目录:当前工作目录会保留
  • 命令历史:命令历史会保留
  • 作用:支持复杂的命令链和脚本执行

工作目录管理

  • workspace_root参数:设置Shell会话的基础目录
  • 隔离性:所有命令在此目录下执行,提供隔离性
  • 临时目录:如果不设置,会创建临时目录,结束时自动删除

启动/关闭钩子

  • startup_commands:会话启动后顺序执行的命令(如安装依赖、设置环境变量)
  • shutdown_commands:会话关闭前执行的命令(如保存状态、清理临时文件)

命令过滤与限制

为了安全,我们需要对执行的命令进行过滤和限制。

命令白名单/黑名单

  • 白名单:只允许执行预定义的安全命令
  • 黑名单:禁止执行危险命令(如rm -rf /、format等)
  • 建议:建议使用白名单机制,更安全

参数验证

  • 命令注入防护:防止命令注入攻击(如<code>; rm -rf /</code>)
  • 参数校验:验证命令参数,确保安全
  • 必需功能:这是基本的安全要求

资源限制

  • 超时设置:为命令设置超时时间,防止长时间运行
  • 内存限制:限制命令使用的内存
  • CPU限制:限制命令使用的CPU资源
  • 作用:防止资源耗尽,影响系统稳定性

输出脱敏

命令执行可能输出敏感信息(如API Key、密码等),需要脱敏处理。

敏感信息检测

  • RedactionRule:使用规则检测命令输出中的敏感信息
  • 检测类型:API Key、密码、令牌等
  • 实时处理:在返回给模型前清理敏感信息

脱敏规则配置

  • 正则表达式:使用正则表达式匹配敏感信息模式
  • 自定义规则:支持自定义脱敏规则
  • 可配置:可以在PRD中明确需要脱敏的信息类型

PRD需求描述

功能需求

FR-1: Shell命令执行

  • 描述:AI智能体可以执行Shell命令,进行文件系统操作和系统管理
  • 持久会话:提供持久Shell会话,在AI智能体运行期间保持状态
  • 优先级:P0(核心功能)

FR-2: 安全策略支持

  • 描述:支持Host、Docker、沙箱三种安全策略
  • 策略选择:根据部署环境选择合适的策略
  • 优先级:P0(核心功能)

FR-3: 命令过滤与限制

  • 描述:支持命令白名单/黑名单、参数验证、资源限制
  • 安全防护:防止命令注入攻击和资源耗尽
  • 优先级:P0(核心功能)

FR-4: 输出脱敏

  • 描述:检测并清理命令输出中的敏感信息
  • 脱敏规则:支持配置脱敏规则
  • 优先级:P1

FR-5: 启动/关闭钩子

  • 描述:支持会话启动和关闭时的命令执行
  • 用途:初始化和清理工作
  • 优先级:P1

非功能需求

NFR-1: 安全要求

  • 安全策略:生产环境必须使用Docker或沙箱策略,不能使用Host策略
  • 命令过滤:必须实现命令过滤机制,防止危险命令执行
  • 资源限制:必须设置资源限制,防止资源耗尽

NFR-2: 监控与审计

  • 命令日志:记录所有执行的命令,包括命令内容、参数、执行结果、执行时间
  • 异常监控:监控命令执行异常(超时、失败、资源耗尽),触发告警
  • 审计追踪:建立审计追踪机制,记录谁执行了什么命令

NFR-3: 性能要求

  • 执行性能:命令执行不应显著影响响应时间
  • 资源占用:控制Shell会话的资源占用,避免影响系统性能

产品设计要点

安全策略选择

开发环境

  • 可以使用HostExecutionPolicy,但需确保环境隔离
  • 方便开发和调试

测试环境

  • 建议使用DockerExecutionPolicy,提供容器级隔离
  • 更接近生产环境

生产环境

  • 强烈建议使用DockerExecutionPolicy或沙箱策略
  • 确保安全隔离

产品建议:在PRD中明确各环境的安全策略要求,并建立安全审查流程。

命令过滤设计

白名单机制

  • 只允许执行预定义的安全命令
  • 更安全,但需要维护白名单

黑名单机制

  • 禁止执行危险命令
  • 更灵活,但可能遗漏

危险命令示例

  • <code>rm -rf /</code>:删除根目录
  • <code>format</code>:格式化磁盘
  • <code>dd</code>:磁盘操作
  • 需要在PRD中明确黑名单

产品建议:建议使用白名单机制,更安全可靠。

输出脱敏设计

敏感信息类型

  • API Key、密码、令牌等
  • 需要在PRD中明确需要脱敏的信息类型

脱敏规则

  • 使用正则表达式匹配敏感信息
  • 支持自定义规则

脱敏效果

  • 需要测试脱敏规则的有效性
  • 确保敏感信息不会被泄露

产品建议:建议在PRD中明确脱敏规则和验证要求。

使用建议

什么时候应该使用

  1. 开发自动化:需要执行系统命令、运行脚本的开发任务
  2. 部署任务:自动化部署和配置管理
  3. 测试验证:执行测试脚本、验证配置等

配置建议

  1. 安全策略:根据环境选择合适的策略,生产环境必须使用Docker或沙箱
  2. 命令过滤:实现命令白名单或黑名单,防止危险命令
  3. 资源限制:设置超时和资源限制,防止资源耗尽

注意事项

  1. 安全第一:Shell工具存在安全风险,必须谨慎使用
  2. 环境隔离:生产环境必须使用隔离策略
  3. 命令审计:必须记录所有命令执行日志,便于审计

与其他中间件的配合

Shell工具可以与其他中间件配合使用:

  • 与ToolCallLimitMiddleware配合:限制Shell命令的执行次数
  • 与PIIMiddleware配合:清理命令输出中的敏感信息
  • 与Human-in-the-loop配合:关键命令执行前触发人工审核(注意:当前版本可能不支持)

后续优化方向

  1. 智能命令验证:基于命令语义,智能判断命令是否安全
  2. 命令模板:提供常用命令模板,减少错误
  3. 执行结果优化:优化命令输出的格式,便于AI智能体理解
  4. 安全增强:持续增强安全机制,防范新的安全威胁
滚动至顶部