LangChainは、大規模言語モデル(LLM)を使用したアプリケーション開発のためのオープンソース・オーケストレーション・フレームワークです。 PythonベースとJavascriptベースの両方のライブラリで利用できるLangChainのツールとAPIは、チャットボットや仮想エージェントなどのLLM駆動型アプリケーションの構築プロセスを簡素化します。
LangChainは、ほぼすべてのLLMの汎用インターフェースとして機能し、LLMアプリケーションを構築し、外部データソースやソフトウェアワークフローと統合するための集中開発環境を提供します。LangChain のモジュールベースのアプローチにより、開発者やデータサイエンティストは、コードを書き直す必要を最小限に抑えながら、さまざまなプロンプト、さらにはさまざまな基盤モデルを動的に比較できます。このモジュール化された環境では、複数の LLM を使用するプログラム(例:あるLLMを使用してユーザークエリを解釈し、別のLLMを使用して応答を作成するアプリケーションなど) も可能になります。
2022年10月にHarrison Chase氏によって立ち上げられたLangChainは、2023年6月現在、Githubで最も急成長しているオープンソースプロジェクトとして、急成長を遂げています。1 翌月のOpenAIのChatGPTの重要なローンチと同時に、LangChainは、その普及を受けて生成AIを愛好家にとってより身近なものにする上で重要な役割を果たしました。
LangChainは、チャットボット、インテリジェント検索、質問応答、要約サービス、あるいはロボットによるプロセスの自動化が可能なバーチャルエージェントなど、LLMと自然言語処理(NLP)のほとんどのユースケースを促進できます。
LLMはスタンドアロンアプリケーションではありません。LLMは、あらかじめ訓練された統計モデルであり、その目的を果たすためにはアプリケーション(場合によっては特定のデータソース)と組み合わせる必要があります。
たとえば、Chat-GPTはLLMではなく、選択したバージョンに応じてGPT-3.5またはGPT-4言語モデルを使用するチャットボットアプリケーションです。ユーザーの入力を解釈し、自然言語の応答を作成するのはGPTモデルですが、(とりわけ)ユーザーが入力したり読んだりするインターフェースを提供するのはアプリケーションとチャットボットエクスペリエンスに影響を与えるUXデザインです。エンタープライズレベルでも、GPTモデルを使用するアプリケーションはChat-GPTだけではありません。例として、MicrosoftはGPT-4を使用してBing Chatを強化しています。
さらに、基盤モデル(LLMを強化するモデルなど)は大規模なデータセットで事前にトレーニングされていますが、すべてを網羅しているわけではありません。特定のタスクで内部文書やドメインの専門知識など特定のコンテキスト情報にアクセスする必要がある場合、LLMをそれらの外部データソースに接続する必要があります。現在のイベントのリアルタイム認識をモデルに反映したいだけの場合でも、外部情報が必要です。つまり、モデルの内部データは、事前トレーニングされた期間における最新情報でしかない、ということです。
同様に、特定の生成AIタスクが外部ソフトウェアワークフローへのアクセスを必要とする場合(仮想エージェントをSlackと統合したい場合など)、LLMをそのソフトウェアのAPIと統合する方法が必要です。
通常、このような統合は手動のコードで行いますが、LangChainやIBM watsonxプラットフォームのようなオーケストレーション・フレームワークは、そのプロセスを大幅に簡素化できます。また、コードに最小限の変更を加えるだけでさまざまなモデルに入れ替えできるため、容易にいろいろなLLMを試し、結果を比較することができます。
ブロックチェーンからコンテナ、AI、オペレーティング・システムまで、IBMの開発者が新たなオープンソース・プロジェクトを作成し、コード、ドキュメント、サポートを提供しているので、あなたもイノベーションに参加できます。
IBMニュースレターの購読
LangChainの中核をなすのは、抽象化によってLLMアプリケーションのプログラミングを効率化する開発環境です。抽象化とは、1つ以上の複雑なプロセスの構成ステップをすべてカプセル化した名前付きコンポーネントとみなすことでコードを簡素化することです。
抽象化は、日常生活や言語における一般的な要素です。たとえば「π」を使用すると、無限に桁を書き出さずに、円周の長さと直径の比率を表すことができます。同様に、サーモスタットを使用する際は、その複雑な回路の仕組みを理解していなくても、サーモスタットの設定によって温度がどう変わるかがわかるだけで、家の温度をコントロールできます。
LangChainは本質的に、PythonとJavascriptのための抽象化ライブラリで、言語モデルを扱うために必要な共通のステップと概念を表しています。これらのモジュール式コンポーネント(関数やオブジェクトクラスなど)は、生成AIプログラムの構成要素として機能します。これらを「連鎖」させてアプリケーションを作成することで、複雑なNLPタスクの実行に必要なコードの量と細部の理解を最小限に抑えることができます。LangChainの抽象化されたアプローチは、専門のプログラマーによるアプリケーションの細かなカスタマイズ範囲を制限する可能性がありますが、専門家も初心者も関係なく迅速に試用を行いプロトタイプを作成することができます。
LangChainでは、ほぼすべてのLLMを使用できます。APIキーがあれば、LangChainへの言語モデルのインポートは簡単です。LLMクラスは、すべてのモデルに標準インターフェイスを提供するよう設計されています。
ほとんどのLLMプロバイダーでは、APIキーを受け取るためにアカウントを作成する必要があります。これらのAPIの中でも、特にOpenAIやAnthropicが提供するような独自のクローズドソースモデル用のものは関連するコストがかかる場合があります。
BigScienceのBLOOM、Meta AIのLLaMa、GoogleのFlan-T5のような多くのオープンソースモデルは、Hugging Face(ibm.com外部リンク)からアクセスできます。IBM watsonxはHugging Faceとの提携を通じて、厳選されたオープンソースモデル群も提供しています。いずれかのサービスでアカウントを作成すると、そのプロバイダーが提供する任意のモデルのAPIキーを生成できるようになります。
LangChainが対応しているのは、すぐに使用できる基盤モデルだけではありません。CustomLLMクラス(ibm.com外部リンク)では、カスタムLLMのラッパーが可能です。同様に、IBM watsonx API and Python SDK(LangChainの統合を含む)を使い、WatsonxLLMクラス(およびそのモデルに該当するプロジェクトID)を使用して、既にトレーニング済みまたは特定のニーズに合わせて微調整したモデルでLangChainでアプリケーションを構築できます。
プロンプトは、LLMに与えられる指示です。LLMが入力を解釈し、最も役立つ方法で出力を構成するために必要なコンテキストを効果的に提供するプロンプトを作成する「アート」は、よくプロンプトエンジニアリングと呼ばれます。
LangChainのPromptTemplateクラスは、コンテキストやクエリを手動でハードコードすることなく、プロンプトの構成を形式化します。プロンプトの重要な要素も同様に、input_variablesなどの正式なクラスとして入力されます。そのため、プロンプトテンプレートでは、文脈、指示(例:「専門用語は使わないでください」)、応答を導くための一連の例(「few-shotプロンプティング」と呼ばれる)、指定された出力形式、または回答として標準化された質問を再現することができます。効率的に構造化されたプロンプトテンプレートを保存して名前を付け、必要に応じて簡単に再利用できます。
これらの要素はすべて手動でコーディングできますが、PromptTemplateモジュールを使用すると、同名チェーンなど、他のLangChain機能とスムーズに統合できます。
その名のとおり、チェーンはLangChainのワークフローの中核です。チェーンは、LLMを他のコンポーネントと組み合わせ、一連の関数を実行することでアプリケーションを作成します。
最も基本的なチェーンはLLMChainです。これは単にモデルを呼び出し、そのモデルのプロンプトテンプレートを呼び出すものです。たとえば、プロンプトを「ExamplePrompt」として保存し、それをFlan-T5に対して実行したいとします。LLMChainはlangchain.chainsからインポートできます。次に、chain_example = LLMChain(llm = flan-t5, prompt = ExamplePrompt)を定義します。特定の入力に対してチェーンを実行するには、chain_example.run(“input”)を呼び出すだけです。
ある関数の出力を次の関数の入力として使用するには、SimpleSequentialChainを使用します。各関数は、特定のニーズに応じて、異なるプロンプト、異なるツール、異なるパラメーターの他、異なるモデルも利用できます。
特定のタスクを達成するために、LLMは、社内の文書、電子メール、データセットなど、トレーニングデータセットに含まれていない特定の外部データソースにアクセスする必要があります。LangChainでは、このような外部ドキュメントを総称して「インデックス」と呼びます。
ドキュメントローダー
LangChainは、サードパーティアプリケーションの向けの様々なドキュメントローダーを提供しています(ibm.com外部リンク)。これにより、ファイルストレージサービス(Dropbox、Google Drive、Microsoft OneDriveなど)、ウェブコンテンツ(YouTube、PubMed、特定のURLなど)、コラボレーションツール(Airtable、Trello、Figma、Notionなど)、データベース(Pandas、MongoDB、Microsoftなど)などのソースからデータを簡単にインポートすることができます。
ベクトルデータベース
「従来の」構造化データベースとは異なり、ベクトルデータベースはデータポイントをベクトル埋め込み(固定数の次元を持つベクトルの形式で数値表現)に変換して表現し、多くの場合、教師なし学習法を使用して関連するデータポイントをクラスタリングします。これにより、大規模なデータセットであっても低遅延のクエリが可能になり、効率が大幅に向上します。ベクトルの埋め込みには各ベクトルのメタデータも保存されるため、検索の可能性がさらに高まります。
LangChainは、25種類以上のエンベッディング(埋め込み)手法と、50種類以上のベクターストア(クラウドホストとローカル)の統合を提供します。
Text splitters
スピードを上げ、計算量を減らすためには、大きなテキスト文書を小さな断片に分割するのが賢明です。LangChainのTextSplitterは、テキストを意味論的に意味を成し、組み合わせられる小さなチャンクに分割します。
Retrieval
外部の知識ソースが接続されると、モデルは必要に応じて関連情報を迅速に取得して統合する必要があります。watsonxのように、LangChainは検索拡張生成(RAG)を提供します。検索モジュールは文字列クエリを入力として受け取り、出力としてドキュメントのリストを返します。
デフォルトでは、LLMには過去の会話の長期記憶がありません(チャット履歴がクエリの入力として使用される場合を除く)。LangChainは、システムにメモリを追加するためのシンプルなユーティリティでこの問題を解決します。オプションは、すべての会話を保持するものから、これまでの会話の要約を保持するもの、最新のn個のやり取りを保持するものまで多岐にわたります。
LangChainのエージェントは、特定の言語モデルを「推論エンジン」として使用し、どのアクションを実行するか決定できます。エージェントのチェーンを構築する場合、入力には次のものが含まれます。
LLMは、そのパワーと汎用性を謳っているにもかかわらず、最新の情報の欠如、ドメイン固有の専門知識の欠如、数学の一般的な難しさなど、重大な制限があります。
LangChainツール (ibm.com外部リンク)は、LangChainのエージェントが提供するサービスの拡張または改善するために、現実世界の情報と対話できるようにする一連の機能です。有名なLangChainツールの例としては以下のようなものがあります。
Wolfram Alpha:強力な計算機能とデータの可視化機能へのアクセスを提供し、高度な数学的機能を可能にします。
Google検索:Google検索へのアクセスを提供し、アプリケーションとエージェントにリアルタイムの情報を提供します。
OpenWeatherMap:気象情報を取得します。
Wikipedia:Wikipediaの記事から情報へ効率的にアクセスできます。
2023年秋にリリースされるLangSmithは、LangChainを有名にしたアクセシブルなプロトタイピング機能と、生産品質のLLMアプリケーションの構築とのギャップを埋めることを目指しています。
LangSmithは、すべてのモデル呼び出しを自動的にトレースしてエラーを特定し、さまざまなモデル構成でパフォーマンスをテストする機能など、アプリケーションを監視、評価、デバッグするためのツールを提供します。この可視性は、より堅牢でコスト効率の高いアプリケーションを強化することを目的としています。
LangChainはオープンソースで無料で使用できる。ソースコードは Githubでダウンロード可能 (ibm.com外部リンク)です。
LangChainは、単純なpipコマンドである pip install langchainを使用してPythonにインストールすることもできます。 (必要なもの以外に)すべてのLangChain依存関係をインストールするには、pip install langchain[all]コマンドを実行します。
LangChainコミュニティーのエコシステムとdocs.langchain.comの公式ドキュメントの両方で、多くのステップバイステップのチュートリアルを利用できます(ibm.com外部リンク)。
LangChainで作成されたアプリケーションは、単純な質問応答やテキスト生成タスクから、LLM を「推論エンジン」として使用するより複雑なソリューションまで、さまざまなユースケースに優れたユーティリティを提供します。
基盤モデル、生成AI、機械学習のトレーニング、検証、チューニング、デプロイが容易になり、少量のデータを使用して、短時間でAIアプリケーションを開発できます。
AIの活用方法を新たに創造する:2万人を超えるAI専門家からなるIBMの多様なグローバル・チームは、お客様が迅速かつ自信を持ってAIと自動化を設計し、ビジネス全体に拡張できるよう支援します。独自のIBM watsonxテクノロジーとパートナーのオープン・エコシステムを連携して、倫理と信頼に基づいて、あらゆるクラウド環境にAIモデルを提供します。
watsonx.dataは、オープンでハイブリッドな統制されたデータ・ストアとして、あらゆるデータの分析とAIワークロードをあらゆる場所に拡張できます。
LangChainとwatsonxを使用してアプリケーションの構築を開始するためのツール、ヒント、サンプルコード。
アートとサイエンスの両面を兼ねたプロンプトエンジニアリングは、特定のモデルとパラメーターに対して最適な効果をもたらすプロンプトテキストを作成するプロセスです。これらのヒントは、ほとんどのテキスト生成基盤モデルを適切にプロンプトするのに役立ちます。
このノートブックには、watsonxモデルとlangchainの統合を使ったSimple Sequential Chainのデモの手順とコードが書かれています。Pythonについてある程度の知識があると役に立ちます。
代数計算の実行からデータからのグラフィック出力の生成まで、この直感的なプログラミング言語を使い始めるために知っておく必要がある基本概念をご紹介しています。
1 The fastest-growing open-source startups in Q2 2023(2023年第2四半期に最も急成長したオープンソース新興企業)(ibm.com外部リンク)、Runa Capital(2023年)