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

FastAPI POST接口接收大字符串时返回422 Unprocessable Entity错误的解决方法

FastAPI POST接口接收大字符串时返回422 Unprocessable Entity错误的解决方法

兄弟,我仔细看了你的问题和代码,发现两个核心问题导致了这个422错误,咱们一步步来解决:

1. 先修复代码里的明显错误

你在/prompt_text接口里,把整个Prompt对象转成字符串传给ChatGPT了:

messages=[{"role": "user", "content": str(prompt)}]

这会把Prompt实例转换成类似text='你的大文本内容'的格式,不仅多了text=这个无用前缀,还可能在文本包含特殊字符时触发解析问题。正确的做法是直接取模型里的text字段:

@app.post("/prompt_text")
def create_prompt(prompt: Prompt):
    response = g4f.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt.text}],  # 这里改成prompt.text
    )
    return {'result': response}

2. 调整FastAPI的请求体大小限制

FastAPI底层依赖的Starlette框架默认限制请求体大小为1MB,当你发送的字符串超过这个阈值时,就会触发解析失败,返回422错误。你需要在创建FastAPI实例时手动设置更大的限制,比如允许50MB的请求体:

app = FastAPI(body_limit=50 * 1024 * 1024)  # 50MB,可根据你的需求调整

这样就能直接接收大段文本内容,不用再通过文件上传绕路。

3. 确认客户端的请求格式

最后再检查下你发送请求的方式:确保用的是POST方法,请求头里设置了Content-Type: application/json,并且请求体是标准的JSON格式,比如用curl测试的话:

curl -X POST "http://localhost:8000/prompt_text" -H "Content-Type: application/json" -d '{"text": "你的大段文本内容..."}'

如果客户端发送的格式不对,也会导致FastAPI无法解析请求体,返回422。

按照这几步调整后,应该就能正常接收大字符串了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:44:40