工作流程
工作流程是 AI 模型执行单一且明确定义任务的场景。AI 工具包包含以下内置工作流程:
以下是支持这些内置工作流程的方法的 API 参考。
createProofreaderWorkflow(服务器端工具)
创建一个预设的校对工作流程配置。返回一个系统提示和用于验证 AI 输出的模式。
该工作流程期望用户的输入是一个 JSON 对象,包含:
content: 需要校对的文档内容(详情见客户端设置章节如何获取)task:描述待完成任务的字符串context: (可选)与任务相关的额外上下文或背景信息
返回值
systemPrompt(string):可直接使用的系统提示,指导 AI 模型如何生成校对操作zodOutputSchema(ZodObject):用于验证 AI 输出的 Zod 模式jsonOutputSchema(object):用于验证 AI 输出的 JSON 模式
systemPrompt 字段包含一个带有合理默认值的示例提示,建议您阅读并根据需求修改。
示例
import { createProofreaderWorkflow } from '@tiptap-pro/ai-toolkit-tool-definitions'
import { Output, streamText } from 'ai'
import { openai } from '@ai-sdk/openai'
// 从 API 端点请求中获取文档内容
const { content } = apiEndpointRequest
// 创建并配置工作流程
const workflow = createProofreaderWorkflow()
const result = streamText({
model: openai('gpt-5.4-mini'),
// 系统提示
system: workflow.systemPrompt,
// 用户消息,包含内容和任务
prompt: JSON.stringify({
content,
task: '纠正所有语法和拼写错误',
context: '这是一个正式的商务文件',
}),
output: Output.object({ schema: workflow.zodOutputSchema }),
})createInsertContentWorkflow(服务器端工具)
创建一个预设的插入或替换内容工作流程配置。返回用于 AI 模型的系统提示。
该工作流程期望用户的输入为包含以下属性的 JSON 对象:
task:待完成的任务replace:待替换的 HTML 内容(可选)before:插入在之前的 HTML 内容(可选)after:插入在之后的 HTML 内容(可选)
返回值
systemPrompt(string):可直接使用的系统提示,指导 AI 模型如何生成 HTML 内容
systemPrompt 字段包含一个带有合理默认值的示例提示,建议您阅读并根据需求修改。
示例
import { createInsertContentWorkflow } from '@tiptap-pro/ai-toolkit-tool-definitions'
import { streamText } from 'ai'
import { openai } from '@ai-sdk/openai'
// 从 API 端点请求中获取任务和选区信息
const { task, replace } = apiEndpointRequest
// 创建并配置工作流程
const workflow = createInsertContentWorkflow()
const result = streamText({
model: openai('gpt-5.4-mini'),
// 系统提示
system: workflow.systemPrompt,
// 用户消息,包含任务和内容对象
prompt: JSON.stringify({
task,
replace,
}),
})
return result.toTextStreamResponse()proofreaderWorkflow
将一组校对操作应用于文档。
参数
options(ProofreaderWorkflowOptions): 配置选项hasFinished(boolean): 是否流式传输已完成。在操作仍在流式传输时传递false,在最后一次调用时传递true。operations(PartialProofreaderOperation[]): 校对操作数组。workflowId(unknown): 此工作流程运行的唯一 IDreviewOptions?(ReviewOptions): 控制预览/审查行为。查看可用选项。- 在此方法中,
diffUtilityOptions.groupInlineChanges默认为2而不是1,因此编辑默认显示为内联更改。 - 当安装了 修订跟踪 扩展时支持
mode: 'trackedChanges'。
- 在此方法中,
range?(Range): 应用校对操作的范围from(number): 起始位置to(number): 结束位置
返回值(ProofreaderWorkflowResult)
doc(Node): 应用操作后修改后的文档operationResults(OperationResult[]): 操作结果数组,顺序与输入操作相同。每个结果包含:target(string): 与操作结果关联的目标哈希success(boolean): 操作是否成功error(string | null): 如果操作失败则为错误消息,否则为null
示例
const toolkit = getAiToolkit(editor)
// 获取适合 AI 快速且高效编辑的文档格式
const { content } = toolkit.tiptapRead()
const operations = await callApiEndpoint({ content })
// 应用校对更正
const result = toolkit.proofreaderWorkflow({
hasFinished: true,
operations,
workflowId: 'proofread-123',
reviewOptions: {
mode: 'preview',
},
})createTiptapEditWorkflow(服务器端工具)
创建一个预设的文档编辑工作流程配置。返回系统提示和用于验证 AI 输出的模式。
该工作流程期望用户的输入为 JSON 对象,包含:
content: 待编辑文档的内容(来自tiptapRead)task:描述待完成编辑任务的字符串context: (可选)与任务相关的额外上下文或背景信息
返回值
systemPrompt(string): 可直接使用的系统提示,指导 AI 模型如何生成编辑操作zodOutputSchema(ZodObject): 用于验证 AI 输出的 Zod 模式。此模式验证模型返回的流式operations对象。jsonOutputSchema(object): 用于验证 AI 输出的 JSON 模式
示例
import { createTiptapEditWorkflow } from '@tiptap-pro/ai-toolkit-tool-definitions'
import { Output, streamText } from 'ai'
import { openai } from '@ai-sdk/openai'
// 从 API 端点请求中获取文档内容和任务
const { content, task } = apiEndpointRequest
// 创建并配置工作流程
const workflow = createTiptapEditWorkflow()
const result = streamText({
model: openai('gpt-5.4-mini'),
system: workflow.systemPrompt,
prompt: JSON.stringify({ content, task, context }),
output: Output.object({ schema: workflow.zodOutputSchema }),
})tiptapEditWorkflow
将一组编辑操作应用于文档。
参数
options(TiptapEditWorkflowOptions): 配置选项hasFinished(boolean): 是否流式传输已完成。在操作仍在流式传输时传递false,在最后一次调用时传递true。operations(PartialTiptapEditOperation[]): 编辑操作数组。每个操作是一个对象,包含:type:'replace'|'insertBefore'|'insertAfter'target: 节点的 6 字符哈希(来自tiptapRead)或'doc'表示整个文档content: 包含要插入内容的 HTML 字符串
workflowId(unknown): 此工作流程运行的唯一 IDtiptapReadResult(TiptapReadResult):tiptapRead返回的结果,用于在应用编辑操作时检测陈旧读取。reviewOptions?(ReviewOptions): 控制预览/审查行为。- 当安装了 修订跟踪 扩展时支持
mode: 'trackedChanges'。
- 当安装了 修订跟踪 扩展时支持
streamingOptions?(StreamingOptions): 控制如何应用流式操作。disableTypingEffect?(boolean): 禁用应用流式操作时的打字效果。
tiptapEditHooks?(TiptapEditHooks): 用于拦截和修改操作的钩子。详见 Tiptap Edit 钩子指南。beforeOperation?((context: BeforeOperationContext) => BeforeOperationResult): 在应用每个操作之前调用。返回{ action: 'accept' }以应用操作(可选带有fragment或operationType覆盖),或{ action: 'reject', error }以跳过。
返回值(TiptapEditWorkflowResult)
doc(Node): 应用操作后修改后的文档operationResults(OperationResult[]): 操作结果数组,按执行顺序。每个结果包含:target(string): 与操作结果关联的目标哈希success(boolean): 操作是否成功完成error(string | null): 如果操作失败则为错误消息,否则为null
示例
const toolkit = getAiToolkit(editor)
// 获取带哈希的文档内容
const { content } = toolkit.tiptapRead()
const operations = await callApiEndpoint({ content, task: '使文本更正式' })
// 应用编辑操作
const result = toolkit.tiptapEditWorkflow({
hasFinished: true,
operations,
workflowId: 'edit-123',
reviewOptions: {
mode: 'preview',
},
})createEditThreadsWorkflow(服务器端工具)
创建一个预设的评论和线程管理工作流程配置。返回系统提示和用于验证 AI 输出的模式。
该工作流程期望用户的输入为 JSON 对象,包含:
content: 文档内容(来自tiptapRead)threads:文档中的现有线程(来自getThreads)task:描述评论管理任务的字符串
返回值
systemPrompt(string):可直接使用的系统提示,指导 AI 模型如何管理评论zodOutputSchema(ZodObject):用于验证 AI 输出的 Zod 模式jsonOutputSchema(object):用于验证 AI 输出的 JSON 模式
示例
import { createEditThreadsWorkflow } from '@tiptap-pro/ai-toolkit-tool-definitions'
import { Output, streamText } from 'ai'
import { openai } from '@ai-sdk/openai'
// 从 API 端点请求中获取内容、线程和任务
const { content, threads, task } = apiEndpointRequest
// 创建并配置工作流程
const workflow = createEditThreadsWorkflow()
const result = streamText({
model: openai('gpt-5.4-mini'),
system: workflow.systemPrompt,
prompt: JSON.stringify({ content, threads, task }),
output: Output.object({ schema: workflow.zodOutputSchema }),
})getThreads
获取文档中所有线程及其评论和位置信息。
返回值(GetThreadsResult)
threadCount(number):文档中线程数量threads(ThreadInfo[]):线程信息数组,每项包含:id(string):线程唯一标识comments({ id: string; content: string }[]):线程中的评论数组nodeRange?(string):线程所在节点范围documentContent?(string):线程应用的 HTML 内容
示例
const toolkit = getAiToolkit(editor)
// 获取文档中所有线程
const result = toolkit.getThreads()
console.log(`共找到 ${result.threadCount} 个线程`)
result.threads.forEach((thread) => {
console.log(`线程 ${thread.id}:${thread.comments.length} 条评论`)
})editThreadsWorkflow
将评论和线程操作应用于文档。
参数
options(EditThreadsWorkflowOptions): 配置选项operations(string[][]): 评论操作数组,元素为操作元组。selectableNodeTypes?(string[]): 始终应具有哈希的节点类型名称数组,即使它们不是顶层节点。默认情况下,所有块节点类型都可以有哈希。若设置为[],则仅顶层节点拥有哈希。commentsOptions?(CommentsOptions): 评论操作选项threadData?(Record<string, any>): 创建的线程的额外元数据commentData?(Record<string, any>): 创建的评论的额外元数据
返回值(EditThreadsWorkflowResult)
operations(EditThreadsOperationResult[]):操作结果数组success(boolean):所有操作是否均成功
示例
const toolkit = getAiToolkit(editor)
// 获取文档内容和线程
const { content } = toolkit.tiptapRead()
const { threads } = toolkit.getThreads()
const operations = await callApiEndpoint({ content, threads, task: '添加复审评论' })
// 应用评论操作
const result = toolkit.editThreadsWorkflow({
operations,
})
if (result.success) {
console.log('所有评论操作均成功完成')
}createTemplateWorkflow(服务器端工具)
创建一个预设的模板填充工作流程配置。接受一个 HTML 模板字符串(由客户端的 createHtmlTemplate 方法生成),自动提取所有模板键,并返回系统提示及验证 AI 输出的模式。
该工作流程期望用户的输入为 JSON 对象,包含:
task:描述为模板生成内容的字符串context: (可选)与任务相关的额外上下文或背景信息
参数
options(CreateTemplateWorkflowOptions): 配置选项htmlTemplate(string): 由客户端createHtmlTemplate方法生成的 HTML 模板字符串requiredSlots?(string[]): AI 必须填写的 Slot 名称列表。未列出的 Slot 为可选。未传入时所有 Slot 皆为必填,传入空数组时所有 Slot 皆为可选。requiredConditions?(string[]): AI 必须计算的条件名称列表。未列出的条件为可选。未传入时所有条件皆为必填,传入空数组时所有条件皆为可选。requiredAttributes?(string[]): AI 必须设置的属性键名称列表。未列出的属性为可选。未传入时所有属性皆为必填,传入空数组时所有属性皆为可选。
返回值
systemPrompt(string):可直接使用的系统提示,指导 AI 模型如何填充模板zodOutputSchema(ZodObject):用于验证 AI 输出的 Zod 模式jsonOutputSchema(object):用于验证 AI 输出的 JSON 模式
示例
import { createTemplateWorkflow } from '@tiptap-pro/ai-toolkit-tool-definitions'
import { Output, streamText } from 'ai'
import { openai } from '@ai-sdk/openai'
const { htmlTemplate, task } = apiEndpointRequest
const workflow = createTemplateWorkflow({ htmlTemplate })
const result = streamText({
model: openai('gpt-5.4-mini'),
system: workflow.systemPrompt,
prompt: JSON.stringify({ task, context }),
output: Output.object({ schema: workflow.zodOutputSchema }),
})
return result.toTextStreamResponse()templateWorkflow
使用 AI 生成的值填充 Tiptap JSON 模板,并将结果插入编辑器。模板使用特殊属性(_templateSlot, _templateIf, _templateAttributes, _templateFieldMetadata)来标记动态部分。
参数
options(TemplateWorkflowOptions): 配置选项template(Record<string, any>): Tiptap JSON 格式的模板(doc 节点或片段数组)values(TemplateValues): AI 生成且填充模板的值。键名对应模板属性中的值。position?(Range | number): 插入填充模板的位置。默认:整个文档区间。hasFinished?(boolean): 是否已完成流式传输。省略时方法以非流式模式运行。默认:trueworkflowId?(unknown): 此工作流运行的唯一 ID。提供时启用流式模式,方法将在多次调用中跟踪插入区间并逐步替换内容。preserveSlotAttr?(boolean): 是否保留节点上的_templateSlot属性。保留后,可识别 AI 填充的内容,便于后续重新填充模板字段。默认:falsereviewOptions?(ReviewOptions): 控制预览/审核行为
示例
import { experimental_useObject as useObject } from '@ai-sdk/react'
import { getAiToolkit } from '@tiptap-pro/ai-toolkit'
import { z } from 'zod'
const templateSchema = z.object({}).passthrough()
const { submit, isLoading, object } = useObject({
api: '/api/template-workflow',
schema: templateSchema,
})
// 在 useEffect 中流式传输部分结果
useEffect(() => {
if (!editor || !object) return
const toolkit = getAiToolkit(editor)
toolkit.templateWorkflow({
template: templateJson,
values: object as Record<string, unknown>,
position: 'document',
hasFinished: !isLoading,
workflowId,
})
}, [object, workflowId, editor, isLoading])createHtmlTemplate
将 Tiptap JSON 模板转换为带有模板属性的 HTML 字符串。结果 HTML 可以发送到服务器,createTemplateWorkflow 将解析模板键。
由于这是 AI 工具包方法,自动拥有编辑器 schema,无需额外传入,直接传模板即可。
参数
template(Record<string, unknown>): Tiptap JSON 格式的模板(doc 节点或片段数组)
返回值
- 带有小写模板属性(
_templateslot,_templateif,_templateattributes,_templatefieldmetadata)的 HTMLstring
示例
const toolkit = getAiToolkit(editor)
const htmlTemplate = toolkit.createHtmlTemplate(templateJson)TemplateField
一个 Tiptap 扩展,给编辑器 schema 中的所有节点类型添加模板字段属性。注册此扩展后,编辑器 DOM(渲染、解析和 CSS 样式)中即可支持模板字段的使用。
该扩展添加了四个全局属性:
_templateSlot(string | null): 将节点标记为内容占位符。填充模板时,节点将被替换为 AI 生成的 HTML。_templateIf(string | null): 将节点标记为条件包含。当值为false时,节点将从输出中排除。_templateAttributes(TemplateAttributeEntry[] | null): 将模板键映射到特定的节点属性。_templateFieldMetadata(Record<string, unknown> | null): 存储字段出现实例的可选开发者定义元数据。
命令
setTemplateSlot(name: string):在当前选中节点上设置_templateSlot属性。unsetTemplateSlot():移除当前选中节点的_templateSlot属性。setTemplateIf(name: string):在当前选中节点上设置_templateIf属性。unsetTemplateIf():移除当前选中节点的_templateIf属性。setTemplateAttributes(entries: TemplateAttributeEntry[]):在当前选中节点上设置_templateAttributes属性。unsetTemplateAttributes():移除当前选中节点的_templateAttributes属性。
示例
import { TemplateField } from '@tiptap-pro/ai-toolkit'
const editor = new Editor({
extensions: [StarterKit, TemplateField],
})
// 将当前选中节点标记为模板插槽
editor.commands.setTemplateSlot('intro')
// 移除模板插槽
editor.commands.unsetTemplateSlot()getTemplateFieldMatches
从 Tiptap JSON 文档中返回字段名称的所有匹配模板字段出现实例。
搜索涵盖 _templateSlot, _templateIf 和 _templateAttributes。每个匹配项包括节点内容以及存储在该字段出现实例上的可选 _templateFieldMetadata 对象。
参数
options(GetTemplateFieldMatchesOptions): 搜索选项document(JSONContent | JSONContent[]): Tiptap JSON 文档节点或片段数组fieldName(string): 要搜索的字段名称
返回值
TemplateFieldMatch[]fieldName(string): 匹配的字段名称fieldType('slot' | 'condition' | 'attribute'): 匹配的模板字段类型metadata(Record<string, unknown> | null): 该字段出现实例的_templateFieldMetadata对象content(JSONContent[] | null): 匹配节点内容,格式为 Tiptap JSON
示例
import { getTemplateFieldMatches } from '@tiptap-pro/ai-toolkit'
const matches = getTemplateFieldMatches({
document: editor.getJSON(),
fieldName: 'intro',
})
matches.forEach(match => {
console.log(match.fieldType)
console.log(match.metadata)
console.log(match.content)
})