LangChainを使うと、大規模言語モデルの機能を拡張し、より便利なアプリを開発できます。 LangChainを使いたいけれど、
・LangChainでできることがわかっていない…。
・実際にLangChainを使う方法を知りたい…。
という方もいらっしゃるのではないでしょうか?そこでこの記事では、
・LangChainの特徴や主な機能
・Pythonを用いたLangChainのインストール方法
・ChatGPT APIと組み合わせて使う方法
について解説します。アプリ開発に興味がある方、開発に関わる方はぜひ参考にしてください。
公開日:2024年3月7日
LangChainとは?
LangChainとは、ChatGPTなどの大規模言語モデルの機能を拡張できるライブラリです。言語モデルを使用したアプリケーションを開発する際にLangChainを使うことで、より高度な機能を実装することが可能です。
一般的な言語モデルでは、長文のプロンプトの送信や、回答する内容に最新の情報を含めることが難しい場合があります。LangChainを利用すれば、これらの機能を追加してアプリを開発できます。
Pythonでの利用がおすすめ
LangChainはPythonやJavaScript、TypeScriptなどのプログラミング言語で利用できます。Python版ではLangChainに含まれている全ての機能が利用できるため、Pythonでの利用がおすすめです。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >LangChainの主な機能
LangChainには、言語モデルをより便利にするための様々な機能が含まれています。LangChainの主な機能は次の通りです。
Models:異なるモデルを組み合わせ
Models(Model I/O)は、様々なモデルを組み合わせて使用できる機能です。
LangChainでは、大規模言語モデル(LLM)やチャットモデル、テキスト埋め込みモデルなど様々なモデルを利用することが可能です。
LangChainに組み込まれたモデルを使うと、コーディングなどの手間が省けます。Modelsの機能の例としては次のようなものが挙げられます。
LLMs
LLMsはその名の通り、大規模言語モデル(LLM)を呼び出す機能です。LLMは質疑応答や文章要約などのタスクが実行できる自然言語処理モデルですが、代表的なものとしてはOpenAI社のGPT-3.5やGPT-4、Google社のFlan-T5などが挙げられます。
Chat Model
Chat Modelは、LLMをチャット形式で使用したい場合に用います。イメージとしては、LLMsで基盤となるモデルを用意し、ChatGPTのようなチャット形式でやり取りするための応用的な機能をChat Modelで用意する、というイメージです。
Embeddings Model
Embeddingsとは、単語や文章などの構成要素をベクトルに変換する処理です。Embeddings Modelを用いることで、2つの文章同士の関連性を定量的に測定できるようになります。
Prompts(プロンプトの最適化)
Promptsは、プロンプトの管理や最適化を行うための機能です。より厳密にはModelsに含まれる機能ですが、重要な機能であるため個別に解説します。
大規模言語モデルを使用したアプリ開発では、プロンプトに関する機能を実装する必要があります。LangChainにはプロンプトの管理や最適化、シリアル化などの機能がパッケージ化されているため、コーディングの負担を軽減することが可能です。また、複数名のチームで開発する際に、記述方法を統一できます。Promptsの代表的な機能としては、次のようなものが挙げられます。
Prompt Templates
Prompt Templatesは名前のとおり、プロンプトをテンプレート化する機能です。LLMに渡すプロンプトをテンプレート化し、一部のキーワードのみを変更できるようにする、というような使い方が実現できます。
Example Selectors
Example Selectorsは、大量の教師データの中からプロンプトに入力するデータをランダムで抽出する機能です。例えば、1,000件ある教師データから10件、20件をランダムで抽出する、という使い方ができます。
Output Persers
Output Persersは、言語モデルの出力形式を指定できる機能です。例えば、出力形式をCSV形式やJSON形式にする、などの指定ができます。指定したフォーマットにならなかった場合、対象のフォーマットになるまで修正を繰り返す機能も備わっています。
Retrieval:外部データの利用
Retrievalは、外部データを利用するための機能です。PDFやExcel、CSVなど外部のデータをもとに回答を生成できるようになります。
一般的に、ChatGPTに指示を出す際は、文章によるプロンプトの入力が必要です。LangChainを用いて機能を拡張すると、外部データを使用してより効率的に指示を送ることができます。Retrievalにおける代表的な機能としては次のようなものが挙げられます。
Document loaders
LangChainのDocument loadersは、100種類以上の外部データに対応しています。WebサイトやAWSのS3、PDFなどのあらゆる外部データからドキュメントを読み込むことが可能です。
Document transformers
Document transformersは、読み込んだデータを大規模言語モデルが扱いやすいデータに変換する機能です。読み込んだデータは、Document transformersによって分割したり、冗長な部分を除去したりすることで扱いやすいデータに加工します。
Text embedding Models
Text embedding Modelsは、自然言語をベクトル化する機能です。AIは自然言語をベクトル化することで、単語同士の関連度を把握できるようになります。例えば「みかん」と「ゲーム」という単語のどちらが「食べ物」に関連性が高いか、という問いに対して、人間であればすぐに判別できますが、AIは人間のように判別できません。ベクトル化して数値化することで、AIは関連性を把握できるようになります。
Vector stores
Vector storesは、前述のベクトル化された自然言語を管理・保存するための機能です。前述のText embedding Modelsと組み合わせて、自然言語のベクトルデータを簡単に管理できるようになります。また、データベース化された外部のベクトルデータを利用することも可能です。
Retrievers
Retrieversは、ドキュメントを検索するための機能です。ここでいう「検索」は、長い文章を複数のドキュメントに分割して、その中からプロンプトに関連のあるドキュメントを抽出することを表します。この機能により、長い文章を与えられたとしても、精度の高い回答を実現します。
Indexing
Indexingは、効率よく検索できるように構造化するための機能です。Retrieversと関連性が深く、Indexingでデータを整理することで、Retrieversにおける検索機能の精度が向上します。
Chains:複数のプロンプトを実行可能に
Chainsとは、複数のプロンプトを実行するための機能です。
通常の言語モデルでは、ユーザーが入力したプロンプトに対してAIによる回答が出力されるという流れが繰り返されます。一方、Chainsの機能を用いると、AIが生成した回答を次のプロンプトに含めて入力できます。
イメージとしては、ユーザーによる1回の入力に対して、連鎖的にAIが異なるプロンプトで複数回出力を行う、と考えるとわかりやすいでしょう。
例えば、Chainsによって文章量の多いテキストを要約する場合を考えてみましょう。ユーザーは元の文章をAIに渡し、AIは始めに元の文章をいくつかのパートに分けてそれぞれ要約します。その後、各パートの要約を再度入力として全体の要約を出力する、という流れになります。Chainsの利点は複数のプロンプトを実行することで、より正確な回答を得られる可能性がある点です。
Chainsには、主に次の3種類のChainが存在します。
Simple Chain
Simple Chainは、複数のChainをつなげる上で最小単位となるChainです。LLM Chainとも呼ばれることがあり、Simple Chainを複数つなげることで強力な機能を実現できます。
Sequential Chain
Sequential Chainは、複数のChainをつなげたものであり、順番に実行されるChainです。前述の例のように、文章量の多いテキストをパートに分けて要約、各パートの要約から全体の要約を出力、のように順番に処理が実行されます。
Custom Chain
Custom Chainは、自由に繋がれたChainであり、特定のケースに対応するために用いられます。入出力の定義を細かく設定でき、複雑な質問への対応が可能です。
Agents:複数のツールを組み合わせ
Agentsは複数のツールを組み合わせて、必要な処理を実行する機能です。
例えば、情報収集を行うための検索エンジンと、グラフを作成するためのPythonコードなどを組み合わせて活用できます。必要な情報を収集し、正しいグラフが作成されるまで修正を繰り返すなどの処理が可能です。
また、言語モデルに与えた複数のツールの中から、実行したいタスクに応じた最適なツールを自動で選ばせることもできます。
Agentsにおける代表的な機能としては、次のようなものが挙げられます。
Agents
主機能としてのAgentsには、小機能としてのAgentsが存在します。小機能としてのAgentsは、Toolsの中からどの機能を用いるのかを考えて決定するための機能です。プロンプトの内容から言語モデルがどのようなアクションを取るべきか判断します。
Tools
Toolsは、小機能としてのAgentが外部とやり取りするための機能です。小機能としてのAgentsが利用する「道具」と考えるとよいでしょう。LangChainのToolsは、約20種類の道具が用意されており、小機能としてのAgentはこれらの道具を使って問題解決を行います。
Toolkits
Toolkitsは、特定のケースに応じてToolsを初期搭載したAgentsのことを表します。イメージとしては「プラスドライバー(Tools)をセットしたロボット(Agents)」のように考えるとわかりやすいでしょう。
Agent Executor
Agent Executorは、Agentsの実行を行うための機能です。Agents・Tools・ToolkitsでAgentsが動作する際の設定を行い、Agent Executorで実際に実行する、という流れになります。
Memory:履歴を保持
Memoryとは、言語モデルが出力した回答の履歴を保持し、必要に応じて再度活用できる機能です。
Memoryには、短期記憶と長期記憶と呼ばれる2種類の形式があります。
短期記憶は、一つのやりとりの中でデータを保持する機能です。入力した文章を要約する処理などで短期記憶が使用されます。
長期記憶は、複数のやりとりでデータを保持する機能です。ユーザーとの対話中に得た情報をもとに記憶を更新し、その後のやりとりに反映できます。
また、併せて知っておきたい機能が「ChatMessageHistory」です。
ChatMessageHistory
ChatMessageHistoryは、チャットの履歴データを管理するための機能です。大規模言語モデルでは、人間が入力するプロンプト(HumanMessage)とAIの回答(AIMessage)がチャット形式でやり取りされます。ChatMessageHistoryを用いれば、これらの履歴を簡単に保存できるだけでなく、後からプロンプトを追加することも簡単に実現可能です。
LangChainを使ってChatGPT APIの機能を拡張しよう!
LangChainを用いると、複数のツールの連携など、 ChatGPT APIの機能を拡張することが可能です。ここでは、Pythonを用いたインストール方法とプログラムの作成方法を紹介します。
※以下の解説では、Windows 11 HOME、Python 3.11.4の開発環境を使用しています。
LangChainのインストール
プログラム作成の準備としてOpenAIとLangChainのインストール、OpenAIのAPIキーの発行・設定が必要です。
Pythonのインストールコマンド「pip install」を用いて、OpenAIとLangChainのライブラリをインストールしましょう。
1 |
pip install openai |
1 |
pip install langchain |
環境構築
次に、OpenAIの公式サイト(https://openai.com/)にアクセスし、画面上部のメニューから「Developers」→「API reference」をクリックしましょう。
画面右上の「Sign up」をクリックし、OpenAIのアカウントを作成します。すでにアカウントを持っている場合は「Log in」からログインしてください。
ログイン後の画面で、右上に表示される「View API keys」をクリックします。
次の画面で、「+ Create new secret key」ボタンをクリックすると、OpenAIのAPIキーを発行できます。
発行されたAPIキーの右側にある緑色のボタンをクリックすると、クリップボードにコピーできます。
発行したAPIキーを、以下のPythonコマンドを用いて設定しましょう
1 2 |
import os os.environ["OPENAI_API_KEY"] = "この部分に先ほどコピーしたAPIキーを入力" |
以上で、準備は完了です。
プログラムを作成
LangChainでOpenAIのモデルを使用する例として、予め作成したプロンプトのテンプレートをもとに文章を要約するプログラムを紹介します。
サンプルとなるPythonのコードは次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from langchain import PromptTemplate from langchain.llms import OpenAI from langchain import LLMChain # 言語モデルとしてOpenAIのモデルを指定 llm = OpenAI(model_name="text-davinci-003") # プロンプトのテンプレートを作成 template = "次の文章を要約してください。{original_sentences}" # プロンプトのテンプレート内にある要約前のテキストを変数として設定 prompt = PromptTemplate( input_variables=["original_sentences"], template=template, ) # プロンプトを実行させるチェーンを設定 chain = LLMChain(llm=llm, prompt=prompt,verbose=True) # チェーンの実行および結果の表示 print(chain("★この部分に要約したい文章を入力★")) |
要約したい文章を指定する部分にテキストを入力し、コードを実行した結果は次の通りです。
要約前の文章
AIは様々な分野で応用されている技術です。近年ではスマートフォンのアプリなどで手軽にAIの機能を利用できる機会が増え、幅広いユーザーから活用されています。検索エンジンや画像認識、自動運転、音声によるテキスト入力などが主な活用例です。今後、ビジネスや学習、研究など多くの場面でAIの活用が広がっていくことが予想されます。
回答として出力された要約
AIは様々な分野で利用されつつあり、スマートフォンなどでも利用が可能である。検索エンジン、画像認識、自動運転、音声によるテキスト入力などが主な利用例となっている。今後、ビジネス、学習、研究など多くの場面で活用が広がると予想される。
上記のコードはあくまでもLangChainの使い方の一例です。プロンプトのテンプレートやチェーンの内容などを変更することで、様々な拡張機能を実装できます。
LangChainを学んでアプリ開発に役立てよう!
LangChainは、大規模言語モデルを用いたアプリ開発に役立つライブラリです。通常の言語モデルでは実現が難しい機能も、LangChainを使えば簡単に実装できます。アプリ開発に携わる方は、ぜひLangChainを使って言語モデルの機能を拡張しましょう。
これからLangChainを学びたい人には、下記の講座がおすすめです。
ChatGPTを最強にするハンズオンChatGPT API(gpt-4o)/LangChain/Claude3
~gpt-4o対応~ChatGPT APIとLangChain/AutoGPTでChatGPTに翼を授けよう。
\無料でプレビューをチェック!/
講座を見てみる評価:★★★★★
コメント:最新情報をベースにchatGPTから回答を出力してほしいと思っていたところで、ちょうどこちらのコースを発見し受講させていただきました。
内容も長すぎずちょうどよく、知らなかったAPIの使い方も、躓くことなく学ぶことができました。充実した体験ができました。大満足です、ありがとうございました。
評価:★★★★★
コメント:最新の情報をキャッチアップして、アップデートされています。 function callingについて、ハンズオンで学習できることは非常に有意義だと感じました。 また、langchainについてはindexesなどもあり、自分で学習を進めれば相当の可能性があると感じました。
LangChainを用いてChatGPTの機能を拡張しよう!
【LangChainの学習におすすめの講座】をプレビュー
最新情報・キャンペーン情報発信中