API接入申请
通过API方式接入生产或者测试,需要邮件申请鉴权AK。 具体邮件模版:
邮件主题: 【申请】易生诸相大模型服务 yuyan-plus API调用申请
邮件正文:
业务部门:请填写您所在的部门或公司
申请管理员:请填写您所在业务方对接人的姓名和邮箱
申请使用模型: yuyan-plus
业务背景:请简单概括该服务您需要应用的业务背景,包括但不限于使用场景、业务预期的应用价值等预计接入时间:请填写您预计需要接入的起始日期
预估用量:填写月调用量上限, QPM(每分钟查询次数), TPM(每分钟处理token数)响应耗时要求(ms):填写RT要求
主送: hujingzhen@corp.netease.com
抄送: fanghaiqun@corp.netease.com,以及业务侧需要知晓的相关领导和成员审批通过后,提供hmac_user, secret, project_id账号信息,即可通过API方式进行调用。
API对话接口-非流式响应
调用方式
以下是调用本接口时应该遵循的规则。
规则 | 描述 |
---|---|
传输方式 | HTTP |
请求方法 | POST |
字符编码 | 统一采用UTF-8编码 |
请求参数格式 | RequestBody,json格式 |
响应格式 | 响应数据采用JSON格式 |
请求环境
环境类型 | HOST | URI | method | 备注 |
---|---|---|---|---|
线上环境 | yeying-gateway.apps-cae.danlu.netease.com | /moa/openapi/api/v2/chat | post |
请求参数
校验参数放在http请求的header中
参数名 | 类型 | 需求 | 说明 |
---|---|---|---|
host | str | 必填 | 访问地址域名 or ip |
date | datetime | 必填 | 参考样例,由签名函数生成 |
digest | str | 必填 | 参考样例,由签名函数生成 |
authorization | str | 必填 | 参考样例,由签名函数生成 |
project_id | str | 必填 | 参考样例, 统一由伏羲产品提供 |
body参数
参数名称 | 类型 | 需求 | 缺省值 | 说明 |
---|---|---|---|---|
uid | str | 必填 | - | 用户唯一标识,用来区分是哪个用户请求,长度上限128个字符 |
model | str | 必填 | - | 使用模型的名字,通用模型传参:yuyan-plus |
messages | list | 必填 | - | 对话聊天历史 + 用户最新对话内容(最后一条记录)(对话聊天历史最大上限不超过101轮) |
max_tokens | int | 可选 | 模型对应的官方默认值 | 回复最多返回多少个token,如果设小了输出会被截断。默认值:128 取值范围: (0, 4096] |
temperature | float | 可选 | 模型对应的官方默认值 | 温度,0.0时为贪心解码(解码每步都输出最置信的结果,回复不存在随机性、质量稳定但缺少多样性);1.0附近可以取得较为平衡的多样性和质量;>1.0时,值越大多样性越强,但质量可能下降,直至输出无法使用。默认值:0.7 取值范围: (0, 1] |
top_p | float | 可选 | 模型对应的官方默认值 | 解码每步上保留累计top_p的token概率。实际保留的token集合会和top_k保留的集合取交集。默认值:0.9 取值范围: (0, 1] |
top_k | int | 可选 | 模型对应的官方默认值 | 解码每步上保留概率值最大的top k个token。默认值:-1(保留所有)取值范围: -1或者(0,10000] |
repetition_penalty | float | 可选 | 模型对应的官方默认值 | 重复惩罚系数:1.0 表示无惩罚;> 1.0会鼓励回复使用未使用过的词;< 1.0会使回复倾向于使用用过的词。默认值:1.08 取值范围: (0, 2] 请参考:https://arxiv.org/pdf/1909.05858.pdf (opens in a new tab) |
messages字段结构如下:
[
{
"role": "system",
"content": "人设描述"
},
{
"role": "user",
"content": "用户对话内容1"
},
{
"role": "assistant",
"content": "角色回复内容1"
},
{
"role": "user",
"content": "用户最新一次会话内容"
}
]
应答参数
参数名称 | 类型 | 需求 | 缺省值 | 说明 |
---|---|---|---|---|
output_text | str | 必填 | - | 聊天返回值 |
用户调用接口样例
非流式请求样例
# -*- coding: utf-8 -*-
import asyncio
import aiohttp
import json
import base64
import datetime
import hashlib
import hmac
# 配置常量
HOST = 'yeying-gateway.apps-cae.danlu.netease.com'
URI = '/moa/openapi/api/v2/chat'
# 线上环境HMAC_USER 和 SECRET 需要向有灵妙启产品申请
HMAC_USER = "xxx"
SECRET = "xxxx"
URL = f'https://{HOST}/{URI}'
MODEL = 'yuyan-plus'
MAX_TOKENS = 128
TEMPERATURE = 0.7
TOP_P = 0.9
TOP_K = -1
REPETITION_PENALTY = 1.0
# 线上环境 PROJECT_ID 需要向有灵妙启产品申请
PROJECT_ID = "xxxx"
def make_hmac_sign(hmac_user, secret, host, uri, body):
date_gmt = datetime.datetime.now(datetime.timezone.utc).strftime('%a, %d %b %Y %H:%M:%S GMT')
body_digest = f"SHA-256={base64.b64encode(hashlib.sha256(json.dumps(body).encode()).digest()).decode('ascii')}"
Method = 'POST'
Protocol = 'HTTP/1.1'
request_line = f'{Method} {uri} {Protocol}'
signing_str = f"date: {date_gmt}\nhost: {host}\ndigest: {body_digest}\n{request_line}"
digest = hmac.new(secret.encode(), signing_str.encode(), hashlib.sha256).digest()
digest_base64 = base64.b64encode(digest).decode("ascii")
authorization = f'hmac username="{hmac_user}", algorithm="{"hmac-sha256"}", headers="date host digest request-line", signature="{digest_base64}"'
return date_gmt, body_digest, authorization
async def post_request(input_text):
"""发送POST请求并打印响应"""
data = {
"uid": "72f0f51e560011ef",
"model": MODEL,
"max_tokens": MAX_TOKENS,
"temperature": TEMPERATURE,
"top_p": TOP_P,
"messages": [
{
"role": "system",
"content": "景芳:24岁,高校图书管理员。宅女,不喜欢户外活动,喜欢看爱情主题的书和电影,也喜欢探讨抽象的概念和问题。追求浪漫、理想主义的文艺女青年,将爱情视作生活的必需品,坚信所有人必须靠爱情才能活下去,但自己还没有恋爱过。偶尔会和朋友去镇上新开的"金科玉律"舞厅喝酒蹦迪。家境尚可但见识不多,对于生活经验和技巧一窍不通。此前的人生一帆风顺因此比较单纯,性格执拗率直,说话直接犀利,情商不高,情绪不稳定。对自己感兴趣的人表达欲很高。会关心爱护自己的朋友但不太会换位思考,只从自己的角度想问题,也会要求身边人按照她认为最佳的方式生活。经常沉浸在自己的世界里,有时候会念念有词。你是在她手下当志愿者的大学生。"
},
{
"role": "user",
"content": "老师,我来帮忙了。"
},
{
"role": "assistant",
"content": "(看书,头也不抬)好。"
},
{
"role": "user",
"content": input_text
}
]
}
date_gmt, body_digest, authorization = make_hmac_sign(HMAC_USER, SECRET, HOST, URI, data)
headers = {
"host": f"{HOST}",
"date": date_gmt,
"digest": body_digest,
"authorization": authorization,
"project_id": PROJECT_ID
}
async with aiohttp.ClientSession() as session:
try:
print(URL, headers, data)
async with session.post(URL, headers=headers, json=data) as response:
if response.status == 200:
result = await response.json()
print(result)
else:
print(f"Request failed with status code: {response.status}, body: {await response.text()}")
except aiohttp.ClientError as e:
print(f"HTTP request failed: {e}")
if __name__ == "__main__":
input_text = "你:老师,你头也不抬,又沉迷看书啦,今天看的是哪本书?"
asyncio.run(post_request(input_text))
聊天返回值
{"output_text":"嗯...《红楼梦》,我之前都没看过呢,这次打算好好读一下。"}
返回码汇总
HttpCode | 错误码 | 错误信息 | 错误消息key | 描述 |
---|---|---|---|---|
200 | 200 | Success | - | 成功 |
400 | 10006 | 请求参数错误 | PARAMS_ERROR | 传参格式或者参数内容有问题 |
401 | 11100 | 未授权 | UNAUTHORIZED | 账号验证失败 |
429 | - | API rate limit exceeded | 达到限流上限 | |
500 | 10103 | 第三方服务请求异常 | INTERNAL_CUSTOM_ERROR | 第三方服务请求异常 |
500 | 10103 | 第三方服务请求超时 | INTERNAL_CUSTOM_ERROR | 第三方服务请求超时,请重试 |
500 | 10103 | 模型请求失败 | INTERNAL_CUSTOM_ERROR | 请求模型服务失败 |
500 | 10103 | 第三方服务请求异常,错误码:{res.status}, 错误信息:{content} | INTERNAL_CUSTOM_ERROR | 1. res.status= 400, 错误原因:输入参数有误,content={BadRequestError} 2. res.status=404, 错误原因:url错误或"model"字段错误,content={NotFoundError} 3. res.status=500, 错误原因:服务内部错误,content={InternalServerError} |
500 | 10003 | 第三方服务请求异常,错误码:{res.status} | INTERNAL_SERVER_ERROR | 1. res.status=101000, 错误原因:系统内部错误,res.desc = "系统繁忙,请稍后再试" 2. res.status=102001, 错误原因:参数错误,res.desc= "参数有误,请检查后重试" 3. res.status=102003,错误原因:模型调用失败,res.desc= "模型服务繁忙,请稍后再试" 4.res.status=102006, 错误原因:无法读取账号池,res.desc= "模型服务繁忙,请稍后再试" 5. res.status=102007, 错误原因:没有可用的模型账号,res.desc= "模型服务繁忙,请稍后再试" 6. res.status=102008, 错误原因:被限流,超过最大重试次数,res.desc="API代理服务繁忙,请稍后再试" 7.res.status=102009,错误原因:模型响应超时,res.desc="模型响应超时,请检查您的prompt长度和maxTokens参数" 8.res.status=102100,错误原因:模型服务不可用,res.desc="模型API过载,请稍后再试" 9.res.status=102101,错误原因:模型流式响应无结果,res.desc="模型未返回任何结果,请检查参数或稍后重试" 10.res.status=102102,错误原因:模型流式响应异常中断,res.desc="模型流式响应异常中断,请调整max_tokens发起重试续传" |
503 | - | {"message": "failure to get a peer from the ring-balancer"} | 网关服务不可用 |