LangChainチュートリアル:LLM搭載アプリケーション構築ガイド

GPT-4やLlamaのような大規模言語モデル(LLM)は、過去数年間でさまざまな可能性を生み出してきました。AIツールとアプリケーションのブームの到来を告げ、ChatGPTは一夜にして一般的な名前になりました。しかし、このブームは、この新世代のアプリを支援する強力なツールやフレームワークなしには成り立ちません。

これらのフレームワークの1つがLangChainです。これにより、既存のLLMを使用して新しいアプリを簡単に構築できます。これは機械学習の専門家であるハリソン・チェイスによって開発され、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では、「コンポーネント」と「モジュール」という用語は同じ意味で使用されることがありますが、両者には微妙な違いがあります。

  • コンポーネントはLangChainの中核となる構成要素であり、特定のタスクや機能を表現します。これらは通常、小規模で焦点を絞り、異なるアプリケーションやワークフローで再利用可能です。

  • 一方、モジュールは複数のコンポーネントを組み合わせてより複雑な機能を形成します。LangChainは、メモリモジュール(大規模言語モデルが利用するためにデータを保存・管理する再利用可能なビルディングブロック)やエージェント(リアルタイムのフィードバックやユーザー操作に基づいてチェーンをオーケストレーションする動的制御ユニット)など、いくつかの主要モジュールに対して標準インターフェースも提供しています。

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

LLMとの統合

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

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

  • 動的なLLMの選択:複雑さ、精度要件、計算資源などの要素に基づいて、異なるタスクに最適なLLMを選択できます。

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

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

ワークフロー管理

LangChainでは、ワークフロー管理とは、特定の問題を解決するためにチェーンおよびエージェントの実行を管理・制御するプロセスです。これには、データフローの管理、コンポーネントの実行の調整、およびアプリケーションがユーザーの操作や状況の変化に効果的に対応できるようにすることが含まれます。以下は主要なワークフロー管理コンポーネントの一部です。

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

  • エージェントベースの管理:定義済みのテンプレートと使いやすいインターフェースにより、エージェントの使用が簡単になります。

  • 状態管理:LangChainはアプリケーションの状態を自動的に追跡し、開発者に状態情報へのアクセスと変更のための統一インターフェースを提供します。

  • 並行処理管理:LangChainは並行実行の複雑さを処理するため、開発者はスレッド処理や同期の問題を気にすることなく、タスクやインタラクションに集中できます。

LangChainの設定

LangChainの利点の一つは、始めるための条件がほとんどないことです。このガイドでは、Pythonを使用するため、コンピューターにPython 3.8以降がインストールされている必要があり、それのみが条件となっています。

インストールと設定

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

pip install langchain

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

pip install openai

OpenAIが機能するためには、リクエストを認証するためのAPIキーも必要です。OpenAIアカウントを作成し、APIキーセクションから、[新しい秘密鍵を作成する]を選択すると取得できます。鍵を手に入れたら、どこかに大切に保管してください。後ほどすぐに必要になります。

最後に、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にプロンプトを送り、その応答を表示します。

もう少し高度なものをお探しですか?Amazon BedrockをElasticsearchやLangchainで使うガイドもぜひご覧ください。

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

Pythonスクリプトの先頭に次のインポートステートメントを追加して、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アプリを構築する可能性は無限にあります。ここですべてを挙げることはできませんが、いくつかのケーススタディを紹介して、構築できるさまざまなものを紹介します。

LangChainを使ってLLM搭載のアプリを構築する

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

次のアクション

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

  1. 無料トライアルを開始すると、Elasticがビジネスにどのように役立つかをご覧ください。

  2. ソリューションのツアーでは、Elasticsearch Platformの仕組みと、ソリューションがニーズにフィットする仕組みをご覧いただけます。

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

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

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

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

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