古诗创作
更新时间:2022-05-20
接口说明
古诗创作:古诗创作接口基于文心ERNIE 3.0 Zeus大模型,用户按规定的prompt模板输入上文,接口自动生成不同长度的下文。
温馨提示
每个账户每日免费请求ERNIE 3.0 Zeus API服务的上限为200条输入,免费请求额度共2000条输入。如果您有更多请求需求,请跟我们联系:wenxin-younger@baidu.com
接口要求
内容 | 说明 |
---|---|
传输方式 | https (为提高安全性,强烈推荐https) |
请求地址 | https://wenxin.baidu.com/younger/portal/api/rest/1.0/ernie/3.0/zeus |
字符编码 | UTF-8 |
响应格式 | 统一采用JSON格式 |
开发语言 | 任意,只要可以向服务发起HTTP请求的均可 |
适用范围 | 任意操作系统,但因不支持跨域不适用于浏览器,请在后端调用接口 |
请求行 | POST |
请求QPS限制 | 2 |
平均响应时间 | 生成512需要16.3s,生成256需要8.1s,生成128需要4.1s |
接口调用流程
- 将请求参数放在Http Request Body中,以POST表单的形式提交,详见下方 请求参数 。
- 向服务器端发送Http请求后,接收服务器端的返回结果。
请求参数
- 在调用业务接口时,配置以下参数。
- header 信息
参数 | 值 |
---|---|
Content-Type | application/x-www-form-urlencoded |
- 参数
参数名 | 类型 | 是否必传 | 描述 |
---|---|---|---|
access_token | string | 是 | 参考 API鉴权 |
apikey | string | 是 | 文心官网获取 |
text | string | 是 | 输入内容,长度不超过1000 |
seq_len | int | 是 | 输出内容最大长度,长度不超过1000 |
task_prompt | string | 否 | 任务类型的模板 |
dataset_prompt | string | 否 | 数据集类型的模板 , 古诗创作接口的dataset_prompt为poetry |
topk | int | 否 | topk采样,取值>1,默认为10。每步的生成的结果从topk的概率值分布中采样。其中topk=1表示贪婪采样,每次生成结果固定。 |
temperature | float | 否 | 温度系数,取值>0.0,默认为1.0。更大的温度系数表示模型生成的多样性更强。 |
penalty_score | float | 否 | 重复惩罚。取值>=1.0,默认为1.0。通过对已生成的token增加惩罚,减少重复生成的现象。值越大表示惩罚越大。 |
penalty_text | string | 否 | 惩罚文本,默认为空。模型无法生成该字符串中的token。通过设置该值,可以减少某些冗余与异常字符的生成。 |
choice_text | string | 否 | 候选文本,默认为空。模型只能生成该字符串中的token的组合。通过设置该值,可以对某些抽取式任务进行定向调优。 |
stop_token | string | 否 | 提前结束符,默认为空。预测结果解析时使用的结束字符,碰到对应字符则直接截断并返回。可以通过设置该值,过滤掉few-shot等场景下模型重复的cases。 |
is_unidirectional | int | 否 | 单双向控制开关,取值0或者1,默认为0。0表示模型为双向生成,1表示模型为单向生成。建议续写与few-shot等通用场景建议采用单向生成方式,而完型填空等任务相关场景建议采用双向生成方式。 |
min_dec_len | int | 否 | 最小生成长度,取值>=1,默认为1。开启后会屏蔽掉END结束符号,让模型生成至指定的最小长度。 |
min_dec_penalty_text | string | 否 | 默认为空,与最小生成长度搭配使用,可以在min_dec_len步前不让模型生成该字符串中的tokens。 |
古诗创作参数配置样例:
'access_token': '24.9991a77ac60c6e969e176b776f74b09e.86400000.1653006451543.499f8f33b6821ebbf9ba1fbea525d6ae-6',
'text': '古诗续写:小小黄花尔许愁。楚事悠悠。',
'seq_len': 64,
'task_prompt': '',
'dataset_prompt': 'poetry', ## 古诗创作的数据集模板取值是poetry
'topk': 10,
'stop_token': '',
'is_unidirectional': 1
返回参数
参数名 | 类型 | 描述 |
---|---|---|
code | int | 错误码 |
msg | string | 错误信息 |
data | object | 结果对象 |
返回参数样例:
{
"code": 0,
"msg": "success",
"data":
{
"result": "小小黄花。尔许愁。作品出自《全唐诗》。小小黄花尔许愁作者:王昌龄 一枝秾艳楚江秋,骚客年年为尔羞。何事美人心不见,朱弦",
"is_truncate": true,
"origin_result": ["小", "小", "黄", "花", "。", "[<S>]", "尔", "许", "愁", "。", "[<S>]", "作", "品", "出", "自", "《", "全", "唐", "诗", "》", "。", "[<S>]", "小", "小", "黄", "花", "尔", "许", "愁", "作", "者", ":", "王", "昌", "龄", "[<S>]", "一", "枝", "秾", "艳", "楚", "江", "秋", ",", "骚", "客", "年", "年", "为", "尔", "羞", "。", "[<S>]", "何", "事", "美", "人", "心", "不", "见", ",", "朱", "弦", "断"]
}
}
错误码
错误码 | 错误描述 |
---|---|
4001 | 请求参数格式错误,不是标准的JSON格式 |
4002 | 请求参数格式错误,请检查必传参数是否齐全,参数类型等 |
4003 | text长度超过模型要求的最大值 |
4004 | API服务内部错误,可能引起原因有请求超时、模型推理错误等 |
任务模板
通过使用如下模板,可以更好地引导大模型完成特定任务。
- 诗词题目:{{title}}。作者:{{author}}。诗词内容:
- 诗词题目:{{title}}。诗词内容:
- 古诗续写:{{content}}
代码示例
import requests
url = "https://wenxin.baidu.com/younger/portal/api/rest/1.0/ernie/3.0/zeus"
payload={
'access_token': '24.9991a77ac60c6e969e176b776f74b09e.86400000.1653006451543.499f8f33b6821ebbf9ba1fbea525d6ae-6',
'text': '古诗续写:小小黄花尔许愁。楚事悠悠。',
'seq_len': 64,
'task_prompt': '',
'dataset_prompt': 'poetry',
'topk': 10,
'stop_token': '',
'is_unidirectional': 1
}
response = requests.request("POST", url, data=payload)
print(response.text)
curl -i -k 'https://wenxin.baidu.com/younger/portal/api/rest/1.0/ernie/3.0/zeus?access_token=24.9991a77ac60c6e969e176b776f74b09e.86400000.1653006451543.499f8f33b6821ebbf9ba1fbea525d6ae-6' --data-urlencode 'text=古诗续写:小小黄花尔许愁。楚事悠悠。' -d 'seq_len=64&is_unidirectional=1&topk=10&dataset_prompt=poetry'
package main
import (
"fmt"
"bytes"
"mime/multipart"
"net/http"
"io/ioutil"
)
func main() {
url := "https://wenxin.baidu.com/younger/portal/api/rest/1.0/ernie/3.0/zeus"
method := "POST"
payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload)
_ = writer.WriteField("access_token", '24.9991a77ac60c6e969e176b776f74b09e.86400000.1653006451543.499f8f33b6821ebbf9ba1fbea525d6ae-6')
_ = writer.WriteField("text", "古诗续写:小小黄花尔许愁。楚事悠悠。")
_ = writer.WriteField("seq_len", "64")
_ = writer.WriteField("dataset_prompt", "poetry")
_ = writer.WriteField("task_prompt", "")
_ = writer.WriteField("topk", "10")
_ = writer.WriteField("is_unidirectional", "1")
_ = writer.WriteField("stop_token", "")
err := writer.Close()
if err != nil {
fmt.Println(err)
return
}
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Set("Content-Type", writer.FormDataContentType())
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
```ni