LLM監視ツールLangfuseをSAP BTP, Kyma runtimeにデプロイしてみた

Estimated read time 3 min read

今回は、オープンソースのLLMアプリケーション監視ツールであるLangfuseを、SAP BTP上のKubernetes互換ランタイムであるSAP BTP, Kyma runtimeにデプロイする手順をステップバイステップでご紹介します。生成AIを活用するにあたり避けては通れない監視の問題ですが、本ブログが少しでも役に立てば幸いです。 

はじめに 

生成AIが私たちの日常生活や業務に深く浸透している中で、多くの企業や個人がチャットボットや自動化ツールなどの応用を進めています。例えば、カスタマーサポートの自動化、データ分析の高度化、さらには新しい製品やサービスの企画支援まで、多岐にわたる分野で利用されています。 

特に注目されているのが、LangChainのようなAIエージェントを活用したアプリケーションです。LangChainは、複数のツールや外部データソースを組み合わせて高度な応答を生成できる強力なフレームワークとして、多くの開発者に採用されています。しかし、これらのAIエージェントの運用には新たな課題が伴います。 

たとえば、次のような問題が一般に挙げられます。 

プロンプトの品質やモデルのパフォーマンスの管理: 
応答の精度を向上させるためには、適切なプロンプト設計やモデル選択が不可欠ですが、その効果を正確に評価するのは困難です。 外部APIやツールのトレース: 
AIエージェントが利用する外部サービスの挙動を把握し、問題が発生した際の迅速な原因特定が求められます。 エラーや応答時間のモニタリング: 
運用環境でのパフォーマンス指標(例:応答時間、エラー率)のリアルタイム監視が重要となります。 ユーザーフィードバックの活用: 
生成AIの応答がユーザーの期待にどの程度応えられているかを継続的に把握し、改善に反映する仕組みが必要です。 

これらの課題を解決するため、開発者はAIエージェントの動作を詳細に監視・評価し、迅速に改善を行うツールの必要性を強く感じています。こうした背景の中で、LangfuseのようなLLMアプリケーション専用のモニタリングプラットフォームが注目されているのです。 

Langfuseとは 

Langfuseは、大規模言語モデル(LLM)を活用したアプリケーションの開発、監視、評価、デバッグを支援するオープンソースのLLMOpsプラットフォームです。開発からテスト、大規模なモニタリングやデバッグまで、生成AIプロダクトの全サイクルをサポートします。   

主な特徴とメリットは下記の通りです。 

オープンソースでの提供: Langfuseはオープンソースとして提供されており、セルフホスティングが可能です。これにより、カスタマイズや長期的な利用が容易になります。   多様なフレームワークとの統合: LangChainやLlamaIndexなどの主要なLLMフレームワークとシームレスに統合でき、既存のワークフローに組み込みやすくなっています。   詳細なトレース機能: 外部APIやツールの呼び出し、コンテキスト、プロンプトなど、製品の完全なコンテキストをキャプチャし、アプリケーションの動作を詳細に追跡できます。   リアルタイムのメトリクス監視: 応答時間、エラー率、スループットなどの主要なパフォーマンス指標をリアルタイムで監視し、迅速な対応が可能です。   ユーザーフィードバックの収集: ユーザーからのフィードバックを収集し、アプリケーションのパフォーマンスとユーザーエクスペリエンスの向上に役立てることができます。  評価とテスト機能: LLMを用いた評価や人的なアノテーションワークフローを設定することで、異なるモデルやプロンプトのパフォーマンスを比較できます。また、A/Bテストを通じて最適なソリューションを決定することが可能です。   柔軟なデプロイメント: オンプレミスやクラウドなど、さまざまな環境でのデプロイメントに対応しており、プロジェクトの規模に応じて柔軟に対応できます。 

このような特徴により、LangfuseはLLMアプリケーションの開発者にとって強力なツールとなり、アプリケーションの品質向上と効率的な運用を実現します。  

参考: https://langfuse.com/jp 

  

手順 

それでは、このLangfuseをSAP BTP上にホストする手順についてご紹介します。 

前提条件 

SAP BTP, Kyma runtime が利用可能なアカウントを保持していること。 ローカルの開発環境に kubectl cli / helm cli / kubelogin がインストールされていること。お持ちでない場合には、下記を参考にインストールを行なってください。 kubectl: https://kubernetes.io/docs/tasks/tools/ helm: https://helm.sh/ja/docs/intro/install/ kubelogin: https://github.com/int128/kubelogin#setup 

 1. SAP BTPでのKyma環境のセットアップ 

まず、SAP BTP上でSAP BTP, Kyma runtime を有効化し、ユーザーに権限を付与します。詳細については下記のチュートリアルをご参照ください。 

https://developers.sap.com/tutorials/cp-kyma-getting-started..html 

2.kubectlの設定

この章では、下記URLを参考に、SAP Kyma runtimeに対してkubectlからの接続を行います。  

https://help.sap.com/docs/btp/sap-business-technology-platform/access-kyma-instance-using-kubectl 

kubeconfig.yamlファイルの取得 

SAP BTP Cockpitからkubeconfigファイルをダウンロードします。 
下図のkubeconfig URLというリンクをクリックすると、kubeconfig.yamという設定ファイルのダウンロードが始まります。これを用いて、kubectlをSAP BTP, Kyma runtimeへと接続することができます。 

設定の確認 

ターミナルで下記のコマンドを実行し、SAP BTP, Kyma runtime上のクラスターの設定情報を読み込ませ、正常に設定できていることを確認します。`/path/to/kubeconfig.yaml `はご自身の環境に合わせて設定してください。また、下記はMacOSのコマンドになります。Wndowsの場合には環境変数設定のコマンドが異なりますので、上記リンクより対応するコマンドをご確認ください。  

 

export KUBECONFIG=/path/to/kubeconfig.yaml
kubectl config get-context

 

 

問題なければ、早速Langfuseをデプロイしていきます。 

 3. LangfuseをSAP BTP, Kyma Runtimeにデプロイする 

この章では、下記公式ガイドを参照しながら、langfuse-k8sをデプロイしていきます。 

https://langfuse.com/self-hosting/kubernetes-helm 

まず、Gitリポジトリからソースコードをクローンします。 

 

git clone https://github.com/langfuse/langfuse-k8s.git
cd langfuse-k8s/charts/langfuse

 

 次に、今回の検証用のネームスペースをSAP BTP, Kyma runtime上に作成します。 

 

kubectl create namespace langfuse-v3-preview

 

 これにより、SAP BTP, Kyma runtimeに今回のLangfuseを動かすためのネームスペースが作成されます。 

Kubernetes の パッケージ管理ツールである Helm を用いて依存関係をアップデートし、たった今作成した langfuse-v3-preview というネームスペースにデプロイを行います。 

 

helm dependency update
helm install langfuse . -n langfuse-v3-preview

 

4. Langfuse UIへアクセスしてみる 

SAP BTP, Kyma runtimeへのデプロイ状況を確認するため、下記のコマンドを実行します。 

 

kubectl get services –n langfuse-v3-preview

 

 

こちらによるとlangfuse-webというアプリケーションの接続種類がCluster IPとなっており、External-IPが割り当てられておらず、このままでは外部からのアクセスができません。そこで、下記のコマンドを実行します。 

 

kubectl edit service langfuse-web -n langfuse-v3-preview

 

このコマンドによってlangfuse-webの設定に対して、変更を加えることができます。下記のように設定を書き換えましょう。この設定により、しばらく待つとExternal IPが付与されます。 

 

spec:
type: LoadBalancer ## 元々はCluster IPとなっていた

 

 これでLangfuse UIへアクセスができるようになったはずなので、確認してみましょう。下記からアクセスが可能となります。再度下記コマンドを実行し、次のURLからアクセスしてみましょう。 

 

kubectl get services –n langfuse-v3-previewhttp://<langfuse-webのEXTERNAL-IP>:< langfuse-webのPORT(S)>

 

 

上記が、アクセスした際のトップ画面となります。まずは「 Sign Up 」よりアカウントを作成しましょう。 

上記のようにユーザー名やパスワードを設定します。ユーザー登録を行うと、初期設定では`http://localhost:3000`にリダイレクトされるはずで、この場合にはブラウザのエラーページが表示されます。これは認証後のコールバックURLが上記のように設定されているだけで、裏側では正常にユーザーが作成されており、これは問題ありません。再度下記URLへアクセスを行い、作成したアカウントでログインを行なってください。

 

http://<langfuse-webのExternal IP>:< langfuse-webのPort>

 

すると、このようにログインが成功します。このあとは、任意の名前のOrganizationとProjectを作成することで、最終的にダッシュボード画面まで辿り着くことができます。 

おわりに 

今回のブログでは、OSSであるLangfuseをSAP BTP, Kyma runtimeにデプロイする手順をご紹介しました。KubernetesへのデプロイをサポートするLangfuseの特性から、互換性のあるSAP BTP, Kyma runtimeを用いてデプロイを行うことで、比較的簡単に環境を構築することができました。 

次回のブログでは、今回構築したLangfuseとLangChainを統合して、生成AIアプリケーションのデバッグやモニタリングを行う方法について解説する予定です。お楽しみに! 

 

​ 今回は、オープンソースのLLMアプリケーション監視ツールであるLangfuseを、SAP BTP上のKubernetes互換ランタイムであるSAP BTP, Kyma runtimeにデプロイする手順をステップバイステップでご紹介します。生成AIを活用するにあたり避けては通れない監視の問題ですが、本ブログが少しでも役に立てば幸いです。 はじめに 生成AIが私たちの日常生活や業務に深く浸透している中で、多くの企業や個人がチャットボットや自動化ツールなどの応用を進めています。例えば、カスタマーサポートの自動化、データ分析の高度化、さらには新しい製品やサービスの企画支援まで、多岐にわたる分野で利用されています。 特に注目されているのが、LangChainのようなAIエージェントを活用したアプリケーションです。LangChainは、複数のツールや外部データソースを組み合わせて高度な応答を生成できる強力なフレームワークとして、多くの開発者に採用されています。しかし、これらのAIエージェントの運用には新たな課題が伴います。 たとえば、次のような問題が一般に挙げられます。 プロンプトの品質やモデルのパフォーマンスの管理: 応答の精度を向上させるためには、適切なプロンプト設計やモデル選択が不可欠ですが、その効果を正確に評価するのは困難です。 外部APIやツールのトレース: AIエージェントが利用する外部サービスの挙動を把握し、問題が発生した際の迅速な原因特定が求められます。 エラーや応答時間のモニタリング: 運用環境でのパフォーマンス指標(例:応答時間、エラー率)のリアルタイム監視が重要となります。 ユーザーフィードバックの活用: 生成AIの応答がユーザーの期待にどの程度応えられているかを継続的に把握し、改善に反映する仕組みが必要です。 これらの課題を解決するため、開発者はAIエージェントの動作を詳細に監視・評価し、迅速に改善を行うツールの必要性を強く感じています。こうした背景の中で、LangfuseのようなLLMアプリケーション専用のモニタリングプラットフォームが注目されているのです。 Langfuseとは Langfuseは、大規模言語モデル(LLM)を活用したアプリケーションの開発、監視、評価、デバッグを支援するオープンソースのLLMOpsプラットフォームです。開発からテスト、大規模なモニタリングやデバッグまで、生成AIプロダクトの全サイクルをサポートします。   主な特徴とメリットは下記の通りです。 オープンソースでの提供: Langfuseはオープンソースとして提供されており、セルフホスティングが可能です。これにより、カスタマイズや長期的な利用が容易になります。   多様なフレームワークとの統合: LangChainやLlamaIndexなどの主要なLLMフレームワークとシームレスに統合でき、既存のワークフローに組み込みやすくなっています。   詳細なトレース機能: 外部APIやツールの呼び出し、コンテキスト、プロンプトなど、製品の完全なコンテキストをキャプチャし、アプリケーションの動作を詳細に追跡できます。   リアルタイムのメトリクス監視: 応答時間、エラー率、スループットなどの主要なパフォーマンス指標をリアルタイムで監視し、迅速な対応が可能です。   ユーザーフィードバックの収集: ユーザーからのフィードバックを収集し、アプリケーションのパフォーマンスとユーザーエクスペリエンスの向上に役立てることができます。  評価とテスト機能: LLMを用いた評価や人的なアノテーションワークフローを設定することで、異なるモデルやプロンプトのパフォーマンスを比較できます。また、A/Bテストを通じて最適なソリューションを決定することが可能です。   柔軟なデプロイメント: オンプレミスやクラウドなど、さまざまな環境でのデプロイメントに対応しており、プロジェクトの規模に応じて柔軟に対応できます。 このような特徴により、LangfuseはLLMアプリケーションの開発者にとって強力なツールとなり、アプリケーションの品質向上と効率的な運用を実現します。  参考: https://langfuse.com/jp   手順 それでは、このLangfuseをSAP BTP上にホストする手順についてご紹介します。 前提条件 SAP BTP, Kyma runtime が利用可能なアカウントを保持していること。 ローカルの開発環境に kubectl cli / helm cli / kubelogin がインストールされていること。お持ちでない場合には、下記を参考にインストールを行なってください。 kubectl: https://kubernetes.io/docs/tasks/tools/ helm: https://helm.sh/ja/docs/intro/install/ kubelogin: https://github.com/int128/kubelogin#setup  1. SAP BTPでのKyma環境のセットアップ まず、SAP BTP上でSAP BTP, Kyma runtime を有効化し、ユーザーに権限を付与します。詳細については下記のチュートリアルをご参照ください。 https://developers.sap.com/tutorials/cp-kyma-getting-started..html 2.kubectlの設定この章では、下記URLを参考に、SAP Kyma runtimeに対してkubectlからの接続を行います。  https://help.sap.com/docs/btp/sap-business-technology-platform/access-kyma-instance-using-kubectl kubeconfig.yamlファイルの取得 SAP BTP Cockpitからkubeconfigファイルをダウンロードします。 下図のkubeconfig URLというリンクをクリックすると、kubeconfig.yamという設定ファイルのダウンロードが始まります。これを用いて、kubectlをSAP BTP, Kyma runtimeへと接続することができます。 設定の確認 ターミナルで下記のコマンドを実行し、SAP BTP, Kyma runtime上のクラスターの設定情報を読み込ませ、正常に設定できていることを確認します。`/path/to/kubeconfig.yaml `はご自身の環境に合わせて設定してください。また、下記はMacOSのコマンドになります。Wndowsの場合には環境変数設定のコマンドが異なりますので、上記リンクより対応するコマンドをご確認ください。   export KUBECONFIG=/path/to/kubeconfig.yaml
kubectl config get-context   問題なければ、早速Langfuseをデプロイしていきます。  3. LangfuseをSAP BTP, Kyma Runtimeにデプロイする この章では、下記公式ガイドを参照しながら、langfuse-k8sをデプロイしていきます。 https://langfuse.com/self-hosting/kubernetes-helm まず、Gitリポジトリからソースコードをクローンします。  git clone https://github.com/langfuse/langfuse-k8s.git
cd langfuse-k8s/charts/langfuse   次に、今回の検証用のネームスペースをSAP BTP, Kyma runtime上に作成します。  kubectl create namespace langfuse-v3-preview   これにより、SAP BTP, Kyma runtimeに今回のLangfuseを動かすためのネームスペースが作成されます。 Kubernetes の パッケージ管理ツールである Helm を用いて依存関係をアップデートし、たった今作成した langfuse-v3-preview というネームスペースにデプロイを行います。  helm dependency update
helm install langfuse . -n langfuse-v3-preview 4. Langfuse UIへアクセスしてみる SAP BTP, Kyma runtimeへのデプロイ状況を確認するため、下記のコマンドを実行します。  kubectl get services –n langfuse-v3-preview   こちらによるとlangfuse-webというアプリケーションの接続種類がCluster IPとなっており、External-IPが割り当てられておらず、このままでは外部からのアクセスができません。そこで、下記のコマンドを実行します。  kubectl edit service langfuse-web -n langfuse-v3-preview  このコマンドによってlangfuse-webの設定に対して、変更を加えることができます。下記のように設定を書き換えましょう。この設定により、しばらく待つとExternal IPが付与されます。  spec:
type: LoadBalancer ## 元々はCluster IPとなっていた   これでLangfuse UIへアクセスができるようになったはずなので、確認してみましょう。下記からアクセスが可能となります。再度下記コマンドを実行し、次のURLからアクセスしてみましょう。  kubectl get services –n langfuse-v3-previewhttp://<langfuse-webのEXTERNAL-IP>:< langfuse-webのPORT(S)>  上記が、アクセスした際のトップ画面となります。まずは「 Sign Up 」よりアカウントを作成しましょう。 上記のようにユーザー名やパスワードを設定します。ユーザー登録を行うと、初期設定では`http://localhost:3000`にリダイレクトされるはずで、この場合にはブラウザのエラーページが表示されます。これは認証後のコールバックURLが上記のように設定されているだけで、裏側では正常にユーザーが作成されており、これは問題ありません。再度下記URLへアクセスを行い、作成したアカウントでログインを行なってください。 http://<langfuse-webのExternal IP>:< langfuse-webのPort>  すると、このようにログインが成功します。このあとは、任意の名前のOrganizationとProjectを作成することで、最終的にダッシュボード画面まで辿り着くことができます。 おわりに 今回のブログでは、OSSであるLangfuseをSAP BTP, Kyma runtimeにデプロイする手順をご紹介しました。KubernetesへのデプロイをサポートするLangfuseの特性から、互換性のあるSAP BTP, Kyma runtimeを用いてデプロイを行うことで、比較的簡単に環境を構築することができました。 次回のブログでは、今回構築したLangfuseとLangChainを統合して、生成AIアプリケーションのデバッグやモニタリングを行う方法について解説する予定です。お楽しみに!    Read More Technology Blogs by SAP articles 

#SAP

#SAPTechnologyblog

You May Also Like

More From Author