AI大模型教程
一起来学习

调用文心一言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()

 终于能生成答案了,感天动地

记录一下,文心一言太难用了,有很多其他额外的限制 

文章来源于互联网:调用文心一言api报错the length of messages must be an odd number解决方案

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 调用文心一言api报错the length of messages must be an odd number解决方案
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们