createAILogger(log, options?) 接受一个单独的选项对象。每个选项都按需启用——默认情况下保持安全且安静。
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
toolInputs | boolean | ToolInputsOptions | false | 记录工具调用输入及其名称(默认关闭,以避免泄露敏感数据)。 |
cost | Record<string, ModelCost> | undefined | 定价映射。键为模型 ID,值为以每 100 万 token 计价的美元 { input, output }。 |
工具输入
默认情况下,ai.toolCalls 是一个工具名称的 string[]。启用 toolInputs 还可以捕获输入——这对于调试代理行为或审计模型访问了哪些数据很有用。
工具输入可能很大,并且可能包含敏感数据(SQL、API 密钥、客户 PII)。在生产环境中,请使用
maxLength 和 transform,而不是启用原始捕获。捕获全部内容
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
},
},
})
| 子选项 | 类型 | 描述 |
|---|---|---|
maxLength | number | 截断超过此字符长度的字符串化输入(末尾附加 …)。 |
transform | (input, toolName) => unknown | 在 maxLength 之前应用的自定义转换。用于脱敏字段或重塑数据。 |
启用 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、路由级错误处理器)会像往常一样继续工作——中间件只负责观察。