LangChainのDevOpsプラットフォーム'LangSmith'を使う
はじめに
こんにちは、@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キーは、後で使うので控えておきましょう!
ライブラリのインストール
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キーを設定します。
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」があります。
リストに表示されている「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