文档AI助手插件

本文介绍WebOffice的文档AI助手插件,包括功能特性和使用方法等。

文档AI助手,是一款融入了阿里巴巴通义大模型技术的智能文档创作辅助工具,它能协助您高效地编辑、修饰和翻译文档,显著提升文档处理的效率与品质。

功能特性

功能分类

功能描述

继续写

支持对所选文本智能续写文档内容,提供使用者创作和编写文案的思路和灵感。

生成摘要

支持对所选文本生成摘要,快速提炼页面内容的核心要点,更快地把握所选内容主旨。

翻译

支持12种语言的翻译功能,可有效满足跨语言文档处理的需求。

帮我润色

通过对文本的语法、拼写、用词、句子结构和整体风格进行优化,提高文本的质量和可读性。

丰富内容

支持对所选内容进行AI扩写,增加其内容的丰富度和深度。

改写语气

支持对所选内容做文案描述改写,支持选择更专业、更轻松、更直白、更自信、更亲切这五种模式。

使用限制

  • 目前仅适用PCWebOffice,不支持移动端H5页面或者小程序端。

开发对接方法

1. 服务端封装接口

文档 AI 助手需要调用 OSS 的 x-oss-process 接口,调用接口前需要先绑定IMM ProjectOSS Bucket。

image

绑定完成后,可以进入文档智能处理选项卡申请配额:

image

服务端需要封装一个接口,用于获取文档AI相关接口的签名URL。如:/file/get_ai_process_url

服务端主要逻辑示例:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.Date;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 填写Endpoint对应的Region信息,例如cn-hangzhou。
        String region = "cn-hangzhou";
        // 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,完整路径中不能包含Bucket名称。
        String objectName = "exampledir/exampleobject.docx";

        // 创建OSSClient实例。
        // 当OSSClient实例不再使用时,调用shutdown方法以释放资源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // 显式声明使用 V4 签名算法
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // 指定签名URL过期时间为10分钟。
            Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
            GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.POST);
            req.setExpiration(expiration);
            req.setContentType("text/plain; charset=UTF-8");
            // 注意Process这里传空字符串
            // 添加子资源参数
            req.addQueryParameter("x-oss-process", null);
            URL signedUrl = ossClient.generatePresignedUrl(req);
            System.out.println(signedUrl);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 填写请求预览的文档完整路径,完整路径中不包含Bucket名称。
key = 'example.docx'


# 生成带签名的URL,并指定过期时间为10分钟。过期时间单位为秒。
# 注意x-oss-process这里传空字符串
url = bucket.sign_url('POST', key, 10 * 60, headers={'Content-Type': 'text/plain; charset=UTF-8'}, params={'x-oss-process': ''})

print(url)
package main

    import (
        "fmt"
        "os"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
    )

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 指定文件所在Bucket的名称,例如examplebucket。
    bucketName := "examplebucket"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
    fmt.Println("Error:", err); os.Exit(-1)
    }
    // 填写请求预览的文档完整路径,完整路径中不包含Bucket名称。
    ossObjectName := "exampledir/exampleobject.docx"
    // 设置样式,样式中包含文档预览参数。
    // 生成带签名的URL,并指定过期时间为600s。
    // 注意Process这里传空字符串
    signedURL, err := bucket.SignURL(ossObjectName, oss.HTTPPost, 600, oss.ContentType("text/plain; charset=UTF-8"), oss.Process(""))
    if err != nil {
    fmt.Println("Error:", err); os.Exit(-1)
    } else {
    fmt.Println(signedURL)
    }
}
const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // yourbucketname填写存储空间名称。
  bucket: 'yourbucketname'
});
// 设置样式,样式中包含文档预览参数。
// 生成带签名的URL,并指定过期时间为10分钟。
const signUrl = clientsignatureUrl(objectKey, {
  method: 'POST',
  subResource: {
    'x-oss-process': '',  // 注意,这里传空字符串
  },
  expires: 60*10, // 单位 秒
  'Content-Type': 'text/plain; charset=UTF-8',
});
console.log("signUrl="+signUrl);

附录:签名涉及的接口包括:

2. 前端JS-Plugins使用

  1. 在对接了文档编辑 JS-SDK 的基础上,再引入script:

<!-- 引入 js-sdk -->
<script src="https://g.alicdn.com/IMM/office-js/1.1.19/aliyun-web-office-sdk.min.js"></script>

<!-- 引入插件 sdk -->
<script src="https://g.alicdn.com/IMM/office-js-plugins/1.3.0/aliyun-web-office-plugins.min.js"><script>

示例中的1.1.19表示JS-SDK的版本号,请根据实际填写,最新版本请参见JS-SDK版本

示例中的1.3.0表示JS-Plugins的版本号,请根据实际填写,最新版本请参见JS-SDK插件版本

  1. 初始化插件

在调用 JS-SDK 初始化方法aliyun.config之后,调用文档AI助手初始化方法:aliyun.initAIPlugin

let ins = aliyun.config({
  ....
})

// 等待 ready 后再调用 aliyun.initAIPlugin
await ins.ready();

// 使用 AI 插件
aliyun.initAIPlugin({
  sdkInstance: ins, // 传入 sdk 实例
  // aiHelperLink: 'https://help.aliyun.com/xxxx', // 面板上AI帮助文档链接
  async onGetAIProcessUrl({ content_type, content_md5 }){
 
    /** 下面获取 x-oss-process url 逻辑,需要调用封装的服务端接口 */
    let opt = {
      content_type,
      // content_md5,
      file_name: "test-object.docx",
    };
    let { ai_process_url } = await $.post("/file/get_ai_process_url", opt);
    
    return {
      ai_process_url, // 必选
      // content_md5, // 可选。 如果不传,则不签名 content_md5 项
    };
  },
  async onFeedback(info){
    // 记录
  }
})

2.1. initAIPlugin 参数说明

字段

类型

必选

说明

sdkInstance

Object

SDK 实例。即 aliyun.config() 返回值。

onGetAIProcessUrl

({content_type: string, content_md5:string })=>Promise<{ai_process_url:string,content_md5?:string}>

获取 x-oss-process 的 URL签名地址的方法。

aiHelperLink

string

面板上AI帮助文档说明链接

onFeedback

(info:FeedbackInfo)=>void

参数 FeedbackInfo

2.2. FeedbackInfo 字段说明

字段

类型

说明

type

string

取值: 'thumb-up', 'thumb-down'

data

object

具体反馈信息

用户使用方式

在文字(word)编辑界面,点击开始工具栏右侧“文档AI助手”或者按快捷键 (windows 使用Alt + /, mac OS使用 Control + /),可以唤醒文档AI助手的菜单,对选中文字或者光标位置的文字进行优化。

image