この記事のポイント
- この記事は、外部データやサービスと連携可能なオープンソースライブラリ「LangChain」の紹介です。
- LangChainを使うことで、ChatGPTなどのGPTモデルを拡張し、実用的で正確な応答が可能になります。
- LangChainでは、テンプレート化されたプロンプトやチェインを用いてより高度な応答を生成できます。
- エージェントを活用することで、データ検索や文書解析などの専門的なタスクも行えます。
監修者プロフィール
坂本 将磨
Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。
AIや自然言語処理技術が進化を続ける中で、特に注目されているのが「LangChain」というオープンソースのライブラリです。
これは、ChatGPTなどの汎用GPTモデルをさらに発展させるためのプラットフォームとして機能し、外部データやAPIとの連携を通じて多様なアプリケーションの開発を容易にするものです。
この記事では、LangChainのメリットや利点、具体的な利用方法といったさまざまな側面を紐解きながら、その有効性を深堀りしていきます。
自然言語処理に関する最先端の技術がどのように活用されているのか、詳しい解説を通じてご紹介します。ぜひ最後までご覧ください。
LangChainとは?
LangChainはAI、特に自然言語処理の分野で注目されているオープンソースのライブラリです。
ChatGPTといった汎用的なGPTモデルをより役立つように拡張するプラットフォームで、外部のデータソースやサービスと連携するアプリケーションを簡単に作れるよう設計されています。
具体的には、APIを用いた言語モデルとのやり取りをより高度にしたり、外部データやリアルタイムのデータを用いたやり取りが可能になります。
LangChainのメリット
LangChainの強みはChatGPTなどの自然言語処理モデルの能力の拡張にあります。
ChatGPTは単独で利用する場合には、ChatGPTの知識はそのトレーニング時点での情報に限られることがあり、時として古いかったり、特定の問いに対しては不十分な回答を提供しかねません。
LangChainは、生成された言語モデルに基づく応答に、外部からの情報を組み合わせることで、さらに実用的で正確な応答を可能にします。
参考:LangChain
LangChainのインストール方法
LangChainはオープンソースの外部ライブラリであり、pipコマンドを用いて動作環境にインストールすることが出来ます。ただしLangChainは、GPTなどの主要な言語モデルと並行して使用するため、OpenAIやAzure Open AI ServiceなどのAPIをPythonで利用可能な状態にしておく必要があります。
pip install langchain
pip install langchain_openai
Azure OpenAI ServiceでLangChainを利用する場合は、次のようなコードを記述することで、モデルの定義を行います。
import os
from langchain_openai import AzureChatOpenAI
os.environ["AZURE_OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
os.environ["AZURE_OPENAI_ENDPOINT"] = "YOUR_OPENAI_ENDPOINT"
model = AzureChatOpenAI(
openai_api_version="2024-02-15-preview",
azure_deployment="YOUR_azure_deployment",
)
Azure OpenAI Serviceのより詳しい内容については次の記事も参考にしてください。
【関連記事】
→Azure OpenAI Serviceとは?その機能や料金、活用方法を解説
また、「OpenAI API」と「Azure OpenAI API」それぞれの特徴や機能比較についてはこちらの記事で解説しています。
【関連記事】
→Azure OpenaAI ServicesとOpenAI APIの違いを徹底比較!
LangChainの主要機能
LangChainは、ChatGPTや他のGPTモデルの機能を拡張し、それらの応答をより豊かで有益なものへと昇華させるための多様な機能を備えています。LangChainの基本的な機能を紹介します。
言語モデルの呼び出し
LangChainによってGPTなどの言語モデルを呼び出して、応答を得ることが出来ます。
output = model.invoke('江戸幕府は誰が作りましたか?')
print(output.content)
江戸幕府は徳川家康が作りました。徳川家康は関ヶ原の戦いに勝利し、1603年に江戸幕府を開きました。江戸幕府は約260年にわたり、日本の政治を支配しました。
このようにモデルの定義がてきていれば、invokeメソッドを使うことで簡単に応答を得ることが出来ます。
しかしこのままでは、モデルとの一往復のやり取りしかできず、応用性が低いです。例えば、モデルからの応答を次の命令プロンプトに含めるようなやり取りはこのままでは実現できません。
このようなモデルとのより高度なやり取りを実現する機能が、LangChainには備わっています。それがプロンプトテンプレートとチェインです。
プロンプトテンプレート
プロンプトテンプレートによって、モデルへの命令プロンプトをテンプレート化し、テンプレートの一部を任意の文字列に変更することが出来ます。
例えばある場所を入力したときに、その場所の東京からの行き方を教えてくれるアプリを作りたいとします。この時、次のようなプロンプトテンプレートを用意します。
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("""{destination}の東京からの行き方を教えてください。""")
このように用意したプロンプトとモデルを繋いだChainを作成し、invokeを用いて応答を得ます。このときinvokeの引数に好きな行先を指定します(chainは次の章で詳しく説明します)。
chain1 = prompt | model
result = chain1.invoke({"destination": "熱海"})
print(result.content)
熱海への東京からの行き方は以下の通りです。
1. 列車を利用する場合:
- 東京駅から東海道本線の特急「ひかり」に乗ることができます。約1時間30分で熱海駅に到着します。
2. 新幹線を利用する場合:
- 東京駅から東海道新幹線の「こだま」「ひかり」に乗ることができます。約40分から1時間で熱海駅に到着します。
3. バスを利用する場合:
- 東京駅から高速バスを利用することもできます。熱海行きの高速バスは東京駅八重洲口や東京駅八重洲南口から出ています。所要時間は交通状況によりますが、通常は約2時間から2時間30分かかります。
4. 車を利用する場合:
- 高速道路を利用する場合、東京湾アクアラインと東名高速道路を経由することが一般的です。所要時間は交通状況によりますが、通常は約1時間30分から2時間かかります。
上記の方法の中から、ご自身のスケジュールや予算に合わせて最適な方法を選んでください。また、交通手段や時刻表は変更される場合があるため、事前に最新の情報を確認することをおすすめします。
このようにプロンプトテンプレートを用いることで、任意の引数を命令プロンプトに組み込むことが出来ます。
チェイン
チェインはLangChainの代表的な機能であり、この機能によってモデルからの応答を次の命令に組み込みことが出来ます。
例えば、先ほどの目的地までの行き方の中で、最も安い方法とその値段を知りたいとします。このとき先ほどとは異なる、次のようなプロンプトを作成します。
pronpt_price = PromptTemplate.from_template(
"""次の文に含まれる目的地への行き方の中で、最も安いものとそのおおよその値段を教えてください。
---
{output}
---
""")
次に先ほどと同様、このプロンプトとモデルを繋いだChainを作成し、目的地への行き方の応答を、新たなChainの引数に追加します(これと同様のことはプロンプトテンプレートの説明部分でも行っています)。
chain2 = pronpt_price | model
result2 = chain2.invoke({"content":result.content})
print(result2.content)
最も安い行き方は、バスを利用する方法です。所要時間は通常約2時間から2時間30分で、おおよその値段はバス運賃によりますが、一般的には1000円から2000円程度です。ただし、交通状況によって所要時間が変動するため、予定に余裕を持って移動することをおすすめします。
このようにプロンプトテンプレートやチェインによって、より高度な言語モデルとのやり取りを実現できます。
より高度な機能
LangChainのより応用的な利用方法を紹介します。これらの利用方法はそれぞれ個別でAPIやデータベースが必要となるため、実際のコードは示さず、簡単な説明のみにとどめます。
外部データの利用
言語モデルに外部データを取り込むことで、より専門的な内容や、ある文書データに関する内容に関する質問に対応できるよになります。この外部データの取り込みがLangChainの機能を使うことで容易に行うことが出来ます。
この機能によって社内のデータを取り込んで、社内用チャットボットを作成したり、論文のような長文のPDFを読み込んでその内容を答えさせるなどの機能を実現することが出来ます。
RAG(Retrieval-Augmented Generation
RAGは、検索エンジンを用いて関連する情報を取得し、その情報を利用して言語モデルの生成能力を向上させる手法です。LangChainを使うことで、RAGを容易に実装することができます。
RAGを利用することで、言語モデルは最新の情報や、トレーニングデータには含まれていない情報を利用して、より正確で有用な応答を生成することができます。
【関連記事】
➡️LLMや生成AIのRAGとは?その概要や活用例をわかりやすく解説!
エージェント
LangChainにはあらかじめ設定されたツールが存在しており、エージェントにはそのうちいくつかのツールが備えられています。
エージェントはモデルは命令を受けた際に、命令から使うべきツールを判断し、実際にツールを実行し結果を出力することが出来ます。
LangChainには例として次のようなエージェントが存在しています。
- Self-Ask-With-Search
質問に対する答えを事実に基づいて調べてくれるAgentエージェント
- React-Docstore
文書を扱うことに特化したエージェント
これらのエージェントを用いることで、リアルタイムで実際にエージェントに検索させた結果を出力させたり、文書を読み込ませて、その内容について応答させる機能が実現できます。
LangChainの活用例
具体的な利用例としてLangChainを使ってChatGPTに天気予報APIを組み込むことで、ユーザーが提起する天気に関する質問に対し、常に最新の情報を反映した答えを返せるようになります。
また長文の文書データを読み込ませることで、論文のような長い文書を読むことなく、その内容を質問し回答を得ることが出来ます。
楽天グループによるLangChainを用いたサービス
楽天グループは、LangChainおよびLangSmithと共同で、ビジネスクライアントと従業員向けのプレミアム製品を構築しています。
この製品は、LangChainを用いて外部データと連携することで、より専門的で個別化された応答を提供することができます。例えば、楽天グループが持つ膨大な商品データや顧客データを利用することで、ユーザーの嗜好に合わせた商品推奨や、過去の購買履歴に基づいたパーソナライズされた応答が可能になります。
参考:LangChain
また、従業員向けの製品では、社内の各種データベースと連携することで、業務に関する質問に対して的確な回答を提供することができます。これにより、業務効率の向上や従業員の生産性の向上が期待されます。
楽天グループによるLangChainを用いたサービスは、LangChainの持つ外部データとの連携機能を活かし、より高度で実用的なAIサービスを実現した好例と言えます。
MicrosoftとLangChainのコラボレーション
LangChainはMicrosoftとのコラボレーションを拡大しており、MicrosoftのAzure OpenAI Serviceと統合することで、より強力で柔軟なAIアプリケーションの開発が可能になっています。
LangChainをAzure OpenAI Serviceと組み合わせることで、開発者はMicrosoftの高度な言語モデルを容易に利用することができます。これにより、より自然な対話や、ドメイン固有の知識を持ったAIアシスタントの構築が可能になります。
さらに、LangChainとAzureの他のサービス(Azure Cognitive Search、Azure Functionsなど)を組み合わせることで、外部データとの連携やサーバーレスアーキテクチャの利用など、より高度で拡張性の高いAIアプリケーションの開発が可能になります。
MicrosoftとのコラボレーションによるLangChainの活用は、LangChainの持つ柔軟性と拡張性を示す好例であり、エンタープライズレベルのAIアプリケーション開発において大きな可能性を秘めています。
まとめ
この記事では、言語モデルを拡張するオープンソースプラットフォームであるLangChainについて説明しました。LangChainの基本的な概要から、テンプレートやチェインなどの基本的な機能を説明し、外部データの取り込みやエージェントなどの応用的な機能にも触れました。
オープンソースという性質上、LangChainはコミュニティの支援を受けながら、今後も機能の向上と強化が行われることでしょう。
生成系AIに関する他の情報は、AI総合研究所の関連記事をご覧ください。