开发文档配置项AI 文档助手配置

AI 文档助手

用于配置 AI 文档助手的相关信息,更多信息见AI 文档助手v3.0.0 新增

注意:assistant 配置在 v6.0.0 版本中已被更改为 ai.assistant,同时,onAssistant 方法改为 ai.assistant.onMessage,请及时调整。

在 Umo Editor Next 版本中,我们提供了更为强大的 AI 聊天助手功能,详见Umo Editor Next 配置项

默认配置

{
  ai:{
    assistant: {
      enabled: false,
      maxlength: 100,
      commands: [
        {
          label: { en_US: 'Continuation', zh_CN: '续写', ru_RU: 'Продолжение' },
          value: { en_US: 'Continuation', zh_CN: '续写', ru_RU: 'Продолжение' },
        },
        {
          label: { en_US: 'Rewrite', zh_CN: '重写', ru_RU: 'Переписать' },
          value: { en_US: 'Rewrite', zh_CN: '重写', ru_RU: 'Переписать' },
        },
        {
          label: { en_US: 'Abbreviation', zh_CN: '缩写', ru_RU: 'Аббревиатура' },
          value: { en_US: 'Abbreviation', zh_CN: '缩写', ru_RU: 'Аббревиатура' },
        },
        {
          label: { en_US: 'Expansion', zh_CN: '扩写', ru_RU: 'Расширение' },
          value: { en_US: 'Expansion', zh_CN: '扩写', ru_RU: 'Расширение' },
        },
        {
          label: { en_US: 'Polish', zh_CN: '润色', ru_RU: 'Польский' },
          value: { en_US: 'Polish', zh_CN: '润色', ru_RU: 'Польский' },
        },
        {
          label: { en_US: 'Proofread', zh_CN: '校阅', ru_RU: 'Корректура' },
          value: { en_US: 'Proofread', zh_CN: '校阅', ru_RU: 'Корректура' },
        },
        {
          label: { en_US: 'Translate', zh_CN: '翻译', ru_RU: 'Перевести' },
          value: { en_US: 'Translate to chinese', zh_CN: '翻译成英文', ru_RU: 'Перевести на китайский' },
          autoSend: false,
        },
      ],
      async onMessage() {
        return await new Promise((_, reject) => {
          reject(
            new Error(
              'Key "ai": Key "assistant": Key "onMessage": Please set the onMessage method',
            ),
          )
        })
      },
    },
  },
}

配置项说明

ai.assistant.enabled

说明:是否开启 AI 文档助手功能。

类型Boolean

默认值false

ai.assistant.maxlength

说明:AI 文档助手最大运行输入的命令长度。

类型Number

默认值100

ai.assistant.commands

说明:AI 文档助手面板中常用指令配置。

类型Array

默认值

[
  {
    label: { en_US: 'Continuation', zh_CN: '续写', ru_RU: 'Продолжение' },
    value: { en_US: 'Continuation', zh_CN: '续写', ru_RU: 'Продолжение' },
  },
  {
    label: { en_US: 'Rewrite', zh_CN: '重写', ru_RU: 'Переписать' },
    value: { en_US: 'Rewrite', zh_CN: '重写', ru_RU: 'Переписать' },
  },
  {
    label: { en_US: 'Abbreviation', zh_CN: '缩写', ru_RU: 'Аббревиатура' },
    value: { en_US: 'Abbreviation', zh_CN: '缩写', ru_RU: 'Аббревиатура' },
  },
  {
    label: { en_US: 'Expansion', zh_CN: '扩写', ru_RU: 'Расширение' },
    value: { en_US: 'Expansion', zh_CN: '扩写', ru_RU: 'Расширение' },
  },
  {
    label: { en_US: 'Polish', zh_CN: '润色', ru_RU: 'Польский' },
    value: { en_US: 'Polish', zh_CN: '润色', ru_RU: 'Польский' },
  },
  {
    label: { en_US: 'Proofread', zh_CN: '校阅', ru_RU: 'Корректура' },
    value: { en_US: 'Proofread', zh_CN: '校阅', ru_RU: 'Корректура' },
  },
  {
    label: { en_US: 'Translate', zh_CN: '翻译', ru_RU: 'Перевести' },
    value: { en_US: 'Translate to chinese', zh_CN: '翻译成英文', ru_RU: 'Перевести на китайский' },
    autoSend: false,
  },
]

配置项

  • item.label: StringObject,AI 文档助手面板中显示的文案。
  • item.value: StringObject,发送给 onMessage 的实际指令。
  • item.autoSend: Boolean,在用户选择该指令时,是否自动向 onMessage 发送指令,默认为 true,设为 false 时,用户可以修改该指令后,手动点击按钮发送指令。

ai.assistant.onMessage

说明:配置 AI 文档助手返回数据的方法,更多信息见AI 文档助手

类型AsyncFunctionPromise

参数

  • payload:AI 文档助手的请求参数,可以将这些信息传递给 AI 模型。
    1. payload.langString,当前界面语言。
    2. payload.inputString,用户选择的文本内容。
    3. payload.commandString,用户输入的指令。
    4. payload.outputString,AI 文档助手希望得到的内容格式,可能的值:rich-texttext
  • content:当前文档内容。可以将文档内容传递给 AI 模型,但是注意,过长的文档可能会导致 AI 模型无法处理。如果使用的是商业 AI 模型,过长的 Token 输入,也会导致计费也会剧增。
    1. content.textString,当前文档的文本内容。
    2. content.htmlString,当前文档的 HTML 内容。
    3. content.jsonObject,当前文档的 JSON 内容。

示例

以下示例以调用 OpenAI 模型为例,演示如何配置 onMessage 方法,将文档内容传递给 AI 模型,处理并返回 AI 模型的返回结果。

OpenAI 的接口规范已成为事实上的行业规范,实际上,很多 AI 模型都支持通过OpenAI SDK调用。

import { useUmoEditor } from '@umoteam/editor'
import OpenAI from 'openai'
 
const onMessage = async (payload, content) => {
  console.log(payload, content)
  const { command, lang, input, output } = payload
  const client = new OpenAI({
    baseURL: '...',
    apiKey: '...',
    dangerouslyAllowBrowser: true, // 允许在浏览器中使用 OpenAI SDK
  })
  const langs = {
    'en-US': '英文',
    'zh-CN': '中文',
  }
  const options = {
    stream: true,
    model: '...',
    messages: [
      {
        role: 'system',
        content: `你是一个文档助手,根据用户输入的文本或者HTML内容,以及对应操作指令,生成符合要求的文档内容。要求如下:1.如果指令不是要求翻译内容,请使用${langs[lang]}返回,否则按用户要求翻译的语言返回;2.返回${output === 'rich-text' ? '富文本(HTML)' : '纯文本(剔除内容中的HTML标记)'}格式;3.如果用户输入的指令你不能理解,在返回的内容前加上“[ERROR]: ”,4.除此之外不返回任何其他多余的内容。`,
      },
      {
        role: 'user',
        content: `对以下内容进行:【${command}】操作。\n${input}`,
      },
    ],
  }
  const completion = await client.chat.completions.create(options)
  const stream = new ReadableStream({
    async start(controller) {
      for await (const chunk of completion) {
        controller.enqueue(chunk.choices[0]?.delta?.content || '')
      }
      controller.close()
    },
  })
  return stream
}
 
const options = {
  ai: {
    assistant: {
      onMessage,
    },
  },
};
 
app.use(useUmoEditor, options)
🚫

注意: 以上代码仅作为示例使用,实际应用中,不应将 apiKey 等敏感信息暴露在客户端,应通过后端服务调用 AI 模型,并将 apiKey 放在后端服务中,以保护敏感信息。以上代码逻辑也应尽可能的放在后端服务中,以减少请求负载。

返回值StringReadableStream