LangChainチュートリアル:LLMを活用するアプリの構築ガイド

139686_-_Elastic_-_Headers_-_V1_2.jpg

GPT-4やLLaMAなどの大規模言語モデル(LLM)は、ここ数年で可能性を大きく広げてきました。これがAIツールやアプリケーションのブームの先駆けとなり、ChatGPTは一見突如として有名になりました。しかし、このブームは、この新世代のアプリを促進するために作成された強力なツールとフレームワークがなければ起こらなかったでしょう。

そうしたフレームワークの1つがLangChainです。LangChainでは、既存のLLMを使用して新しいアプリを簡単に構築できます。LangChainは、機械学習の専門家であるHarrison Chase氏が開発し、2022年にオープンソースプロジェクトとして始動しました。このフレームワークは、既存の言語モデル間の技術的なギャップを埋め、多様な新しいアプリケーションを構築するための大きな一歩となっています。

LangChainの説明

わかりやすく言うと、LangChainはAIアプリの構築プロセスを簡素化する標準化されたインターフェースです。多彩なツールを備えていて、それらのツールを使って、さまざまなコンポーネントを接続して複雑なワークフローを作成できます。そうしたコンポーネントには、LLMや各種のデータソースがあります。ユーザーがアプリを操作すると、LangChainはLLMへの接続を使用して、リクエストを処理し、適切な応答を生成します。また、ドキュメントやデータベースなどの外部ソースからの情報やデータを使用して、より正確でコンテキストに即した回答を提供することもできます。

たとえば、ユーザーが質問をすると、LangChainはLLMを使用して、質問を理解し、応答を組み立てます。さらに、1つ以上の外部データソースからデータを取得して応答を補強します。その結果、アプリケーションはさらにインテリジェントになり、複雑で専門的なクエリを処理できるようになります。

LLMの能力を強化するには、基本的には、解決したい問題との関連性が高いデータをLLMに提供します。

PythonとTypeScriptの両方のパッケージが用意されており、以下の優れた機能を備えています。

  • モデルの操作:LangChainは、任意の言語モデルを操作できるようにし、入力を管理して、出力から情報を抽出します。

  • 効率的な統合:OpenAIやHugging Faceなどの一般的なAIプラットフォームと効率的に統合できます。

  • 柔軟性とカスタマイズ:LangChainは柔軟性、カスタマイズオプション、強力なコンポーネントを備えているため、さまざまな業界の多種多様なアプリケーションを作成できます。

  • コアコンポーネント:このフレームワークは、LangChainライブラリ、LangChainテンプレート、LangServe、およびLangSmithで構成されており、アプリケーションのライフサイクル全体を簡素化します。

  • 標準化されたインターフェース:標準化されたインターフェース、プロンプト管理、およびメモリ機能を備え、言語モデルがデータソースとやり取りできるようにします。

これらの機能を組み合わせることで、柔軟性、迅速性、拡張性、使いやすさを実現し、AIを使い始めたい開発者にうってつけのツールとなっています。

LangChainの仕組み

LangChainは、LLMと統合するモジュール式のフレームワークです。標準化されたインターフェースを備え、さまざまなLLM APIを利用する際の複雑さと難しさを抽象化します。そのため、同じプロセスでGPT-4やLLaMAなどの使用したいLLMと統合することができます。また、LLMを動的に選択できるため、開発者はLangChainを使用して実行する特定のタスクに最も適したLLMを選択することが可能です。

また、モジュール設計により、入力データの処理と実用的な出力への変換が容易になります。テキスト、コード、マルチメディア形式など、さまざまなデータタイプを処理し、データの前処理、クリーニング、正規化のためのツールを備えています。こうした処理を行うことで、データがLLMでの使用に適したものとなります。その際に、トークン化、正規化、言語識別を行うこともできます。

LangChainは、LLMの出力も処理し、アプリやタスク固有の要件に適した形式に変換します。たとえば、テキストの書式設定、コードスニペットの生成、複雑なデータの要約の提供などを行うことができます。

LangChainのコアとなる概念

LangChainのアーキテクチャは、コンポーネントとチェーンという概念を基盤にしています。コンポーネントは、入力データの処理、テキスト形式の生成、外部情報へのアクセス、ワークフローの管理など、特定のタスクを実行する再利用可能なモジュールを表します。チェーンとは、ドキュメントの要約、クリエイティブなテキスト形式の生成、パーソナライズされた推奨事項の提供など、より大きな目的を達成するために連携して動作する一連のコンポーネントです。

コンポーネントとモジュール

LangChainでは、"コンポーネント"と"モジュール"という用語が同じ意味で使われることがありますが、この2つにはわずかな違いがあります。

  • コンポーネントは、LangChainのコアとなる構成要素であり、特定のタスクや機能を表します。通常、小さくて目的が絞られており、さまざまなアプリケーションやワークフローで再利用できます。

  • 一方、モジュールは、複数のコンポーネントを組み合わせて、より複雑な機能を形成します。LangChainは、メモリモジュール(大規模言語モデルが使用するデータを保存および管理する再利用可能な構築要素)やエージェント(リアルタイムのフィードバックとユーザーインタラクションに基づいてチェーンを調整する動的制御ユニット)など、いくつかの主要モジュールの標準インターフェースも備えています。

コンポーネントと同様に、モジュールは再利用可能で、組み合わせてさらに複雑なワークフローを作成することができます。これはチェーンと呼ばれ、一連のコンポーネントまたはモジュールを組み合わせて特定の目的を達成します。チェーンは、LangChainのワークフローオーケストレーションの基盤であり、さまざまなタスクを処理する効果的なアプリケーションを構築するうえで不可欠です。

LLMとの統合

LangChainは、LLMとシームレスに統合できるよう、標準化されたインターフェースを備えています。しかし、LLMとの統合については、単に接続メカニズムを提供するだけではありません。言語ベースのアプリケーションを構築するためにLLMの使用を最適化する機能もいくつか提供します。

  • プロンプト管理:LangChainでは、LLMがタスクを理解し、有用な応答を生成するのに役立つ効果的なプロンプトを作成できます。

  • LLMの動的な選択:複雑さ、精度要件、計算リソースなどに基づいて、さまざまなタスクに最も適したLLMを選択できます。

  • メモリ管理の統合:LangChainはメモリモジュールと統合されるため、LLMが外部情報にアクセスして処理することができます。

  • エージェントベースの管理:これにより、絶えず変化する状況やユーザーのニーズに適応する複雑なLLMベースのワークフローを管理できます。

ワークフロー管理

LangChainの場合、ワークフロー管理とは、特定の問題を解決するためにチェーンとエージェントの実行を調整および制御するプロセスです。これには、データフローの管理、コンポーネントの実行の調整、ユーザーインタラクションや絶えず変化する状況にアプリケーションが効果的に対応できるようにすることが含まれます。ここで、主要なワークフロー管理コンポーネントをいくつか紹介します。

  • チェーンオーケストレーション:LangChainは、チェーンの実行を調整して、タスクが正しい順序で実行され、コンポーネント間でデータが正しく受け渡しされるようにします。

  • エージェントベースの管理:エージェントの利用は、事前定義されたテンプレートとユーザーフレンドリーなインターフェースで簡素化されます。

  • 状態管理:LangChainは、アプリケーションの状態を自動的に追跡し、開発者が状態情報にアクセスして変更できる一元的なインターフェースを提供します。

  • 同時実行管理:LangChainが同時実行の複雑さを処理するため、開発者はスレッドや同期の問題を気にすることなく、タスクや対応に専念できます。

LangChainのセットアップ

LangChainの利点の1つは、利用を開始するための要件が非常に少ないことです。このガイドではPythonを使用するため、コンピューターにPython 3.8以降がインストールされている必要があります。要件は以上です。

インストールと設定

最初のステップでは、LangChainのコアフレームワークをインストールします。これを行う最も簡単な方法は、次のPIPコマンドを使用することです。

pip install langchain

次に必要なのは、LangChainがやり取りするLLMです。この例ではOpenAIを使用しますが、実際のアプリには任意のLLMを使用できます。

pip install openai

OpenAIを機能させるには、リクエストを認証するためのAPIキーも必要です。キーを入手するには、OpenAIアカウントを作成し、APIキーセクションに移動して、[Create new secret key](新しいシークレットキーの作成)を選択します。キーを入手したら、どこか安全な場所に保管します。キーはすぐに必要になります。

最後に、data.txtというテキストファイルを作成します。これが、LLMにコンテキストを提供するために使用する外部データソースになります。

In West Philadelphia born and raised
On the playground was where I spent most of my days
Chillin' out, maxin', relaxin', all cool
And all shootin' some b-ball outside of the school

さあ、これからが楽しい時間です!

LangChainを使用したアプリケーションの開発

このLangChainアプリを構築するには、任意のテキストエディターまたはIDEを開いて、data.txtと同じ場所に新しいPython(.py)ファイルを作成する必要があります。OpenAIのGPT-3 LLMにプロンプトを送信し、応答を出力する非常に基本的なアプリを作成します。

もう少し高度なものをお探しでしたら、ElasticsearchとLangChainでAmazon Bedrockを使用するためのガイドをご覧ください。

ステップ1:LangChainからOpenAIクラスをインポートする

Pythonスクリプトの先頭に次のimportステートメントを追加して、LangChainのLLMモジュールからOpenAIクラスを取り込みます。

from langchain.llms import OpenAI

ステップ2:テキストファイルからデータを読み取る機能を定義する

関数を定義して、アプリがファイルパスを引数として受け取るようにします。これにより、ファイルが読み取り用に開かれ、その内容が返されます。

def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

ステップ3:OpenAIモデルを初期化する

APIキーを使用してOpenAIクラスのインスタンスを作成します。YOUR-OPENAI-KEYを、OpenAIから入手した実際のキーに置き換えます。

gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

ステップ4:OpenAIからの応答を要求する関数を定義する

プロンプトを引数として受け取り、GPT-3モデルからの応答を返す関数を記述します。

def get_response(prompt):
    return gpt3(prompt)

ステップ5:テキストファイルからデータを読み取る

テキストファイルへのパスを指定し、先ほど定義した関数を使用してその内容を読み取ります。次に、そのデータをexternal_data変数に保存します。

file_path = 'data.txt'
external_data = read_data_from_file(file_path)

ステップ6:テストプロンプトを作成する

ここでは、GPT-3に送信するプロンプトを定義します。この例では、テキストを読んで、テキストファイルには何のテレビ番組について書かれているのかを答えてもらいます。

prompt = f"Based on the following data: {external_data}, what TV show is this about?"

ステップ7:GPT-3からの応答を取得して出力する

準備したプロンプトを送信し、GPT-3から応答を取得して出力する関数を呼び出します。

print("Response:", get_response(prompt))

ステップ8:アプリを実行して応答を確認する

これらすべての手順が完了すると、Pythonアプリは次のようになります。

from langchain.llms import OpenAI

# Function to read data from a file
def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

# Initialize the LLM
gpt3 = OpenAI(api_key='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')

def get_response(prompt):
    return gpt3(prompt)

# Read data from your text file
file_path = 'data.txt'
external_data = read_data_from_file(file_path)

# Prepare your prompt including the external data
prompt = f"Based on the following data: {external_data}, what TV show is this about?"

# Get the response from GPT-3
print("Response:", get_response(prompt))

ここまで来たら、Pythonアプリを実行して動作することを確認するだけです。ファイルを保存し、ターミナルで次のコマンドを使用してアプリを実行します。

python YOUR-APP-NAME.py

すべてが計画どおりに進めば、次のような応答が返されます。

Response: 
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".

ユースケース

この例は非常にシンプルなデモですが、LangChainは柔軟なため、新しいAIアプリの構築という点では可能性は無限です。ここですべてをリストアップすることはできませんが、さまざまなアプリを構築できることを示すために、いくつかの活用事例を紹介します。

  • チャットボット自然言語で質問したり、会話の履歴を保持したりできる独自のチャットボットを構築できます。

  • Q&Aアプリ探している情報について尋ねると、格納されているドキュメントから回答を見つけるアプリを作成できます。

  • テキスト検索(BM25)大量のデータを照会する独自のテキスト検索アプリを作成できます。

  • ベクトル検索データの類似性を検索し、メタデータをフィルタリングするアプリを構築できます。

  • ハイブリッド検索(テキストとベクトル)テキストとベクトルの両方のフィルタリングを使用して類似するドキュメントを照合するAIアプリを開発できます。

  • 独自のLLMを使用したLangChainLangChainを使用して、独自のLLMと外部データソースを活用するAIアプリを構築できます。

LangChainによるLLMを活用するアプリの構築

すでにおわかりだと思いますが、LangChainは、LLMのパワーと外部データソースのコンテキストおよび追加情報を組み合わせることで、無限の可能性をもたらします。また、このLangChainチュートリアルで説明したように、利用を開始するのは驚くほど簡単です。LangChainは、この使いやすさ、柔軟性、パワーを兼ね備えているため、さまざまなAIアプリケーションを開発するための理想的なプラットフォームとなっています。チャットボット、Q&Aアプリ、検索エンジンのいずれを構築する場合でも、LangChainは革新的で効果的なソリューションの作成に役立ちます。

次にやるべきこと

準備ができたら、ビジネスのデータから得られるインサイトを活用するための次の4つのステップに進みましょう。

  1. 無料トライアルを開始して、Elasticがビジネスにどのように役立つのかを実感してください。

  2. ソリューションのツアーで、Elasticsearchプラットフォームの仕組みと、ソリューションがニーズにフィットする仕組みを確認してください。

  3. 生成AIを企業に導入する方法を確認してください

  4. 興味を持ってくれそうな人とこの記事を共有してください。メール、LinkedIn、X(旧Twitter)、Facebookで共有しましょう。

本記事に記述されているあらゆる機能ないし性能のリリースおよびタイミングは、Elasticの単独裁量に委ねられます。現時点で提供されていないあらゆる機能ないし性能は、すみやかに提供されない可能性、または一切の提供が行われない可能性があります。

このブログ記事では、それぞれのオーナーが所有・運用するサードパーティの生成AIツールを使用したり、参照したりしている可能性があります。Elasticはこれらのサードパーティのツールについていかなる権限も持たず、これらのコンテンツ、運用、使用、またはこれらのツールの使用により生じた損失や損害について、一切の責任も義務も負いません。個人情報または秘密/機密情報についてAIツールを使用する場合は、十分に注意してください。提供したあらゆるデータはAIの訓練やその他の目的に使用される可能性があります。提供した情報の安全や秘密が守られる保証はありません。生成AIツールを使用する前に、プライバシー取り扱い方針や利用条件を十分に理解しておく必要があります。

Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine、および関連するマークは、米国およびその他の国におけるElasticsearch N.V.の商標、ロゴ、または登録商標です。他のすべての会社名および製品名は、各所有者の商標、ロゴ、登録商標です。