引自免费微信小程序:皆我百晓生
您在尝试使用langchain库调用智谱chat-glm4 API时遇到了错误。具体来说,当您运行提供的代码片段并尝试从API响应中访问"code"字段时,Python抛出了TypeError: 'NoneType' object is not subscriptable异常。这表明API返回了一个None对象,而您试图将其当作字典进行索引(即通过方括号[]获取子项),但None类型不支持这种操作。
为了解决这个问题,我们需要对以下几个方面进行排查:
-
API密钥:确保您提供的zhipuai_api_key变量值是有效的智谱chat-glm4 API密钥。如果您不确定密钥的有效性,建议您检查密钥是否正确、是否过期或是否有权限访问所需资源。
-
网络连接:确保您的Python环境可以正常访问智谱API服务器。任何网络问题(如防火墙限制、代理设置不当、DNS解析失败等)都可能导致API请求失败,进而导致收到None响应。
-
模型名称与版本:确认您指定的模型名model="glm-4"与智谱chat-glm4 API实际提供的模型名称一致。如果有拼写错误或版本不匹配,API可能无法识别并返回错误或空响应。
-
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,则会输出相应的提示信息。
请运行修改后的代码,并根据输出判断问题所在。如果仍然无法确定原因,建议您直接联系智谱技术支持,提供详细的错误描述和相关日志,以便他们协助解决。