Python - FastAPI は get リクエストと post リクエストを実装します

目次

I.はじめに

2. FastAPIサーバー構築

1.get - read_items

2.post - アイテムの作成

3.uvicorn - run_app

3.郵便配達員のリクエスト

1.post - アイテムの作成

2.get - read_items

4. お願い

1.post - アイテムの作成

2.get - read_items

5. まとめ


I.はじめに

LLM の関連知識については前に紹介しましたが、サンプルの読み込みとモデルの読み込みから、その後のモデルのトレーニングとモデルの推論に至るまで、LLM LoRA の微調整と推論のプロセス全体を経験しました。前回の事前トレーニング モデルに基づいて、FastAPI を使用してインターフェイス サービスを構築してみます。この記事では主に、最も基本的な FastAPI の get および post の使用法を紹介し、その後、完全なサーバーのデプロイメントを紹介します。

2. FastAPIサーバー構築

次に、2 つのメソッドを含む API サービスを構築します。

read_items  - items 配列の要素を出力します。

create_item  - items 配列に要素を追加します。

1.get - read_items

get メソッドは HTTP リクエストの一種で、通常はサーバーからデータを取得するために使用されます。read_itemsメソッドはサーバーからitems配列を取得するため、getリクエストに相当します。通常、Get リクエストにはリクエスト本文がなく、すべてのパラメータが URL のクエリ文字列に配置されるため、特定のセキュリティ上の問題があります。

# -*- coding: utf-8 -*-
from fastapi import FastAPI, Form

app = FastAPI()

# 示例数据
items = []


# GET 请求
@app.get("/items")
async def read_items():
    return items

2.post - アイテムの作成

post メソッドは get とは異なるもう 1 つの HTTP リクエスト タイプで、通常はデータをサーバーに送信するために使用されます。通常、Post にはリクエスト本文が含まれます。送信されるパラメータは、「?」を通じてリクエストされた URL に明示的に反映する必要はありませんが、JSON オブジェクトを通じて渡すことができ、get メソッドよりも安全です。get と比較すると、post 操作は冪等ではなく、実行するたびに異なる結果が得られる可能性があります。一般に get 操作は冪等であると考えられており、get を複数回実行して得られる結果は同じである必要があります。

# POST 请求
@app.post("/items")
async def create_item(item: str = Form(None)):
    items.append(item)
    return {"message": "Item created successfully: {}".format(str(item))}

ここでは、Post リクエストが成功すると、成功を示すプロンプトが表示され、正常に追加された項目が出力されます。

3.uvicorn - run_app

uvicorn.run(app, host="192.XXX.XXX", port=8001) メソッドは、uvicorn のコマンド ライン インターフェイスです。このうち、app は実行したいアプリケーション オブジェクトで、上記の FastAPI の get メソッドと post メソッドに対応し、host と port はサービスがリッスンする IP アドレスとポートです。このメソッドは ASGI サーバーを起動し、指定されたホストとポートでアプリケーションにサービスを提供します。後続の HTTP リクエストの URL も、上記のホストとポートに基づきます。次に、このマシン上で FastAPI サービスを開始します。

if __name__ == '__main__':
    import uvicorn

    uvicorn.run(app, host='0.0.0.0', port=7788)

main 関数を実行した後、次のプロンプトが表示されます。これは、サーバーが正常に起動したことを意味します。その後の対応する HTTP リクエスト URL は、図 http://0.0.0.0:7788 の青いリンクです。 

3.郵便配達員のリクエスト

上記で構築した HTTP サービスでは、表示された postman などのアプリを通じて get および post リクエストを行うことができます。

1.post - アイテムの作成

postman を開き、POST コマンドを選択し、対応する URL + 関数に対応するパスを入力します。上記の get および post リクエストに対応するパスは URL + アイテムです。追加するアイテムを対応するフォームデータに渡します。ここのキーは関数定義と同じである必要があります。パラメータ名は正確に一致する必要があり、そうでない場合はエラーが報告されます。送信ボタンを実行してHTTPリクエストを送信すると、返されたBodyから項目リストにPythonが正常に追加されたことがわかります。その後、値を「java」と「c++」に変更し、ポスト命令を順番に送信します。

サーバー側でも各リクエストに特定の情報が必要です。status_code == 200 はリクエストが成功したことを意味します。

2.get - read_items

リクエストモードをGETに切り替えます。getコマンドはパラメータを渡さないため、対応するアドレスSendを直接入力してリクエストを送信できます。返された結果には、上で追加した 3 つの要素 (Python、Java、C++) が含まれています。サーバー側は、対応する取得リクエスト ログも追加します。

4. お願い

上記では、Postman は明示的なページ メソッドを使用して HTTP リクエストをサーバーに送信し、結果を取得しますが、より一般的なアプローチは、リクエスト ライブラリを使用してコードを使用してリクエストを送信し、返された結果を処理することです。

1.post - アイテムの作成

def post(text):
    url = 'http://0.0.0.0:7788/items'

    # 构建请求数据
    data = {
        'item': text
    }

    # 发送 post 请求
    response = requests.post(url=url, data=data, timeout=10)

    # 检查响应状态
    if response.status_code == 200:
        print('请求成功')
        print(response.json())
    else:
        print('请求失败,状态码:', response.status_code)

request.post は、対応する URL とデータを追加します。データはマップの形式であり、post 関数に対応するキーが含まれています。最後に、status_code を使用してリクエストが成功したかどうかを判断します。サーバー ログから、今回も create_item が正常に実行されたことがわかります。

2.get - read_items

def get():
    url = 'http://0.0.0.0:7788/items'
    response = requests.get(url)

    if response.status_code == 200:
        data = response.json()
        print('成功获取,返回:', data)
    else:
        print('请求失败,状态码:', response.status_code)

request.get は、対応する URL を直接渡して、対応する情報を取得できます。

サーバー側の次のログは、この取得リクエストの成功を表します。 

5. まとめ

上記では、FastAPI を使用して単純なサーバー デモを構築し、この方法に基づいて LLM サーバーを構築する方法について説明しました。

おすすめ

転載: blog.csdn.net/BIT_666/article/details/133016549