AI SDK 集成

选项

配置工具输入捕获(带脱敏和截断)、启用按模型的成本估算,并处理 AI 调用期间的错误。

createAILogger(log, options?) 接受一个单独的选项对象。每个选项都按需启用——默认情况下保持安全且安静。

选项类型默认值描述
toolInputsboolean | ToolInputsOptionsfalse记录工具调用输入及其名称(默认关闭,以避免泄露敏感数据)。
costRecord<string, ModelCost>undefined定价映射。键为模型 ID,值为以每 100 万 token 计价的美元 { input, output }

工具输入

默认情况下,ai.toolCalls 是一个工具名称的 string[]。启用 toolInputs 还可以捕获输入——这对于调试代理行为或审计模型访问了哪些数据很有用。

工具输入可能很大,并且可能包含敏感数据(SQL、API 密钥、客户 PII)。在生产环境中,请使用 maxLengthtransform,而不是启用原始捕获。

捕获全部内容

const ai = createAILogger(log, { toolInputs: true })

截断长输入

const ai = createAILogger(log, { toolInputs: { maxLength: 200 } })

脱敏敏感字段

const ai = createAILogger(log, {
  toolInputs: {
    maxLength: 500,
    transform: (input, toolName) => {
      if (toolName === 'queryDB') return { sql: '***' }
      return input
    },
  },
})
子选项类型描述
maxLengthnumber截断超过此字符长度的字符串化输入(末尾附加 )。
transform(input, toolName) => unknownmaxLength 之前应用的自定义转换。用于脱敏字段或重塑数据。

启用 toolInputs 后,ai.toolCalls 将变为 Array<{ name, input }>,而不是普通的字符串数组。

成本估算

传入 cost 映射以计算每次调用的预估美元成本。中间件会将 token 用量乘以每百万 token 的费率,并在宽事件上设置 ai.estimatedCost

const ai = createAILogger(log, {
  cost: {
    'claude-sonnet-4.6': { input: 3, output: 15 },
    'gpt-4o': { input: 2.5, output: 10 },
  },
})

从你的处理器中使用 ai.getEstimatedCost() 读取结果——这对于计费仪表板或在昂贵调用前向用户发出警告很有用。

请将你的 cost 映射与模型选择放在同一个文件中,这样在生产环境中重命名模型时也会更新定价。避免按路由硬编码映射。

错误处理

如果模型调用失败,中间件会在重新抛出之前将错误捕获到宽事件中:

Wide Event
{
  "ai": {
    "calls": 1,
    "model": "claude-sonnet-4.6",
    "provider": "anthropic",
    "finishReason": "error",
    "error": "API rate limit exceeded"
  }
}

流错误(例如内容过滤器)也会从流的错误块中被捕获。你的错误处理代码(try/catch、路由级错误处理器)会像往常一样继续工作——中间件只负责观察。