我无法使用Python的“requests”模块调用FastAPI的POST路由,但可以通过cURL命令行调用相同的路由

0 投票
0 回答
14 浏览
提问于 2025-04-11 22:16

下面是我“服务器端”FastAPI代码的相关部分。

from fastapi import FastAPI, UploadFile, HTTPException
from fastapi.responses import FileResponse, HTMLResponse, StreamingResponse
from pydantic import BaseModel

qh = os.getenv('QDRANTHOST','qdrant')
qc = os.getenv('QDRANTCOLL','documents')

class QdrantQuery(BaseModel):
    query: str
    host: str | None = qh
    collection: str | None = qc

def execute(question: str, host: str, collection: str):
    index = qdrant_index(qdranthost=host,collection=collection)
    query_engine = index.as_query_engine(similarity_top_k=int(similarity),response_mode=responsemode)
    return query_engine.query(question)

@app.post("/query")
async def query(input: QdrantQuery ):
    question = input.query
    host = input.host
    collection = input.collection
    result = execute(question,host,collection)
    return result

当我在BASH命令行中调用这段代码时,使用以下命令:

curl -H 'content-type: application/json' -d '{"query": "Chi è Blair Clarimonde?","collection": "documents"}' http://localhost:9999/query

它运行得非常好。然而,当我通过requests模块在Streamlit前端调用时... 我总是收到422错误代码。

queryurl = f"http://dctvllm01.upgrade.lan:9999/query"
headers={"Content-type": "application/json"}
a = {"question": "Chi è Blair Clarimonde?","collection": "documents"}
b = json.dumps(a)
r = requests.post(url=queryurl,data=b, headers=headers)
print(r.text)

错误详情:

{"detail":[{"type":"missing","loc":["body","query"],"msg":"Field required","input":{"question":"Chi è Blair Clarimonde?","collection":"documents"},"url":"https://errors.pydantic.dev/2.6/v/missing"}]}

有人能指出我“客户端”代码中的错误吗?谢谢。

0 个回答

暂无回答

撰写回答