概要
ライブラリ「LangChain」について学習したので、初心者目線で誰でも分かるように備忘録を残す。
この記事で分かること
- LangChainって何?
- LangChainは必要?
- 何ができる?
- 対応しているプログラミング言語は?
LangChainとは
LLM(大規模言語モデル)を強化できるライブラリ✅
例:Open AI(ChatGPT)のモデルを強化することができる。
LangChainの必要性
結論、複雑なLLMの開発をするならほぼ必須✅
LangChainがなくても、1から10まで全部自分でコードを書いて開発することもできる。
ただしそれだと非効率なのでLangChainを使うのがおすすめ!
対応しているプログラミング言語
以下の2つの言語に対応している✅
- Python
- TypeScript
詳細は以下を参照。
できること
ChatGPT単体では苦手なことが簡単に実装できる✅
具体例
- 最新情報に対応したチャットボット開発(Toolsモジュールを使う)
- 独自データ対応のチャットボット開発(Indexesモジュールを使う)
- 計算問題を解くことができるLLM開発(Toolsモジュールを使う)
モジュール
大きく分けると以下の6つのモジュールが使える。
モジュール名 | できることの一例 |
---|---|
Models | 「LLMs」「Chat Models」「Text Embedding Model」といったモデルをすべてLnagChain上で使える。 |
Prompts | プロンプトの管理、最適化、シリアル化ができる。 |
Indexes | PDFやCSVなどのデータを学習させることができる。 |
Chains | 一回目の回答に応じて、二回目の質問を実行することができる。 |
Agents | 回答がいい感じになるまで、何回も質問と回答を繰り返してくれる。 |
Memory | 以前のやりとりを記憶できる。 |
Modelsモジュール
「Modelsモジュール」=「さまざまなモデルが簡単に使える」
前提としてLangChainでは大まかに3種類のモデルが扱える。
モデル名 | 解説 | 例 | 詳しい解説 |
---|---|---|---|
LLMs | 大規模言語モデル | text-davinchi-003 |
01.概要
02.モデルの種類 03.詳細な機能 |
Chat Models | LLMモデルの派生。チャットに特化している。 | gpt-3.5-turbo |
01.概要
02.モデルの種類 03.詳細な機能 |
Text Embedding Models | 単語を数値化して単語同士の関連度を計算するモデル | text-embedding-ada-002 |
01.概要
02.モデルの種類 03.詳細な機能 |
モデルによって使い方が異なるが、LangChainなら同じような感覚で使えて開発が楽✅
イメージ
これらを簡単に組み合わせて開発することができる。
公式ドキュメント
Promptsモジュール
「Promptsモジュール」=「プロンプトの管理を簡単にしてくれる」
プロンプトの管理・最適化・シリアル化ができる機能✅
【補足】具体的な機能
例:プロンプトのテンプレートを作る
どのような質問をするかテンプレートを作っておけば、ユーザーは文章の一部だけ入力すれば済むようにできる。
「〇〇の名産地を教えて」というテンプレートを作った場合。
質問するときの負担が減る✅
公式ドキュメント
Indexesモジュール
「Indexesモジュール」=「インデックスを扱うための機能」
独自データを学習させるにはインデックスというものが必要✅
【補足】具体的な機能
Indexesモジュールは以下のような機能が使える。
機能名 | 解説 | 詳しい解説 |
---|---|---|
Document Loaders | PDF、Webページなどの外部データを読み込む(*1) |
01.概要
02.ローダーの種類(ファイル) 03.ローダーの種類(Web) |
Text Splitters | 文章を分割する |
01.概要
02.テキストスプリッターの種類 |
Vectorstores | 文章をベクトル化し、インデックスを生成する |
01.概要
02.ベクターストアの種類 |
Retrievers | 知りたい内容に関連する文章を検索する |
01.概要&レトリーバーの種類
|
(*1)豆知識
- 読み込んだデータはDocument型(モデルが扱える形)に変換する必要がある。
- load()またはloadAndSplit(…)でDocument型に変換できる。
学習のイメージ
開発者が事前に行う作業。
インデックスを生成して、LangChainが独自データを扱えるようにする。
- テキスト/CSV/PDFなどからインデックを生成できる。
- Notionなどの外部データからインデックスを生成することもできる。
質問時のイメージ
ユーザーが質問したときの動作。
※「検索」はベクトル検索エンジンと呼ばれるものを使う。(https://qiita.com/sonesuke/items/56a6e4b6532eafa104f4#ベクトル検索エンジン)
他のライブラリもある
インデックスの扱いだけなら「LangChain」以外にも「LlamaIndex」というライブラリも有名。Pythonのみ対応している。
公式ドキュメント
Chainsモジュール
「Chainsモジュール」=「会話を繋げる機能」
(ユーザー質問 → AI回答)で終わらせず、複数のやりとりを繋げられる✅
【補足】具体的な機能
Chainsモジュールは大きく3種類のチェーンに分類できる。
機能名 | 解説 |
---|---|
Simple Chain |
質問と回答を1セットにしてSimple Chainと呼ぶ
例:(質問 → 回答) |
Sequential Chain |
複数のChainを直列に繋いだものを1セットにしてSequential Chainと呼ぶ
例:(質問 → 回答)→(質問 → 回答) |
Custom Chain |
複数のChainを任意に繋いだものを1セットにしてCustom Chainを呼ぶ
例: (質問 → 回答)↘️ ➡️(質問 → 回答) (質問 → 回答)↗️ |
イメージ
具体的には以下のような機能が使える。
機能名 | 解説 | 詳しい解説 |
---|---|---|
LLMChain | Simple Chainのこと(一番シンプル) | 01.使い方 |
Index Related Chains | インデックスを使ったチェーン | 01.チェーンの種類 |
Sequential Chain | Sequential Chainのこと | 01.使い方 |
その他のチェーン | その他にも様々なチェーンがある | 01.その他チェーンの一覧 |
Prompt Selectors | モデルに応じて使用するテンプレートを切り替える機能 | 01.使い方 |
例:中間的な回答を挟むことで精度の高い回答を得る
ユーザーはざっくり質問をするだけでOK。
AIがしっかりした質問を作ってくれて、最終的には具体的な回答を得られる。
ざっくりした質問から複雑な回答を得たいときに有用!
例:長い文章を要約する
OpenAIでは、1回の質問の文字数に制限がある。
そのため長い文章は1回の質問に入り切らない😫
※「分割」はIndexesモジュールを使えば実装できる。
※「合成」はプログラム上で文字列を連結させるだけ。
公式ドキュメント
Agentsモジュール
「Agentsモジュール」=「Google検索などの外部の機能を駆使して、良い答えを導く機能」
Agentsは、(ユーザー質問 → AI回答)ではなく、良い答えになるまで何回も「試行」してくれる機能✅
【補足】具体的な機能
Agentsモジュールは以下のような機能が使える。
機能名 | 解説 | 詳しい解説 |
---|---|---|
Agents | 自動で良い答えに導いてくれる |
01.概要
02.エージェントの種類 03.詳細な機能 |
Agent Executor | Agentsを良い答えになるまで実行させる |
01.概要
02.使い方 |
Tools | Google検索などの外部機能を使う |
01.概要
02.ツールの種類 03.ベクターストアと組み合わせる 04.ChatGPTを拡張 05.AWS Lambdaを使う 06.Webデータを使う 07.Zapierを使う |
Toolkits | 特定の問題を解決するためのToolsの集まり | 01.概要&ツールキットの種類 |
イメージ
良い答えになるよう「繰り返しアクションを実行」してくれる。
-
開発者は事前に、AIがどんなツールを使えるかの選択肢を用意してあげる。
(例:Google検索ツール、計算ツール)
-
AIは与えられたツールを使って、自動的に良い答えを導いてくれる。
※人は「どの順番でどのツールを使うか」指定しなくてOK😊
※AIが自動で「どのツールを使い、どの順番で解決していけばいいか」を考え、良い答えに導いてくれる🤖
公式ドキュメント
Memoryモジュール
「Memoryモジュール」=「過去の会話を保持する機能」
AIとのやりとりは基本的に1回1回独立している。
しかしMemoryを使うと過去のやり取りを記憶できる✅
【補足】具体的な機能
例:質問と回答を記憶する
例:最初に前提情報を記憶しておく
例:Chains、Agentsのやりとりを自動記憶する
公式ドキュメント
利用方法
以下でインストール、プログラムの作成、実行を解説している。
📄 初心者によるTypeScript版LangChain【①基礎編】
詳しい解説
基礎知識については以下の動画、サイトがわかりやすかった。
こちらのYouTube再生リストは「LangChainの基礎〜実践的な実装」まで解説されている。
実務に取り組むときの参考になりそう。
参考サイト
初心者向けのLangChain解説
LangChainの基本
公式ドキュメント
APIリファレンス
チェーン
インデックス
エージェント
メモリ