严格模式

严格模式确保模型在输出 Function 调用时严格遵循 Function 的 JSON Schema 的格式要求。

严格模式确保模型在输出 Function 调用时严格遵循 Function 的 JSON Schema 的格式要求。启用后,SDK 会自动:

  1. 将请求发送到 DeepSeek Beta 端点(https://api.deepseek.com/beta
  2. 在所有工具定义中向 API 传递 strict: true
  3. 强制要求所有 object 属性为 required,并设置 additionalProperties: false

服务端会对传入的 Function 的 JSON Schema 进行校验,如不符合规范或遇到不支持的 JSON Schema 类型,将返回错误信息。

有两种方式启用严格模式:

模型级严格模式(推荐)

在模型上设置 strict: true,全局启用严格模式:

const model = createModel({ model: 'deepseek-v4-flash', strict: true })

使用模型级严格模式时,请求中的所有工具都会自动设置 strict: true,无需在每个工具上单独设置。SDK 还会通过 model.enableBeta() 自动切换到 Beta 端点。

你也可以手动触发 Beta 端点切换:

const model = createModel({ model: 'deepseek-v4-flash' })
model.enableBeta() // 将 baseURL 切换为 https://api.deepseek.com/beta/

工具级严格模式

在单个工具上设置 strict: true同一请求中的所有工具必须具有相同的 strict——不允许混用严格和非严格工具:

const searchTool = tool({
  name: 'search',
  description: '搜索数据库中的记录',
  schema: z.object({
    query: z.string().describe('搜索关键词'),
    limit: z.number().describe('最大返回数量'),
  }),
  strict: true,
  execute: async (input) => {
    return { results: [], total: 0 }
  },
})

当任何工具设置了 strict: true 时,SDK 会自动检测并在发送请求前切换到 Beta 端点。

类型安全

TypeScript 通过专用类型在编译时强制一致性:

  • StrictTool[] — 所有工具必须设置 strict: true
  • NonStrictTool[] — 所有工具的 strictfalse 或未定义
  • ConsistentTools = StrictTool[] | NonStrictTool[]generateText 和智能体方法使用的联合类型

同时运行时也会通过 validateToolConsistency() 进行验证作为兜底,如果混用严格和非严格工具会抛出错误。

支持的 JSON Schema 类型

严格模式支持部分 JSON Schema 类型。使用不支持的类型会导致服务端错误:

类型说明
object所有属性必须为 requiredadditionalProperties 必须为 false
string支持 patternformat(email、hostname、ipv4、ipv6、uuid);不支持 minLength/maxLength
number / integer支持 minimummaximumexclusiveMinimumexclusiveMaximummultipleOfconstdefault
boolean完全支持
array不支持 minItems/maxItems
enum完全支持
anyOf完全支持,用于联合类型
$ref / $def支持,用于模块化 Schema 和递归结构