SuperAPI AI 工具集

prism-wasm-integration

编程与开发

查看项目

更新于 10-16 01:19

技能介绍

用途:Prism 是一个 LLM 协议转换引擎,可在 OpenAI、Anthropic、Gemini、Azure、Vertex、vLLM 等提供方格式之间转换,中间使用名为 Lucent IR 的中立表示。本技能是加载与调用 prism.wasm 的集成指南,适用于 Rust、TypeScript、Python、Go、C/C++、Zig 等任何支持 WASM 的语言。WASM 版本导出 15 个纯函数,全部为 String → String,无状态、无副作用,便于嵌入。两种使用模式:SDK 模式(应用只使用一种提供方格式,由 Prism 编解码)和 Transit 模式(一次调用把提供方 A 的格式直接转为提供方 B 的格式)。

主要能力:导出函数分四类。底层 IR 转换 6 个:wasm_to_lux_req、wasm_lux_req_to_provider、wasm_to_lux_resp、wasm_lux_resp_to_provider、wasm_sse_to_events、wasm_events_to_sse。高层 SDK 5 个:wasm_sdk_encode_req、wasm_sdk_decode_resp、wasm_sdk_encode_stream、wasm_sdk_decode_sse、wasm_sdk_capability。Transit 转换 3 个:wasm_convert_req、wasm_convert_resp、wasm_convert_stream。查询 1 个:wasm_list_providers。除 wasm_list_providers 外,所有函数返回信封:{"value": "...", "diagnostics": [{"field": "...", "status": "exact|degraded|unsupported|invalid", "detail": "..."}]};错误返回 {"error": "message", "diagnostics": []},应先检查 error 键。

使用方式:字符串经线性内存传递,布局为 ptr - 4 处存 u32 长度(UTF-16 代码单元,小端),ptr 处存 UTF-16LE 载荷。参数写入线性内存并把 ptr(i32)传给函数,返回值也是相同布局的 ptr。参数串使用 0x1000 以下地址,参数间步长 512 字节以上避免重叠。编码:转 UTF-16LE 代码单元、在 ptr - 4 写 u32 长度(代码单元数而非字节数)、写载荷、传 ptr。解码:从 resultPtr - 4 读长度、读 length × 2 字节、按 UTF-16LE 解码。构建命令为 moon build --target wasm,产物在 _build/wasm/release/build/cmd/main/main.wasm。参考实现在 wrappers/go(安装 go get github.com/morning-start/prism/wrappers/go)和 wrappers/ts(安装 npm install @morning-start/prism-wasm)。

适用场景:需要在多语言环境中嵌入 LLM 提供方格式转换、请求/响应/流式 SSE 转换时使用。

限制与注意:UTF-8 与 UTF-16 转码是首要易错点,Rust、Go、Python 等内部多用 UTF-8。长度按代码单元计数,增补字符由两个代码单元表示。不要把参数写入 0x1000 以上以免与 MoonBit GC 堆冲突。JS/TS 中内存增长会使 buffer 分离,需每次调用重新取 DataView/Uint8Array。实例化后须先调用一次 _start 初始化运行时。原文未提供各语言参考文件的具体内容与性能数据。