腾讯混元大模型(待续)
腾讯混元大模型(Tencent Hunyuan)是由腾讯研发的大语言模型,具备强大的中文创作能力,复杂语境下的逻辑推理能力,以及可靠的任务执行能力。
请求说明
类型 | 说明 |
请求协议 | HTTPS 协议 |
请求方式 | POST |
请求地址 |
|
接口鉴权 | 签名鉴权机制 |
并发限制 | 默认单账号限制并发连接数为1路 |
Header参数
名称 | 值 |
Content-Type | application/json |
Authorization | 通过入参以及 SecretKey 加密获取,参考 签名生成 |
输入参数
参数名称 | 必填 | 类型 | 描述 |
app_id | 是 | Integer | 腾讯云账号的 APPID |
secret_id | 是 | String | 官网 SecretId |
timestamp | 是 | Integer | 当前 UNIX 时间戳,单位为秒,可记录发起 API 请求的时间。例如1529223702,如果与当前时间相差过大,会引起签名过期错误 |
expired | 是 | Integer | 签名的有效期,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒;Expired 必须与 Timestamp 的差值小于90天 |
query_id | 否 | String | 请求 ID,用于问题排查 |
temperature | 否 | Float | 默认1.0,取值区间为[0.0, 2.0],非必要不建议使用, 不合理的取值会影响效果 建议该参数和 top_p 只设置1个,不要同时更改 较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 |
top_p | 否 | Float | 默认1.0,取值区间为[0.0, 1.0],非必要不建议使用, 不合理的取值会影响效果 建议该参数和 temperature 只设置1个,不要同时更改 影响输出文本的多样性,取值越大,生成文本的多样性越强 |
stream | 否 | Integer | 0:同步,1:流式 (默认,协议:SSE) 同步请求超时:60s,如果内容较长建议使用流式 |
messages | 是 | Array of Message | 会话内容, 按对话时间序排列,长度最多为40 最大支持16k tokens上下文 |
Message
参数名称 | 必填 | 类型 | 描述 |
role | 是 | String | 当前支持以下: user:表示用户 assistant:表示对话助手 在 message 中必须是 user 与 assistant 交替(一问一答) |
content | 是 | String | 消息的内容 |
输出参数
参数名称 | 类型 | 描述 |
choices | Array of ResponseChoices | 结果 |
created | String | unix 时间戳的字符串 |
id | String | 会话 id |
usage | ResponseUsage | token 数量 |
error | ResponseError | 错误信息 注意:此字段可能返回 null,表示取不到有效值 |
note | String | 注释 |
req_id | String | 唯一请求 ID,每次请求都会返回。用于反馈接口入参 |
ResponseError
参数名称 | 类型 | 描述 |
message | String | 错误提示信息 |
code | Integer | 错误码 |
ResponseUsage
参数名称 | 类型 | 描述 |
prompt_tokens | Integer | 输入 token 数量 |
total_tokens | Integer | 总 token 数量 |
completion_tokens | Integer | 输出 token 数量 |
ResponseChoices
参数名称 | 类型 | 描述 |
finish_reason | String | 流式结束标志位,为 stop 则表示尾包 |
messages | Message | 内容,同步模式返回内容,流模式为 null |
delta | ResponseChoicesDelta | 内容,流模式返回内容,同步模式为 null |
ResponseChoicesDelta
参数名称 | 类型 | 描述 |
content | String | 响应文本 |
Message
参数名称 | 必填 | 类型 | 描述 |
role | 否 | String | 当前支持以下: user: 表示用户 assistant:表示对话助手 在 message 中必须是 user 与 assistant 交替(一问一答) |
content | 是 | String | 消息的内容 |
接口调用流程
1. 请求参数配置
{"app_id":251139068,"secret_id":"AKIDKXYP*********KCsOgkaBYjfRIxOde3","query_id":"test_query_id_97507240-a7fc-440c-9944-8e7a1254eb84","messages":[{"role":"user","content":"介绍下你自己"}],"temperature":0,"top_p":0.8,"stream":0,"timestamp":1695032592,"expired":1695118992}
2. 根据参数生成签名,签名逻辑参考签名生成,获取到 signature为 asytbZ3Ap4N0ajy8c3C+mqoqTv8=
3. 通过 http post 方式请求接口,signature 放到 header 中,参数放到 body 中。
curl -H 'Content-Type: application/json' -H 'Authorization: asytb************3C+mqoqTv8=' -v https://hunyuan.cloud.tencent.com/hyllm/v1/chat/completions -d '{"app_id":251139068,"secret_id":"AKIDK************NKCsOgkaBYjfRIxOde3","query_id":"test_query_id_97507240-a7fc-440c-9944-8e7a1254eb84","messages":[{"role":"user","content":"介绍下你自己"}],"temperature":0,"top_p":0.8,"stream":0,"timestamp":1695032592,"expired":1695118992}'
签名生成
1. 对所有参数按字典序进行排序,请求 URL hunyuan.cloud.tencent.com/hyllm/v1/chat/completions
(不包含协议部分:https://)作为签名原文,这里以 app_id=25*****68, secret_id=AKID3************5sXzIZ
为例拼接签名原文,则拼接的签名原文为:(注意:float 类型参数需要去掉无效的0;messages 需要通过字符串的方式拼接,不要使用 json 库直接转字符串,json 库可能会对特殊字符进行转义;body 传参时依然是要 Message 类型)
#messsage字符串拼接示例
messagestr = ','.join(['{{"role":"{}","content":"{}"}}'.format(message["role"], message["content"]) for message in data["messages"]])
messagestr = '[{}]'.format(messagestr)
hunyuan.cloud.tencent.com/hyllm/v1/chat/completions?app_id=25*****68&expired=1694838136&messages=[{"role":"user","content":"介绍下你自己"}]&query_id=test_query_id_6a8e4dc8-1c6e-4ece-aceb-d4554cdf4525&secret_id=AKID3************5sXzIZ&stream=1&temperature=0×tamp=1694751736&top_p=0.8
2. 对签名原文使用 secret_key 进行 HmacSha1 加密,之后再进行 base64 编码。例如对上一步的签名原文 secret_key=*****PXQ5WihT5ZsxrXylV6b5n******
,使用 HmacSha1 算法进行加密并做 base64 编码处理:
Base64Encode(HmacSha1("hunyuan.cloud.tencent.com/hyllm/v1/chat/completions?app_id=25*****68&expired=1694838136&messages=[{"role":"user","content":"介绍下你自己"}]&query_id=test_query_id_6a8e4dc8-1c6e-4ece-aceb-d4554cdf4525&secret_id=AKID3************5sXzIZ&stream=1&temperature=0×tamp=1694751736&top_p=0.8", "*****PXQ5WihT5ZsxrXylV6b5n******"))
3. 得到 signature 签名值为:
psTRsva/*********OhaiDMowic=
4. 将 signature 作为 header 传入
header["Authorization"] = "psTRsva/*********OhaiDMowic="
签名FAQ
1. signature calculated is different from client signature
检查参数拼接顺序是否按照字典序排序、检查 float 类型参数参与签名是否去掉无意义0(比如 temperature=1.0 参与签名应为 temperature=1),检查 messages 内容是否正确,这里需要通过字符串方式进行拼接,不可使用 json 库转字符串
检查 secret_key 是否填写正确
检查签名方法是否正确,签名方法可参考下面代码示例(注意:示例代码中 *****PXQ5WihT5ZsxrXylV6b5n****** 密钥需替换为自己的 secret_key)
# -*- coding: utf-8 -*-
import hmac
import hashlib
import base64
sign_str = 'hunyuan.cloud.tencent.com/hyllm/v1/chat/completions?app_id=251139068&expired=1694838136&messages=' \
'[{"role":"user","content":"介绍下你自己"}]&query_id=test_query_id_6a8e4dc8-1c6e-4ece-aceb-d4554cdf4525' \
'&secret_id=AKID3xxxxxxxxxoYL5sXzIZ&stream=1&temperature=0×tamp=1694751736&top_p=0.8'
hmacstr = hmac.new("*****PXQ5WihT5ZsxrXylV6b5n******".encode('utf-8'),
sign_str.encode(
'utf-8'), hashlib.sha1).digest()
s = base64.b64encode(hmacstr)
s = s.decode('utf-8')
print(s)
2. signature is expired
检查 expired 参数值是否正确,时间戳单位为秒,一般在当前时间基础上加上一定秒数即可
3. permission verify
检查 APPID 是否正确,不要把 UIN 当成 APPID
4. The header 'Authorization' is nil!
signature 作为 header 传入
错误码
错误码 | 说明 |
1001 | 参数不合法,具体详情参考错误信息 |
1002 | 参数值不合法,具体详情参考错误信息 |
1003 | 文本内容存在敏感信息 |
2000 | 服务端未知错误 |
2001 | 鉴权失败,请参考签名生成 |
2002 | 非白名单账号,请先申请试用 |
2003 | 请求限流,如需调整限频请联系产品 |
4000 | 算法服务未知错误 |
4001 | 算法服务请求超时 |
4002 | 算法服务异常 |
4003 | 模型参数错误 |
4004 | 模型解析错误 |
4005 | 模型内部错误 |
4006 | 算法服务权限错误 |