ChatGPTみたいなアプリが簡単に作れるLangChainがすごすぎ
最近話題のChatGPT界隈ですが、そんなChatGPTみたいなアプリを簡単に作れるとしたら?そんな夢のようなライブラリである「LangChain」をこの前同僚に教えてもらったので、実際に使ってみました。
実際に使ってみたら想像よりもはるかに「どうなってるの!?」と思うことが多々あるすごいライブラリだったので、紹介したくて使い方をまとめてみました。
今回はLangChainのドキュメントの中で一番衝撃だった以下の質問に対する答えを出すコードをGoogle Colabで実行する手順を示します。
"Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"
コード全体としては以下のURLにあります。
目次
LangChainとは?
ChatGPTをはじめとした最近話題のbotのサービスの裏側にはLarge Language Model(LLM)と呼ばれる深層学習のモデルがいます。このLLMの性能がすごくなりすぎて今までできなかったとされるようなタスクが現在できるようになってきました。そして、実際何ができるのか?をいろいろな人が試して毎日いろいろなすごい使い方が編み出されている印象です。
このLLM、こんなにすごいなら自分の困っているタスクをやらせたいと思うのが普通かと思いますが、いざやってみようと思うとどうやればいいのかわからない時があります。
例えばこれから紹介するLangChainのexampleで使われていた例では以下のタスクをやらせる例がでてきます。
"Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"
ちなみにこれをそのまChatGPTで聞くと以下のような返答になりました。
I'm sorry, but as an AI language model, I don't have access to up-to-date personal information about celebrities or their romantic partners. Moreover, it's not appropriate to speculate about someone's age or personal life without their consent. It's important to respect everyone's privacy and focus on topics that are respectful and informative. Is there anything else I can assist you with?
プライバシーにちゃんと配慮していて偉いですね。ですが、人がやるなら以下の手順でできると思います。
- 「Leo DiCaprio’s girlfriend」を検索して誰なのか調べる
- 出てきた人の年齢を調べる
- 年齢の0.43乗を計算する
実際、この記事を書くにあたって私が人手でできるかをGoogle検索を使って確認したところ、ちゃんとできました。さて、これをLLMにやらせるとしたらどうやればいいのでしょうか?
このような「LLMを使ってやるのどうやればいいんだ?」に答えてくれるのがLangChainです。
ちなみにこのタスクをするためのコードはGoogle Colab周りの環境構築を除けば10行以下で実行できます。
すごすぎないですか?
これをGoogle Colabでやる手順をこれから紹介していきます。
コードをGoogle Colab上で動かす準備
ここではGoogle Colabでコードを動かすために必要な準備方法について紹介していきます。
今回はGoogle Colabで動かして他の人にも共有したりすることを想定しています。このため、セキュリティーの観点からnotebookの中にAPI Keyが含まれないような形にするために、pythonのdotenvを利用します。
基本的な流れとしては、最初に今回のサンプルで必要なサービスのAPI Keyを取得し、それを書いたファイルをGoogle Driveに置き、Google Driveのファイルをdotenvでロードするということをします。
それでは順番に説明していきます。
OpenAI API Keyの取得
まずはOpenAIのAPI Keyの取得方法です。まだOpenAIのアカウントをお持ちでない方はまずは「Sign up」をクリックしてアカウントを作ってください。
料金に関してはこちらを参照してください。
このブログを執筆時は最初の3か月は5ドル分無料で使えるようです。ちなみに私がLangChainのexampleを一通り動かしても1,2ドルでした。
アカウントを作ったらAPI Keyを取得します。こちらのAPI Keyの取得に関してはこちらのブログが分かりやすかったので参照してください。
取得したAPI Keyはメモ帳などにメモしておくのを忘れないようにしてください。
SerpApiのAPI Keyの取得
次にSerpApiのAPI Keyの取得に関してです。SerpApiはGoogle Search などの検索エンジンの結果をリアルタイムで取得してパースしてくれるサービスです。LangChainを使うために必須というわけではないのですが、今回動かすコードには必要なので、API Keyを取得します。
まずは以下のサイトにアクセスします。
まだ、アカウントを持ってない方は「Register」をクリックしてアカウントを作ります。
料金に関しては以下をご覧ください。
今回のコードでは数回APIを叩く程度なので無料の範囲で十分できます。
次にアカウントを作ったらdashboardで左のメニューから「API Key」を選択するとSerpAPI のAPI Keyを見ることができます。
こちらもOpenAIのAPI Keyと同様にメモ超などにメモしておいてください。
Google DriveにAPI Keyの情報を書いたファイルを用意
最後にGoogle DriveにAPI Keyの情報を書いたファイルを置きます。まずは以下のようなフォーマットのファイルを作ります。
OPENAI_API_KEY="{OpenAI API Key}"
SERPAPI_API_KEY="{SerpApi API Key}"
{OpenAI API Key}
と{SerpApi API Key}
の部分はメモしておいたご自身のAPI Keyに置き換えてください。
この作ったファイルをGoogle DriveにUploadします。保存場所はGoogle Driveなら適切にパスを指定すればGoogle Colabから読めるので、どこでもよいのです。ただし、このあとの説明は[マイドライブ] → [colab_env] の下のlang_chain_env
というファイル名で保存したとして説明していきます。
Google Colab上でのLangChainの使い方
Google Colab上での環境構築
さて、準備が整ったらGoogle Colab上でコードを実行していきます。まずは必要なパッケージのインストールです。以下のようにして今回使うパッケージの中をインストールしていきます。
!pip install openai langchain python-dotenv transformers google-search-results
次に各種API Keyの情報を環境変数にいれます。ここでは先ほど準備したlang_chain_env
をdotenvで読み込んで環境変数をセットします。
まずはGoogle ColabからGoogle Driveにアクセスできるようにします。コードとしては以下のものを実行します。
from google.colab import drive
drive.mount('/content/drive')
実行するとGoogle Driveへのアクセス認証を聞かれるので認証してください。
うまくGoogle Driveへのアクセスの認証ができれば以下のlsコマンドで先ほどアップロードしたファイルにアクセスできるようになります。
!ls /content/drive/MyDrive/colab_env/lang_chain_env
そして、dotevを利用して環境変数をセットします。コードとしては以下の通りです。
from dotenv import load_dotenv
load_dotenv(dotenv_path="/content/drive/MyDrive/colab_env/lang_chain_env")
これでGoogle ColabでLangChainのexampleを動かす準備が整いました。
LangChainのExampleを動かす
ここからはLangChainのExampleを実際に動かしてみます。と言っても基本的には以下のコードをそのまま動かします。
https://python.langchain.com/en/latest/modules/agents/getting_started.html
今回はLangChainの機能の中のAgentを使ったコードです。AgentとはLLMを利用して実行するアクションとその順序を決めるクラスです。
まずはLangChainの中から今回のコードで必要なものをimportします。
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
次に、使うLLMのモデルとツールを作ってAgentを作ります。
llm = OpenAI(temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
ここではLLMのモデルはOpenAIのものを利用します。LangChain自体はOpenAI以外のものも選択できるようです。詳しくはこちらをご覧ください。
https://python.langchain.com/en/latest/reference/modules/llms.html
またツールとはAgentがアクションの中で使う関数みたいなものです。今回はSerpApiと数学に関する質問をするときに答えてくれるツールであるllm-math
を指定します。
他にもいろいろあります。詳しくはこちらをごらんください。
https://python.langchain.com/en/latest/modules/agents/tools.html
最後にツールやLLMを引数にとってAgentのクラスのインスタンスを作ります。
そしていよいよやってほしいタスクの文章をAgentのインスタンスに渡して実行します。今回は最初に見せた通り、以下のタスクをやらせます。
"Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"
コードとしては以下のようになります。
agent.run("Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?")
実行結果は以下の通りです。
すごくないですか?
この質問、人が答えるならGoogle検索と簡単な計算で確かにできます。ただ、これを自動で答えられるようにするとなるとかなり面倒なコードを書かなければなりません。それが一発です。すごい時代になったものです。
終わりに
今回は「LangChain」を実際に使ってみたまとめになります。実は同僚にはこれを教えてもらった際、「全エンジニア試したほがいい」と言われて、さすがに言い過ぎでは?と一瞬思ったんのですが、使ってみてびっくり。マジで「全エンジニア試したほうがいい」って印象を受けました。
今回は説明しきれませんでしたが、LangChainは他にもすごいサンプルが以下のところにありますので、今回紹介したコードをベースにGoogle Colabで試しに実行してみてはいかがでしょうか?
https://python.langchain.com/en/latest/index.html#use-cases
この記事が少しでも皆さんの役に立てば幸いです。
参考情報
- LangChainドキュメント https://langchain.readthedocs.io/en/latest/