文本创作-调用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请求示例:
1{
2 "text": "<UTF-8编码文本>",
3 "max_gen_len": "64"
4}
Body中放置请求参数,参数详情请看模型请求参数。
模型请求参数:
参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
text | 是 | string | 512token以内 | 输入文本,超过512个token将被截断 |
max_gen_len | 否 | int | 0-128token | 生成时返回字符数,可选0-128,可按需设置,通常生成字符数越少,用户等待时间越少。默认取值为:64 |
请求示例:
1# coding=utf-8
2
3import sys
4import json
5
6# 保证兼容python2以及python3
7IS_PY3 = sys.version_info.major == 3
8if IS_PY3:
9 from urllib.request import urlopen
10 from urllib.request import Request
11 from urllib.error import URLError
12 from urllib.parse import urlencode
13 from urllib.parse import quote_plus
14else:
15 import urllib2
16 from urllib import quote_plus
17 from urllib2 import urlopen
18 from urllib2 import Request
19 from urllib2 import URLError
20 from urllib import urlencode
21
22 reload(sys)
23 sys.setdefaultencoding('utf8')
24
25# 防止https证书校验不正确
26import ssl
27
28ssl._create_default_https_context = ssl._create_unverified_context
29
30# 百度云控制台获取到ak,sk以及
31# EasyDL官网获取到URL
32
33# ak
34API_KEY = 'kQWXQ8oe5G5T7ATzXXXXXXXX'
35
36# sk
37SECRET_KEY = 'Y30GtHsKzyH6fUUsQl32GvoBXXXXXXXX'
38
39# url
40EASYDL_TEXT_CLASSIFY_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/text_gen/lirics_gen"
41
42""" TOKEN start """
43TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'
44"""
45 获取token
46"""
47
48
49def fetch_token():
50 params = {'grant_type': 'client_credentials',
51 'client_id': API_KEY,
52 'client_secret': SECRET_KEY}
53 post_data = urlencode(params)
54 if (IS_PY3):
55 post_data = post_data.encode('utf-8')
56 req = Request(TOKEN_URL, post_data)
57 try:
58 f = urlopen(req, timeout=5)
59 result_str = f.read()
60 print('success')
61 except URLError as err:
62 print(err)
63 if (IS_PY3):
64 result_str = result_str.decode()
65
66 result = json.loads(result_str)
67
68 if ('access_token' in result.keys() and 'scope' in result.keys()):
69 if not 'brain_all_scope' in result['scope'].split(' '):
70 print('please ensure has check the ability')
71 exit()
72 return result['access_token']
73 else:
74 print('please overwrite the correct API_KEY and SECRET_KEY')
75 exit()
76
77
78"""
79 调用远程服务
80"""
81
82
83def request(url, data):
84 if IS_PY3:
85 req = Request(url, json.dumps(data).encode('utf-8'))
86 else:
87 req = Request(url, json.dumps(data))
88
89 has_error = False
90 try:
91 f = urlopen(req)
92 result_str = f.read()
93 if (IS_PY3):
94 result_str = result_str.decode()
95 return result_str
96 except URLError as err:
97 print(err)
98
99
100if __name__ == '__main__':
101
102 # 获取access token
103 token = fetch_token()
104
105 # 拼接url
106 url = EASYDL_TEXT_CLASSIFY_URL + "?access_token=" + token
107
108 text = "歌名:晴天;歌词:"
109
110 # 请求接口
111 # 测试
112 response = request(url,
113 {
114 'text': text,
115 'max_gen_len': 128
116 })
117
118 result_json = json.loads(response)['result']['content']
119
120 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为:“故事的小黄花 从出生那年就飘着 童年的荡秋千”
其中,“歌名:”作为样本的前缀,需要固定添加在每一次的请求中,不固定的前缀,将影响模型效果;“歌词:”作为样本的后缀,需要固定添加在每一次的请求中,不固定的后缀,将影响模型效果;
示例输入:
1{
2 "text": "歌名:夏日的海边;歌词:",
3 "max_gen_len": "64"
4}
示例返回:
1{
2 "log_id": "123456",
3 "result": [{
4 "content": "故事的小黄花 从出生那年就飘着 童年的荡秋千",
5 "is_truncate": 0
6 }]
7}
示例样本2:
以旅行问答场景为例:
- 用户输入:“十月去青海应该带什么?”,则入参text字段为:“问题是:十月去青海应该带什么?答案是:”
- 输出:“带个男朋友”,则content为”带个男朋友“
其中,“问题是:”是前缀、“答案是:”是后缀,前缀避免改为“问题:”或“题目是:”等相关词组,后缀避免改为“答案:”或“回答:”等相关词组;前后缀都需要固定添加在每一次的请求中,否则将影响模型效果。
示例输入:
1{
2 "text": "问题是:十月去青海应该带什么?答案是:",
3 "max_gen_len": "64"
4}
示例返回:
1{
2 "log_id": "123456",
3 "result": [{
4 "content": "带个男朋友",
5 "is_truncate": 0
6 }]
7}
在线调试
EasyDL零基础开发平台提供了 示例代码中心(API调试平台)-示例代码 ,用于帮助开发者在线调试接口,查看在线调用的请求内容和返回结果、复制和下载示例代码等功能,简单易用。
错误码
若请求错误,服务器将返回的JSON文本包含以下参数:
error_code:错误码。
error_msg:错误描述信息,帮助理解和解决发生的错误。
例如Access Token失效返回:
1{
2 "error_code": 110,
3 "error_msg": "Access token invalid or no longer valid"
4}
需要重新获取新的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分钟后再次请求,可恢复正常,若反复重试依然报错或有疑问请在百度云控制台内提交工单反馈 |