八卦阵 发表于 2025-3-6 23:00:06

调用文心一言api报错the length of messages must be an odd number解决方

报错的产生

当我调用gpt-4的时候,我的message如下:
   "messages": [
            {
                "role": "system",
                "content": "你是一个数学家",
            },
            {
                "role": "user",
                "content": "1+1等于几"
            }
        ]
可以或许生成我想要的答案,但是gpt-4的api太贵了,于是我灵机一动,换成了免费的ERNIE-Speed-8K,代码酿成如下:
import requests
import json

API_KEY = ""
SECRET_KEY = ""

def main():
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie_speed?access_token=" + get_access_token()
    payload = json.dumps({
      "messages": [
            {
                "role": "system",
                "content": "你是一个数学家",
            },
            {
                "role": "user",
                "content": "1+1等于几"
            }
      ],
      "temperature": 1,
      "top_p": 1
    })
    headers = {
      'Content-Type': 'application/json'
    }
   
    response = json.loads(requests.request("POST", url, headers=headers, data=payload).text)
    print(response)
   

def get_access_token():
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

if __name__ == '__main__':
    main()
但是报错了{'error_code': 336006, 'error_msg': 'the length of messages must be an odd number', 'id': 'as-i3svf9qncg'}
报错说消息必须是基数,我又灵机一动,将message改为如下:
   "messages": [
            {
                "role": "system",
                "content": "你是一个数学家",
            },
            {
                "role": "user",
                "content": "1+1等于几"
            },
            {
                "role": "user",
                "content": "告诉我答案"
            }
        ],
但是仍然报错{'error_code': 336006, 'error_msg': 'the length of messages must be an odd number', 'id': 'as-i3svf9qncg'}
好吧,您高贵,我继续换
   "messages": [
            {
                "role": "system",
                "content": "你是一个数学家",
            },
            {
                "role": "user",
                "content": "1+1等于几"
            },
            {
                "role": "assistant",
                "content": "1+1等于几"
            }
        ]
 
报错酿成{'error_code': 336006, 'error_msg': 'the role of first message must be user', 'id': 'as-vgqmazcvbf'}了 
怎么解决

在各种尝试各种报错后,我去翻看官方文档,化身福尔摩斯后找到了解决方案,system和assistant不是不让放内里吗,那我放外面总行了吧,酿成如许
   "messages": [
            {
                "role": "user",
                "content": "1+1等于几"
            }
        ],
        "system": "你是一个数学家",
完备代码如下
import requests
import json

API_KEY = ""
SECRET_KEY = ""

def main():
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie_speed?access_token=" + get_access_token()
    payload = json.dumps({
      "messages": [
            {
                "role": "user",
                "content": "1+1等于几"
            }
      ],
      "system": "你是一个数学家",
      "temperature": 1,
      "top_p": 1
    })
    headers = {
      'Content-Type': 'application/json'
    }
   
    response = json.loads(requests.request("POST", url, headers=headers, data=payload).text)
    print(response)
   

def get_access_token():
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

if __name__ == '__main__':
    main()  终于能生成答案了,感天动地
https://i-blog.csdnimg.cn/direct/d2ffe59601aa4500801eab5c9a572ee2.png
记载一下,文心一言太难用了,有很多其他额外的限定 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 调用文心一言api报错the length of messages must be an odd number解决方