Как вы получаете ответ от Flask приложения с curl? - PullRequest
0 голосов
/ 02 апреля 2020

Я создаю Flask тестовый предиктор, используя AllenNLP.

Я передаю «отрывок» и «вопрос» из файла. json предсказателю.

Однако, когда я передаю файл json с помощью curl, он не возвращает ответ. Есть ли в Flask специальный возврат для его получения?

Код выглядит следующим образом:

 from allennlp.predictors.predictor import Predictor as AllenNLPPredictor


from flask import Flask
from flask import request
app = Flask(__name__)

@app.route("/", methods=['GET','POST'])
def hello():
    return "<h1>Test app!</h1>"


class PythonPredictor:
    def __init__(self, config):
        self.predictor = AllenNLPPredictor.from_path(
            "https://storage.googleapis.com/allennlp-public-models/bidaf-elmo-model-2018.11.30-charpad.tar.gz"
        )

    def predict(self, payload):
        if request.method == "POST":
            prediction = self.predictor.predict(
                passage=payload["passage"], question=payload["question"]
            )
            return prediction["best_span_str"]

Команда Curl выглядит следующим образом: curl http://127.0.0.1: 5000 - X POST -H "Тип содержимого: приложение / json" -d @ образец. json

1 Ответ

1 голос
/ 02 апреля 2020

Если я не понял (я полагаю, вы спрашиваете, как получить отправку JSON в вашем маршруте и вернуть результат), похоже, вам нужно сделать что-то вроде:

p = PythonPredictor()

@app.route("/", methods=['POST'])
def hello():
    data = request.get_json()
    result = p.predict(data)
    return result

Это эффективно запускает данные в вашем sample.json через ваш PythonPredictor.predict метод и возвращает это предсказание клиенту.

Обратите внимание, что этот код создает экземпляр p вне функции маршрута, так что модель NLP загружается только при запуске приложения flask (не при каждом запросе). Однако, похоже, что это может повторно загрузить этот файл, если только AllenNLPPredictor.from_path не выполняет некоторое кэширование, поэтому, вероятно, было бы целесообразно сначала вручную загрузить этот файл в свое собственное хранилище и загрузить оттуда в функцию PythonPredictor.__init__.

Дайте мне знать, если что-то из этого требует уточнения, или я неправильно понял.

...