はじめに
LangSmithが便利と聞いて使ってみた!
本当にめちゃくちゃ便利だったので基本的な使い方を画像付きでまとめる😊
この記事で伝えたいこと
✅LangSmithで何ができるか、どう便利かを理解する。
✅LangSmithの基本的な使い方を理解する。
結論
✅LangSmithは、LangChainの開発の補助にめっちゃ便利。
✅ログを残したり、モデルの評価したりできる。
✅環境変数を設定しておくだけで、自動でLangSmithと連携されて簡単に使える。
なぜ今まで使っていなかったのか後悔するくらい便利…!
LangSmithとは
✅LangChainの開発を助けてくれるツール。
※LangChainを使っていない場合でもLangSmithパッケージを使えば利用可能◎
詳細は公式ドキュメントを参照。
できること
代表的なできることを紹介する。
ログが残る
事前にLangChainのAPIキーを環境変数に設定しておくだけで、LLMを実行するとき自動で「LangSmithのクラウドのデータベース」にログが蓄積される!
![Image in a image block](/notion/98cf2e23-5820-4bd8-9cf7-128dc183bc29/Untitled.png)
消費トークン数を計測
ログと一緒に消費トークン数も蓄積される!
![Image in a image block](/notion/cba46f01-70d0-4f7e-b356-0ce5b05b66a3/Untitled.png)
チェーンの中身を確認する
複雑なチェーンでもどこで精度が悪くなっているか確認できる!
![Image in a image block](/notion/83f58b92-1d04-4d0d-ad69-9d2245598921/Untitled.png)
実行結果を自動で評価してもらえる
サンプルとなる回答を用意すれば、実行結果を自動で評価してもらえる!
![Image in a image block](/notion/d7b35f2e-06dc-43d6-9ed9-2619d096bec3/Untitled.png)
役立ちそうな場面
- ログを残したいとき
- カスタマイズしたモデルの評価をするとき
- カスタマイズしたモデルの精度を向上させたいとき
基本的な使い方
使用技術
今回使用するものは以下のとおり。
言語
- Python(もしくはTypeScript)
ライブラリ
- LangChain
- LangSmith
- tiktoken
- OpenAI(OpenAIのモデルを使わない場合は不要)
- python-dotenv
API
- LangSmithのAPI
- OpenAIのAPI(OpenAIのモデルを使わない場合は不要)
LangSmithの登録
✅以下のサイトからLangSmithに登録する。
(利用可能になるまでしばらく待つ必要がある)
LangSmithのAPIキーを生成
OpenAIのAPIキーを生成
✅以下のサイトからAPIキーを発行する。
※OpenAIの以外のLLMを使う場合は、適宜他サービスのAPIキーを用意する。
フォルダを作成
✅任意の名前の新規フォルダを作成する。
今回は「env_LangChainTest」というフォルダ名にした。
![Image in a image block](/notion/ec02601b-77da-4e10-bf41-7417047a5bf7/Untitled.png)
各種ライブラリのインストール
✅Pythonのライブラリをインストールしていく。
(Python、pipはインストール済みの前提。)
プロジェクトのディレクトリに移動
cd env_LangChainTest
langchainをインストール
pip install langchain
langsmithをインストール
pip install langsmith
openaiをインストール
pip install openai
tiktokenをインストール
pip install tiktoken
python-dotenvをインストール
pip install python-dotenv
環境変数の設定
✅LangSmithを使うために必要な環境変数を.envに記述する。
プロジェクトディレクトリの直下に.envを作成する。
.env
LANGCHAIN_TRACING_V2 = true
LANGCHAIN_ENDPOINT = "https://api.smith.langchain.com"
LANGCHAIN_API_KEY = "your-api-key" # LangSmithのAPIキーを入力してください
LANGCHAIN_PROJECT = "sample-project" # 任意のプロジェクト名を入力してください
OPENAI_API_KEY = "your-api-key" # OpenAIのAPIキーを入力してください
![Image in a image block](/notion/4047e8c3-8803-46f3-b17a-bbbc3185173f/Untitled.png)
サンプルコードの作成
✅最小限のサンプルコードを作成する。
![Image in a image block](/notion/3ee83e64-bbf9-45c9-90c8-b12fdd9dedd4/Untitled.png)
src/langsmith/min.py(ファイル名、保存場所は任意)
# 環境変数の準備
from dotenv import load_dotenv
load_dotenv()
# インポート
from langchain.chat_models import ChatOpenAI
# ✅質問の実行
llm = ChatOpenAI()
llm.invoke("Appleの創業者は誰ですか?")
✅質問の実行
# ✅質問の実行
llm = ChatOpenAI()
llm.invoke("Appleの創業者は誰ですか?")
- 「Appleの創業者は誰ですか?」という質問をしているだけ。
- LangSmithに関する処理は一切ないが、ログを自動でLangSmithに出力してくれる✨
LANGCHAIN_TRACING_V2
がtrue
に設定されている場合、質問のログを自動でLangSmithに出力してくれる✨
サンプルコードを実行する
以下のコマンドを実行するだけ。
※パス、ファイル名は環境に応じて変える。
python src/langsmith/min.py
実行結果を確認する
✅LangSmithの管理画面で実行結果を確認できる!
プロジェクトの画面へ移動する
まずLangSmithのページを開く。
Projectsを選択。
![Image in a image block](/notion/453168ec-1c22-4ace-9569-8ddd7f048673/Untitled.png)
「sample-project」を選択。
※プロジェクト名は環境変数LANGCHAIN_PROJECT
で指定したもの。
![Image in a image block](/notion/42024933-3477-4434-a7c6-8269b91e2b19/Untitled.png)
実行の過程を確認する
確認したいログを選択する。
![Image in a image block](/notion/9614691e-b9d8-4e2d-a131-d250be9d0f00/Untitled.png)
Runタブで入力、出力が確認できる。
※今回はシンプルな例だったので細かい実行過程が存在しない。
![Image in a image block](/notion/54026f36-a7de-4763-b3db-362ad61141e4/Untitled.png)
例:Agent(LangChainの機能)を使ったプログラミングを実行した場合
答えが出るまでの詳しい過程を1つずつ確認できる。
![Image in a image block](/notion/83f58b92-1d04-4d0d-ad69-9d2245598921/Untitled.png)
その他の便利な機能
実行結果の確認以外にも管理画面でさまざまなことができる😊
代表的な機能は以下のとおり。
-
その場でLLMのパラメータを変更して再実行する
💡どのパラメータがいいか?を微調整するのに便利!
-
テスト実行と自動評価
💡カスタマイズしたモデルの精度を評価するのに便利!
その場でLLMのパラメータを変更して再実行する
プロジェクト画面で、確認したいログを選択する。
![Image in a image block](/notion/9614691e-b9d8-4e2d-a131-d250be9d0f00/Untitled.png)
Playgroundを選択
![Image in a image block](/notion/7015d1b9-7073-4da6-9c38-dc88d5769e02/Untitled.png)
パラメータや質問文を変更して、再実行。
![Image in a image block](/notion/7ac29f43-70d7-4d23-844e-6f9599bd8a0d/Untitled.png)
回答が合っているか自動で評価してもらう
- まずサンプルとなる質問と回答を用意する。
- 評価用のプログラムを作成する。
- 評価用のプログラムを実行後、管理画面で評価結果を確認する。
✅まずはサンプルとなる質問と回答を用意する。
サンプルの用意の仕方は主に2種類ある。
- 管理画面で登録(今回はこっち!)
- Pythonプログラムで登録(公式ドキュメントを参照)
プロジェクト画面で、サンプルとして登録したいログを選択する。
![Image in a image block](/notion/9614691e-b9d8-4e2d-a131-d250be9d0f00/Untitled.png)
Add to Datasetを選択
![Image in a image block](/notion/5d912682-d52d-435d-aa32-d196ddd2ef5c/Untitled.png)
データセットの名前を入力する
(今回はデータセット名をsample-datasetとする)
![Image in a image block](/notion/e2170488-70d4-477f-bf9f-d5d31bfbb479/Untitled.png)
Submitを選択
![Image in a image block](/notion/44d54e3f-12c4-4184-b5ab-722e1477b521/Untitled.png)
これでデータセット(サンプル)が登録できた😊
サイドバーのDatasets & Testingを選択すると登録したデータセットを確認できる
![Image in a image block](/notion/b41ca128-4fa7-4dd8-9346-ec2388224022/Untitled.png)
✅評価用のプログラムを作成する。
src/langsmith/eval.py(ファイル名、保存場所は任意)
# 環境変数の準備
from dotenv import load_dotenv
load_dotenv()
# インポート
from langchain.chat_models import ChatOpenAI
from langchain.smith import run_on_dataset, RunEvalConfig
from langsmith import Client
# データセット名
dataset_name = "sample-dataset"
# LangSmithのクライアント
client = Client()
# LLMを準備
llm = ChatOpenAI(temperature=0)
# 評価の設定
eval_config = RunEvalConfig(
evaluators=[
"qa"
]
)
# 評価の実行
run_on_dataset(
dataset_name=dataset_name,
llm_or_chain_factory=llm, # LLMのインスタンス
evaluation=eval_config, # 評価の設定
client=client, # LangSmithのクライアント
verbose=True, # 実行ログを表示
project_name="sample-test-1", # 任意のプロジェクト名
)
プログラムを実行する
※パス、ファイル名は環境に応じて変える。
python src/langsmith/eval.py
✅管理画面で評価結果を確認する。
サイドバーのDatasets & Testing
→ Testsタブ
→ プロジェクト名(今回はsample-test-1)を選択
![Image in a image block](/notion/7dd6b0c8-a1a6-45e4-9488-5bc8f2a3310a/Untitled.png)
評価ログを選択
![Image in a image block](/notion/73587105-5274-4526-8e5e-fbe9a8d44c92/Untitled.png)
事前に用意したサンプルと、実行結果を確認できる
![Image in a image block](/notion/0996c203-5cca-4e3d-ac59-857d435b0532/Untitled.png)
Feedbackタブで評価結果(Score)を確認できる
※Scoreは1が最高点。
![Image in a image block](/notion/04013e65-7c6f-4bab-96b4-a5d58958bd88/Untitled.png)
よくある質問
公式ドキュメントでよくある質問がまとめられている。
参考サイト
公式ドキュメント
公式のLangSmith紹介記事
分かりやすい解説サイト