20250324_RAGの基礎から実践運用まで:AWS BedrockとLangfuseで実現する構築・監視・評価(後編)

7.5K Views

March 24, 25

スライド概要

profile-image

株式会社 Fusic で機械学習エンジニアをしています。自然言語処理に興味があります。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

CONFIDENTIAL RAGの基礎から実践運用まで AWS BedrockとLangfuseで実現する構築・監視・評価 (後編) CDLE福岡 2025.03.24 瓦祐希 @kawara_y ©Fusic Co., Ltd. 0

2.

はじめに 自己紹介 株式会社 Fusic 事業本部 先進技術部門 機械学習チーム 瓦 祐希 Yuki Kawara • 博士(情報科学) • • • • @kawara_y 2024 Japan AWS Jr. Champions 甲賀忍者検定初級 ビール検定三級 スパルタンレースによく出没している ©Fusic Co., Ltd. 1

3.

目次 CONTENTS 1. 検索拡張生成(RAG)とは 2. RAGを簡単にAWSで作成する 3. RAGをもっとチューニングする 4. Langfuse で監視する 5. Langfuse で評価を管理する @kawara_y ©Fusic Co., Ltd. 2

4.

目次 CONTENTS 1. 検索拡張生成(RAG)とは 2. RAGを簡単にAWSで作成する 3. RAGをもっとチューニングする 4. Langfuse で監視する 5. Langfuse で評価を管理する @kawara_y ©Fusic Co., Ltd. 3

5.

前編では KB による RAG の構築を行いました。 後編では構築した RAG の運用について話します。 ©Fusic Co., Ltd. 4

6.

4 Langfuse で監視する ©Fusic Co., Ltd. 5

7.

LLM を使ったアプリ開発のつらいポイント 開発時のデバッグが大変 特にエージェントのように複数回入出力を繰り返すアプリでは、LLM の出力に依存して 動作する部分もあり、挙動が追いづらい。 ユーザーがどう使用しているのかが分からない 実際のログを見ないと(読まないと)ユーザがどのような入力をしているのかが把握できない。 生成したテキストの品質が分からない 定量的な評価が難しく、ユーザーの役に立っているかが確認しづらい。 ©Fusic Co., Ltd. 6

8.

LLM アプリケーションの運用(LLMOps)とは • LLMOps ⊂ FMOps(基盤モデルの運用) • ざっくり言うとテキスト系のモデルを使ったアプリケーションの DevOps (LLM に特化した MLOps だととらえても間違いではない、はず) FMOps/LLMOps:生成系 AI の運用と MLOps との違い より引用 ©Fusic Co., Ltd. 7

9.

LLMOps で実現したい(できる)こと データの管理 • 開発時や運用時のプロンプトのバージョン管理 • 正解データ(入出力)の作成や管理 アプリケーションの監視 • アプリケーションのメトリクス(回数、時間、コストなど)の記録 • LLM の入出力を含めた、一連の履歴(=トレース)の記録 テキストの評価 • 入出力のテキストに対する人間/LLM による評価の記録 ©Fusic Co., Ltd. 8

10.

LLMOps を実現するツール LangSmith (https://www.langchain.com/langsmith) … LangChain 系ツールの一つ。LangChain との連携が容易にできるが、他のライブラリとの 連携も可能。(一応)セルフホストも出来る。 LangTrace (https://www.langtrace.ai/) … OpenTelemetry を活用したトレースができる。VectorDB との連携も簡単に行える。 Langfuse (https://langfuse.com/) … SaaS や OSS としても公開されており、セルフホストが可能。 ©Fusic Co., Ltd. 9

11.

LLMOps を実現するツール LangSmith (https://www.langchain.com/langsmith) … LangChain 系ツールの一つ。LangChain との連携が容易にできるが、他のライブラリとの 連携も可能。(一応)セルフホストも出来る。 LangTrace (https://www.langtrace.ai/) … OpenTelemetry を活用したトレースができる。VectorDB との連携も簡単に行える。 Langfuse (https://langfuse.com/) … SaaS や OSS としても公開されており、セルフホストが可能。 使いたい機能、環境でどれが適しているかは変わりますが、 今日は個人的にハマっている Langfuse を紹介します。 ©Fusic Co., Ltd. 10

12.

Langfuse って? オープンソースの LLM エンジニアリングプラットフォーム Langfuse ホームページのトップ ©Fusic Co., Ltd. 11

13.

Langfuse って? オープンソースの LLM エンジニアリングプラットフォーム 入出力に対して 評価を行える機能 プロンプトを管理できる機能 入出力のやりとりを 記録できる機能 ファインチューニングや 評価のためのデータセットを 管理できる機能 一つの画面で複数の LLM を試せる機能 かかった時間や料金などを 記録できる機能 Langfuse ホームページのトップ ©Fusic Co., Ltd. 12

14.

Langfuse って? オープンソースの LLM エンジニアリングプラットフォーム 今日はこの辺りに触れます。 入出力に対して 評価を行える機能 プロンプトを管理できる機能 入出力のやりとりを 記録できる機能 ファインチューニングや 評価のためのデータセットを 管理できる機能 一つの画面で複数の LLM を試せる機能 かかった時間や料金などを 記録できる機能 Langfuse ホームページのトップ ©Fusic Co., Ltd. 13

15.

Langfuse って? オープンソースの LLM エンジニアリングプラットフォーム Python や TS の SDK が用意されていたり、 LangChain, LangGraph, LlamaIndex と連携出来たり、 AWS や Google Cloud のようなベンダー、 Dify のようなローコードツールとの連携も出来る 今使っている開発ツールに簡単に組み込むことが可能 Langfuse ホームページのトップ ©Fusic Co., Ltd. 14

16.

LLM を使ったアプリ開発のつらいポイント 開発時のデバッグが大変 特にエージェントのように複数回入出力を繰り返すアプリでは、LLM の出力に依存して 動作する部分もあり、挙動が追いづらい。 ユーザーがどう使用しているのかが分からない 実際のログを見ないと(読まないと)ユーザがどのような入力をしているのかが把握できない。 生成したテキストの品質が分からない 定量的な評価が難しく、ユーザーの役に立っているかが確認しづらい。 全部 Langfuse を使って解決できる ©Fusic Co., Ltd. 15

17.

Langfuse で記録してみる • observe デコレータを付ける だけで入出力を記録してくれる。 ©Fusic Co., Ltd. 16

18.

Langfuse で記録してみる • observe デコレータを付ける だけで入出力を記録してくれる。 ©Fusic Co., Ltd. 17

19.

Langfuse で記録してみる • observe デコレータを付ける だけで入出力を記録してくれる。 • メタデータの紐づけが可能 ©Fusic Co., Ltd. 18

20.

Langfuse で記録してみる • observe デコレータを付ける だけで入出力を記録してくれる。 • メタデータの紐づけが可能 ©Fusic Co., Ltd. 19

21.

Knowledge Bases と Langfuse の連携 • Knowledge Bases の retrieve_and_generate を叩くと、AWS 側で検索、生成まで 行ってくれるので便利な反面、トレースの記録がちょっと微妙 → Langfuse 側に記録出来るのは、叩く側での処理なので、よしなにやってくれる サービスと連携する場合は工夫する必要がある • 今までのスライドは Langfuse の基本的な使い方を説明するために retrieve_and_generate を使っていたが、KB を Langfuse と絡める場合には LangChain を使う方が便利 ©Fusic Co., Ltd. 20

22.

Knowledge の Langfuse に投げる • observe デコレータを付ける だけで入出力を記録してくれる。 • メタデータの紐づけが可能 • LangChain のモジュールを 使うことで、検索から生成までの トレースを記録することが出来る。 (裏側では retrieve API を叩いて、 その結果をもとに生成している) ©Fusic Co., Ltd. 21

23.

Knowledge の Langfuse に投げる • observe デコレータを付ける だけで入出力を記録してくれる。 • メタデータの紐づけが可能 • LangChain のモジュールを 使うことで、検索から生成までの トレースを記録することが出来る。 (裏側では retrieve API を叩いて、 その結果をもとに生成している) • LangChain 系と連携する場合は CallbackHandler を使うと楽 ©Fusic Co., Ltd. 22

24.

Knowledge の Langfuse に投げる • observe デコレータを付ける だけで入出力を記録してくれる。 • メタデータの紐づけが可能 • LangChain のモジュールを 使うことで、検索から生成までの トレースを記録することが出来る。 (裏側では retrieve API を叩いて、 その結果をもとに生成している) • LangChain 系と連携する場合は CallbackHandler を使うと楽 ©Fusic Co., Ltd. 23

25.

Knowledge の Langfuse に投げる • observe デコレータを付ける だけで入出力を記録してくれる。 • メタデータの紐づけが可能 • LangChain のモジュールを 使うことで、検索から生成までの トレースを記録することが出来る。 (裏側では retrieve API を叩いて、 その結果をもとに生成している) • LangChain 系と連携する場合は CallbackHandler を使うと楽 ©Fusic Co., Ltd. 24

26.

5 Langfuse で評価を管理する ©Fusic Co., Ltd. 25

27.

4 章では Langfuse で監視をしました (特に LLM アプリケーションの入出力の記録) 5 章では入出力の評価をします ©Fusic Co., Ltd. 26

28.

Langfuse によるスコア管理 外部で評価したスコアを Langfuse に登録 Langfuse 上で評価 入出力のペア 入出力のペア 外部のシステム 4 点! 4 点! ©Fusic Co., Ltd. 27

29.

Langfuse によるスコア管理 外部で評価したスコアを Langfuse に登録 Langfuse 上で評価 入出力のペア 入出力のペア 外部のシステム 4 点! 4 点! ©Fusic Co., Ltd. 28

30.

RAGAS について • LLM のアプリケーションの評価を行うためのライブラリ • “RAG”AS とあるように、RAG アプリケーションの評価を行うための関数が豊富に用意されて おり、他にもツールを使用するエージェントの評価などもできるようになっている RAGAS に用意されている RAG 用の指標 評価指標 何を測定できるか Context Precision 関連するドキュメントがより高い順位にランク付けされているか Context Recall 関連するドキュメントがどの程度検索できているか Context Entities Recall エンティティ(地名、人名、年代など)がどの程度検索できているか Noise Sensitivity ドキュメントからテキストを生成した際にどの程度間違いが起きるか Response Relevancy 生成したテキストが入力テキストに対してどの程度適切であるか Faithfulness 関連ドキュメントに基づいた生成が出来ているか Multimodal Faithfulness 画像とテキストに基づいた生成が出来ているか Multimodal Relevance 生成したテキストが入力テキストと画像に対してどの程度適切であるか ©Fusic Co., Ltd. 29

31.

RAGAS を用いた評価 • AspectCritic では自然言語で記述した 観点で二クラス分類をすることが可能 (右のコードでは要約が正確かどうか) • BLUE や ROUGE のように以前からよく 使用されていたような評価方法や、LLMas-a-judge での評価を数行で実装できる • 基本的には SingleTurnSample にデータを 突っ込んで評価の関数に渡すだけ → 評価データの形式を統一して扱える https://docs.ragas.io/en/stable/getstarted/evals/ よりコードを引用 ©Fusic Co., Ltd. 30

32.

RAGAS を用いた評価 • AspectCritic では自然言語で記述した 観点で二クラス分類をすることが可能 (右のコードでは要約が正確かどうか) • BLUE や ROUGE のように以前からよく 使用されていたような評価方法や、LLMas-a-judge での評価を数行で実装できる • 基本的には SingleTurnSample にデータを 突っ込んで評価の関数に渡すだけ → 評価データの形式を統一して扱える https://docs.ragas.io/en/stable/getstarted/evals/ よりコードを引用 ©Fusic Co., Ltd. 31

33.

RAGAS を用いた評価 • AspectCritic では自然言語で記述した 観点で二クラス分類をすることが可能 (右のコードでは要約が正確かどうか) • BLUE や ROUGE のように以前からよく 使用されていたような評価方法や、LLMas-a-judge での評価を数行で実装できる • 基本的には SingleTurnSample にデータを 突っ込んで評価の関数に渡すだけ → 評価データの形式を統一して扱える https://docs.ragas.io/en/stable/getstarted/evals/ よりコードを引用 ©Fusic Co., Ltd. 32

34.

Langfuse のデータセットを RAGAS で評価する例 • Langfuse 上で管理しているデータ セットを取ってきて評価 • 取ってきたデータに対して RAGAS で 評価し、そのスコアを Langfuse に 登録することが出来る • データセット名に空白が入ると取って これない(現在の仕様っぽい?) ©Fusic Co., Ltd. 33

35.

Langfuse のデータセットを RAGAS で評価する例 • Langfuse 上で管理しているデータ セットを取ってきて評価 • 取ってきたデータに対して RAGAS で 評価し、そのスコアを Langfuse に 登録することが出来る • データセット名に空白が入ると取って これない(現在の仕様っぽい?) ©Fusic Co., Ltd. 34

36.

Langfuse のデータセットを RAGAS で評価する例 • Langfuse 上で管理しているデータ セットを取ってきて評価 • 取ってきたデータに対して RAGAS で 評価し、そのスコアを Langfuse に 登録することが出来る • データセット名に空白が入ると取って これない(現在の仕様っぽい?) ©Fusic Co., Ltd. 35

37.

Langfuse によるスコア管理 外部で評価したスコアを Langfuse に登録 Langfuse 上で評価 入出力のペア 入出力のペア 外部のシステム 4 点! 4 点! ©Fusic Co., Ltd. 36

38.

Langfuse 上での評価(人手編) • 設定の “Scores / Evaluations” からスコアの 設定ができる(設定自体は消せないので慎重に) ©Fusic Co., Ltd. 37

39.

Langfuse 上での評価(人手編) • 設定の “Scores / Evaluations” からスコアの 設定ができる(設定自体は消せないので慎重に) • スコアのタイプは三種類用意されている (NUMERIC/CATEGORICAL/BOOLEAN) ©Fusic Co., Ltd. 38

40.

Langfuse 上での評価(人手編) • Langfuse 上での人手評価のタイミングは二種類 • トレースを開いてその場で評価 • キューに入れて後で評価 ©Fusic Co., Ltd. 39

41.

Langfuse 上での評価(人手編) • Langfuse 上での人手評価のタイミングは二種類 • トレースを開いてその場で評価 • キューに入れて後で評価 トレースの一つを選択し “Annotate” を押す ©Fusic Co., Ltd. 40

42.

Langfuse 上での評価(人手編) • Langfuse 上での人手評価のタイミングは二種類 • トレースを開いてその場で評価 • キューに入れて後で評価 定義したスコアを選択して スコアを登録 ©Fusic Co., Ltd. 41

43.

Langfuse 上での評価(人手編) • Langfuse 上での人手評価のタイミングは二種類 • トレースを開いてその場で評価 • キューに入れて後で評価 トレースを選択して キューに入れる ©Fusic Co., Ltd. 42

44.

Langfuse 上での評価(人手編) • Langfuse 上での人手評価のタイミングは二種類 • トレースを開いてその場で評価 • キューに入れて後で評価 キュー内のアイテムの状態 ©Fusic Co., Ltd. 43

45.

Langfuse 上での評価(人手編) • Langfuse 上での人手評価のタイミングは二種類 • トレースを開いてその場で評価 • キューに入れて後で評価 キューを開いて “Process queue” で 評価を開始 ©Fusic Co., Ltd. 44

46.

Langfuse 上での評価(人手編) • Langfuse 上での人手評価のタイミングは二種類 • トレースを開いてその場で評価 • キューに入れて後で評価 追加されたトレース結果に対して スコアを付与することで評価できる ©Fusic Co., Ltd. 45

47.

Langfuse 上での評価(LLM-as-a-judge 編) • Langfuse 上から LLM に投げてスコアを記録することも出来る。 設定から API Key を 登録することで OpenAI や Anthropic の API を叩くことが可能 https://langfuse.com/docs/scores/model-based-evals より引用 ©Fusic Co., Ltd. 46

48.

Langfuse 上での評価(LLM-as-a-judge 編) • Langfuse 上から LLM に投げてスコアを記録することも出来る。 評価に用いるプロンプトの登録 ©Fusic Co., Ltd. 47

49.

Langfuse 上での評価(LLM-as-a-judge 編) • Langfuse 上から LLM に投げてスコアを記録することも出来る。 Langfuse で用意されている 評価用のプロンプトが使用できる (もちろん自分で定義することも可能) プロンプト内で変数も使用可能 ©Fusic Co., Ltd. 48

50.

Langfuse 上での評価(LLM-as-a-judge 編) • Langfuse 上から LLM に投げてスコアを記録することも出来る。 よく使われる評価については テンプレートが用意されている ©Fusic Co., Ltd. 49

51.

Langfuse 上での評価(LLM-as-a-judge 編) • Langfuse 上から LLM に投げてスコアを記録することも出来る。 プロンプト内の変数に対して 何を割り当てるかの設定 データセットのアイテムを そのまま変数に割り当てたり、 JsonPath を使ってアイテムの 一部分を割り当てたりできる ©Fusic Co., Ltd. 50

52.

Langfuse 上での評価(LLM-as-a-judge 編) • Langfuse 上から LLM に投げてスコアを記録することも出来る。 データセットやトレースをどの程度評価するかの割合 本番運用時には全部を評価するとコストがかかるので 実際のリクエストのいくつかをサンプリングして評価することが一般的 ©Fusic Co., Ltd. 51

53.

Langfuse 上での評価(LLM-as-a-judge 編) • プロンプトを改良してよりよくなったかを測定してみる プロンプトの画面の右上の “Experiment” から、プロンプトを データセットに適用した出力の 評価を実行できる ©Fusic Co., Ltd. 52

54.

Langfuse 上での評価(LLM-as-a-judge 編) • プロンプトを改良してよりよくなったかを測定してみる 設定で登録したモデルを選択 先ほどの評価テンプレートを選択 ©Fusic Co., Ltd. 53

55.

Langfuse 上での評価(LLM-as-a-judge 編) • プロンプトを改良してよりよくなったかを測定してみる • 評価が終了すると Evaluator で確認できる。 • 実行結果は自動でトレースに記録されるので、より詳細な分析も可能。 ©Fusic Co., Ltd. 54

56.

Langfuse 上での評価(LLM-as-a-judge 編) • プロンプトを改良してよりよくなったかを測定してみる • 評価が終了すると Evaluator で確認できる。 • 実行結果は自動でトレースに記録されるので、より詳細な分析も可能。 ©Fusic Co., Ltd. 55

57.

Langfuse 上での評価(LLM-as-a-judge 編) • プロンプトを改良してよりよくなったかを測定してみる • 評価が終了すると Evaluator で確認できる。 • 実行結果は自動でトレースに記録されるので、より詳細な分析も可能。 ©Fusic Co., Ltd. 56

58.

Langfuse 上での評価(LLM-as-a-judge 編) • プロンプトを改良してよりよくなったかを測定してみる データセットに紐づいている 実行結果を選択して 複数の評価を比較することが可能 ©Fusic Co., Ltd. 57

59.

後編のまとめ Point 01 Langfuse を使うことでアプリケーションの開発、運用(LLMOps)を簡単に行うことが出来る。 Point 02 このスライドでは Langfuse を使って入出力の履歴の保存や評価を行う方法について話した。 Point 03 Langfuse 上で評価が出来るので、キューにデータを入れてアノテーターに割り当てるというような運用も可能。 @kawara_y ©Fusic Co., Ltd. 58

60.

Thank You ご清聴いただきありがとうございました! We are Hiring! https://recruit.fusic.co.jp/ @kawara_y ©Fusic Co., Ltd. 59