开始使用 BlockNote AI
本指南将引导你完成为 BlockNote 富文本编辑器添加 AI 功能的步骤。
首先,安装 @blocknote/xl-ai 包:
npm install @blocknote/xl-ai创建模型
BlockNote AI 使用 AI SDK 来标准化集成来自支持的提供商的人工智能(AI)模型。
第一步,你需要在 AI SDK 中注册一个新的模型。例如,针对 Groq 托管的 Llama:
npm install @ai-sdk/groqimport { createGroq } from "@ai-sdk/groq";
const provider = createGroq({
apiKey: "YOUR_GROQ_API_KEY",
});
const model = provider("llama-3.3-70b-versatile");请注意,这种设置是直接在客户端调用提供商,并将你的 API 密钥暴露在客户端。对于生产环境,更常见的做法是由你自己的服务器处理身份验证并代理请求到提供商。请参阅我们的 演示 AI 服务器了解 Node.js 示例,或查阅 AI SDK 最佳实践。
配置编辑器
现在,你可以创建启用 AI 扩展的编辑器了:
import { createBlockNoteEditor } from "@blocknote/core";
import { BlockNoteAIExtension } from "@blocknote/xl-ai";
import { en } from "@blocknote/core/locales";
import { en as aiEn } from "@blocknote/xl-ai/locales";
import { AIExtension } from "@blocknote/xl-ai";
import "@blocknote/xl-ai/style.css"; // 添加 AI 样式表
const editor = createBlockNoteEditor({
dictionary: {
...en,
ai: aiEn, // 添加 AI 扩展的默认翻译
},
extensions: [
AIExtension({
transport: new DefaultChatTransport({
api: `/api/chat`,
}),
}),
],
// ... 其他编辑器选项
});有关 AIExtension 选项的更多信息,请参阅 API 参考。
添加 AI UI 元素
现在,只剩下一步就是自定义编辑器的 UI 元素。
我们希望:
- 在格式工具栏(选中文本时显示)中添加一个 AI 按钮
- 在斜杠菜单(输入
/时显示)中添加一个 AI 选项
我们通过禁用默认的 FormattingToolbar 和 SuggestionMenu 并添加自定义的实现来完成此操作。详见 更改 UI 元素。
<BlockNoteView
editor={editor}
// 我们禁用了部分默认 UI 元素
formattingToolbar={false}
slashMenu={false}
>
{/* 将 AI 命令菜单添加到编辑器 */}
<AIMenuController />
{/* 创建带有 AI 按钮的自定义格式工具栏
(完整示例代码见下方) */}
<FormattingToolbarWithAI />
{/* 创建带有 AI 选项的自定义斜杠菜单
(完整示例代码见下方) */}
<SuggestionMenuWithAI editor={editor} />
</BlockNoteView>后端设置
接下来,我们将设置后端路由来处理转发到你的大型语言模型(LLM)提供商的 AI 请求。
这个示例使用了 Next.js 和 AI SDK 中的基础示例:
import { openai } from "@ai-sdk/openai";
import { convertToModelMessages, streamText } from "ai";
import {
aiDocumentFormats,
injectDocumentStateMessages,
toolDefinitionsToToolSet,
} from "@blocknote/xl-ai/server";
// 允许最长 30 秒的流式响应
export const maxDuration = 30;
export async function POST(req: Request) {
const { messages, toolDefinitions } = await req.json();
const result = streamText({
model: openai("gpt-4.1"), // 参考 https://ai-sdk.dev/docs/foundations/providers-and-models
system: aiDocumentFormats.html.systemPrompt,
messages: convertToModelMessages(injectDocumentStateMessages(messages)),
tools: toolDefinitionsToToolSet(toolDefinitions),
toolChoice: "required",
});
return result.toUIMessageStreamResponse();
}这遵循了 AI SDK 的常规 streamText 模式,但有三个例外:
- BlockNote 文档状态从消息元数据中提取,并通过
injectDocumentStateMessages注入到消息中 - BlockNote 客户端工具定义从请求体中提取,并通过
toolDefinitionsToToolSet传递给 LLM - 系统提示词设置为默认的 BlockNote 系统提示词(
aiDocumentFormats.html.systemPrompt)。你可以覆盖或扩展系统提示词。如果你这样做,请确保你修改后的系统提示词仍然能够向 AI 解释如何修改 BlockNote 文档。
更多关于如何将 BlockNote AI 与你的后端集成的信息,请参阅 后端集成。
完整示例
查看完整示例代码和在线演示。选择一些文本并点击 AI(星星)按钮,或在编辑器的任意位置输入 /ai 以访问 AI 功能。