🐈

LangChain0.1 ざっくり確認

2024/03/24に公開

はじめに

  • LangChainのバージョンが更新され、ライブラリが分割したため、確認してみました。
    • 間違いを含む可能性があります。実際に使用する際には公式のドキュメントをご確認ください。

https://blog.langchain.dev/the-new-langchain-architecture-langchain-core-v0-1-langchain-community-and-a-path-to-langchain-v0-1/

TL;DR:

  • LangChain0.1に向けてを3つのライブラリに分割するよ
    • langchain
      • 既存のLangChainの中核となるもの(より高レベルでユースケース固有のチェーン、エージェント、検索アルゴリズムなど)が含まれるよ
        • LangChainの基本的な機能のみを使用する際には、これを使うといいよ
    • langchain-core
      • 標準として登場したシンプルなコア抽象化と、これらのコンポーネントを一緒に構成する方法としての LangChain Expression Language(LCEL)が含まれるよ
        • 独自でLangChainを改良する際にはこれを使うといいよ
    • langchain-community
      • すべてのサードパーティ統合が含まれるよ。今後、パートナーと協力して主要な統合をスタンドアロン パッケージに分割する予定だよ
        • タスクを実施する際にはこれを使う良いいよ(使って欲しい)。ただし、バージョンの互換性には気をつけてね

そもそもLangChainとは

  • LangChain は、言語モデルを利用してアプリケーションを開発するためのフレームワークです。これにより、次のようなアプリケーションが可能になります。

    • コンテキストを認識する: 言語モデルをコンテキストのソース (プロンプトな指示、いくつかのショットの例、応答の基礎となるコンテンツなど) に接続します。
    • 理由: 言語モデルに基づいて推論します (提供されたコンテキストに基づいて回答する方法、実行するアクションなど)。
  • このフレームワークはいくつかの部分で構成されています。

    • LangChain
      • Python および JavaScript ライブラリ。無数のコンポーネントのインターフェースと統合、これらのコンポーネントをチェーンとエージェントに組み合わせるための基本的なランタイム、およびチェーンとエージェントの既製の実装が含まれています。
    • LangChain テンプレート:
      • さまざまなタスクに簡単に導入できるリファレンス アーキテクチャのコレクション。
    • LangServe :
      • LangChain チェーンを REST API としてデプロイするためのライブラリ。
    • LangSmith :
      • LLM フレームワーク上に構築されたチェーンのデバッグ、テスト、評価、監視を可能にし、LangChain とシームレスに統合できる開発者プラットフォーム。
    • LangGraph :
      • LangGraph は、LLM を使用してステートフルなマルチアクター アプリケーションを構築するためのライブラリであり、LangChain 上に構築されます (LangChain とともに使用されることを目的としています)。これは、複数の計算ステップにわたって複数のチェーン (またはアクター) を循環的に調整する機能を備えた LangChain 式言語を拡張します。

バージョン更新によって変わったこと

  • langchain開発者のエクスペリエンスを向上させるために、古いパッケージを3つの個別のパッケージに分割された。

  • langchain
    • アプリケーションのコグニティブ アーキテクチャの中核となる、より高レベルでユースケース固有のチェーン、エージェント、検索アルゴリズムが含まれています。
  • langchain-core
    • 標準として登場したシンプルなコア抽象化と、これらのコンポーネントを一緒に構成する方法としての LangChain 式言語が含まれています。このパッケージは現在 のバージョンであり0.1、すべての重大な変更にはマイナー バージョンの変更が伴います。
  • langchain-community
    • すべてのサードパーティ統合が含まれます。

以下、LangChain エコシステムの概要

それぞれ、どんな役割があるのか分かりにくいので簡単に解説していきたいと思います。

各ライブラリの役割について

langchain

  • 公式ドキュメント

  • LangChainのパッケージに残るのは、langchainアプリケーションのコグニティブ アーキテクチャを構成するchain、agents、高度な検索メソッド、およびその他の一般化可能なオーケストレーション部分

langchain-core

LangChain コアには、LangChain エコシステムの残りの部分を強化する基本的な抽象化が含まれています。

  • シンプルでモジュール化された抽象化

    • LangChain の基本抽象化は、モジュール式で可能な限りシンプルになるように設計されています。これらの抽象化の例には、言語モデル、ドキュメント ローダー、埋め込みモデル、ベクトルストア、レトリーバーなどの抽象化が含まれます。これらの抽象化の利点は、任意のプロバイダーが必要なインターフェイスを実装でき、LangChain の残りの部分で簡単に使用できることです。
  • これらは高レベルまたはエンドツーエンドの抽象化ではありません。必要なコンポーネントの共通インターフェイスを表すだけです。

    • 例: LLM は単なるテキスト入力、テキスト出力です。レトリバーはテキストを入力し、ドキュメントを出力します。

langchain-community

  • 公式ドキュメント

  • LangChain コミュニティには、LangChain コアで定義された基本インターフェイスを実装するサードパーティの統合が含まれており、どの LangChain アプリケーションでもすぐに使用できる

    • ドキュメント ローダーから LLM、ベクトルストア、ツールキットに至るまで、約 700 の統合を行っています。

LangChain Templates


* 公式ドキュメント

  • github

  • さまざまなタスクに簡単に導入できるリファレンス アーキテクチャのコレクション。

  • これらは、LangServe を使用して簡単に展開できるエンドツーエンドのアプリケーションです。langchainこれらは、いくつかの点で、ライブラリ内のチェーンやエージェントとは異なります。

    • まず、これらは Python ライブラリの一部ではなく、ダウンロードされてアプリケーションの一部となるコードです。これには、簡単に変更できるという大きな利点があります。私たちが時間の経過とともに観察した主な点の 1 つは、ユーザーが LangChain アプリケーションを運用環境に導入する際に、開始元のチェーンまたはエージェントをある程度カスタマイズする必要があるということです。少なくとも、使用するプロンプトを編集する必要があり、多くの場合、チェーンの内部やデータの流れを変更する必要がありました。このロジック (プロンプトとオーケストレーションの両方) を、ライブラリのソース コードの一部としてではなく、アプリケーションの一部として配置することで、はるかに変更可能になります。
    • 2 番目の大きな違いは、これらがさまざまな統合によって事前に構成されているということです。チェーンやエージェントを機能させるには、LLM または VectorStore を渡す必要があることがよくありますが、テンプレートにはそれらがすでに用意されています。LLM が異なればプロンプト戦略も異なり、ベクトルストアが異なればパラメータも異なる可能性があるため、これにより統合パートナーと提携して、その特定の技術を最大限に活用したテンプレートを提供することが可能になります。

現在のテンプレ

LangServe


* 公式ドキュメント

  • LangChain アプリケーションをデプロイするためのライブラリ。

  • LangServe は、基本的に FastAPI をラップして LangChain オブジェクトのエンドポイントを自動的に追加するオープン ソースの Python ライブラリです。

  • 複数のエンドポイント (ストリーミング、バッチ) を自動的に追加し、それらのエンドポイントの入出力を自動的に推論します。

  • これらのチェーンとエージェントの単純な UI を自動的に起動することもできます。特定のチェーンをエンド ユーザーに公開して試してもらうことが簡単になります。

LangSmith

  • [公式ドキュメント]

  • LLM フレームワーク上に構築されたチェーンのデバッグ、テスト、評価、監視を可能にし、LangChain とシームレスに統合できる開発者プラットフォーム。

  • LangSmith は、クラス最高のデバッグ エクスペリエンスを提供します。チェーンとエージェントのすべてのステップをログに記録することで、次のことが簡単に行えます。

    • どのステップがどの順序で実行されたかを正確に確認する
    • これらのステップへの正確な入力が何であったかを確認してください
    • これらのステップの正確な出力を確認してください
    • 特定のステップのプレイグラウンドに入り、入力を変更し、それによって出力がどのように変化するかを確認できます。
  • 主要な部分がこの非決定論的言語モデルであるこれらの複雑なチェーンとエージェントを構築する場合、この種の可観測性は非常に重要です。構築を開始した瞬間から、LangSmith によって反復速度が大幅に向上します。

  • LangSmith には、アプリケーションをプロトタイプから本番環境に移行することを目的とした一連の追加ツールも含まれています。これも:

    • フィードバックの収集 - ユーザーが製品をどのように操作しているかを理解することが重要です
    • データセットとテスト –これを使用した評価に関する最近の 取り組みを参照してください。
    • モニタリング – 使用状況、フィードバック スコア、レイテンシ、トークン
    • データ注釈キュー – データに迅速にラベルを付けるため
    • ハブ – プロンプトでの共同作業用

LangGraph

  • LangGraphは、LangChainLLMを使用してステートフルなマルチアクターアプリケーションを構築するためのライブラリです。LangChainではLCEL(LangChain Expression Language)を拡張して、複数のチェーン(またはアクター)を複数のステップにわたって循環的に協調動作させることができます.
    • このライブラリは、異なるエージェントと遷移確率を明示的に定義し、それをグラフとして表現するアプローチを採用しています。LangGraphは、マルチアクターアプリケーションの構築において非常に強力であり、多くの用途で活用されています。

    • ステートフルなマルチアクターアプリケーションは、複数のエージェント(アクター)が連携して動作するアプリケーションで、それぞれのエージェントが状態を保持しながら協調的に動作します。

      • 以下に、ステートフルなマルチアクターアプリケーションの特徴を解説します:
  1. エージェントとは?

    • エージェントは、異なるプロセスやユーザーを指します。例えば、ユーザー、サーバー、デバイスなどです。
    • 各エージェントは自身の状態を保持し、他のエージェントと連携しながらアプリケーションを構築します。
  2. ステートフルな特性

    • エージェントは過去の状態を覚えており、それに基づいて動作します。
    • 例えば、オンラインバンキングや電子メールのように、何度も繰り返し実行されるアプリケーションがステートフルです。
    • ステートフルなアプリケーションは、以前のトランザクションのコンテキストに基づいて実行され、現在のトランザクションに影響を与えることがあります。
  3. マルチアクターの利点

    • 複数のエージェントが協調して動作するため、柔軟なアプリケーション設計が可能です。
    • エージェント同士が情報を共有し、複雑なタスクを分散して処理できます。

ステートフルなマルチアクターアプリケーションは、異なるエージェントが連携してタスクを遂行する場合に非常に有用です。

参考記事

https://book.st-hakky.com/data-science/langgraph-intro/

https://zenn.dev/umi_mori/books/prompt-engineer/viewer/langgraph

https://blog.langchain.dev/the-new-langchain-architecture-langchain-core-v0-1-langchain-community-and-a-path-to-langchain-v0-1/

Discussion