BoxLang AI 3.4.0发布:网关、人在回路与完整安全栈
BoxLang AI 3.4.0 是一个围绕单一主题的重大版本:信任。在真实应用中运行的 AI 智能体需要能够在重大决策中让人参与,并管理可能不可信的输入。此版本引入了网关、重构后且具有持久化决策的人在回路(Human-in-the-Loop)子系统、分层安全控制、批量审批、跨提供商规范化推理,以及更广泛的 AWS Bedrock 支持。
以下各节遵循原始 BoxLang AI 3.4.0 版本公告,并保留其所有代码示例。完整变更日志见 BoxLang AI 3.4.0 发布历史。
网关 SPI:IGateway
网关提供双向交互层:它将来自特定平台的事件转换为智能体的规范化输入,并将智能体事件(包括审批请求)转换为该平台可以向用户展示的内容。网关实现 IGateway,并且对于不需要的能力可以依赖安全默认值。
三个网关已包含:
其他平台可以实现独立的网关模块,而无需让智能体本身依赖特定消息平台。
人在回路与持久化审批授权
人在回路(HITL)功能现在将审批策略(IApprovalPolicy)与交互流程(HumanInteractionCoordinator)分离。中间件成为使用这些组件的适配器。
当人工授予长期有效的审批时,由缓存、JDBC 或文件支持的 IDecisionStore 可以将该决策保留到当前运行之外,包括跨重启。
批量审批:一次挂起,而不是每次调用一次
当一个智能体轮次请求多个需要授权的工具时,这些待处理调用现在会在单个检查点中挂起。恢复时,已保存的助手消息会被处理,而无需重放模型调用。调用方可以一起批准所有调用,也可以逐个决定。
批量审批在 OpenAI、Claude、Bedrock 和 Cohere 上均受支持。此版本还包括针对 OpenAI 和 Claude 的流式批处理。
安全与护栏:三个阶段,选择启用
BoxLang AI 3.4.0 增加了针对提示注入和数据丢失的分层控制。核心安全设置是选择启用的,开发人员还可以将中间件附加到单个智能体。以下示例复现了发布文章中的设置结构。
打开 security.enabled 后,安全中间件可以通过 aiChat()、aiModel() 和 aiAgent() 自动附加到请求。单个请求可以通过 { secure: false } 选择退出。即使更广泛的安全功能关闭,Unicode 规范化和零宽字符清理也会生效。
阶段 1 —— 输入净化: InputSanitizerMiddleware 检查传入的用户文本,并可选检查工具/MCP 结果,以发现指令覆盖、角色冒充、隐藏 Unicode、可疑编码字符串和类似数据外泄的 URL 等模式。可用操作包括 block、strip、flag 和 log。
阶段 2 —— 不可信内容围栏: 检索到的文档、网页或工具响应应被视为不可信输入,而不是指令。aiFence() 会在这些内容周围添加明确边界。
模板绑定围栏与转义提供了进一步保护,以防将检索数据与可信指令混淆;发布文档描述了即使主安全选项被禁用时也会适用的行为。
阶段 3 —— 输出防护: OutputGuardMiddleware 可以脱敏敏感值,并从生成的输出中移除选定的、类似数据外泄的 Markdown。这种本地处理不需要另一次模型调用。
对于额外的基于模型的分类,LLMGuardMiddleware 可以要求另一个提供商(通常是更小或本地模型)对内容进行分类。
还包含一个确定性的离线模拟提供商,用于在 CI 中测试 AI 中间件、HITL 和护栏,而无需实时凭据。
跨提供商的规范化推理
兼容模型支持的推理现在可以一致地以 message.reasoning 获取,或者在流式传输期间以 delta.reasoning 获取。它不同于模型的最终内容,并且不会存储在对话记忆中。
提供商支持和对推理数据的访问取决于模型可用的功能与策略。
智能体运行控制:cancelRun() 和 steerRun()
智能体支持取消或引导已在进行中的工作,通过 threadId 标识。
使用 aiGatewaySession() 的网关会话
网关会话将一个智能体连接到一个或多个通道,将传入消息路由到智能体,并通过发起网关返回输出。
如果智能体忙碌时另一条消息到达,会话可以 reject、queue(默认)、steer 或 interrupt 现有轮次。
AWS Bedrock 提供商对等性
此版本扩展了 Bedrock 身份验证,以包括 bearer-token 支持和 AWS 凭据链(显式凭据、环境、ECS/EKS 容器(包括 EKS Pod Identity)和 EC2 IMDSv2),并具有感知过期的缓存。它还增加了 Guardrails 支持、可配置的 baseURL、Cohere/Titan-v2 嵌入,以及 Claude-on-Bedrock 工具使用。
记忆:基于 Token 的摘要
SummaryMemory 现在可以使用估算的 token 数而不是消息数作为压缩触发条件。
maxTokens 和 maxMessages 是替代触发条件:配置其中一个,而不是两个都配置。summarize() 方法现在是 IAiMemory 接口的一部分,并由内置记忆类型实现。
重要修复
此版本还解决了若干提供商和中间件不一致问题:
- 在 Claude、Bedrock 和 Cohere 上,工具调用中间件钩子被绕过;现在它们都使用与 OpenAI 相同的中间件管道。
- Claude 扩展思考此前会导致同步
aiChat()路径选择错误的响应块;现在它会正确选择第一个文本块。 approve_always和approve_session授权在异步、非 CLI 网关上不会持久化;此问题已解决。- 由于缺少默认 schema 方法,MCP 工具使用在 Claude 和 Bedrock 上可能失败。
- 从配置文件加载的 AWS 凭据因函数名拼写错误而失败。
完整修复列表见官方发布历史。
更新后的默认值与迁移说明
此版本将默认 AI 请求超时从 45 秒增加到 90 秒,并更新了若干提供商的默认模型。如发布历史中详述,除指定的 Unicode 清理外,安全默认关闭;旧版 mode: "cli" 和 mode: "web" HITL 设置仍然兼容,而对于新的平台特定设置,gateway: 是首选方法。使用单个决策调用 agent.resume() 仍然受支持;按调用决策数组是一项新增功能。
有关更多迁移细节,请参阅 BoxLang AI 迁移指南。
立即获取
使用 CommandBox:
或使用 BoxLang 安装程序:
其他资源:BoxLang AI 文档 和 bx-ai 源代码仓库。## 想深入了解?五篇技术深度解析
本文概览收录了发布公告中的示例。对于关注架构决策、实现细节以及更完整实战案例的读者,Ortus 团队还发布了五篇专题技术深度解析:
BoxLang AI 由 Ortus Solutions 团队维护,是更广泛的 BoxLang 生态的一部分。
分享此页面
- Bluesky
- Mastodon
- Hacker News
- 电子邮件
- 复制链接
- 分享……
发现错误或有内容补充?在 GitHub 上编辑此页面
[LOADING...]
作者
Luis Majano
Ortus Solutions 首席执行官 — 工程师 — 作者 — ColdBox HMVC、BoxLang JVM 语言、ContentBox CMS 等项目的创造者。