2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
ログミーTech 用語解説「LangChain」(全1記事)
リンクをコピー
記事をブックマーク
LangChainとは、大規模言語モデル(Large Language Models、LLM)を活用した、アプリケーション開発を容易にするオープンソースのフレームワークです。
近年、生成AIの進化が著しく、特にLLMの進化はテキストを扱うタスクに大きな革命をもたらしています。LLMというと、OpenAI ChatGPTやGoogle GeminiのようなAIチャットボットが一般的なイメージですが、これらの心臓部に使われているLLMをコントロールするAPIは一般に公開されており、そのAPIを用いれば、私たちもLLM技術を活用したアプリケーション開発を行えるようになっています。
しかし、LLM技術を効果的に活用したアプリケーション開発を行うには、LLMに対する深い専門知識と高い開発能力が求められます。そのような状況に対して、開発者がLLMの技術をアプリケーションへ簡単に組み込めるようにと登場したのがLangChainです。
LangChainはLLMのAPIを抽象化してインターフェイスを統一化しており、LLMを活用する上で「あったら便利だな」という機能拡張が詰め込まれたフレームワークになっています。対応プログラム言語としては、PythonとJavaScript/TypeScript向けの実装が行われています。
LangChainの発端は、2022年10月、AI関連企業に勤めるエンジニアのハリソン・チェイス氏が立ち上げたオープンソースプロジェクトです。直後にOpenAIのChatGPTがリリースされ生成AIの大ブームが起こり、LangChainのプロジェクトにも多数の開発者が参加し、現在に至るまで活発な活動が続けられています。
世界的に非常に盛り上がったため、彼はすぐに勤めていた会社を辞め、新しくLangChain, Inc.を設立しています。
LangChainを使用することのメリットは多数あります。中でも代表的なメリットとしては、以下のような例が挙げられます。
開発効率の向上は、LangChainの抽象化による恩恵です。LLMとの複雑なやり取りを抽象化したモジュールを繋げてアプリケーションを作成することで、本来必要となるはずだった細部の理解や膨大なコード量を抑えることができます。LLMの専門家か初心者かにかかわらず、迅速なアプリケーション開発に取り掛かれるでしょう。
高い柔軟性とカスタマイズ性は、LangChainが数多くのLLMに対応できる点や、LLMとさまざまなツールを連携する仕組みが備わっているという点から生じるメリットのひとつです。LangChainを使えば、さまざまなLLMに対して統一されたインターフェイスでアクセスできるので、コードの大半を修正することなく、LLMを切り替えて試用することも可能です。さまざまなLLMとさまざまなツールを組み合わせることで、ニーズに対応したアプリケーション開発ができるようになります。
LLMの制限を超えた高度な運用は、上記2つのメリットが合わさることで実現できます。本来、LLMが公開しているAPIの機能はシンプルで、プロンプトとして送ることができるデータ量にも制限があったり、LLMが学習していない事柄にはうまく答えられなかったりすることもあります。
しかし、プロンプトとして送るデータに対してさまざまなツールで最適化を施すことによって、LLMが事前学習していない事柄にも対応できるようになるなど、あたかもLLMの制限を超えたような運用が可能になります。
LangChainには、目的に合わせてLLM向けにデータを処理する機能が多数備わっている上に、ネットを検索すれば数多くの使用例やサンプルコードが見つかります。誰でもすぐにLLMの真価に触れるアプリケーションを作成でき試すことができるという点が、LangChainのとても大きなメリットと言えるでしょう。
LangChainは、LLMを高度に運用するためのさまざまな機能が組み込まれたフレームワークです。開発者は必要に応じて各種機能を組み合わせることで、アプリケーションを作成していきます。ここからは、LangChainに備わる代表的な機能(モジュール)を見ていきましょう。
Model I/Oは、OpenAIやGeminiなどのプロバイダーが提供しているLLMを、切り替えたり組み合わせたりして利用する機能や、プロンプトの管理、最適化を担う機能、LLMからの出力形式を指定する機能などが含まれたモジュールです。
【関連記事】
Language modelsはModel I/Oの機能の一部で、使用するLLMを切り替えたり、共通のインターフェイスで各種LLMを操作できるようにします。Language modelsは、さらにLLMsとChat modelsという2種類のモデルに対応したものへと分けられます。
PromptsもModel I/Oの機能の一部で、プロンプトの管理、最適化を担います。さらにPromptsは、Prompt templatesとExample selectorsという2つの機能に大別されます。
Retrievalは、PDFなどの外部データを用いて、LLMの回答精度を強化するためのモジュールです。例えば、会社の業務マニュアルをベースとした社内向けAIチャットボットの開発などに役立ちます。
本来プロバイダー側のLLMでは知りようのない業務マニュアルを補完データとして用意することで、LLMの判断力を利用した優秀な社内向けAIチャットボットを構築できます。このような既存ドキュメントとLLMの判断力を融合させたAI技術は、Retrieval-Augmented Generation(RAG)と呼ばれます。
RetrievalはDocument loaders、Document transformers、Text embedding models、Vector stores、Retrivers、Indexingという6つの機能で構成されています。
Agentsは、LLMにさまざまな外部ツールを渡し、プロンプトの内容に沿って適切なツールを使い分けることで、精度の高い回答を生成するモジュールです。ツールの実行自体はAgentsの機能ですが、目的に応じてどのツールを使うかはLLMが判断します。ここに人間的思考を模倣した判断力を期待できる点が、Agentsの興味深いところです。
Agentsで使えるようにLangChainに最初から登録されている外部ツールには、Google検索エンジンや専門分野検索エンジン、Wikipedia参照、数学問題解決が得意なツールなど、他にもさまざまなツールがあります。Agentsの機能を用いれば、ネット検索の最新情報をもとにした精度の高い回答を生成できます。
【関連記事】
Chainsは、複数のプロンプトを連続で入力していけるようにするモジュールです。先のプロンプトに対する回答を次のプロンプトの内容に組み込むことができるので、段階的に的確な回答を得られる可能性が高くなります。
例えば、「Chain1:とても暑い日にオススメの昼食は何ですか?」→「Chain2:<Chain1の回答>のレシピを教えてください。」といった連続プロンプトの構築を行えます。ChainsにはSimple Chain、Sequential Chain、Custom Chainという3種類のChainが用意されています。
Memoryは、プロンプトやLLMの回答を保存するモジュールです。AgentsやChainsの内部での状態保持にも用いられ、例えばChainsにMemoryを利用すれば、複数のChain全体を通して同一の前提条件などを設定することができます。
本来、GPTなどのChat modelsの中で会話内容は保存されておらず、WebサービスのChatGPTのようにこれまでの会話内容を反映した回答が欲しい場合は、自前で会話内容を保存する仕組みを作っておく必要があります。その仕組みを提供してくれるのがMemoryです。
【関連記事】
【関連記事】
Callbacksは、LLM利用時のアプリケーションのロギング、モニタリング、ストリーミングなどを管理するモジュールです。プログラミングにおけるコールバックとは、一般的に「特定のイベント発生や条件が成立した時に呼び出される関数やメソッド」を指す言葉です。
それと同様に、LLM運用時に発生するイベントに合わせて指定した処理を実行できるようにするのが、Callbacksの主な機能です。主な用途としては次の3つが挙げられます。
ここからは、LangChainを導入して使い始めるまでの手順を紹介していきます。ここでの使用環境はWindows PCを用い、統合開発環境にVisualStudio Code(以下、VS Code)、プログラミング言語としてPythonを導入済みの状態としています。
今回の使用例では、LLMにOpenAIのGPTシリーズを用います。OpenAIのようなプロバイダー型のLLMを利用する場合は、アカウントを作成して、ユニークなAPI KEYを発行してもらうのが一般的です。従って、最初にOpenAIのアカウント作成とAPI KEYの取得を行います。
1.https://openai.com/にアクセスし、画面右上の「Log in」をクリックします。
2.ログイン画面が表示されます。すでにOpenAIアカウントを所持している場合はログインして手順8まで飛ばしてください。
初めてOpenAIを利用する場合は、メールアドレスでアカウントを新規登録するか、Googleアカウント、Microsoftアカウント、Apple IDのいずれかと連携することで始められます。メールアドレスで新規登録する場合は「サインアップ」をクリックします。
3.アカウント作成画面で、登録するメールアドレスを入力します。
4.パスワードを入力します。
5.入力したメールアドレスへ確認メールが送られるので、メール内のリンクを開いて確認します。
6.reCAPTCHAテストがあるので、実施して通過します。
7.氏名、所属(オプション)、生年月日を入力して「Agree」をクリックします。
8.ログイン後の画面で、WebサービスとしてのChatGPTを利用するか、開発者としてAPIを利用するかを選択します。ここでは右側のAPIを選択します。
9.デベロッパープラットフォームが表示されるので、画面左端のメニューから南京錠マークの「API keys」をクリックします。
10.初めてアカウントを作成した場合は、携帯電話へのショートメッセージで電話番号確認が必要となります。すでに電話番号確認済みの場合は「+Create new secret key」をクリックして手順13まで飛ばしてください。
電話番号確認がまだの場合は「Start verification」をクリックします。
11.携帯電話番号を入力し「Send code」をクリックします。
12.携帯電話に届いた6桁のコードを入力します。コードが正しければ電話番号確認が完了します。
13.API KEYの発行画面に移ります。新しいAPI KEYを発行するにあたって、特定の名前を付けることで複数のAPI KEYを使い分けることができます。適当に名前を付けても良いですし、使い分けることがないのであれば空白で大丈夫です。
Permissionsは「All」のままで「Create secret key」をクリックします。
14.新しいAPI KEYが発行されました。ここで表示されているAPI KEYの文字列は、必ずコピーして別の場所へ保存しておきます。API KEY全体を確認できるのはこの画面だけで、後からはデベロッパープラットフォームの画面でも再確認できないので要注意です。
このAPI KEYはOpenAI APIへアクセスする自分専用の鍵で、他人に知られると自分の課金でLLMを利用されてしまう事態にもなります。厳重に保管するようにしましょう。API KEYを保存できたら「Done」をクリックします。
15.API KEYの取得が完了しました。
初めてOpenAIアカウントを作成した場合、フリートライアルとして$5のクレジットが付与されているはずなので、そのままOpenAI APIを試すことができます。
デベロッパープラットフォームで画面左端のメニューから歯車マークの「Settings」を開き、「Billing」をクリックするとクレジット残高を確認できます。フリートライアルクレジットは、3か月後に消滅する期間限定クレジットなので注意してください。
以前からOpenAIアカウントを所持していて現在クレジット残高が無い場合は、残高にチャージしなければOpenAI APIを利用できません。残高チャージ方法はクレジットカードのみに対応しています。
1.クレジットカード未登録の場合、クレジット残高確認の画面から「Add payment details」をクリックし、クレジットカードの登録を開始します。
2.個人利用か業務利用かを選択します。個人利用であれば「Individual」を選択します。
3.クレジットカード情報を入力し、「Continue」をクリックします。
4.チャージ金額を入力します。最小$5からチャージ可能となっており、少し試す程度であれば$5で十分です。金額入力欄の下はオートリチャージの設定となっていますが、本格的に運用するのでなければオフのままが良いでしょう。
「Continue」をクリックするとチャージ完了です。以後は同ページから「Add to credit balance」をクリックで再びチャージできます。
OpenAI APIの利用料金は、消費したトークン数に応じた従量課金制です。トークン数はプロンプト入力と回答出力の両方で消費し、1トークンあたりの料金は使用モデルによって変わります。
2024年3月時点での代表的なモデルの料金体系は、下記のようになっています。最新の料金体系については、OpenAIのWebサイトを確認してください。
GPT-4 Turbo
GPT-3.5 Turbo
GPT-3.5 Turbo
トークンと文字数の関係は、英単語の場合「1単語=1トークン」「1記号=1トークン」と明快ですが、日本語の場合は必ずしも一律ではありません。目安としては「ひらがな1文字=1トークン以上」「漢字1文字=2~3トークン」となります。
なお、GPT-4 Turboを利用するには通常のクレジット残高が必要で、フリートライアルクレジットではGPT-4 Turboの利用はできないので注意してください。
LangChainを使用するのに必要なモジュールをPython環境へインストールします。
1.VS Codeを起動し、ターミナルで次のコマンドを実行します。LangChainはLLMのAPI KEYを環境変数から読み出すのでdotenvもインストールします。
ターミナルで実行
pip install langchain langchain-openai python-dotenv
OPENAI_API_KEY=<取得したOpenAI API KEY>
<取得したOpenAI API KEY>
には、先の手順で取得したAPI KEYの文字列を記述します。以上で、LangChainを用いたLLMアプリケーションを作成する土台が整いました。
続いて、下記のサンプルコードを実行して試してみましょう。
サンプルコード
from dotenv import load_dotenv
from langchain_openai import OpenAI
#環境変数の読み込み
load_dotenv()
llm = OpenAI(model="gpt-3.5-turbo-instruct")
#プロンプトの設定
prompt = "日本の内閣総理大臣を新しい順に10人、任期も含めて挙げてください"
#生成と結果出力
output = llm.invoke(prompt)
print(output)
1. 菅義偉(2020年9月 - 現在)
2. 安倍晋三(2012年12月 - 2020年8月)
3. 鳩山由紀夫(2009年9月 - 2010年6月)
4. 麻生太郎(2008年9月 - 2009年9月)
5. 福田康夫(2007年9月 - 2008年9月)
6. 安倍晋三(2006年9月 - 2007年9月)
7. 小泉純一郎(2001年4月 - 2006年9月)
8. 森喜朗(2000年4月 - 2001年4月)
9. 小渕恵三(1998年7月 - 2000年4月)
10. 原敬(1918年9月 - 1921年11月)
LangChainはさまざまなLLMへ対応していることも大きな特徴です。ここではGoogle Geminiでも同様のテストを実施してみます。Google Geminiは下位モデルのGemini Proであれば、無料で利用可能です。
1.WebブラウザにGoogleアカウントでログインしている状態とし、Google AI for DevelopersのWebサイトを表示、「Get API key in Google AI Studio」をクリックします。
2.Google AI StudioのWebサイトが開きます。初回は利用規約が表示されるので、少なくとも一番上のボックスにチェックを入れて「Continue」をクリックします。
3.続いて「Get API key」をクリックします。
4.API KEYを生成する画面が表示されるので「Create API key」をクリックします。
5.次の画面では「Create API key in new project」をクリックします。
6.API KEYが生成されました。OpenAIの時と同様に、生成されたAPI KEYの文字列はコピーして大事に保管しておきます。Google Geminiの場合、Google AI StudioのWebサイトからいつでもAPI KEYを確認することができます。
7.VS Codeのターミナルで次のコマンドを実行し、Google Geminiを利用するのに必要なモジュールをインストールします。
ターミナルで実行
8.環境変数ファイルの.envに次の1行を追記します。
.envファイルに追記
<取得したGoogle API KEY>
には、先の手順で取得したAPI KEYの文字列を記述します。次のサンプルコードを実行してGoogle Geminiが使えるか試してみましょう。
サンプルコード
from dotenv import load_dotenv
from langchain_google_genai import GoogleGenerativeAI #変更箇所
#環境変数の読み込み
load_dotenv()
llm = GoogleGenerativeAI(model="gemini-pro") #変更箇所
#プロンプトの設定
prompt = "日本の内閣総理大臣を新しい順に10人、任期も含めて挙げてください"
#生成と結果出力
output = llm.invoke(prompt)
print(output)
1. 岸田文雄(2021年10月4日~)
2. 菅義偉(2020年9月16日~2021年10月4日)
3. 安倍晋三(2012年12月26日~2020年9月16日)
4. 野田佳彦(2011年9月2日~2012年12月26日)
5. 菅直人(2010年6月8日~2011年9月2日)
6. 鳩山由紀夫(2009年9月16日~2010年6月8日)
7. 麻生太郎(2008年9月24日~2009年9月16日)
8. 福田康夫(2007年9月26日~2008年9月24日)
9. 安倍晋三(2006年9月26日~2007年9月26日)
10. 小泉純一郎(2001年4月26日~2006年9月26日)
OpenAI LLMのGPT4-Turboを使用したサンプルコードを次に掲載します。GPT4-Turboはチャットモデル専用のため、メッセージの扱いなどに大きな変更が入ります。
サンプルコード
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
#環境変数の読み込み
load_dotenv()
chat = ChatOpenAI(model="gpt-4-0125-preview")
#メッセージ(プロンプト)の設定
messages = [
HumanMessage(content="日本の内閣総理大臣を新しい順に10人、任期も含めて挙げてください"),
]
#生成と結果出力
response = chat.invoke(messages)
print(response.content)
以下は、2023年4月時点での日本の内閣総理大臣のリストです。ただし、任期については特定の首相の任期が終了する正確な日付は変動し得るため、年度での近似を記載しています。
1. 岸田文雄 (2021年10月 - 現職)
2. 菅義偉 (2020年9月 - 2021年10月)
3. 安倍晋三 (2012年12月 - 2020年9月) ※2期目
4. 野田佳彦 (2011年9月 - 2012年12月)
5. 菅直人 (2010年6月 - 2011年9月)
6. 鳩山由紀夫 (2009年9月 - 2010年6月)
7. 麻生太郎 (2008年9月 - 2009年9月)
8. 福田康夫 (2007年9月 - 2008年9月)
9. 安倍晋三 (2006年9月 - 2007年9月) ※1期目
10. 小泉純一郎 (2001年4月 - 2006年9月)
このリストは、新しい順に10人の日本の内閣総理大臣を示しており、各首相の任期を大まかな年度で表しています。注意点として、安倍晋 三は2期にわたって首相を務めていますが、ここではそれぞれ別の項目としてカウントしています。
実際にLangChainを利用することでどのようなアプリケーションを生み出せるのか、活用事例には次のようなものが考えられます。
LangChainは、さまざまなLLMに対して統一したインターフェイスでアクセスできるようにした上に、LLM向けのデータ処理を得意とする多数の機能を備えた、非常に便利なフレームワークです。素のLLMでは難しい、最新情報を考慮に入れた判断が可能になるなど、LLMを本格的に利用する上でも無くてはならない存在と言えるでしょう。LLMを効果的に利用できることから注目度も高く、使用例やサンプルコードが沢山見つかる点も大きなプラスポイントです。
ただ、LLMもLangChainも、日々ダイナミックな変化を続ける技術です。これからLangChainを取り入れていこうと考えている方は、最新情報をキャッチアップする高いアンテナ感度を持ち続けると同時に、バージョン違いによるドキュメントやサンプルコードとの差異にも注意が必要になるでしょう。
この機会にぜひ、アプリケーション開発者の方はもちろん、LLMなどの生成AIに興味がある方も、一度触れてみてはいかがでしょうか。
【関連記事】
関連タグ:
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには