Moa API

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格式

请求环境

环境类型HOSTURImethod备注
线上环境yeying-gateway.apps-cae.danlu.netease.com/moa/openapi/api/v2/chatpost

请求参数

校验参数放在http请求的header中

参数名类型需求说明
hoststr必填访问地址域名 or ip
datedatetime必填参考样例,由签名函数生成
digeststr必填参考样例,由签名函数生成
authorizationstr必填参考样例,由签名函数生成
project_idstr必填参考样例, 统一由伏羲产品提供

body参数

参数名称类型需求缺省值说明
uidstr必填-用户唯一标识,用来区分是哪个用户请求,长度上限128个字符
modelstr必填-使用模型的名字,通用模型传参:yuyan-plus
messageslist必填-对话聊天历史 + 用户最新对话内容(最后一条记录)(对话聊天历史最大上限不超过101轮)
max_tokensint可选模型对应的官方默认值回复最多返回多少个token,如果设小了输出会被截断。默认值:128 取值范围: (0, 4096]
temperaturefloat可选模型对应的官方默认值温度,0.0时为贪心解码(解码每步都输出最置信的结果,回复不存在随机性、质量稳定但缺少多样性);1.0附近可以取得较为平衡的多样性和质量;>1.0时,值越大多样性越强,但质量可能下降,直至输出无法使用。默认值:0.7 取值范围: (0, 1]
top_pfloat可选模型对应的官方默认值解码每步上保留累计top_p的token概率。实际保留的token集合会和top_k保留的集合取交集。默认值:0.9 取值范围: (0, 1]
top_kint可选模型对应的官方默认值解码每步上保留概率值最大的top k个token。默认值:-1(保留所有)取值范围: -1或者(0,10000]
repetition_penaltyfloat可选模型对应的官方默认值重复惩罚系数: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_textstr必填-聊天返回值

用户调用接口样例

非流式请求样例

# -*- 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描述
200200Success-成功
40010006请求参数错误PARAMS_ERROR传参格式或者参数内容有问题
40111100未授权UNAUTHORIZED账号验证失败
429-API rate limit exceeded达到限流上限
50010103第三方服务请求异常INTERNAL_CUSTOM_ERROR第三方服务请求异常
50010103第三方服务请求超时INTERNAL_CUSTOM_ERROR第三方服务请求超时,请重试
50010103模型请求失败INTERNAL_CUSTOM_ERROR请求模型服务失败
50010103第三方服务请求异常,错误码:{res.status}, 错误信息:{content}INTERNAL_CUSTOM_ERROR1. res.status= 400, 错误原因:输入参数有误,content={BadRequestError}
2. res.status=404, 错误原因:url错误或"model"字段错误,content={NotFoundError}
3. res.status=500, 错误原因:服务内部错误,content={InternalServerError}
50010003第三方服务请求异常,错误码:{res.status}INTERNAL_SERVER_ERROR1. 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"}网关服务不可用