我无法使用Python的“requests”模块调用FastAPI的POST路由,但可以通过cURL命令行调用相同的路由
下面是我“服务器端”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 个回答
暂无回答