本記事ではDify で作ったLLMアプリケーションをLangfuse で可視化してみた時に、処理はどう見えるのか、そしてどのように役に立つのかをご紹介します。
*このブログは前半と後半に分かれており、後半パートなります。
はじめに
前半では、Dify で簡単なフローを作ったアプリケーションを使った場合のLangfuseにおけるTraceの可視化についてご紹介しました。
今回はDify でRAG をつかったフローを構成した場合に、どのように詳細を確認できるかについてご紹介します。
Dify でのサンプルアプリの構成
今回のケースで用いたアプリは、以下の処理をします。
ユーザーが知りたい情報を入力
"知識取得" でRAG で情報参照
"テンプレート" で "知識取得" の出力変数から特定の情報を取得
"LLM" でRAG を利用した回答生成
4の結果を出力

実行すると以下のようになります。
入力Text として 「Dify でLangfuse の設定をする方法を教えて」と質問すると、前述の処理を経て、Result として設定方法をコメントしつつ参照したURLを返してくれるという仕様です。

なお今回は、知識取得においてWEBでクロールした情報を登録しました。
Firecrawl と Jina Reader のいずれからから選択することができますが、HTML から
MarkDown を生成してくれて簡単にAPIキーを取得できるJina Reader を使用しています。
Jina Reader は何もせずともいきなりアクセスした瞬間にAPIキーが払い出されてるというアグレッシブなWebサイトになっており、公式サイトの日本語翻訳が怪しいですが性能の良さを感じました。多言語対応しており、有償版でもコストパフォーマンスも良さそうです (つい最近 v2 がリリースされており、Reader自体はツールというかSLMだそうです)。

またJina からは Rerank と Embedding のモデルも提供されており、今回はそれらをRAGの構成に利用しています。RAGにつかったソースは後述の通り英語で、クエリは日本語ですが高い品質があると感じました (ただ元データが英語なので、クエリも英語の方が結果の精度は高いかなとも思いました)。

今回はあくまでLangfuse での表示が主目的なので、とりあえずデフォルトの10サイトのクロールでLangfuse のBlog記事からデータを以下の通り取得しています。
(余談ですが、特定のフォルダ以下をとるような処理はDify上では正常に動いていないと思われ、トップページなどのURLもクロールしてしまいました。)

Langfuse での見え方
ここからが本題のTrace の見え方です。Trace は前半のブログにも記載がありますので、必要に応じて合わせてご確認ください
前述のフローを動かした際、Trace の詳細は以下のようになります。

各Trace をクリックすると、Input/Output, Token, Metadataなどを を確認することができます。この辺りは基本的同じです。ただ今回はRAG の構成にしておりますので、新たに画面右側部分に" Knowledge-retrieval" があることを確認できると思います。

そしてOutput としてresult が 0, 1, 2 と返ってきており、その中を見ると参照されたドキュメントやScore などが返却されております。Score が高いほど一致率が高いものであり、0に比べて1 や 2 のSocre は低いことが確認できます。

参考までにこのフローでの1 の結果は以下の通りです。Score 0.33 と0 の結果に比べてだいぶ低いということがわかると思います。これは2 になるともっと低いです。

そして今回は "テンプレート" ツール で、0 についてくる各種データもついでにとってきています。単に配列からデータをとってきているだけです。

Langfuse 側でテンプレートに対応するTrace を見るとこのように表示されています。
resultの0 の値だけを正常に取得できています。

そしてLLMには 0の結果を含めて、処理を渡して個別に Metadata 中の Title のValueをアウトプットに含めるように指示しています。

この部分の実際の処理はLangfuse上で以下のように確認できます。
System プロンプトで指示された内容がContext 含めて反映されていることが見てとれ、Title の Value にも取得した元のBlog記事が入っていることがわかります。

そして最終的なアプリの結果は以下のようになっており、期待した通りの動作をしていることを確認することができます。

このようにLangfuse を活用することで、RAGのような処理が必要な際や特定の値をとってくる処理などをした際においても、Dify の各処理を確認しながら、効率的な開発・運用を進めることができます。今回は正常にデータが取れていましたが仮に期待した結果でない場合に、取得元のソースが違うのかなどのdebug にも大変役に立ちます。
Langfuseでの可視化 [Dify編 (後半) ] まとめ
本記事ではLangfuseのTrace機能を通じて、RAGなどを含むDifyの処理の可視化の基本的をご紹介しました。今後、Bedrock やVertexAI などのプラットフォームを使った場合の可視化についても適宜ご紹介をしていきたいと思います。
ガオ株式会社 は企業向けにLangfuse ProおよびEnterpriseプランを日本円で販売し、日本語でサポート提供・導入支援などを実施している唯一の企業です。
Langfuseにご興味ある方は、contact@gao-ai.comまでご連絡ください。
Comentários