🚀

LangChainのDevOpsプラットフォーム'LangSmith'を使う

2024/02/25に公開

はじめに

こんにちは、@nano_sudoです!
今回は、LangChainの新しいDevOpsプラットフォームであるLangSmithの使い方や、使ってみた感想について書いていきたいと思います。

LangSmithとは

LangSmithは、LLMアプリケーションの開発、共同作業、テスト、デプロイ、監視を統合したDevOpsプラットフォームです。

LangSmith is a unified DevOps platform for developing, collaborating, testing, deploying, and monitoring LLM applications.
(LangSmith公式サイトより引用)

今回は、SaaS版のLangSmithを使いますが、セルフホスト版も提供されており、オンプレミスでの運用も可能です。

主な機能

  • トレース
    会話の一連の流れを追跡します
  • Hub
    他のユーザーが作成したプロンプトテンプレートを使用したり、web上でプロンプトを作成したりできます。
  • アノテーション
    トレースのフィードバックや、手動のラベリングを行うことができます。
  • データセット
    トレースからデータセットを簡単に作成できます。
  • デプロイ(LangServe)
    チェーンのデプロイがweb上で行える(らしい?)
    (招待が来てないので、詳細は不明)

さっそく使ってみる

APIキーの作成

サイドバーの「API KEYS」のアイコンをクリックし、「Create API Key」からAPIキーを作成します。
APIキー作成
作成したAPIキーは、後で使うので控えておきましょう!

ライブラリのインストール

LangSmith及びLangChain Hubを使うためには、以下のライブラリをインストールする必要があります。

pip install -U langsmith langchain_openai langchain_community langchainhub

トレース

1. プロジェクトを作成する

LangSmithのトップページの「+ New Project」ボタンをクリックして、プロジェクトを作成します。
プロジェクト作成
ボタンをクリックすると、プロジェクトの作成画面が表示されます。
プロジェクト作成画面

  • Name(必須)
    任意のプロジェクト名を入力します。
  • Description
    任意のプロジェクトの説明を入力します。
  • Default Dataset
    選択したデータセットに自動的にデータが追加されます。
  • Metadata
    key-value形式でメタデータを追加できます。

必要な情報を入力したら、「Submit」ボタンをクリックしてプロジェクトを作成します。

2. プロジェクトをセットアップする

プロジェクトを作成したら、LangSmithがトレースできるように、環境変数などの設定を行います。

プロジェクト画面では、トレースの確認、LLMの呼び出しの確認、エラー率などのグラフが表示されます。

早速、「Setup」セクションに移動して、プロジェクトをセットアップしましょう。

プロジェクトセットアップ
「Log your first run」とあり、最初のトレースを行うための手順が表示されます。
手順に従って、環境変数などを設定していきます。

.envファイルを作成し、APIキーを設定します。

.env
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY="<your-api-key>"
LANGCHAIN_PROJECT="<your-project-name>"

.envファイルを読み込むために、以下のコードを追加します。

from dotenv import load_dotenv
load_dotenv()

LLMを実行すれば、トレースがweb上で確認できるはずです。

from langchain_openai import ChatOpenAI
llm = ChatOpenAI()

llm.invoke("Hello, world!")

langchain_openai以外でChatOpenAIを使おうとすると、DeprecationWarningが出るので注意してください。
(deprecatedの推奨先がdeprecatedになってるの、どうにかならないんですかね...?)

.envファイルを使わない場合 (公式の手順)

直接環境変数を設定することもできます。

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
export LANGCHAIN_API_KEY="<your-api-key>"
export LANGCHAIN_PROJECT="<your-project-name>"

この場合、.envファイルを読み込むコードは不要です。

3. トレースを確認する

トレースが成功すると、プロジェクト画面の「traces」にトレースが表示されます。
トレース
トレースをクリックすると、実行にかかった時間や、入力や出力の内容などの詳細を確認できます。

Hub

LangSmithには、他のユーザーが作成したプロンプトテンプレートを使用したり、web上でプロンプトを作成したりできる「Hub」があります。
Hub
リストに表示されている「Try it」ボタンをクリックすると、プロンプトをプロンプト作成画面で試すことができます。

ユーザーが作成したプロンプトテンプレートを使用する

コピーしたいプロンプトテンプレートの<ユーザー名>/<プロンプト名>をコピーして、以下のコードを実行します。

from langchain import hub

hub.pull("<ユーザー名>/<プロンプト名>") # example : hub.pull("nano_sudo/hello_world")

自分のプロンプトを作成する

サイドバーの「Hub」(地球儀のマーク)をクリックし、langchain hubに移動します。

1. 必要な情報を入力する

「My Prompts」の右の「+」ボタンをクリックして、プロンプト作成画面に移動します。
プロンプト作成
名前や説明などは、公開時に入力する情報なので、適当に入力しておきましょう。
プロンプトをプライベートにしたい場合は、「Sharing Settings」のPrivateを選択します。(デフォルトはPublicなので注意)

2. プロンプトを作成する

「Start Creating」の下に「Prompt」「Chat Prompt」が表示されているので、好きな方を選択してプロンプトを作成します。
Promptの場合は、ロールなどの設定はなしで、Chat Promptの場合は、ロールなどの設定ができます。
プロンプトタイプ選択

選択すると、プロンプト作成画面が表示されます。
ここでは、プロンプトの作成やテスト、例の作成が行えます。
プロンプト作成画面

プロンプトが完成したら、右上の「Commit」ボタンをクリックして、プロンプトを保存します。

アノテーション

1.アノテーションキューの作成

サイドバーのペンのアイコンをクリックし、「Annotation Queues」に移動します。
「+ New Annotation Queue」ボタンをクリックして、アノテーションキューを作成します。
アノテーションキュー作成

  • Name(必須)
    任意のアノテーションキュー名を入力します。
  • Description
    任意のアノテーションキューの説明を入力します。

2.トレースをアノテーションキューに追加する

プロジェクト画面の「traces」または「LLM Calls」のそれぞれのトレースの左のチェックボックスをクリックすると、画面下部にデータセットに追加するかアノテーションキューに追加するかの選択肢が表示されます。
選択画面
Send to annotation queueを押して、入れたいアノテーションキューを選択します。

3.アノテーションを行う

選択したら、サイドバーのペンのアイコンをクリックして、アノテーション画面に移動し、アノテーションキューを開きます。
編集ページでは、inputやoutputを書き換えや、右の「feedback」から、チーム向けのタグやコメントをの追加が行えます。
アノテーション
完了したら「Done」または「Add to Dataset」をクリックして、アノテーションを完了します。

データセット

LangSmithでは、トレースや外部のデータをインポートして、データセットを作成することができます。
また、コード上で、保存したデータセットの評価や、OpenAIのfine-tuningに使うことができます。

CSVをインポートするか、トレースを用いてデータセットを作成することができます。
データセットの形式は、3つあります。

  • Key-Value(KV)型
    キーと値のペアを持つデータセット
  • Chat型
    roleの属性を持つ会話の形式のデータセット
  • LLM型
    inputとoutputのdictを持つデータセット

CSVからデータセットを作成する

サイドバーの「Datasets」をクリックし、データセット一覧を表示します。
「+ New Dataset」ボタンをクリックして、データセットを作成します。
データセット作成

トレースをデータセットに追加する

アノテーションキューへの追加と同様に、トレースを選択して、画面下部の「Send to dataset」をクリックして、データセットに追加します。

追加したデータセットは、サイドバーの「Datasets」から確認できます。

データセットを管理する

データセットの一覧から、データセットを選択して、編集や削除が行えます。
データセット管理

データセットの評価

データセットを様々なシナリオについて評価することができます。
評価は、コード上でのみ行えます。
カスタムのEvaluatorsを作成することもできます。
データセット評価

OpenAIのfine-tuningに使う

データセットのページの右上にある「export」で「format」を「OpenAI Fine-Tuning JSONL」を選択すると、データセットをOpenAIのfine-tuning用のJSONL形式でエクスポートできます。

デプロイ

LangSmithでは、LangServeを使って、チェーンのデプロイがweb上で行える(らしい?)ですが、招待が来てないので、詳細は不明です。

使ってみた感想

良かった点

  • アプリケーションの処理の流れがわかりやすい(特にAgentで)
  • プロンプトの作成・使用が簡単(プロンプトをweb上で管理できるのが便利)
  • PlayGroundが使いやすい
  • チーム向けの機能が充実している

悪かった点

  • ドキュメントが少ない
  • 現時点ではweb上でのデプロイができない
  • データセットの評価がコード上でしかできない
  • 小規模なプロジェクトには冗長

まとめ

いかがでしたでしょうか?
いままでデータセットやプロンプトをファイルで管理していた方には、LangSmithの恩恵をかなり受けられると思います。
ただし、操作感が少し独特なので、私も慣れるまでに時間がかかりましたが、慣れてしまえば、使いやすいと思います。
さらに、まだまだ開発途中のプラットフォームですので、今後の発展に期待ですね!

ご指摘やご質問があれば、コメント欄 or Xまでお願いします!

Discussion