こんにちは!
データサイエンティストのウマたん(@statistics1012)です!
この記事ではChatGPTなどの大規模言語モデル(LLM)を扱う際に便利なLangChainというライブラリについて紹介していきたいと思います!
僕自身ChatGPTのAPIを利用してアプリを開発しているのですが、それだけだとかゆいところに手が届かないことも多かったんです。
しかし、今回紹介するLangChainというライブラリを導入することでかなり便利になりました!
ChatGPTをはじめとするGPTモデルについては以下の記事を参考にしてみてください!
ということでこの記事ではそんなLangChainについて解説していきたいと思います!
目次
LangChainとは
それでは早速LangChainについて見ていきましょう!
LangChainの公式サイトやGithubのリポジトリは以下ですので適宜参考にしてみてください。
LangChainの特徴
LangChainの公式サイトには以下のように記述があります。
LangChain は、言語モデルを利用してアプリケーションを開発するためのフレームワークです。私たちは、最も強力で差別化されたアプリケーションは、API を介して言語モデルを呼び出すだけでなく、次のことも行うと信じています。
- データを意識する: 言語モデルを他のデータ ソースに接続する
- エージェント的である: 言語モデルがその環境と対話できるようにする
そのため、LangChain フレームワークは、そのようなタイプのアプリケーションを可能にするという目的を念頭に置いて設計されています。
(出典:LangChain公式サイト)
そうなんです。LangChainは言語モデルを利用してアプリケーションを作る際に効果を発揮します。
その上で2つの特徴を取り上げている通り、他のデータソースに接続したり対話できるように過去のやり取りを参照したりなどできるようになります。
現状ChatGPTのAPIをそのまま利用すると、インターネット上のデータソースを参照して答えを返したり過去のやり取りを保持して参照しながら答えを返すみたいなことをするにはかなり手間がかかります。
そこら辺の処理をLangChainでは簡易的によしなにやってくれるので、アプリを構築する際に非常に便利なのです!
LangChainの対応範囲
現状LangChainでは、PythonとTypeScriptに対応しておりますが、Pythonの方が圧倒的にできることや呼び出せるAPIの範囲が広いのでPythonを利用することをオススメします。
Pythonでどこまで出来てTypeScriptだと何が出来ないかは、以下の公式の表を確認すると分かります。
LangChainを使った実例
続いてLangChainを使った実例について見ていきましょう!
BabyAGI
LangChainを使うと自律駆動形のAIを構築することが可能であり、このBabyAGIは目標さえ与えてあげれば、それを元に逐次的にタスクをこなし次のタスクを立てて駆動していきます。
LangChainを使って作られており、公式Githubに処理の流れが記載されております。
以下のような感じでBabyAGIに投げかけてあげると勝手にタスクをこなして次のタスクを自分で立ててどんどんタスクをこなしていきます。
目標:データサイエンティストになりたい
汎用的に使えて、曖昧なゴールに対しても筋道立ててタスクを分解してくれることから世界中で話題になっているAIです。
なんとこの自律駆動形AIは、あのMicosoftの伝説のエンジニア中嶋聡さんの息子さんが開発されたとのこと。
すごい・・・・
AutoGPT
そしてBabyAGIに負けず劣らず話題になっているのがこちらのAutoGPT。
こちらもBabyAGIと同じように自立駆動形AIです。
インターネット上の情報を検索することもできますし、それをもとにタスクを立てることもできます。
ChatGPT単体だと痒いところに手が届かないことをより自律的にやってくれるエージェントAIがAutoGPTです。
こんな感じでLangChainを使うとより自律型のAIを構築することができるのです!
LangChainをPythonで使ってみよう!
それでは、簡単にLangChainをPythonで実装していきましょう!
まずは、ライブラリ「langchain」をインストールしていきましょう!
pip install langchain
続いて必要なメソッドをインポートしていきます。
from langchain.llms import OpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
import os
続いてOpenAIのAPIキーを取得して環境変数にセットしましょう!
os.environ["OPENAI_API_KEY"] = "<OpenAIのAPIキー>"
そしたら早速LangChainの出番です。
以下のように記載してあげてください。
llm = OpenAI(model_name="text-davinci-003")
conversation = ConversationChain(
llm=llm,
verbose=True,
memory=ConversationBufferMemory()
)
conversation("データサイエンスを勉強するための方法を3つ教えて下さい。")
conversationの中身は何でも大丈夫ですので好きなプロンプトを入れてみてください。
以下のような回答が返ってくることが分かると思います。
※回答のパターンは必ずしも完全一致しません
これではシンプルな一問一答のやり取りですが、続いて以下のように問いかけてみましょう。
conversation("1つ目についてもっと詳しく")
こちらを見てみるとちゃんとHistoryという箇所に今までの過去のやり取りが格納されており、それをふまえてちゃんとAIが1つ目について詳しく教えてくれています。
この過去の情報を加味した返答は、実はChatGPTのAPI単体だと難しいのです!
OpenAIのAPIだけを使って同じように問いかけてみます。
import openai
openai.api_key = "<OpenAIのAPIキー>"
prompt = '''データサイエンスを勉強するための方法を3つ教えて下さい。'''
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=1000,
temperature=1
)
print(response['choices'][0]['text'])
prompt = '''1つ目についてもっと詳しく'''
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=1000,
temperature=1
)
print(response['choices'][0]['text'])
1つ目のレスポンス
2つ目のレスポンス
1つ目のレスポンスは正しく返してくれるのですが、2つ目のレスポンスは1つ目の内容を加味した上で返してくれず的外れな会話になってしまっています。。。
このように過去の会話を加味した状態でレスポンスを返してくれるようなプログラムを開発するのであれば、LangChainを使うのが最適なのです!
LangChainと似たことができる機能としてOpenAIが提供しているFunction callingというものがありますのでそちらもぜひ以下の記事で学んでおきましょう!
LangChain まとめ
ここまでで、OpenAIが開発するGPTモデルのAPIを利用する上で非常に便利なLangChainというライブラリについてまとめてきました!
各種大規模言語モデル(LLM)をPythonで利用する方法やプロンプトエンジニアリングについて知りたい方は当メディアが運営するスタアカの以下のコースを是非チェックしてみてください!
スタアカは業界最安級のAIデータサイエンススクールです。
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組みあわせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ
AIデータサイエンスを学んで市場価値の高い人材になりましょう!
データサイエンスやAIの勉強方法は以下の記事でまとめています。
LangChainに関しては他にも色んな記事で解説されていますが、例えば以下の記事が分かりやすく参考になります。