0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LangfuseでのRAGを監視しよう

0
Last updated at Posted at 2026-05-08

はじめに

こんにちは!
Dirbatoの社内横断技術支援組織「Backbeat」に所属している繁田です。

前回のRAG評価の話に続けて、今回はRAGの運用監視について投稿します!

前回までで、「このRAG、どこが悪いの?」 を数字で語れるようになったわけです。
でも、次に来る問題があります。

本番で何が起きてるか、見えてますか?

ここで必要になるのが Langfuse です。


Langfuseとは?

一言でいうと、

Langfuse は OSS の LLM 監視・評価基盤

です。

Langfuseを使うと、RAGの1リクエストについて

  • 質問
  • retrieval結果
  • 回答
  • レイテンシ
  • 評価スコア

を trace として残せます。

つまり、

  • Ragas = 評価する
  • Langfuse = 溜める、見る、監視する

という役割分担です。


LangSmithとの違い

同様なツールとしてLangSmithもかなり強いです。
ただ、Langfuseには分かりやすい特徴があります。

Langfuseの強み

  • OSS
  • 活発なコミュニティ/OSSとして入手しやすい
  • Docker Composeで試しやすい
  • Helm / Terraform(AWS, Azure, GCP) がある
  • Self-hostしやすい

LangSmithの強み

  • LangChain / LangGraph との親和性
  • 商用基盤としての統合度

ざっくり言うと、

OSSで始めたいなら Langfuse
LangChainど真ん中なら LangSmith

という理解でOKです。


Ragasだけでは足りない理由

Ragasは優秀ですが、基本は評価ロジックです。

なので、Ragasだけだとこうなりがちです。

  • 評価結果をprintして終わる
  • 本番のどの質問が悪かったか追えない
  • retrievalの失敗と回答の失敗を後から辿りにくい

一方 Langfuse に trace と score を残しておくと、

  • Faithfulness が低い trace を後から見る
  • retrieval がズレたケースだけ拾う
  • prompt変更後に悪化した trace を比較する

みたいなことができます。


実装の考え方:Langfuse + Ragas

やることはシンプルです。

1. RAG実行をLangfuseに記録
2. 質問・コンテキスト・回答を保存
3. 一部データだけRagasで評価
4. スコアをLangfuseに戻す

つまり、

Ragasでスコアを計算して、Langfuseに記録する

だけです。


1. Langfuseの環境準備

公式サイトに沿って環境を作ります。
丁寧に解説されているので、この通り進めればOKです。

今回はDocker Composeで構築します。
Docker Composeで構築後、localhost:3000にアクセスします。
Organization、Projectと作成し、APIKEY(Secretkey, Publickey)を作成します。

他にもk8s HelmやTerraformでも構築できます。

2. Langfuseで trace を残す

RAGにLangfuseを組み込み、traceを残します。

from langfuse import Langfuse

langfuse = Langfuse(
    secret_key="xxx",
    public_key="xxx",
    host="http://localhost:3000"  # self-host時
)

trace = langfuse.start_observation(
    name="rag-query",
    input={"question": question},
    output={"answer": answer, "contexts": contexts}
)

大事なのは、Ragas評価に必要な情報を trace に残しておくことです。
※Langfuseへの連携方法は以下参照。導入時に各公式ドキュメント(SDKリファレンス)を確認してください。


2. Ragasで評価する

次に、Ragasでスコアを計算します。

from datasets import Dataset
from ragas import evaluate
from ragas.metrics import Faithfulness, ResponseRelevancy

ds = Dataset.from_dict(evaluation_batch)
result = evaluate(ds, metrics=[Faithfulness(), ResponseRelevancy()])
scores = result.to_pandas().iloc[0].to_dict()
print(scores)

例えばこんな結果になります。

{'faithfulness': 0.5516, 'answer_relevancy': 0.9294}

※Ragas evaluate の戻り値やメソッド名はバージョン差があるため、導入時に公式ドキュメントを確認してください。


3. スコアをLangfuseに戻す

ここが連携のキモです。

# 個別にスコアを紐付ける
for name, value in scores.items():
    trace.score(
        name=name,
        value=float(value)
    )

trace.end()
langfuse.flush()

これでLangfuse上で、

  • trace
  • 回答
  • contexts
  • Ragasスコア

をまとめて見られるようになります。


本番運用では「全件評価」はやめよう

ここ大事です。

本番の全件に対して、同期でRagas評価を回すのは重いです。

なぜなら、

  • 評価にもLLMコストがかかる
  • レイテンシが増える
  • 運用がつらくなる

からです。

なので実務では、

サンプリング + 非同期評価

が基本です。

こうしておくと、

  • ユーザー応答は速いまま
  • 一部データで品質監視できる
  • コストも抑えやすい

というバランスが取れます。


どんな構成が一番ラクか

最小構成なら、これで十分です。

RAGアプリ
  ↓
Langfuseで全trace記録
  ↓
一部traceだけ非同期でRagas評価
  ↓
scoreをLangfuseに保存
  ↓
Langfuse UIで低スコアtraceを分析

この形にすると、

  • Ragas は採点係
  • Langfuse は監視係

としてきれいに分業できます。

なお、本番展開前に以下のようなポイントも留意してくださいね。

  • 収集前にログポリシーを定める(何を何日間保持するか)
  • PIIは可能な限りログに含めない。必要な場合はハッシュ化 or マスキングを実施
  • 保存場所は暗号化ストレージ/アクセス制御を強化

まとめ

ポイントだけ言うと、この記事で言いたいのはこれです。

  • Ragas は評価ロジック
  • Langfuse は本番監視基盤
  • Langfuse は OSS で始めやすい
  • Docker / Helm / Terraform で展開しやすい
  • LangSmith は強いが、OSS/self-host重視ならLangfuseが分かりやすい
  • RagasのスコアをLangfuseに戻すと運用がラク
  • 本番は全件同期評価せず、サンプリング+非同期が現実的

最後に一言で言うと、

Ragasで“点数”を付けたら、Langfuseで“現場”を見よう。
そこまでやると、RAGは運用に入れます。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?