APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

VS Code で Cline を試そうとしただけなのに、いつのまにか Azure OpenAI を探索していた話

はじめに

Amazon Bedrock と VS Code (Cline) で AI コーディングを始めようとした、とある日のことでした。

普段使っている社内の AWS 環境では Bedrock への API アクセス権限が付与されていなかったため、急遽、社内の Azure 環境で試してみることにしたんです。これが、思わぬ方向へ進むことになった「事の発端」でした。

Azure OpenAI と衝撃のトークン数

Azure OpenAI で環境を構築し、Azure AI Studio で gpt-35-turbo モデルをデプロイしました。

エンドポイントのターゲットURIとキーをコピーして Cline に設定し、いざ実行。無事に返答が返ってきて「よしよし」と思ったのも束の間、あることに気づきました。

簡単な質問をしたはずなのに、表示されたトークン数は 10,000 を超えています。これは明らかに多すぎますよね。

この予期せぬトークン数に戸惑い、ここからAzure環境の本格的な調査が始まることになったのです。

Azure OpenAI ログ収集、しかし…

さて、問題のトークン消費の調査です。まずは、Azure OpenAI のログを取得してみることにしました。

Azure OpenAI の診断設定で、ログを Log Analytics に出力するように設定します。設定後、すぐにリクエストを送信してみたのですが、ログが一向に出力されません。どうやら、ログの反映には少し時間がかかるようで、5分から10分ほどで無事にログが出力されました。

しかし、ログは出力されたものの、残念なことに期待していたプロンプトの情報の記載がありません。これでは、どのようなリクエストが送信されているのかが全く分かりません。

さて、どうしたものか…。

Azure API Management 導入へ

目的のログが取得できないため、AIチャットに相談したところ、Azure API Management (APIM) を経由する方法を提案されました。早速、これを試してみることにします。

Azure API Management は、API の公開とライフサイクル管理を担う API Gateway サービスです。また、調査を進める中で、取得したいログが APIM の診断設定から収集できるのは、価格レベルが Developer 以上の場合のみであり、従量課金レベルではサポートされていないことが分かりました。

learn.microsoft.com

従量課金レベルでは、リソース ログの収集はサポートされていません。

金額を確認した上で、その中でも安価な Developer レベルで環境を構築することにしました。

azure.microsoft.com

APIM に Azure OpenAI への API を登録するのは非常に簡単です。「APIs」→「API」→「Add API」から「Azure OpenAI Service」を選択し、あとはウィザードの指示に従って作成済みの Azure OpenAI サービスを指定するだけで、パスなどが自動で作成されました。

一難去って、また一難

API の登録まではできたものの、ここから何度か問題に直面しました。

まず、Azure OpenAI へのアクセスが API Management 経由になったため、Cline 側の URL を変更する必要があります。API の画面にある Base URL をコピーし、Cline に第一レベルのパスまでを上書きして登録しました。

さっそくチャットを試しますが、401エラーでつながりません。

デフォルトの設定では、リクエスト時に API キーが必要なようです。そこで、サブスクリプションにあるキーを Cline の設定のヘッダーに登録しました。

まだつながりません。

デフォルトのヘッダー名が Ocp-Apim-Subscription-Key だったのでこれを登録したのですが、どうやら設定を見る限り別のヘッダー名(api-key)が必要なようです。

改めて api-key で設定し直しますが、まだつながりません。

今回試したいのはログ取得であり、認証は本質的な目的ではないため、一時的にサブスクリプションの require 設定を外したところ、無事につながりました。この認証の問題については、また別の機会に深掘りすることにしましょう。

API Gateway 経由で接続できたので、次はログの設定です。OpenAI Service と同じように診断設定を行い、Log Analytics へログを飛ばそうとします。

設定を終え、何度かリクエストを送信してみますが、ログが出力されません。

どうも設定が足りないようで、API Gateway 側での追加設定が必要とのこと。しかし、設定画面を探しても関連するリンクしか見当たらず、設定したい内容がどこにもありません。

何度か診断設定をやり直した結果、ようやく設定項目が表示されるようになりました。これが設定ミスだったのか、それとも単に時間経過で解決したのかは不明です。

これで 「Log LLM Message」 を On にし、再度 Cline からリクエストを投げて、しばらく待ちます。

念願のログ出力!!

そしてついに、念願のログが出力されました!

ログは Log Analytics の APIManagementGatewayLlmLog テーブルに出力されています。

出力されたログにはシーケンス番号が振られており、その内訳は以下の通りでした。

  • 0: リクエストログ
  • 1~4: リクエストデータ
  • 5: レスポンスログ

リクエストデータを一つ確認してみると、

なるほど、原因はこれです。System Role にかなりの設定ががっつり入っていたのですね。このメッセージは削減できないものか、と次の疑問が湧いてきましたが、まずは原因が特定できてスッキリしました!

おわりに

Cline を試してサクッと AI コーディングを始めようとしたはずが、いつのまにか Azure OpenAI のログ出力方法を学ぶ旅になっていました。想定外の展開でしたが、結果として Azure OpenAI Service にじっくりと触れる良い機会となり、多くの学びがありました。

私と同じように、AI コーディングを進める中で似たような疑問を抱いたり、今回の記事で私が直面した箇所で立ち止まってしまったりする方の参考になれば幸いです。

お知らせ

弊社 APCommunications では、Azure を活用した DX 推進、内製化を支援しております。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

hrmos.co

本記事の投稿者: t-umemoto
コンテナや k8s をメインにインフラ系のご支援を担当しています。
更新滞ってますが QiitaZenn に k8s を中心とした記事も投稿しております。よろしければ。