验证与错误

工具参数的自动验证机制和错误处理策略。

参数验证

tool() 函数会自动使用 Zod Schema 验证模型生成的参数。如果参数不符合 Schema,验证错误会被捕获并作为失败结果返回给模型,而不会抛出异常中断流程:

const searchTool = tool({
  name: 'search',
  description: '搜索记录',
  schema: z.object({
    query: z.string().min(1).describe('搜索关键词'),
    limit: z.number().int().min(1).max(100).describe('返回数量'),
  }),
  execute: async (input) => {
    return searchDatabase(input.query, input.limit)
  },
})

如果模型生成了 limit: -1,Zod 验证会失败,模型会收到类似 "Invalid arguments: limit: Number must be greater than or equal to 1" 的错误信息,从而有机会修正参数重新调用。

错误处理

工具执行中的错误会被自动捕获并返回给模型。你可以在 execute 函数中自行处理错误,也可以让 deepseek-kit 的默认机制接管:

const safeTool = tool({
  name: 'safeApi',
  description: '安全的 API 调用',
  schema: z.object({ url: z.string() }),
  execute: async (input) => {
    try {
      const response = await fetch(input.url)
      if (!response.ok) {
        return { error: `请求失败: ${response.status}` }
      }
      return await response.json()
    }
    catch (error) {
      return { error: `网络错误: ${error instanceof Error ? error.message : String(error)}` }
    }
  },
})