Eai.Utils (eai v0.1.7)

Copy Markdown

通用清洗、转换等无业务耦合的工具函数。

在任何需要序列化数据的出口(JSON 导出、日志记录、网络请求)之前, 均可 alias Eai.Utils 后调用 sanitize_value/1 进行防御性清洗, 确保所有嵌套结构中的二进制字段都是合法 UTF-8。

Summary

Functions

对整个消息列表(LLM history)做批量清洗,适合在入口/出口统一调用。

递归清洗任意嵌套结构,保证所有二进制字段都是合法 UTF-8 字符串。 无效字节会被替换为 "BASE64_DATA:" <> base64 编码。

Functions

sanitize_messages(messages)

@spec sanitize_messages([map()]) :: [map()]

对整个消息列表(LLM history)做批量清洗,适合在入口/出口统一调用。

示例

messages
|> Eai.Utils.sanitize_messages()
|> Jason.encode!()

sanitize_value(v)

@spec sanitize_value(term()) :: term()

递归清洗任意嵌套结构,保证所有二进制字段都是合法 UTF-8 字符串。 无效字节会被替换为 "BASE64_DATA:" <> base64 编码。

支持的类型:

  • binary — 检查 UTF-8 合法性,非法则 base64 编码
  • list — 递归处理每个元素
  • map — 递归处理键和值(含 struct 的 struct 键会被保留)
  • tuple — 递归处理每个元素,返回同阶 tuple
  • 其他 — 原样返回(integer / float / atom / boolean / nil)

示例

iex> Eai.Utils.sanitize_value("hello")
"hello"

iex> Eai.Utils.sanitize_value(<<0xFF, 0xFE>>)
"BASE64_DATA://w=="

iex> Eai.Utils.sanitize_value(%{"key" => <<0xFF>>})
%{"key" => "BASE64_DATA:/w=="}

iex> Eai.Utils.sanitize_value([1, "ok", <<0xFE>>])
[1, "ok", "BASE64_DATA:/g=="]