ML モデルに FAST API を使用しています。
パイプラインがあります。
lr_tfidf = Pipeline([('vect', tfidf),
('clf', LogisticRegression(penalty='l2'))])
Fast APIでは、予測して結果をAPIとして表示したい場合、私のコードは
app = FastAPI()
@app.post('/predict')
def predict_species(data: str):
data = np.array([data])
prob = lr_tfidf.predict_proba(data).max()
pred = lr_tfidf.predict(data)
return {'Probability': f'{prob}',
'Predictions':f'{pred}'}
チュートリアルからコピーしました。FASTAPI で GUI 上でテストすると、画像に示すように、確率と予測が表示され、うまく動作します。
GUI によって提供される URL http://127.0.0.1:8000/predict?data=hello
(テスト データは hello) をリクエストすると、エラーが発生します。
{"detail":"Method Not Allowed"}
私のターミナルでは、エラーメッセージは
INFO: 127.0.0.1:42568 - "GET /predict?data=hello HTTP/1.1" 405 Method Not Allowed
ベストアンサー1
エンドポイントのメソッドはPOST
( @app.post('/predict')
) として定義されています。ブラウザから URL を呼び出す場合、HTTP メソッドは ですGET
。
簡単な解決策は、エンドポイント メソッドをGET
viaに変更することです@app.get
。
しかし、これはREST-APIエンドポイントの命名方法やどのHTTPメソッドをいつ使用するかというルールに違反する可能性が高いです。良い出発点はhttps://restfulapi.net/resource-naming/。
あるいは、RPC (リモート プロシージャ コール) を実装しているのでしょうか? その場合は、異なる可能性もあります。