😇 TL;DR(最初に結論)
LangSmith でのトレースは、LANGSMITH_TRACING=true
が環境変数に設定されているだけで有効になります。
→ tracing_v2_enabled()
等をコードに書かなくても、自動で記録されるようになってました!
🧪 環境構成
- FastAPI(Python 3.11)
- LangGraph / LangMem
- LangChain + LangSmith
- Cloud Run(Dockerデプロイ)
- PostgreSQL(AsyncPostgresStore)
- CloudRun 環境変数にて
LANGSMITH_*
を設定
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=(略)
LANGSMITH_API_KEY=(略)
LANGSMITH_PROJECT=(略)
🧩 やりたかったこと
LangSmith を使って、
Cloud Run 上で動いているエージェントの挙動(プロンプト最適化含む)をトレースしたい!
💥 ハマったポイント
-
tracing_v2_enabled()
が必要だと思って、run_agent()
を書き換え -
from langchain_core.tracers import tracing_v2_enabled
が ImportError に(←バージョン最新なのに) - langchain-core のバージョン固定して入れ直す → ビルド失敗
- Dockerfile を微調整 → 何度も Cloud Run でデプロイ失敗
- PORT 8080 のエラーに騙されてヘルスチェックなどを疑う
🔍 原因はまさかの「勝手に有効になってた」
実は、LangSmith のトレース機能は 環境変数があれば自動で発火します。
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=(略)
LANGSMITH_API_KEY=(略)
LANGSMITH_PROJECT=(略)
↑ これがあれば、LangChain SDK 側で自動的にフックされ、LangSmith に送信されます。
コードに tracing_v2_enabled()
を書かなくても、勝手に記録されてる。
🧠 気づいたきっかけ
LangSmith に何も連携してない状態に切り戻したのに、LangSmith の GUI にログが上がってきていた。
「は???なんで???」
→ 環境変数がそのままだったことに気づき、真実が判明。
✅ 教訓まとめ
ハマりポイント | 教訓 |
---|---|
tracing_v2_enabled() を書いたのに ImportError | そもそも書かなくていい |
Cloud Run で PORT エラーが出る | 起動に失敗してる原因はコード側(ImportErrorなど)かも |
LangChain のバージョンを調整しまくる | LangSmith のトレースには関係ない |
トレースされない!と思い込んでコードを大幅変更 | 環境変数をまず疑うべし |
🧘♂️ 結果と感想
3時間溶けたけど、
LangSmith が かなり優秀なトレース機能を持ってることが体験でよく分かった。
こんな感じで推論の流れを全て見れます。
パラメータの最適化にもかなり使えるので、LangChain + Cloud Run な構成では
開発時は LANGSMITH_TRACING=true
にしておくのをオススメします。
※本番環境では、プライバシーの問題とかもあるので慎重に...。
💤 最後に
$ echo "このQiita記事は、僕のHP -1 からの復活ログである"
$ echo "少しでも誰かの時間とHPを救えたら幸いです🙏"