资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

文本创作-调用API文档

本文档主要说明定制化模型发布后获得的API如何使用,如有疑问可以通过以下方式联系我们:

在百度云控制台内提交工单

进入EasyDL社区交流 ,与其他开发者进行互动

加入EasyDL官方QQ群(群号:868826008)联系群管

接口描述

基于自定义训练出的创作模型,实现基于输入文本内容的个性化创作。模型训练完毕后发布可获得定制API。

请求说明

HTTP 方法:POST

请求URL: 请首先在定制化训练平台进行自定义模型训练,完成训练后可在服务列表中查看并获取url。

URL参数:

参数
access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Type application/json

注意:如果出现336001的错误码很可能是因为请求方式错误,定制化文本分类服务以json方式请求。

Body请求示例:

{
    "text": "<UTF-8编码文本>",
    "max_gen_len": "64"
}

Body中放置请求参数,参数详情请看模型请求参数。

模型请求参数:

参数 是否必选 类型 可选值范围 说明
text string 512token以内 输入文本,超过512个token将被截断
max_gen_len int 0-128token 生成时返回字符数,可选0-128,可按需设置,通常生成字符数越少,用户等待时间越少。默认取值为:64

请求示例:

# coding=utf-8

import sys
import json

# 保证兼容python2以及python3
IS_PY3 = sys.version_info.major == 3
if IS_PY3:
    from urllib.request import urlopen
    from urllib.request import Request
    from urllib.error import URLError
    from urllib.parse import urlencode
    from urllib.parse import quote_plus
else:
    import urllib2
    from urllib import quote_plus
    from urllib2 import urlopen
    from urllib2 import Request
    from urllib2 import URLError
    from urllib import urlencode

    reload(sys)
    sys.setdefaultencoding('utf8')

# 防止https证书校验不正确
import ssl

ssl._create_default_https_context = ssl._create_unverified_context

# 百度云控制台获取到ak,sk以及
# EasyDL官网获取到URL

# ak
API_KEY = 'kQWXQ8oe5G5T7ATzXXXXXXXX'

# sk
SECRET_KEY = 'Y30GtHsKzyH6fUUsQl32GvoBXXXXXXXX'

# url
EASYDL_TEXT_CLASSIFY_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/text_gen/lirics_gen"

"""  TOKEN start """
TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'
"""
    获取token
"""


def fetch_token():
    params = {'grant_type': 'client_credentials',
              'client_id': API_KEY,
              'client_secret': SECRET_KEY}
    post_data = urlencode(params)
    if (IS_PY3):
        post_data = post_data.encode('utf-8')
    req = Request(TOKEN_URL, post_data)
    try:
        f = urlopen(req, timeout=5)
        result_str = f.read()
        print('success')
    except URLError as err:
        print(err)
    if (IS_PY3):
        result_str = result_str.decode()

    result = json.loads(result_str)

    if ('access_token' in result.keys() and 'scope' in result.keys()):
        if not 'brain_all_scope' in result['scope'].split(' '):
            print('please ensure has check the  ability')
            exit()
        return result['access_token']
    else:
        print('please overwrite the correct API_KEY and SECRET_KEY')
        exit()


"""
    调用远程服务
"""


def request(url, data):
    if IS_PY3:
        req = Request(url, json.dumps(data).encode('utf-8'))
    else:
        req = Request(url, json.dumps(data))

    has_error = False
    try:
        f = urlopen(req)
        result_str = f.read()
        if (IS_PY3):
            result_str = result_str.decode()
        return result_str
    except URLError as err:
        print(err)


if __name__ == '__main__':

    # 获取access token
    token = fetch_token()

    # 拼接url
    url = EASYDL_TEXT_CLASSIFY_URL + "?access_token=" + token

    text = "歌名:晴天;歌词:"

    # 请求接口
    # 测试
    response = request(url,
                       {
                           'text': text,
                           'max_gen_len': 128
                       })

    result_json = json.loads(response)['result']['content']

    print('u{0}'.format(result_json))

模型返回参数:

参数 是否必选 类型 可选值范围 说明
log_id number - 唯一的log id,用于问题定位
+content string - 返回的生成结果
+is_truncate boolean 0或1 返回的生成结果是否被截断,1为被截断,0为没被截断,与设置的max_gen_len的token数有关

示例样本1:

以歌词创作场景为例,模型输入(入参)为歌词名称,模型输出(出参)为歌词内容,假设训练数据中,输入文本的数据模板的为:“歌名:xxx;歌词:”,输出文本的数据模板为:“xxxx”(xxxx代表生成歌词内容)。

当用户输入:“夏日的海边”

  • 入参text字段为:“歌名:夏日的海边;歌词:”
  • 出参content为:“故事的小黄花 从出生那年就飘着 童年的荡秋千”

其中,“歌名:”作为样本的前缀,需要固定添加在每一次的请求中,不固定的前缀,将影响模型效果;“歌词:”作为样本的后缀,需要固定添加在每一次的请求中,不固定的后缀,将影响模型效果;

示例输入:

{
	"text": "歌名:夏日的海边;歌词:",
	"max_gen_len": "64"
}

示例返回:

{
	"log_id": "123456",
	"result": [{
		"content": "故事的小黄花 从出生那年就飘着 童年的荡秋千",
		"is_truncate": 0
	}]
}

示例样本2:

以旅行问答场景为例:

  • 用户输入:“十月去青海应该带什么?”,则入参text字段为:“问题是:十月去青海应该带什么?答案是:”
  • 输出:“带个男朋友”,则content为”带个男朋友“

其中,“问题是:”是前缀、“答案是:”是后缀,前缀避免改为“问题:”或“题目是:”等相关词组,后缀避免改为“答案:”或“回答:”等相关词组;前后缀都需要固定添加在每一次的请求中,否则将影响模型效果。

示例输入:

{
	"text": "问题是:十月去青海应该带什么?答案是:",
	"max_gen_len": "64"
}

示例返回:

{
	"log_id": "123456",
	"result": [{
		"content": "带个男朋友",
		"is_truncate": 0
	}]
}

在线调试

EasyDL零基础开发平台提供了 示例代码中心(API调试平台)-示例代码 ,用于帮助开发者在线调试接口,查看在线调用的请求内容和返回结果、复制和下载示例代码等功能,简单易用。

错误码

若请求错误,服务器将返回的JSON文本包含以下参数:

error_code:错误码。

error_msg:错误描述信息,帮助理解和解决发生的错误。

例如Access Token失效返回:

{
  "error_code": 110,
  "error_msg": "Access token invalid or no longer valid"
}

需要重新获取新的Access Token再次请求即可。

错误码 错误信息 描述
1 Unknown error 服务器内部错误,请再次请求, 如果持续出现此类错误,请在百度云控制台内提交工单反馈。
2 Service temporarily unavailable 服务暂不可用,请再次请求, 如果持续出现此类错误,请在百度云控制台内提交工单反馈。
3 Unsupported openapi method 调用的API不存在,请检查后重新尝试
4 Open api request limit reached 集群超限额
6 No permission to access data 无权限访问该用户数据
13 Get service token failed 获取token失败
14 IAM Certification failed IAM鉴权失败
15 app not exists or create failed 应用不存在或者创建失败
17 Open api daily request limit reached 每天请求量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请在百度云控制台内提交工单反馈
18 Open api qps request limit reached QPS超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请在百度云控制台内提交工单反馈
19 Open api total request limit reached 请求总量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请在百度云控制台内提交工单反馈
100 Invalid parameter 无效的access_token参数,请检查后重新尝试
110 Access token invalid or no longer valid access_token无效
111 Access token expired access token过期
336000 Internal error 服务器内部错误,请再次请求, 如果持续出现此类错误,请在百度云控制台内提交工单反馈
336001 Invalid Argument 入参格式有误,比如缺少必要参数、图片base64编码错误等等,可检查下图片编码、代码格式是否有误。有疑问请在百度云控制台内提交工单反馈
336002 JSON不合法 入参格式或调用方式有误,比如缺少必要参数或代码格式有误。有疑问请在百度云控制台内提交工单反馈
336003 Base64解码失败 文本格式有误或base64编码有误,请根据接口文档检查格式,base64编码请求时注意要去掉头部。有疑问请在百度云控制台内提交工单反馈
336004 输入文件大小不合法 文本大小不合法,目前支持文本文件类型为支持txt,文本文件大小限制长度最大512 UTF-8字符。
336005 解码失败 文本编码错误(不是utf-8),目前支持文本文件类型为支持txt。如果遇到请重试,如反复失败,请在百度云控制台内提交工单反馈
336006 缺失必要参数 未上传文本文件
336100 model temporarily unavailable 遇到该错误码请等待1分钟后再次请求,可恢复正常,若反复重试依然报错或有疑问请在百度云控制台内提交工单反馈
上一篇
模型发布
下一篇
EasyDL 语音使用说明