必须按DeepSeek官方JSON结构精准提取内容:先检查HTTP状态码是否为200并调用raise_for_status(),再从choices[0].message.content安全获取正文,流式响应需逐行解析data:块并拼接delta.content,解析前须先检查error字段。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

调用DeepSeek API后,返回内容藏在JSON响应体的特定路径里,直接读取错误字段会导致空值或报错,必须按官方结构精准提取。
确认响应状态再解析
先检查HTTP状态码是否为200,非200时response.json()可能抛出异常或返回错误对象,此时不应尝试提取content字段。
用Python requests库时,务必加response.raise_for_status(),否则4xx/5xx响应会静默返回无效JSON。
从choices[0].message.content取正文
这是最常用也最容易踩坑的位置:DeepSeek的/chat/completions接口返回结构固定为{"choices": [{"message": {"content": "这里是你要的内容"}}]}。
直接写response.json()["choices"][0]["message"]["content"]即可获取生成文本,但【若messages列表为空或content字段不存在,该行会触发KeyError】。
安全写法是用.get()链式调用:res = response.json(); text = res.get("choices", [{}])[0].get("message", {}).get("content", "")。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
处理流式响应(stream=true时)
当请求中设置"stream": true,响应不再是单个JSON对象,而是多个以换行符分隔的data:前缀JSON块。
需逐行读取响应流,每行去掉data:前缀后json.loads(),过滤掉空行和event:字段,只保留含delta.content的块。
注意:首块可能含role字段,末块含finish_reason,真正内容分散在多个delta中,需拼接所有delta.content。
解析失败时查error字段
第一步:检查返回JSON是否含error键;第二步:读取error.message字符串;第三步:对照文档查错误码——比如401说明API Key无效,429表示当前分钟内请求超限。
不要跳过error检查直接硬解content,否则会得到None或AttributeError。


















