腾讯混元大模型(待续)

腾讯混元大模型(Tencent Hunyuan)是由腾讯研发的大语言模型,具备强大的中文创作能力,复杂语境下的逻辑推理能力,以及可靠的任务执行能力。

请求说明

类型

说明

请求协议

HTTPS 协议

请求方式

POST

请求地址

https://hunyuan.cloud.tencent.com/hyllm/v1/chat/completions

接口鉴权

签名鉴权机制

并发限制

默认单账号限制并发连接数为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&timestamp=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&timestamp=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&timestamp=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

算法服务权限错误