审阅选项

Server AI Toolkit 的 execute-tool 端点接受 reviewOptions 属性。使用它来控制 tiptapEdit 如何写入可审核的更改,而不是直接修改文档。

import { getAuthHeaders } from '@/lib/server-ai-toolkit/get-auth-headers'

const response = await fetch(`${apiBaseUrl}/toolkit/execute-tool`, {
  method: 'POST',
  headers: getAuthHeaders(),
  body: JSON.stringify({
    toolName: 'tiptapEdit',
    input: toolCallInput,
    schemaAwarenessData,
    document,
    reviewOptions: {
      mode: 'trackedChanges',
    },
  }),
})

reviewOptions 属性接收一个 ReviewOptions 配置对象。

ReviewOptions

  • mode? ('disabled' | 'trackedChanges'): 控制编辑是直接应用,还是写入为跟踪更改。默认值:'disabled'
    • 'disabled':编辑会直接应用到文档中。
    • 'trackedChanges':编辑会使用 Tracked Changes 扩展编码为跟踪更改,以便用户可以接受或拒绝单独的更改。
  • trackedChangesOptions? ({ userId: string, userMetadata?: Record<string, unknown> | null }): trackedChanges 模式的作者元数据。userId 用于标识建议的作者。省略时默认为 'AI'userMetadata 存储额外的作者信息,例如显示名称。默认值为 null
  • useDiffUtility? (boolean): 是否使用 diff 工具来重建跟踪更改。为 true 时,会通过细粒度 diff 计算更改。为 false 或未提供时,会直接应用范围级别的跟踪更改。
  • diffUtilityOptions? (object): 用于从修改前/后的文档状态重建跟踪更改的高级选项。
    • simplifyChanges? (boolean, default: true): 在生成跟踪更改之前简化附近的更改。
    • ignoreAttributes? (string[], default: ['id', 'data-thread-id', '_hash']): 在 diff 过程中忽略特定的节点属性。
    • ignoreMarks? (string[], default: ['inlineThread']): 在 diff 过程中忽略特定的标记。
    • changeMergeDistance? (number | null, default: auto-calculated): 在此距离内合并附近的更改。设为 null 可禁用合并。
    • mode? ('inline' | 'block' | 'smart', default: 'smart'): 生成跟踪更改时使用的 diff 策略。
    • groupInlineChanges? (number, default: 1): 将此距离内的行内编辑分组。
    • expandBlockChanges? (string[], default: ['listItem']): 应作为块级更改展开的节点类型。

典型配置

直接编辑

跳过审阅模式并立即应用编辑:

reviewOptions: {
  mode: 'disabled',
}

带有 AI 作者元数据的可追踪更改

为生成的建议附加一个稳定的 AI 身份:

reviewOptions: {
  mode: 'trackedChanges',
  trackedChangesOptions: {
    userId: 'ai-assistant',
    userMetadata: {
      name: 'AI Assistant',
    },
  },
}

带有自定义差异行为的可追踪更改

调整编辑的分组和显示方式:

reviewOptions: {
  mode: 'trackedChanges',
  diffUtilityOptions: {
    mode: 'block',
    groupInlineChanges: 2,
  },
}