最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
DeepSeek_API调用如何解析JSON结果?
时间:2026-08-05 14:44:24 编辑:袖梨 来源:一聚教程网
应先检查HTTP状态码是否为2xx,再验证Content-Type为application/json,然后用response.json()解析;成功响应取choices[0].message.content,流式需逐行解析data:;tool_calls需loads(arguments)并校验function.name;错误响应须用get()安全提取error.message。
你需要从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']。
相关文章
- 王者荣耀世界晴海雾纱皮肤怎么获得-晴海雾纱皮肤获取方式 08-05
- PP视频是什么-PP视频怎么取消自动续费? 08-05
- 哔咔漫画下载-哔咔漫画安卓下载 08-05
- 凡人修仙传:人界篇官网首页入口在哪里 凡人修仙传:人界篇官网首页入口地址 08-05
- 没想到最后却目睹一整个宇宙的繁星歌曲介绍 08-05
- warframe交易网站访问_wm星际战甲market交易中心登录 08-05