BoxLang AI 3.2.0 发布:图像生成、网络搜索、流畅音频、代理注册与MCP可观测性
[LOADING...]
BoxLang AI 3.2.0 正式发布,这是一个里程碑版本。我们带来了五大核心功能:图像生成、网页搜索、流畅的音频构建器 API、集中式代理注册表,以及深度 MCP 可观测性,同时还包括一系列分析改进和一项关键错误修复。让我们一探究竟。:tada:
:framed_picture: 图像生成 —— aiImage()
您现在可以直接在 BoxLang 中使用任意支持文生图的提供商生成图像。aiImage() BIF 遵循与 bx-ai 其他功能相同的流畅链式调用哲学,并能通过表达性方法对结果进行处理。
返回的 AiImageResponse 对象提供了您所需的一切:hasImages()、getCount()、getFirstURL()、getFirstBase64()、saveToFile()、saveAllToDirectory()、toDataURI()、getMimeType() 和 toStruct()。
开箱即用的提供商:
在模块启动时,generateImage@bxai 代理工具会自动注册到全局工具注册表中,因此您的代理无需任何手动配置即可生成图像:
:books: 图像生成文档
:mag: 网页搜索 —— aiWebSearch() & aiWebSearchAsync()
BoxLang AI 现在内置了统一的网页搜索系统,提供提供商抽象和标准化结果。每个提供商都返回相同的字段(title、url、snippet、publishedDate、domain、score、thumbnail、language),因此您无需改动代码即可切换提供商。
支持的提供商:
webSearch@bxai 工具已全局自动注册,任何代理均可立即进行网络搜索:
:books: 网页搜索文档
:microphone: 音频 BIF 的流畅构建器 API
aiSpeak()、aiTranscribe() 和 aiTranslate() 现在支持完整的流畅构建器 API。无参数调用任意函数即可返回请求对象,然后链式配置后执行。传统的位置参数语法仍然完全可用 —— 流畅构建器仅为附加特性。
aiSpeak()
关键构建器方法:.of()、.voice()、.male() / .female()、.speed()、.instructions()、.outputFile()、.asMP3() / .asWav() / .asFlac() / .asOpus() / .asPCM()、.provider()、.speak()。
aiTranscribe()
关键构建器方法:.file()、.url()、.data()、.language()、.withWordTimestamps()、.withSegmentTimestamps()、.diarize()、.asJSON() / .asText() / .asVerboseJSON() / .asSRT() / .asVTT()、.transcribe()、.translate()。
aiTranslate()
:books: 音频文档
:robot: 代理注册表 —— aiAgentRegistry()
3.2.0 引入了 AIAgentRegistry —— 一个全局单例,为您 BoxLang 应用程序中运行的所有代理提供集中式的可发现性、可观测性和生命周期管理。
模块作者:一流的代理和工具注册 :dart:
这对 BoxLang 生态系统来说意义重大。开发 BoxLang 模块的开发者现在可以打包那些在模块加载时自动全局注册的代理和工具 —— 应用开发者无需任何手动配置。
- 使用
register: true和模块命名空间定义aiAgent()实例 - 定义工具,通过
aiToolRegistry().scan( new MyTools(), "my-module" )扫描它们,然后它们会以toolName@my-module的形式全局出现 - 应用开发者可以在安装模块后,从应用的任何部分按名称使用您的代理和工具
这使得 bx-ai 成为一个真正的平台,用于构建可组合、可发现的 AI 生态系统 —— 将模块发布到 ForgeBox,您的代理和工具即可立即使用。:rocket:
两个新的拦截点在注册表变更时触发:onAIAgentRegistryRegister 和 onAIAgentRegistryUnregister。
:pause_button: MCP 服务器暂停/恢复
MCPServer 现在支持在不拆除配置或丢失已注册工具的情况下暂停和恢复。非常适合维护窗口、优雅降级或受控发布。
pause()—— 触发onMCPServerPause;所有非 ping 请求收到错误代码 -32005resume()—— 触发onMCPServerResume;恢复正常处理getSummary()现在包含paused布尔值
:bar_chart: MCP 服务器和客户端可观测性
服务器分析
MCP 服务器监控在 3.2.0 中进行了重大改造:
- 使用所有统计操作中的命名锁实现线程安全计数器
- 安全失败跟踪 —— 认证失败、API 密钥拒绝、请求体大小违规都有专用计数器
- 按工具错误跟踪 ——
byTool[name].errors,带有errors.byTool汇总 - 活跃并发请求计数器 ——
activeRequests实时递增/递减 - 每分钟请求速率 —— 在
getSummary()中公开 - X-Request-ID 关联 —— 请求 ID 在响应头和事件负载中回显
- 暂停请求统计 —— 当服务器暂停时,被拒绝的请求被跟踪
- 现在
onMCPError会在METHOD_NOT_FOUND时触发
客户端统计 —— MCPClient
MCPClient 获得了完整的内部使用和性能跟踪:
三个新的拦截点覆盖了整个客户端生命周期:onMCPClientRequest、onMCPClientResponse、onMCPClientError。
:wrench: 类型感知工具参数支持
bx-ai 中的工具模式现在直接从可调用参数元数据生成,因此 LLM 最终能够为每个参数接收准确的 JSON Schema 类型,而不仅仅是一堆字符串。ClosureTool.getArgumentsSchema() 自然地映射 BoxLang 类型 —— numeric、integer、float 和 double 变为 "number";boolean 变为 "boolean";array 变为 "array" 并带有 "items": {};struct 变为 "object" —— 这意味着 LLM 可以为非字符串参数发送原生的 JSON 值,并且工具的行为完全按照它们签名的声明。在输出方面,BaseTool.invoke() 继续一致地序列化结果以保证提供商兼容性,通过 toString() 转换简单值,通过 JSON 序列化转换复杂值,从而在双向保持工具契约的清晰。:dart:
:bug: 错误修复 —— ClosureTool.doInvoke() JSON 结构处理
发送 JSON 字段为真实对象或数组(而非预序列化的 JSON 字符串)的 MCP 客户端,不再导致 "Can't cast Struct to a string" 错误。doInvoke() 现在会检查声明参数,并对任何声明类型为 string 的非简单值调用 jsonSerialize()。静默、自动、无需代码更改。
:package: 模块配置
新的图像设置块
新的拦截点
3.2.0 将 bx-ai 的总拦截点提升至 50 个,新增 10 个事件:
:rocket: 立即升级
:books: 完整文档:ai.ortusbooks.com
:speech_balloon: 社区:community.ortussolutions.com
:star: GitHub:github.com/ortus-boxlang/bx-ai
BoxLang AI 3.2.0 是一个平台级发布:图像生成、网页搜索、流畅音频、全局代理与工具注册表,以及深度可观测性,全部集成在一起。我们迫不及待想看到您构建的作品。:tada:
该文章最初发表于 foojay:BoxLang AI 3.2.0 — Image Generation, Web Search, Fluent Audio, Agent Registry & MCP Observability