应先检查http状态码是否为2xx,再验证content-type为application/json,然后用response.json()解析;成功响应取choices[0].message.content,流式需逐行解析data:;tool_calls需loads(arguments)并校验function.name;错误响应须用get()安全提取error.message。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要从DeepSeek API返回的HTTP响应中准确提取结构化数据,比如模型生成的文本、函数调用参数或错误详情,而不是把整个response.text当字符串硬拆。
确认响应状态与JSON可解析性
第一步:检查response.status_code是否为200(或201),非2xx状态码直接跳过json()调用,否则会抛出JSONDecodeError。
第二步:用response.headers.get('Content-Type')确认响应头含application/json,避免对HTML错误页或空响应强行解析。
第三步:调用response.json()获取Python字典对象,这一步不可省略——【不要用json.loads(response.text)替代】,requests的.json()方法内置了编码自动检测和空白处理,而loads()在BOM头或UTF-8-sig编码下极易报UnicodeDecodeError。
提取生成文本内容(chat/completions接口)
方法一:标准路径提取
直接访问response['choices'][0]['message']['content'],这是绝大多数成功响应的文本落点。注意:若模型拒绝回答或触发安全拦截,content可能为空字符串,需提前判断if response['choices'][0]['message'].get('content')。
方法二:兼容流式响应(stream=True时)
流式响应返回的是text/event-stream,不能直接json();需逐行读取data:字段,用json.loads(line[6:])解析每帧,再拼接content字段。漏掉任意一行会导致文本截断。
解析tool_calls调用结果
第一步:确认response中存在'tool_calls'字段,它只在模型主动发起函数调用时出现,普通问答不会返回该键。
第二步:遍历response['choices'][0]['message']['tool_calls']列表,每个元素含id、type、function三个键。
第三步:对每个function.arguments执行json.loads()——【注意:arguments是JSON字符串,不是字典】,直接取值会报错。例如:params = json.loads(call['function']['arguments'])。
第四步:用function.name匹配你预定义的tools列表中的函数名,防止模型虚构函数名导致KeyError。
处理错误响应的JSON结构
当API返回400/401/429等错误码时,响应体仍是JSON格式,但结构与成功响应完全不同。典型错误字段包括code(如'invalid_api_key')、message(人类可读提示)、request_id(用于工单追踪)。直接按成功路径提取content会触发KeyError。
安全做法:用response.json().get('error', {}).get('message', 'Unknown error')兜底取错因,而非硬写response['error']['message']。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!









