Kong AI Gatewayとは

# はじめに
本記事では、Kong Gatewayの機能のひとつであるKong AI Gatewayについて、以下の公式ドキュメントをもとに整理していきます。

https://docs.konghq.com/gateway/latest/ai-gateway/

# Kong AI Gatewayとは

Kong AI Gatewayは、Kong GatewayにAIプラグインを組み込むことで、大規模言語モデル（LLM）へのトラフィック管理を実現する仕組みです。

主なプラグインとして、オープンソースの「AI Proxy」と、より高度な機能を提供するEnterpriseプラグインの「AI Proxy Advanced」があります。これらのプラグインにより、Kong Gatewayは特定のLLMモデルへのトラフィックを効率的にプロキシすることができます。
その他にも、AI利用ガバナンスのための様々なプラグインが提供されています。

![Kong AI Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2812915/ccf450b2-3e4d-3fe1-637e-41684ea8abba.png)


## メリット
* クライアントアプリはAIプロバイダのAPI仕様から独立でき、コードを再利用しやすくなります
* AIプロバイダのクレデンシャルを集中管理できます
* AI Gatewayは、AIデータを管理し監視するための主要なハブとして機能します
* リクエストは動的にルーティング可能で、コストや使用量、精度などを基にAI利用を最適化できます
* AIサービスは他のKong Gatewayプラグインと組み合わせて、通常のAPIトラフィックを強化できます


## サポートするLLMリクエスト
* **Completion**：
AIシステムが一つのプロンプトに基づいてテキスト出力を生成するよう依頼されるリクエストのタイプです。

* **Chat**：
チャットリクエストは、会話型AIインターフェースにおけるユーザーの入力の一種です。ここでは、AIがユーザの入力に対してダイアログ形式で応答することが求められます。その応答は、AIシステムがこれまでの会話履歴を基に生成します。

## サポートするAIプロバイダ
2024/12現在では、以下のAIプロバイダに対応しています。
ホスト型とセルフホスト型の両方に対応しています。

* ホスト型
    * OpenAI
    * Cohere
    * Azure
    * Anthropic
    * Amazon Bedrock
    * Gemini
* セルフホスト型
    * Mistral
    * Llama2
    * Llama3


# AIプラグインの紹介
KongのPlugin Hubに掲載されているAIプラグインについて紹介します。

https://docs.konghq.com/hub/?category=ai

* **AI Proxy**：
AI Proxyは、多くのAIプロバイダやモデルへのリクエストを変換してプロキシするプラグインです。標準フォーマットで受け取ったリクエストをプロキシ先AIプロバイダのフォーマットに変換し返します。これにより、クライアントアプリはAIプロバイダの仕様から保護され、認証情報を一元管理できます。

* **AI Proxy Advanced**： ※商用版のみ
AI Proxy Advancedは、AI Proxyの機能に加えてロードバランシング機能を持ち、リクエストを効率的に分配できます。プロンプトの類似性に基づき適切なAIモデルを自動選択するセマンティックルーティングが利用できます。

* **AI Prompt Decorator**：
リクエストのチャットメッセージに指定したテキストを追加します。これによりシステムプロンプトやメッセージ履歴を設定でき、LLMサービスの利用を制御します。

* **AI Prompt Guard**：
正規表現によるプロンプト、単語、フレーズの許可／ブロックを設定し、機密情報の送信を防ぎます。

* **AI Semantic Prompt Guard**：
類似プロンプトのリストに基づいてプロンプトを許可またはブロックします。

* **AI Prompt Template**：
AIプロンプトのテンプレートを提供し、変数プレースホルダーを使ってカスタマイズできます。独自のAPIとしてLLMを利用することもできます。

* **AI Rate Limiting Advanced**： ※商用版のみ
LLMから返されたトークンデータを使用して流量制御を行います。カスタム関数でトークンをカウントすることも可能です。

* **AI Request Transformer**：
LLMを利用してリクエストボディを変換します。たとえば、「クレジットカード番号を*でマスクして」というように自然言語で指示を設定できます。また、変換に使用するLLMプロバイダを選択することも可能です。

* **AI Response Transformer**：
LLMを利用してレスポンスボディを変換します。たとえば、「クレジットカード番号を*でマスクして」というように自然言語で指示を設定できます。また、変換に使用するLLMプロバイダを選択することも可能です。

* **AI Semantic Cache**：
意図と意味的な類似性に基づいてレスポンスを保存し、キャッシュされたクエリを取り出すことで、応答時間を短縮します。ただし、多くのストレージとコンピューティングパワーを必要とする場合があります。

* **Azure Content Safety**： ※商用版のみ
リクエストをAzure Content Safetyサービスに送信し、有害なコンテンツを識別・ブロックします。

# Kong AI Gatewayのセットアップ
今回は「AI Proxy」プラグインを使用して、OpenAIへリクエストを送る際の設定方法を紹介します。

## 環境
* WSL 2
* Ubuntu 22.04.1
* Docker v1.0.29


## 設定手順
### Kong Gatewayのデプロイ

どのデプロイ方式であってもAIプラグインは利用可能です。
今回はKong GatewayをTraditionalモードでデプロイして構築します。

### AI Proxyプラグインの設定
以下を参考に、Open AIでAI Proxyプラグインを設定します。

https://docs.konghq.com/hub/kong-inc/ai-proxy/how-to/llm-provider-integration-guides/openai/

(1) Serviceを作成します。
今回はKong Admin APIを使用して作成していますが、Kong Managerを使用してGUIで設定も可能です。

```bash
 $ curl -X POST http://localhost:8001/services \
 --data "name=ai-proxy" \
 --data "url=http://localhost:32000"
```

:::note info
Kong Gatewayの8001ポートは、Admin APIのポートです。
:::

AI Proxyプラグインを使用する際、Routeに対応するServiceのURLには任意のものを指定できます。これは、AI ProxyプラグインがアップストリームのURLを上書きするためです。ただし、Kong Gatewayの仕様上、Serviceを設定しないといけないようになっています。
将来的にこの仕様は変更されるようです。


(2) Routeを設定します。

```bash
$ curl -X POST http://localhost:8001/services/ai-proxy/routes \
 --data "name=openai-chat" \
 --data "paths[]=~/openai-chat$"
```

(3) AI Proxyプラグインを追加します。

```bash
$ curl -X POST http://localhost:8001/routes/openai-chat/plugins \
 --data "name=ai-proxy" \
 --data "config.route_type=llm/v1/chat" \
 --data "config.auth.header_name=Authorization" \
 --data "config.auth.header_value=Bearer <openai_key>" \
 --data "config.model.provider=openai" \
 --data "config.model.name=gpt-4" \
 --data "config.model.options.max_tokens=512" \
 --data "config.model.options.temperature=1.0"
```

設定内容は以下の通りです。

| 項目名                           | 説明                                                         | 設定値              |
| -------------------------------- | ------------------------------------------------------------ | ------------------- |
| config.route_type                | このプロバイダに対するLLMリクエストを設定する。`preserve`に設定すると、変換なしで通過する。 | llm/v1/chat         |
| config.auth.header_name          | APIキー認証のためのヘッダ名。                                | Authorization       |
| config.auth.header_value         | ヘッダに設定する値。OpenAIの場合、APIキーを設定する。        | Bearer <openai_key> |
| config.model.provider            | モデルのプロバイダ。設定可能な値は[こちら](https://docs.konghq.com/hub/kong-inc/ai-proxy/#request-and-response-formats)。 | openai              |
| config.model.name                | 使用するモデル名。                                           | gpt-4               |
| config.model.options.max_tokens  | max_tokensパラメータを定義する。                             | 512                 |
| config.model.options.temperature | temperatureパラメータを定義する。                | 1.0                 |

## 動作確認

(1) AI Proxyプラグインを設定したRouteへ、リクエストを送信します。

Kongは、設定された`config.provider`と`config.route_type`に基づいてリクエストとレスポンスのフォーマットを仲介します。AI Proxyプラグインは、すべてのプロバイダで[標準化されている入力フォーマット](https://docs.konghq.com/hub/kong-inc/ai-proxy/#input-formats)を使用します。

```bash
$ curl --request POST \
  --url http://localhost:8000/openai-chat \
  --header 'Content-Type: application/json' \
  --data '{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "野村総合研究所はどのような会社ですか。"
        }
    ]
}'
```

(2) OpenAIからレスポンスが返ってきたことを確認します。
レスポンスのフォーマットもすべてのプロバイダで[標準フォーマット](https://docs.konghq.com/hub/kong-inc/ai-proxy/#response-formats)に変換されます。

```bash
{
    "id": "chatcmpl-A3IJ62s6sSrhJFpnS5pYSV9AmbUiT",
    "object": "chat.completion",
    "created": 1725348720,
    "model": "gpt-3.5-turbo-0125",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "野村総合研究所は、野村ホールディングスグループの一員であり、情報技術・金融技術を中心とした研究開発、コンサルティング、システム開発、情報セキュリティ対策などを行う企業です。金融業界を中心に、幅広い分野でシステム開発やコンサルティング業務を提供しています。また、金融技術の先端を追求し、新たな価値創造に取り組んでいます。",
                "refusal": null
            },
            "logprobs": null,
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 42,
        "completion_tokens": 185,
        "total_tokens": 227
    },
    "system_fingerprint": null
}
```


# さいごに
本記事では、Kong AI Gatewayのメリット、プラグイン、およびAI Proxyプラグインの設定方法をご紹介しました。これらのツールを活用することで、AIプロバイダ間のスムーズな統合と管理を実現できます。ぜひ、Kong AI Gatewayを活用してAIサービスの最適化とセキュリティ強化を図ってみてはいかがでしょうか。