tian93_ 2024-04-03 23:49 采纳率: 0%
浏览 405
已结题

langchain及chat-glm4 api 问题

我想在langchain里使用智谱chat-glm4的api,按照langchain官网的指示运行演示代码

from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
zhipuai_api_key = "xxx"
chat = ChatZhipuAI(
    api_key=zhipuai_api_key,
    model="glm-4",
    temperature=0.5,
)
messages = [
    SystemMessage(content="Your role is a poet."),
    HumanMessage(content="Write a short poem about AI in four lines."),
]
response=chat(messages)
print(response.content)

运行后python报错

if response["code"] != 200:
       ~~~~~~~~^^^^^^^^
TypeError: 'NoneType' object is not subscriptable

有朋友知道这是什么意思吗

  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-03 23:49
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    您在尝试使用langchain库调用智谱chat-glm4 API时遇到了错误。具体来说,当您运行提供的代码片段并尝试从API响应中访问"code"字段时,Python抛出了TypeError: 'NoneType' object is not subscriptable异常。这表明API返回了一个None对象,而您试图将其当作字典进行索引(即通过方括号[]获取子项),但None类型不支持这种操作。

    为了解决这个问题,我们需要对以下几个方面进行排查:

    1. API密钥:确保您提供的zhipuai_api_key变量值是有效的智谱chat-glm4 API密钥。如果您不确定密钥的有效性,建议您检查密钥是否正确、是否过期或是否有权限访问所需资源。

    2. 网络连接:确保您的Python环境可以正常访问智谱API服务器。任何网络问题(如防火墙限制、代理设置不当、DNS解析失败等)都可能导致API请求失败,进而导致收到None响应。

    3. 模型名称与版本:确认您指定的模型名model="glm-4"与智谱chat-glm4 API实际提供的模型名称一致。如果有拼写错误或版本不匹配,API可能无法识别并返回错误或空响应。

    4. API接口变更或临时故障:尽管这种情况相对较少,但智谱API可能存在未及时更新文档、接口变动或服务暂时不可用的情况。您可以尝试稍后重试,或联系智谱技术支持以确认API服务状态。

    为了进一步诊断问题,我们可以在代码中添加一些调试语句,以便捕获和打印更详细的错误信息。下面是对原代码进行修改后的版本,加入了异常处理和日志输出:

    import requests
    from langchain_community.chat_models import ChatZhipuAI
    from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
    
    zhipuai_api_key = "xxx"  # 确保此处替换为有效的API密钥
    chat = ChatZhipuAI(
        api_key=zhipuai_api_key,
        model="glm-4",
        temperature=0.5,
    )
    
    messages = [
        SystemMessage(content="Your role is a poet."),
        HumanMessage(content="Write a short poem about AI in four lines."),
    ]
    
    try:
        response = chat(messages)
        
        if response is None:
            print("Received empty response from the API.")
        else:
            print(response.content)
    except requests.exceptions.RequestException as e:
        print(f"An error occurred while making the API request: {e}")
    

    这段代码首先导入了requests.exceptions.RequestException以捕获可能的网络请求异常。然后,在尝试调用API并处理响应时,我们加入了一个try-except块来捕获并打印具体的错误信息。如果API返回None,则会输出相应的提示信息。

    请运行修改后的代码,并根据输出判断问题所在。如果仍然无法确定原因,建议您直接联系智谱技术支持,提供详细的错误描述和相关日志,以便他们协助解决。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 创建了问题 4月3日