Apache APISIXとOpenAI APIによるAI機能の強化

Bobur Umurzokov

Bobur Umurzokov

February 7, 2023

Technology

人工知能(AI)は、私たちがテクノロジーと相互作用する方法を革新し、現代のアプリケーションの重要な一部となっています。OpenAI APIは、開発者に強力なAI機能を提供し、高度なAIアプリケーションを簡単に構築できるようにします。

しかし、AIの使用が増えるにつれて、スケーラブルで高性能かつ安全なAPI統合の必要性も高まっています。ここでApache APISIXが登場します。Apache APISIXは、高性能なオープンソースのAPIゲートウェイで、API統合を管理およびスケーリングするための高度な機能を提供します。

このブログ記事では、Apache APISIXとOpenAI APIを統合する利点と、Apache APISIXを使用してよりスケーラブルで高性能かつ安全なAI統合を作成する方法を探ります。プロキシキャッシュからセキュリティ機能まで、Apache APISIXとOpenAI APIの統合を始めるために必要なすべてをカバーします。AI開発者やDevOpsの専門家であれば、このブログ記事は強力でコスト効率の高いAI統合を作成するための完全ガイドです。

学習目標

この記事を通じて以下のことを学びます:

  • OpenAI APIとApache APISIXとは何か?
  • Apache APISIXをOpenAI APIと使用する利点。
  • OpenAI APIを強化するためのいくつかのApache APISIXプラグインのユースケース。
  • APISIXでOpenAI APIのための新しいRouteを作成する方法。
  • OpenAI APIエンドポイントをUpstreamとしてルートに追加する方法。
  • 必要に応じてルートの認証、レート制限、キャッシュを設定する方法。
  • リクエストが正しくOpenAI APIに転送されていることを確認するためにルートをテストする方法。

OpenAI APIとは?

OpenAIは、高度な人工知能モデルを作成および展開するための最先端のプラットフォームです。これらのモデルは、自然言語処理、画像認識、感情分析など、さまざまなタスクに使用できます。OpenAIの主な利点の1つは、開発者がこれらのモデルにアクセスし、アプリケーションに組み込むことができるAPIを提供していることです。

OpenAI APIは、OpenAIのAIモデルにアクセスするためのクラウドベースのプラットフォームで、ChatGPTを含みます。このAPIにより、開発者はアプリケーションにAI機能を統合できます。

ChatGPTは、OpenAI APIを通じて利用できるAIモデルの1つで、自然言語処理やテキスト生成能力を必要とするユースケースに特に適しています。例えば、ChatGPTはチャットボットでのテキスト応答の生成、テキスト補完の提案、コード補完、または会話型インターフェースでの質問への回答に使用できます。

Apache APISIXとは?

Apache APISIXは、オープンソースのクラウドネイティブAPIトラフィック管理ソリューションで、スケーラブルで安全かつ高可用性のRESTful APIを作成するためのAPIゲートウェイ機能を提供します。

OpenAI APIとAPIゲートウェイを使用することで、OpenAIモデルにアクセスするスケーラブルで安全かつ高性能なAPIを簡単に作成および展開できます。これにより、アプリケーションにOpenAIの力を組み込み、ユーザーに優れた体験を提供できます。

Apache APISIXをOpenAI APIと使用する利点

Apache APISIXをOpenAI APIと使用する利点はいくつかあります:

  1. スケーラビリティ: Apache APISIXは、OpenAI APIを管理およびスケーリングする簡単な方法を提供し、増加するトラフィックと使用需要に対応できます。

  2. パフォーマンス: Apache APISIXは、応答をキャッシュし、レイテンシを減らすことで、OpenAI APIリクエストのパフォーマンスを向上させることができます。 セキュリティ: Apache APISIXは、暗号化や認証などのセキュリティ機能を提供し、OpenAI APIへのアクセスを簡単に保護できます。

  3. 柔軟性: Apache APISIXは、OpenAI APIへのアクセスを管理および制御する柔軟な方法を提供し、必要に応じて統合をカスタマイズおよび設定できます。

  4. 監視と分析: Apache APISIXは、詳細な監視と分析を提供し、OpenAI API統合のパフォーマンスを追跡および最適化できます。

OpenAI APIを強化するApache APISIXプラグイン

OpenAI APIとの統合を強化するために使用できるApache APISIXプラグインがいくつかあります。OpenAI APIと使用できるプラグインの一部は以下の通りです:

  • rate-limiting: APIリクエストの数を制限し、OpenAI APIの過剰使用を防ぎます。
  • authentication: 認証および認可メカニズムを実装して、OpenAI APIへのアクセスを保護します。
  • traffic-control: APIトラフィックの流れを制御し、OpenAI APIの一貫したパフォーマンスと安定性を確保します。
  • observability: APIリクエストと応答を監視およびログに記録し、OpenAI APIの使用状況とパフォーマンスを可視化します。
  • caching: API応答をキャッシュし、APIリクエストの数を減らすことで、パフォーマンスを向上させ、OpenAI APIの使用コストを削減します。
  • transformation: APIリクエストと応答を変更し、JSONからXMLなど、データを変換します。

Apache APISIXを使用してOpenAI APIを管理するデモ

十分な理論的知識を踏まえた上で、実際のセッションに移りましょう。この例では、Apache APISIXを使用して、OpenAI APIにアクセスし、ルート、アップストリームを作成し、いくつかのプラグインを有効にしてトラフィックを管理する簡単なAPIゲートウェイを作成します。OpenAI APIのCompletionエンドポイントと対話して、製品説明を効率的かつ正確に生成する製品説明ジェネレーターを作成します。

例えば、APIゲートウェイへの典型的なリクエストは以下のようになります:

curl http://127.0.0.1:9080/openai/product/desc  -X POST -d
'{
   "model":"text-davinci-003",
   "prompt":"Write a brief product description for Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

そして、以下のような出力が得られます:

{
   "object":"text_completion",
   "model":"text-davinci-003",
   "choices":[
      {
         "text":"\n\nThe Apple 13 Pro is the perfect laptop for those who need a powerful and reliable machine.
It features a 13-inch Retina display with True Tone technology, a powerful 8th-generation Intel Core i5 processor, 8GB of RAM, and a 256GB SSD for storage.
It also has a Touch Bar and Touch ID for added security and convenience. With up to 10 hours of battery life, you can stay productive all day long.
The Apple 13 Pro is the perfect laptop for those who need a powerful and reliable machine.",
         "index":0,
         "finish_reason":"stop"
      }
   ],
   "usage":{
      "prompt_tokens":9,
      "completion_tokens":109,
      "total_tokens":118
   }
}

前提条件

  • OpenAI APIの基本的なcompletionモデルの概念に精通している必要があります。
  • OpenAI APIキーを作成する:OpenAI APIにアクセスするには、APIキーを作成する必要があります。OpenAIのウェブサイトにログインし、APIキー管理ページに移動して作成できます。
  • APISIXを実行するためにマシンにDockerがインストールされている必要があります。
  • RouteUpstreamPluginなどのAPISIXのコア概念についての基本的な知識が必要です。

プロジェクトのセットアップ

まず、GitHubからapisix-dockerプロジェクトリポジトリをクローンします:

git clone https://github.com/apache/apisix-docker.git

お気に入りのコードエディタでプロジェクトフォルダを開きます。このチュートリアルではVS Codeを使用します。

Apache APISIXのインストールと実行

Apache APISIXを実行するには、以下の手順に従います:

新しいターミナルウィンドウを開き、プロジェクトのルートフォルダからdocker compose upコマンドを実行します:

docker compose up -d

上記のコマンドは、Dockerを使用してApache APISIXとetcdを一緒に実行します。

このデモではDockerを使用してAPISIXをインストールしましたが、インストールガイドには他のインストール方法もあります。

OpenAI APIのUpstreamを作成

セットアップが完了したら、APISIXのAdmin APIを使用してUpstreamオブジェクトを作成します。APISIXの「Upstream」とは、実際のリクエストデータを提供するバックエンドサーバーを指します。

この場合、api.openai.comに単一のノードを持つアップストリームAPIサーバーを定義し、Upstreamと安全に通信するためにhttpsスキームを使用します:

curl "http://127.0.0.1:9180/apisix/admin/upstreams/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
  "name": "OpenAI API upstream",
  "desc": "Add the OpenAI API domain as the upstream",
  "type": "roundrobin",
  "scheme": "https",
  "nodes": {
    "api.openai.com:443": 1
  }
}'

新しいプラグイン設定を作成

次に、proxy-rewriteプラグインを有効にした新しいプラグイン設定を作成します。

このプロキシプラグインは、OpenAI APIのcompletionエンドポイントへのリクエストを再定義するために使用されます。プラグインの設定には、APIエンドポイントのURLを設定し、OpenAI APIキーをヘッダーとして渡し、Content-Typeヘッダーをapplication/jsonに設定するオプションが含まれます。

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"OpenAI API Key",
            "Content-Type":"application/json"
         }
      }
   }
}'

OpenAI completionエンドポイントのルートを設定

次のステップでは、APISIXで新しいルートを設定し、POSTリクエストを処理するための新しいカスタムAPIゲートウェイURIパス/openai/product/descを定義し、前のステップで作成したアップストリームとプラグイン設定をそれぞれの一意のIDで参照します。

curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "name":"OpenAI API completion route",
   "desc":"Create a new route in APISIX for the OpenAI API completion endpoint",
   "methods":[
      "POST"
   ],
   "uri":"/openai/product/desc",
   "upstream_id":"1",
   "plugin_config_id":1
}'

さらに、ルートはリトライ、タイムアウト、キープアライブタイムアウトを設定して、OpenAI APIとの堅牢で回復力のある通信を確保します。

Curlリクエストでテスト

APIをテストするには、cURLやPostmanなどのツールを使用してエンドポイント/openai/product/descにPOSTリクエストを送信します。APIゲートウェイはリクエストをOpenAI APIのcompletionエンドポイントに転送し、結果を成功裏に返します。

curl http://127.0.0.1:9080/openai/product/desc  -X POST -d
'{
   "model":"text-davinci-003",
   "prompt":"Write a brief product description for Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

素晴らしい!実際のcompletionエンドポイントからの応答が得られました:

HTTP/1.1 200 OK
Content-Type: application/json
...
{
   "object":"text_completion",
   ...
   "choices":[
      {
         "text":"\n\nThe Apple 13 Pro is the perfect laptop...",
         "index":0,
         "logprobs":null,
         "finish_reason":"stop"
      }
   ],
...
}

新しいコンシューマーを作成し、認証を追加

これまで、APIゲートウェイの製品説明エンドポイント/openai/product/descは公開されており、未承認のユーザーもアクセス可能でした(APISIXとOpenAI API間の通信はヘッダーのAPIキーで保護されています)。このセクションでは、認証機能を有効にして、未承認のリクエストをAPIに許可しないようにします。

これを行うには、エンドポイントの新しいコンシューマーを作成し、既存のプラグイン設定にbasic-authプラグインを追加して、許可されたユーザーのみがアクセスできるようにします。

以下のコマンドは、username1password1という資格情報を持つ新しいconsumer1を作成します:

curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "username": "consumer1",
    "plugins": {
        "basic-auth": {
            "username": "username1",
            "password": "password1"
        }
    }
}'

次に、既存のプラグイン設定を更新し、basic-authプラグインを追加して、APISIXのルートがAPIが呼び出されるたびにリクエストヘッダーをAPIコンシューマーの資格情報でチェックするようにします:

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"OpenAI API Key",
            "Content-Type":"application/json"
         }
      },
      "basic-auth":{}
   }
}'

これで、リクエストに正しいユーザー資格情報を提供し、同じエンドポイントにアクセスすると、OpenAI APIから期待される応答が得られます:

curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc  -X POST -d \
'{
   "model":"text-davinci-003",
   "prompt":"Write a brief product description for Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

サーバーレスAPIのレート制限ポリシーを適用

このセクションでは、製品説明エンドポイントを悪用から保護するために、スロットリングポリシーを適用します。Apache APISIXゲートウェイでは、レート制限を適用して、着信呼び出しの数を制限できます。

レート制限ポリシーを適用してテスト

既存のルート設定に、limit-countプラグインを使用してレート制限ポリシーを適用し、APIの異常な使用から保護します。API呼び出しの数を60秒あたり2回に制限します。

既存のルートにlimit-countプラグインを有効にするには、Jsonプラグイン設定のプラグインリストにプラグインを追加します:

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"OpenAI API Key",
            "Content-Type":"application/json"
         }
      },
      "basic-auth":{},
      "limit-count":{
         "count":2,
         "time_window":60,
         "rejected_code":403,
         "rejected_msg":"Requests are too frequent, please try again later.",
         "key_type":"var",
         "key":"remote_addr"
      }
   }
}'

Apache APISIXは最初の2つのリクエストを通常通り処理します。しかし、同じ期間内の3回目のリクエストは、カスタムエラーメッセージとともに403 HTTP Forbiddenコードを返します:

curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc  -X POST -d \
'{
   "model":"text-davinci-003",
   "prompt":"Write a brief product description for Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

# 最初の呼び出し後

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 752
Connection: keep-alive
X-RateLimit-Limit: 2
X-RateLimit-Remaining: 1

# 2回目の呼び出し後

HTTP/1.1 403 Forbidden

{"error_msg":"Requests are too frequent, please try again later."}

OpenAI API応答のキャッシュを設定

Apache APISIXのproxy cachingは、API応答をキャッシュし、後続のリクエストにキャッシュされた応答を提供する機能です。これにより、APIリクエストの数を減らすことができ、OpenAI APIの使用コストを削減し、API統合のパフォーマンスを向上させ、APIサーバーの負荷を軽減できます。

Apache APISIXは、キャッシュの有効期限、キャッシュ無効化の条件、その他のキャッシュポリシーを指定できる細かい制御を提供します。

以下の設定では、proxy-cacheプラグインを他のプラグインと一緒に定義し、OpenAI APIのcompletionエンドポイントのPOSTメソッドからの成功した製品説明応答のみをキャッシュします。

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"OpenAI API Key",
            "Content-Type":"application/json"
         }
      },
      "basic-auth":{},
      "proxy-cache":{
         "cache_key":[
            "$uri",
            "-cache-id"
         ],
         "cache_method":[
            "POST"
         ],
         "cache_http_status":[
            200
         ],
         "hide_cache_headers":true
      }
   }
}'

/openai/product/descパスに複数のリクエストを送信し、毎回HTTP 200 OK応答を受け取るはずです。ただし、最初のリクエストがルートにヒットしたとき、応答はまだキャッシュされていないため、Apisix-Cache-StatusMISSと表示されます。次にリクエストを行うと、キャッシュされた応答がHITとして返されます。

応答は以下のようになります:

HTTP/1.1 200 OK
…
Apisix-Cache-Status: MISS

次の呼び出しでは、前のリクエストですでにキャッシュされているため、ルートはキャッシュされた応答でリクエストに応答します:

HTTP/1.1 200 OK
…
Apisix-Cache-Status: HIT

まとめ

Apache APISIXとOpenAI APIの統合は、Apache APISIXのスケーラビリティとパフォーマンスを活用してマイクロサービスを管理し、OpenAIの最先端のAI機能を活用してユーザーに高度で洗練された機能を提供することを含みます。この統合により、開発者はApache APISIXのスケーラビリティとパフォーマンスを活用してマイクロサービスを管理しながら、OpenAIの最先端のAI機能を活用してユーザーに高度で洗練された機能を提供できます。

後の段階では、APISIXとOpenAIのランタイムコードをアプリケーションサーバーまたは任意のパブリッククラウドにデプロイして、本番環境で利用可能にすることができます。

この記事では、OpenAI APIと使用できるApache APISIXプラグインのいくつかの例を示しました。あなたのニーズに最適なプラグインを選択し、アプリケーションの特定の要件を満たすためにApache APISIXとOpenAI APIの統合をカスタマイズできます。

関連リソース

推奨コンテンツ

コミュニティ

🙋 Apache APISIXコミュニティに参加する 🐦 Twitterでフォローする 📝 Slackで見つける

Tags: