You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python请求LM Studio本地模型返回503 Service Unavailable错误但Curl请求成功的原因及解决方法

Python请求LM Studio本地模型返回503 Service Unavailable错误但Curl请求成功的原因及解决方法

问题场景

我尝试用以下Python代码请求本地部署的大语言模型,但收到了503 Service Unavailable错误:

import requests
import json

url = 'http://localhost:1234/v1/chat/completions'

headers = {
    'Content-Type': 'application/json'
}

data = {
    'model': 'deepseek-r1-distill-qwen-7b',
    'messages': [
        {'role': 'system', 'content': 'Always answer in rhymes. Today is Thursday'},
        {'role': 'user', 'content': 'What day is it today?'}
    ],
    'temperature': 0.7,
    'max_tokens': -1,
    'stream': False
}

response = requests.post(url, headers=headers, data=json.dumps(data))

if response.status_code == 200:
    print('Response:', response.json())
else:
    print('Error:', response.status_code, response.text)

错误信息:503 service unavailable

但用以下Curl命令却能成功请求:

curl http://localhost:1234/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-r1-distill-qwen-7b",
    "messages": [
      { "role": "system", "content": "Always answer in rhymes. Today is Thursday" },
      { "role": "user", "content": "What day is it today?" }
    ],
    "temperature": 0.7,
    "max_tokens": -1,
    "stream": false
}'

可能的原因及解决方法

1. Python请求的JSON序列化方式不够稳妥

Curl是直接传递格式化好的JSON字符串,而Python代码用json.dumps(data)生成字符串后通过data参数传递,虽然逻辑看似没问题,但requests库提供了更可靠的json参数来自动处理JSON请求,能避免手动序列化可能带来的编码、格式细节问题。

修复方法:
把requests.post中的data=json.dumps(data)替换为json=data,修改后的请求代码如下:

# 替换原post请求行
response = requests.post(url, headers=headers, json=data)

甚至可以省略手动设置的Content-Type头,因为使用json参数时,requests会自动添加正确的application/json请求头。

2. 字符编码不匹配

手动用json.dumps生成的字符串,可能默认编码不是服务端预期的UTF-8,导致服务端无法正确解析请求,进而返回503错误。

修复方法:
如果坚持用data参数,明确指定编码:

response = requests.post(url, headers=headers, data=json.dumps(data).encode('utf-8'))

3. 本地服务的请求处理差异

部分本地大模型服务(比如LM Studio)对不同客户端的请求可能存在细微处理差异,比如请求超时时间、连接复用等。可以尝试给Python请求添加超时参数,避免因连接等待过久被服务端判定为无效请求。

修复方法:
在requests.post中添加timeout参数(比如设置为30秒):

response = requests.post(url, headers=headers, json=data, timeout=30)

4. 检查本地服务状态

偶尔503错误也可能是本地服务临时负载过高或状态异常,虽然Curl能成功,但Python请求的时机可能刚好遇到服务忙碌。可以打开LM Studio的控制台日志,查看是否有对应Python请求的错误记录,确认服务是否稳定运行。

备注:内容来源于stack exchange,提问作者leo0807

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:09:36