文本创作-调用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分钟后再次请求,可恢复正常,若反复重试依然报错或有疑问请在百度云控制台内提交工单反馈 |