智能文档语气改写功能可以调整文档语气,优化表达,将文档内容改写为更专业、更轻松或者更直白等语气。
前提条件
已绑定IMM Project。通过OSS控制台绑定的具体操作,请参见快速入门。通过API绑定的具体操作,请参见AttachOSSBucket。
注意事项
智能文档语气改写功能仅支持同步处理(x-oss-process处理方式)。
该接口需采用POST方式请求。
不支持匿名访问。
必须拥有IMM处理所需的相关权限。更多信息,请参见权限。
参数说明
操作名称:doc/rephrase
具体参数如下表所示。
参数 | 类型 | 是否必须 | 描述 |
tone | string | 是 | 需要将文档改写的目标语气。取值:
|
content | string | 是 | 需要语气改写的文档内容,需经过URL安全的Base64编码。 说明 最大支持长度为19500字节。 |
format | string | 否 | 指定返回数据的方式,取值:
|
返回参数如下表所示:
参数 | 类型 | 描述 |
RequestId | string | 当次请求的Request ID。 |
Output | struct | 输出的结果内容。 子节点:Text, FinishReason |
Text | string | 本次请求的处理得到的结果。 父节点:Output |
FinishReason | string | 表明当前生成结果的现状。取值:
父节点:Output |
使用REST API
使用REST AP进行智能文档语气改写时需要指定文件名称,但文件名称仅作为占位符使用。使用智能文档语气改写时,只识别content参数作为需要改写语气的文档内容。
使用普通模式进行文档智能语气改写
处理方式
待处理文件:example.doc
待语气改写文本:“四大名著,即四大小说名著,是指《三国演义》、《西游记》、《水浒传》、《红楼梦》4部中国古典章回小说。”
需要改写的语气:straightforward
处理示例
POST /demo.doc?x-oss-process HTTP/1.1
Host: doc-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************
x-oss-process=doc/rephrase,tone_straightforward,content_5Zub5aSn5ZCN6JGX77yM5Y2z5Zub5aSn5bCP6K-05ZCN6JGX77yM5piv5oyH44CK5LiJ5Zu95ryU5LmJ44CL44CB44CK6KW_5ri46K6w44CL44CB44CK5rC05rWS5Lyg44CL44CB44CK57qi5qW85qKm44CLNOmDqOS4reWbveWPpOWFuOeroOWbnuWwj-ivtOOAgg==
返回示例
HTTP/1.1 200 OK
Server: AliyunOSS
Date: Thu, 10 Aug 2023 11:09:00 GMT
Content-Type: application/json;charset=UTF-8
Connection: close
Vary: Accept-Encoding
x-oss-request-id: 65969DD74479D83039EBE00E
x-oss-server-time: 2010
Content-Encoding: gzip
{
"RequestId":"65969DD74479D83039EBE00E",
"Output":{
"Text":"中国的四大名著,也就是四部非常著名的小说,指的是《三国演义》、《西游记》、《水浒传》和《红楼梦》这四部中国古代长篇章回小说。",
"FinishReason":"stop"
}
}
使用SSE进行文档智能语气改写
处理方式
待处理文件:example.doc
待语气改写文本:“四大名著,即四大小说名著,是指《三国演义》、《西游记》、《水浒传》、《红楼梦》4部中国古典章回小说。”
需要改写的语气:straightforward
返回结果方式:event-stream
处理示例
POST /demo.doc?x-oss-process HTTP/1.1
Host: doc-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************
x-oss-process=doc/rephrase,tone_straightforward,type_event-stream,content_5Zub5aSn5ZCN6JGX77yM5Y2z5Zub5aSn5bCP6K-05ZCN6JGX77yM5piv5oyH44CK5LiJ5Zu95ryU5LmJ44CL44CB44CK6KW_5ri46K6w44CL44CB44CK5rC05rWS5Lyg44CL44CB44CK57qi5qW85qKm44CLNOmDqOS4reWbveWPpOWFuOeroOWbnuWwj-ivtOOAgg==
返回示例
id: 0
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的","FinishReason":"null"}}
id: 1
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大","FinishReason":"null"}}
id: 2
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名","FinishReason":"null"}}
id: 3
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名著,也就是四本","FinishReason":"null"}}
id: 4
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名著,也就是四本非常著名的小说,指的是《三国","FinishReason":"null"}}
id: 5
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名著,也就是四本非常著名的小说,指的是《三国演义》、《西游记","FinishReason":"null"}}
id: 6
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名著,也就是四本非常著名的小说,指的是《三国演义》、《西游记》、《水浒传》和","FinishReason":"null"}}
id: 7
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名著,也就是四本非常著名的小说,指的是《三国演义》、《西游记》、《水浒传》和《红楼梦》这四部经典的中国古代","FinishReason":"null"}}
id: 8
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名著,也就是四本非常著名的小说,指的是《三国演义》、《西游记》、《水浒传》和《红楼梦》这四部经典的中国古代长篇小说。","FinishReason":"null"}}
id: 9
event: Result
data: {"RequestId":"65969D744479D83837AEE00E","Output":{"Text":"中国的四大名著,也就是四本非常著名的小说,指的是《三国演义》、《西游记》、《水浒传》和《红楼梦》这四部经典的中国古代长篇小说。","FinishReason":"stop"}}
使用SDK
以下仅列举常见SDK通过处理参数的方式使用智能文档语气改写的代码示例。如需使用其他SDK的智能文档语气改写的代码示例,请参见以下常见SDK自行调整。
Java
要求使用3.17.4及以上版本的Java SDK。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.common.utils.IOUtils;
import com.aliyun.oss.model.GenericResult;
import com.aliyun.oss.model.ProcessObjectRequest;
import java.io.IOException;
import java.util.Formatter;
public class Demo {
public static void main(String[] args) throws ClientException, com.aliyuncs.exceptions.ClientException {
// yourEndpoint填写Bucket所在地域对应的Endpoint。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填写阿里云通用Region ID,例如cn-hangzhou。
String region = "cn-hangzhou";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 指定Bucket名称。
String bucketName = "examplebucket";
// 指定文件名称,作为占位符使用。使用智能文档语气改写时,不读取该文件的内容。
String key ="example.docx";
// 指定待改写语气的文本内容。
String content = "yourTxt";
String encodeContent = BinaryUtil.toBase64String(content.getBytes()).replaceAll("\\+","-")
.replaceAll("/","_").replaceAll("=","");
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
StringBuilder sbStyle = new StringBuilder();
Formatter styleFormatter = new Formatter(sbStyle);
// 构建智能文档语气改写的处理指令。
styleFormatter.format("doc/rephrase,tone_straightforward,content_%s",
encodeContent);
System.out.println(sbStyle.toString());
ProcessObjectRequest request = new ProcessObjectRequest(bucketName, key, sbStyle.toString());
GenericResult processResult = ossClient.processObject(request);
String json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
} 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());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
PHP
要求使用PHP SDK 2.7.0及以上版本。
<?php
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$ak = getenv('OSS_ACCESS_KEY_ID');
$sk = getenv('OSS_ACCESS_KEY_SECRET');
// 指定Bucket名称,例如examplebucket。
$bucket = 'examplebucket';
// 指定文件名称,仅作为占位符使用。使用智能文档语气改写时,不读取该文件的内容。
$objectKey = 'example.docx';
// 指定待改写语气的文本内容。
$txt = "yourTxt";
$base64url = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($txt));
// 构建智能文档语气改写的指令。
$body = sprintf("x-oss-process=doc/rephrase,tone_straightforward,content_%s", $base64url);
$httpVerb = 'POST';
$contentMd5 = base64_encode(md5($body, true));
$contentType = '';
$date = gmdate('D, d M Y H:i:s T');
$stringToSign = $httpVerb . "\n" . $contentMd5 . "\n" . $contentType . "\n" . $date . "\n" . "/{$bucket}/{$objectKey}?x-oss-process";
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $sk, true));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://{$bucket}.oss-cn-hangzhou.aliyuncs.com/{$objectKey}?x-oss-process");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Date: ' . $date,
'Authorization: OSS ' . $ak . ':' . $signature,
'Content-Type: ' . $contentType,
'Content-Md5:' . $contentMd5,
));
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($response === false) {
echo "Error: " . curl_error($ch);
} else {
if ($httpcode == 200) {
var_dump($response);
} else {
echo "Error: HTTP code " . $httpcode;
}
}
Go
要求使用Go SDK 3.0.2及以上版本。
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"io"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
type TextData struct {
RequestId string `json:"RequestId"`
Output struct {
Text string `json:"Text"`
FinishReason string `json:"FinishReason"`
} `json:"Output"`
}
func main() {
// 从环境变量中获取临时访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET、OSS_SESSION_TOKEN。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
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)
}
params := make(map[string]interface{})
params["x-oss-process"] = nil
// 指定待改写语气的文本内容。
txt := "yourTxt"
// 构建智能文档语气改写的处理指令。
data := fmt.Sprintf("x-oss-process=doc/rephrase,tone_straightforward,content_%v", base64.URLEncoding.EncodeToString([]byte(txt)))
// example.docx是Bucket中的某个文件,作为占位符使用。使用智能文档语气改写时,不读取该文件的内容。
response, err := bucket.Do("POST", "example.docx", params, nil, strings.NewReader(data), nil)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer response.Body.Close()
jsonData, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
var text TextData
err = json.Unmarshal(jsonData, &text)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("RequestId:%v\n", text.RequestId)
fmt.Printf("Text:%v\n", text.Output.Text)
fmt.Printf("FinishReason:%v\n", text.Output.FinishReason)
}