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

GPT API返回结果转JSON失败,请求优化SYSTEM_PROMPT及FastAPI代码

问题解决方案

一、优化系统提示词(SYSTEM_PROMPT)

针对英语词汇题添加明确规则,强制严格JSON输出,避免格式混乱和token浪费:

SYSTEM_PROMPT = """
你是专门生成英语词汇测验的AI,需严格遵循以下规则:
1. 仅生成5道英语词汇选择题,题型固定为:给出英文单词,搭配4个中文释义选项(仅1个正确)
2. 输出必须为**纯JSON格式**,不得包含任何额外文本、解释、markdown标记或注释
3. JSON结构必须严格匹配:{"data": [{"quiz": "题干内容(需包含完整选项,格式如:'单词:abandon 释义选项:A. 坚持 B. 放弃 C. 犹豫 D. 前进')", "answer": "正确选项字母(如B)"}, ...]}
4. 词汇难度匹配用户输入的要求,题目表述简洁,避免冗余内容以控制token使用
5. 确保JSON语法完全正确:所有字符串用双引号,数组/对象末尾无多余逗号,无语法错误
"""

二、代码调整(修复JSON解析失败问题)

添加返回内容清理、错误捕获和token控制逻辑:

from fastapi import FastAPI, HTTPException
import openai
import json

app = FastAPI()

openai.api_key = "key"

SYSTEM_PROMPT = """
你是专门生成英语词汇测验的AI,需严格遵循以下规则:
1. 仅生成5道英语词汇选择题,题型固定为:给出英文单词,搭配4个中文释义选项(仅1个正确)
2. 输出必须为**纯JSON格式**,不得包含任何额外文本、解释、markdown标记或注释
3. JSON结构必须严格匹配:{"data": [{"quiz": "题干内容(需包含完整选项,格式如:'单词:abandon 释义选项:A. 坚持 B. 放弃 C. 犹豫 D. 前进')", "answer": "正确选项字母(如B)"}, ...]}
4. 词汇难度匹配用户输入的要求,题目表述简洁,避免冗余内容以控制token使用
5. 确保JSON语法完全正确:所有字符串用双引号,数组/对象末尾无多余逗号,无语法错误
"""


@app.get("/{request}")
def generate_quiz(request: str):
    message = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": request}
    ]

    try:
        completion = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=message,
            temperature=0.1,
            max_tokens=500,  # 限制返回token数,避免溢出和冗余内容
            response_format={"type": "json_object"}  # 强制GPT返回JSON对象(需OpenAI API版本支持)
        )
        
        # 清理返回内容:移除可能的markdown代码块标记
        raw_content = completion.choices[0].message.content.strip()
        if raw_content.startswith("```json") and raw_content.endswith("```"):
            raw_content = raw_content[7:-3].strip()
        
        quizzes = json.loads(raw_content)
        return quizzes  # 直接返回解析后的JSON,避免重复嵌套data字段
        
    except json.JSONDecodeError:
        raise HTTPException(status_code=500, detail="生成的测验格式不符合要求,无法解析为JSON")
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"生成测验失败:{str(e)}")


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8080)

三、关键改进说明

  1. 强制JSON输出:API调用中添加response_format={"type": "json_object"}(需OpenAI API版本支持),结合提示词双重约束,确保GPT返回纯JSON
  2. 内容清理:处理GPT可能返回的markdown代码块标记,避免解析失败
  3. token控制:设置max_tokens限制返回长度,减少无效token消耗,同时避免因内容过长导致的解析问题
  4. 错误处理:捕获JSON解析错误和其他异常,返回明确的HTTP错误信息,便于调试
  5. 题型标准化:明确词汇题的题型和格式,减少GPT输出的不确定性,同时控制内容长度节省token

内容的提问来源于stack exchange,提问作者nuguryy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:52:48