Why LangChain? | 🦜️🔗 LangChainの翻訳です。
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Pythonパッケージのlangchain
の企業としてのLangChainのゴールは、推論を行うアプリケーションの構築を開発者にとって可能な限り簡単なものにすることです。LangChainは元々は単一のオープンソースパッケージとしてスタートしましたが、会社と全体的なエコシステムへと進化しました。このページでは、全体としてのLangChainのエコシステムに関してお話しします。LangChainのコンポーネントのほとんどは単体で使用できるので、特定のコンポーネントを活用しても構いませんし、全く問題ありません!ご自身のユースケースに最も適したコンポーネントを選択してください!
機能
LangChainが取り組もうとする主要な要件がいくつか存在します:
- 標準化されたコンポーネントインタフェース: AIアプリケーションにおけるモデルと関連コンポーネントの数は増加し続け、結果として、開発者が学び、活用する必要のあるAPIの種類は膨大なものになっています。この多様性は、開発者がアプリケーションを構築する際にプロバイダーを切り替えたり、コンポーネントを組み合わせることを困難にします。LangChainはキーとなるコンポーネントに対する標準インタフェースを公開するので、プロバイダー間での切り替えが容易となります。
- オーケストレーション: アプリケーションは複雑になり、複数のコンポーネントやモデルを組み合わせることになり、多様なタスクを達成できるコントロールフローにこれらの要素を効率的に接続する要件が高まっています。そのようなアプリケーションの構築においてはオーケストレーションが重要となります。
- 観測可能性と評価: アプリケーションはさらに複雑になると、それらの内部で何が起きているのかを理解することが非常に困難になります。さらに、選択のパラドクスによって開発のペースが制限されることもあり得ます。例えば、多くの場合において開発者は、プロンプトをどのようにエンジアリングするのか、どのLLMが最も精度、レイテンシー、コストのバランスを取るのかに迷うことになります。観測可能性と評価は、開発者が自身のアプリケーションをモニタリングし、自信を持ってこのような質問に迅速に回答する助けとなります。
標準化されたコンポーネントインタフェース
LangChainは、多数のAIアプリケーションの中心となるコンポーネントの共通インタフェースを提供します。例としては、すべてのチャットモデルはBaseChatModelを実装しています。これによって、チャットモデルとやり取りを行うための標準化された手段を提供し、ツール呼び出しや構造化アウトプットのように重要ではありますが多くの場合にプロバイダー固有となる機能をサポートします。
例: チャットモデル
多くのモデルプロバイダーでは、開発者が特定のスキーマにマッチするようにモデルのレスポンスを要求できるツール呼び出しのように多くのアプリケーション(エージェントなど)で重要な機能をサポートしています。プロバイダーごとにAPIは異なります。LangChainのチャットモデルインタフェースは、ツール呼び出しをサポートするためにモデルにツールをバインドする共通の手段を提供します。
# Tool creation
tools = [my_tool]
# Tool binding
model_with_tools = model.bind_tools(tools)
同様に、モデルに構造化アウトプットを生成させることは非常に一般的なユースケースとなっています。プロバイダーはこれに対して、JSONモードやツール呼び出しを含む異なるアプローチをサポートしています。LangChainのチャットモデルインタフェースは、with_structured_output()
を用いた構造かアウトプットを生成するための共通の手段を提供します。
# Define schema
schema = ...
# Bind schema to model
model_with_structure = model.with_structured_output(schema)
例: リトリーバ
RAGとLLMアプリケーションコンポーネントの文脈において、LangChainのリトリーバインタフェースは、様々なデータサービスやデータベース(ベクトルストアやデータベースなど)に接続するための標準的な手段を提供します。リトリーバの背後の実装は、接続しようとするデータストアやデータベースの種類に依存しますが、すべてのリトリーバはrunnableインタフェースを実装しているので、共通の方法で呼び出すことを意味します。
documents = my_retriever.invoke("What is the meaning of life?")
オーケストレーション
個々のコンポーネントの標準化は有用ですが、我々は開発者たちがより複雑なアプリケーションにコンポーネントを組み合わせたいケースを多く目撃しました。これがオーケストレーションの要件の契機となりました。このオーケストレーションレイヤーがサポートすべきLLMアプリケーションの共通した特性がいくつか存在します:
- 複雑なコントロールフロー: アプリケーションはサイクルのような複雑なパターンを必要とします(条件を満たすまで繰り返されるループなど)。
- 永続化: アプリケーションは短期あるいは長期記憶を維持する必要があります。
- 人間の介在: アプリケーションは、停止、レビュー、編集、特定のステップの承認のように人間の介在を必要とします。
複雑なアプリケーションでコンポーネントをオーケストレートする推奨の手段がLangGraphとなります。LangGraphは一連のノードとエッジとしてアプリケーションのフローを表現することで、開発者に高いレベルのコントロールを提供するライブラリです。LangGraphは、永続化、人間の介在、記憶、その他の機能に対するビルトインサポートも提供しています。エージェントやマルチエージェントアプリケーションを構築する際に特に適しています。重要なことですが、個々のLangChainのコンポーネントは、LangGraphのノードとして使用できますが、LangChainコンポーネントなしにLangGraphを使うことも可能です。
追加資料
複雑なアプリケーションを構築するためのLangGraphの使い方を学ぶには無料のコースのIntroduction to LangGraphをご覧ください。
観測可能性と評価
AIアプリケーション開発のペースは、多くの場合において選択のパラドクスがあることから高品質の評価による制限を受けます。多くの場合、開発者は自身のプロンプトをどのようにエンジニアリングするのか、どのLLMが精度、レイテンシー、コストのバランスを取るのかに迷うことになります。高品質なトレーシングや評価は、自信を持ってこれらの質問に迅速に回答する助けとなります。LangSmithは、AIアプリケーションの観測可能性と評価をサポートする我々のプラットフォームです。詳細については、評価とトレーシングに関する我々のコンセプトガイドをご覧ください。
追加資料
詳細については、LangSmith tracing and evaluationsに関する動画リストをご覧ください。
まとめ
LangChainは、いくつかの個別の利点をもたらす、数多くのAIアプリケーションの中心となるコンポーネントに対する標準インタフェースを提供します。
- プロバイダーの切り替えを容易に: 背後のコードを変更する必要なしに、さまざまなコンポーネントプロバイダーを切り替えることができます。
- 高度な機能: ストリーミングやツール呼び出しのようなより高度な機能に対する共通のメソッドを提供します。
LangGraphは、複雑なアプリケーションのオーケストレートを可能にし、永続化、人間の介在、記憶のような機能を提供します。
LangSmithは、あなたのアプリケーションをテスト、評価するためのLLM固有の観測可能性と、フレームワークを提供することで、あなたのアプリケーションに対して自信を持ってイテレーションできるようにします。