SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

LLMアプリケーションのアーキテクチャ入門

LLMアプリケーションのベストアーキテクチャを探る──ハンズオン実践編


Kong Gateway(OSS)を用いた実践例(2)

統一的なセキュリティ対策を実装する

 続いて、統一的なセキュリティ対策を実装してみましょう。

 ご自身のブラウザでPythonの実行環境であるJupyter Notebookにアクセスします。URL は、http://localhost:8080です。次に、03_prompt_guard.ipynbを開き以下のコードを実行します。

ハンズオン02 - 統一的なセキュリティ対策
ハンズオン02 - 統一的なセキュリティ対策
 import os
 from openai import OpenAI

 client = OpenAI(
 	api_key="dummy",
     base_url=os.getenv("GATEWAY_PROXY_ENDPOINT", "http://localhost:8000") + "/chat"
 )

 stream = client.chat.completions.create(
 	model="gpt-4o-mini",
 	messages=[
     	{"role": "system", "content": "あなたは優秀なアシスタントです"},
     	{"role": "user", "content": "この時期、登山におすすめの山はどこですか?"}
 	],
 	max_tokens=1024,
 	temperature=0.7,
 	stream=True
 )

 for chunk in stream:
 	print(chunk.choices[0].delta.content, end="")

  実行後、問題なく応答が返ってくることを確認してください。ここから、Kong GatewayでPrompt Guardというプラグインを設定し、特定の内容が含まれるリクエストをブロックする設定を行います。まずは、Kong Managerの画面を開き、サイドバーからGateway Servicesを選択し、先ほど作成したchat-serviceを選択します。

ハンズオン02 - chat-serviceの選択
ハンズオン02 - chat-serviceの選択

 次に、Pluginsタブを選択し、+ New Pluginボタンをクリックし、検索窓で Prompt Guardを入力し、表示されたプラグインを選択してください。

ハンズオン02 - Prompt Guardプラグインの選択
ハンズオン02 - Prompt Guardプラグインの選択

 以下のように入力し、プラグインを設定してください。(指示のない箇所は、デフォルト値のまま進めてください。)

  • Deny Patterns:.*登山.*
ハンズオン02 - Prompt Guardプラグインの設定
ハンズオン02 - Prompt Guardプラグインの設定

 Prompt Guardプラグインは、プロンプトに含まれる文字列を検査し、指定された正規表現パターンによってコンテンツを許可/拒否することができるプラグインです。今回は、プロンプトに登山という文字列が含まれている場合にリクエストを拒否するような設定を加えています。先ほどと同様に03_prompt_guard.ipynbのコードを実行してみてください。今回は、プロンプトに「登山」という文字列が含まれているため、Prompt Guardプラグインによってリクエストが拒否され、エラーメッセージが返ってくることを確認できます。

 # ... omit ...
 BadRequestError: Error code: 400 - {'error': {'message': 'bad request'}}

効率的なオブザーバビリティの実現

 ご自身のブラウザでPythonの実行環境であるJupyter Notebookにアクセスします。URL は、http://localhost:8080です。次に、04_metrics.ipynbを開き以下のコードを実行します。

ハンズオン03 - オブザーバビリティの実現
ハンズオン03 - オブザーバビリティの実現
 import requests, os

 response = requests.get(
 	os.getenv("GATEWAY_STATUS_ENDPOINT", "http://localhost:8100") + "/metrics"
 )

 print(response.text)

 こちらのコードはKong Gatewayから公開されているStatus APIを呼び出し、メトリクス情報を取得する例です。実行すると、以下のようにPrometheus形式のメトリクスを取得することができます。

 # HELP kong_datastore_reachable Datastore reachable from Kong, 0 is unreachable
 # TYPE kong_datastore_reachable gauge
 kong_datastore_reachable 1
 # HELP kong_memory_lua_shared_dict_bytes Allocated slabs in bytes in a shared_dict
 # TYPE kong_memory_lua_shared_dict_bytes gauge
 kong_memory_lua_shared_dict_bytes{node_id="4c586433-4ca8-478f-b4c9-695078562a14",shared_dict="kong",kong_subsystem="http"} 45056
 # ... 省略 ...

 公開されているメトリクス情報には、AI関連のメトリクスが含まれていないことが確認できます。Kong Gatewayでは、これを有効化するためにPrometheusプラグインを利用します。Kong Managerの画面を開き、サイドバーからGateway Servicesを選択し、先ほど作成したchat-serviceを選択します。

ハンズオン03 - chat-serviceの選択
ハンズオン03 - chat-serviceの選択

  次に、Pluginsタブを選択し、+ New Pluginボタンをクリックし、検索窓で Prometheusを入力し、表示されたプラグインを選択してください。

ハンズオン03 - Prometheusプラグインの選択
ハンズオン03 - Prometheusプラグインの選択

  以下のように入力し、プラグインを設定してください。指示のない箇所は、デフォルト値のまま進めてください。

  • Advanced Parameters
    • Ai Metrics:チェックを入れる
ハンズオン03 - Prometheusプラグインの設定
ハンズオン03 - Prometheusプラグインの設定

  この状態で、02_openai_with_kong_gateway.ipynbのコードを何回か実行し、Kong Gateway経由でOpenAIのAPIを呼び出してみてください。再度、04_metrics.ipynbのコードを実行すると、以下のようにAI関連のメトリクスが取得できることが確認できます。

 # ... 省略 ...
 # HELP kong_ai_llm_tokens_total AI requests cost per ai_provider/cache in Kong
 # TYPE kong_ai_llm_tokens_total counter
 kong_ai_llm_tokens_total{ai_provider="openai",ai_model="gpt-4o-mini",cache_status="",vector_db="",embeddings_provider="",embeddings_model="",token_type="completion_tokens",workspace="default"} 59
 kong_ai_llm_tokens_total{ai_provider="openai",ai_model="gpt-4o-mini",cache_status="",vector_db="",embeddings_provider="",embeddings_model="",token_type="prompt_tokens",workspace="default"} 4
 kong_ai_llm_tokens_total{ai_provider="openai",ai_model="gpt-4o-mini",cache_status="",vector_db="",embeddings_provider="",embeddings_model="",token_type="total_tokens",workspace="default"} 63
 # ... 省略 ...

API Gatewayをより広範なユースケースに用いたい方へ

 今回は、Kong Gateway(OSS)を用いてハンズオンを実施しましたが、Kong Gateway(Enterprise)を利用することで、さらに多くのユースケースに対応することができます。以下は、対応可能なユースケースの一例です。

  • セマンティック・キャッシュ:意味的に近い問い合わせをLLM APIへ問い合わせることなく、キャッシュ・サーバーから応答を返すことが可能です。これにより、トークン使用量の削減や応答時間の短縮が期待できます。
  • RAGパイプラインの構築:ベクトルデータベース(pgvector, Redis)と組み合わせることで、RAGのパイプライン作成が可能です。これにより、外部知識を活用した応答生成が可能になります。
  • MCP Serverの公開:REST APIで作成されているAPIをプラグインを用いることで、MCP Serverとして公開することが可能です。

まとめ

 本記事では、LLMアプリケーションにおけるAPI/AI Gatewayの活用方法について説明しました。具体的には、Kong Gateway(OSS)を用いたハンズオンを通じて、API Keyや推論パラメータ、プロンプトの中央管理、統一的なセキュリティ対策、効率的なオブザーバビリティの実現について紹介しました。特に複数のLLMアプリケーションを開発・運用する場合、統一的なポリシーを効かせるためにAPI Gatewayが有効的に使えることが確認できたかと思います。この記事が、LLMアプリケーションの開発・運用に携わる方々の一助になれば幸いです。

関連リンク

この記事は参考になりましたか?

LLMアプリケーションのアーキテクチャ入門連載記事一覧
この記事の著者

川村 修平(カワムラ シュウヘイ)

SIerやクラウドベンダーを経て、Kong株式会社でポストセールスエンジニアを務める。コミュニティ活動では、CloudNative Daysというコミュニティでオブザーバビリティチームに所属。著書:Web API開発実践ガイド、OCIで学ぶクラウドネイティブ 実践×理論ガイド、その他技術同人誌

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22972 2026/01/28 12:34

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング