使用LM Studio搭建本地聊天机器人时遭遇TypeError: 'NoneType' object is not subscriptable错误求助
使用LM Studio搭建本地聊天机器人时遭遇TypeError: 'NoneType' object is not subscriptable错误求助
兄弟别慌!这个错误我之前踩过类似的坑,本质是你调用OpenAI兼容API后,返回的completion.choices是None——要么是请求没成功拿到正常响应,要么是返回的结构和你预期的不一样。咱一步步来排查:
先排查最基础的服务状态
- 你得确认LM Studio已经正确启动了本地API服务:打开LM Studio,加载好
llama3模型(或者你实际用的那个模型),然后点「Start Server」,看到界面显示服务在http://127.0.0.1:1234运行才行。要是服务没开,或者模型没加载,请求直接就失败了,自然拿不到正确的completion对象。 - 另外,模型名称要对应上:你代码里写的
model="llama3",得和LM Studio里显示的模型名完全一致,比如有些Llama3模型的全名是meta-llama/Llama-3-8B-Instruct,要是名字错了,服务会找不到模型,返回异常。
代码里的API类型写错了!
你现在写的是:
openai.api_type = "open_ai"
正确的应该是openai.api_type = "openai"(去掉中间的下划线)!这个参数设置错了会导致请求格式不兼容LM Studio的服务,直接返回异常响应,所以completion里的choices就成了None。
冗余代码要清理
你代码里写了两个一模一样的while循环,虽然这不是直接导致错误的原因,但会让程序逻辑混乱——运行时先执行第一个循环,退出后又会跑第二个循环,建议删掉其中一个,保留一套循环逻辑就好。
加个错误排查的调试代码
为了更清楚看到问题在哪,给你的chat_with_gpt函数加个错误捕获和调试打印,这样能直观看到请求到底出了啥问题:
def chat_with_gpt(prompt): try: completion = openai.chat.completions.create( messages = [ {"role": "user", "content": prompt} ], model="llama3" # 这里要和LM Studio里的模型名一致! ) # 打印返回的完整结构,方便调试 print("\n[调试信息] 返回的completion结构:", completion) return completion.choices[0].message.content.strip() except Exception as e: print(f"\n[错误提示] 请求出错了:{str(e)}") return "抱歉,我现在没法回应你,请检查LM Studio服务状态或者代码设置~"
运行后看控制台的调试信息,就能知道是服务没响应,还是模型不存在,或者其他参数问题了。
按照上面的步骤排查,应该能解决这个问题!
备注:内容来源于stack exchange,提问作者N T
相关产品推荐
相关产品推荐

