Slide 1

Slide 1 text

LLMアプリケーションの デバッグ・テスト・評価・監視を楽にする LangSmith 2024/02/24 第32回勉強会

Slide 2

Slide 2 text

自己紹介 ● 名前: 西岡 賢一郎 ○ Twitter: @ken_nishi ○ note: https://note.com/kenichiro ○ YouTube: 【経営xデータサイエンスx開発】西岡 賢一郎のチャンネル (https://www.youtube.com/channel/UCpiskjqLv1AJg64jFCQIyBg) ● 経歴 ○ 東京大学で位置予測アルゴリズムを研究し博士 (学術) を取得 ○ 東京大学の博士課程在学中にデータサイエンスをもとにしたサービスを提供する株式会社ト ライディアを設立 ○ トライディアを別のIT会社に売却し、CTOとして3年半務め、2021年10月末にCTOを退職 ○ CDPのスタートアップ (Sr. PdM)・株式会社データインフォームド (CEO)・株式会社ディース タッツ (CTO) ○ 自社および他社のプロダクト開発チーム・データサイエンスチームの立ち上げ経験

Slide 3

Slide 3 text

本日のお話 ● LLMアプリケーションのデバッグ ● LangSmith ● デモ

Slide 4

Slide 4 text

LLMアプリケーションのデバッグ

Slide 5

Slide 5 text

LLMアプリケーションの課題 LLMアプリケーション開発においては、さまざまな問 題が発生する。これらの問題には以下が含まれる。 ● モデル呼び出しの失敗: 原因としてはネットワー クエラー、API制限の超過、認証エラーなどがあ る。 ● 出力のフォーマットエラー: 期待したフォーマッ トと異なる出力が生成されることがある。 ● ネストされたモデルのエラー: 複数のモデルを組 み合わせる際に、どの段階で誤った出力が生じ たかの特定が困難である。 これらの問題への対処には、適切なデバッグ手法と ツールの利用が求められる。

Slide 6

Slide 6 text

LLMアプリケーションのデバッグが難しい理由 LLMアプリケーションのデバッグにおける困難は、以下の点に 集約される。 ● 非決定性: LLMの応答は非決定的であり、同一の入力か ら異なる結果が生じうる。この性質は、予測可能性の低 下を招き、デバッグを複雑化する。 ● 複雑なチェーンとエージェント: 複数のステップやコン ポーネントから成るチェーンやエージェントの使用は、 相互作用の複雑さを増す。これにより、エラーの特定が 難しくなる。 ● パフォーマンス評価の難しさ: 正確性、レイテンシー、 トークン使用量など、多岐にわたる指標を考慮し、測定 及び最適化する必要がある。これらの複合的な要因は、 パフォーマンスの評価を困難にする。 ● 共同デバッグの障壁: 特にローカル環境での作業におい て、チーム内でのデバッグ情報の共有が難しい。デバッ グ情報の不足は、協働を妨げる。 これらの課題は、LLMアプリケーション開発の効率と効果を低 下させ、解決策の模索を要する。

Slide 7

Slide 7 text

LLMアプリケーションのデバッグ方法 ● LLMアプリケーションのデバッグ方法は、以下のス テップに基づいている。 ○ ログの確認: エラーメッセージやAPI応答を通 じて問題を把握する。 ○ 単体テストの実施: 各モデルの呼び出しを個別 にテストし、問題箇所を特定する。 ○ 出力の検証: 期待されるフォーマットに従って 出力が生成されているか検証する。 ○ 段階的デバッグの適用: ネストされた呼び出し を段階ごとにデバッグし、各ステップの出力 を確認する。 ● デフォルト状態では、ログが不十分でデバッグが難 しいことがある。デバッグを効率化する方法は、外 部ツールの使用有無によって二つに分けられる。 ○ 外部ツールを使用しない場合: LangChainの Verbose ModeやDebug Modeを活用する。 ○ 外部ツールを使用する場合: LangSmithなどの ツールを利用する。

Slide 8

Slide 8 text

外部ツールを使用しないデバッグ 外部ツールを使用しないデバッグでは、 Debug ModeやVerbose Modeが利用される。 ● Debug Modeの活用: set_debugや langchain.debug = Trueを設定すること で、LangChainの各コンポーネント (チェーン、モデル、エージェント、 ツール、リトリーバ)が受け取った入力 と生成した出力を表示する。 ● Verbose Modeの活用: set_verboseや langchain.verbose = Trueを設定する と、入力と出力が読みやすい形で出力さ れる。ただし、特定の生の出力(例: LLM呼び出しのトークン使用統計)のロ グは省略される。

Slide 9

Slide 9 text

LangSmith

Slide 10

Slide 10 text

LangSmithの概要 ● LangSmithとは: LangChainによって開発されたツールで、信頼性の高い LLMアプリケーションの構築を支援する。 ● 目的: プロンプト、チェーン、エージェントのパフォーマンスを向上させ、 Production環境での信頼性を確保する。 ● 特徴: トレーシング機能がデフォルトで有効になっており、LLM、チェー ン、エージェントへの全呼び出しを自動でログに記録する。 ● LangChainのCallbackと似ているが、LangChainのCallback一つのイベント に対して使用されるのに対し、LangSmithは環境変数を設定するだけですべ てのイベントログの収集が可能

Slide 11

Slide 11 text

LangSmithのデバッグ支援機能 ● 入力と出力の可視化: LangSmithは、LLM呼び出し の正確な入力と出力を明確に表示し、デバッグを容 易にする。 ● イベントシーケンスの追跡: 複雑なチェーンやエー ジェントの動作を可視化し、各ステップの入出力と 実行順序を明確にする。 ● プロンプトの編集: Playground機能を使ってプロン プトを編集し、出力の変化を確認できる。

Slide 12

Slide 12 text

LangSmithの共同デバッグとデータセット管理 ● 共同デバッグ: "Share"ボタンを用いて、デバッグ情 報を共有し、チーム内での協力を促進する。 ● データセットの収集と管理: 不具合や期待外れの出力 をデータポイントとして収集し、"Add to Dataset" 機能でデータセットに追加する。これにより、将来 のデバッグやテストが容易になる。 ● モニタリングと評価: アプリケーションのモニタリン グを通じてパフォーマンスを追跡し、人間による評 価や自動評価メトリクスを用いて品質を保証する。

Slide 13

Slide 13 text

Playground機能で出力の調整 ● ModelやらParameterをUI上で変更可能 ● System, AI, Human, Chatなどに加えて、Toolや FunctionなどもUI上で与えることができる。 ● Token数の確認やAnnotationも可能。

Slide 14

Slide 14 text

Hubでプロンプトを取得 ● LangChain Hubは、LangChainおよび一般的なLLM 用のプロンプトを発見、共有、バージョン管理する ためのツールである。 ● プロンプトのインスピレーションを得たり、自分の プロンプトを世界と共有するのに適している。 ● 現在はLangChainのプロンプトテンプレートをサ ポートしており、今後さらに多くのオブジェクトタ イプが追加される予定である。 ● 残念ながら、日本語のプロンプトはない

Slide 15

Slide 15 text

デモ LangSmithの基本機能の紹介 ● https://smith.langchain.com/ ○ 2月中旬にGA版 (General Availability Version)がリリース ● LangChainとLangSmithとの連携 ● LangSmith上でのログの確認方法 ● ソースコード: https://github.com/knishioka/machine -learning-workshop/blob/main/langcha in/langsmith.ipynb