ChatGPTを始めとして様々な生成AIを独自にカスタマイズするためのフレームワーク「LangChain」について紹介します。
ChatGPTのリリースによって、ビジネスへのAI活用は新たな時代に突入しました。コンピュータは”人間との対話”というインタフェースを手に入れ、日々革新的な高度な自動連携サービスやAI活用アイディアが提案されています。
そんな中、自社の事情や顧客の要望に合わせた独自の生成AIアプリを求めるニーズが高まっています。
LangChainはそんなニーズに応えられるフレームワーク。早速解説していきます。
プログラマー(PG)経験 3年 システムエンジニア(SE)経験 8年 プロジェクトマネージャー(PM)経験 7年 過去の開発システム ・ロケット飛行安全システム ・魚雷発射評価シミュレーションシステム ・船舶電話システム ・NHK番組管理システム ・IBM生産管理システム(データベース設計) ・学習塾管理システムパッケージソフト開発 ・6軸アームロボット開発 ・露光装置監視システム その他多数システム開発にかかわってきました。 39歳で独立して、アフィリエイトシステム開発と運営を3年ほど行い、 ライター業務を始めて現在に至ります。
LangChainとは
LangChainは、アプリケーション開発を容易にするためのフレームワークです。言語モデル、データストレージ、APIを効果的に活用し、開発に柔軟性をもたらします。また、シーケンス処理機能を備えているため、複雑な処理も比較的容易に実装できます。
さらに、ウェブ開発に必要なデータベースやAPIとの連携がスムーズに行える点も魅力です。これにより、情報の取得や管理が簡単になります。また、開発したアプリケーションを迅速にデプロイできるツールも整っており、全体の開発プロセスを効率化します。LangChainは、AIを利用したプロジェクトにおいて、開発者にとって非常に有用なリソースです。
LangChainとLLMの違い
項目 | LangChain | LLM (大規模言語モデル) |
定義 | フレームワーク/ライブラリ | 言語モデル |
目的 | LLMを含む様々なAIコンポーネントを組み合わせて、より複雑なアプリケーションを構築することを支援する | 与えられた文脈から自然な応答を生成する |
機能 | データの取得、処理、LLMへの入力、LLMからの出力の後処理など、様々な機能を提供 | 主に自然言語の生成と理解 |
構成要素 | エージェント、チェーン、プロンプト、メモリなど | transformer、注意機構、言語モデルなど |
使用例 | 質問応答システム、タスク自動化、対話システムなど | 機械翻訳、文章生成、テキスト要約など |
LLMは自然言語の生成と理解を主な目的とする言語モデルです。ただ、LLMだけでは私たちと対話することができません。
そこで、外部システム・データを連携させるアプリケーションを開発するためにあるフレームワークがLangChainです。
LangChainは、LLMを利用しつつ、データの取得、処理、LLMへの入力、LLMからの出力の後処理など、様々な機能を提供することで、LLMの能力を最大限に活用できるようサポートします。
LangChainの特徴
それでは、LangChainにはどんな特徴があるのか、それぞれ見ていきましょう。
複数のAIモデルを統合できる
LangChainの最大の特徴は、複数のAIモデルを統合できる点です。これにより、高度なアプリケーションを効率的に開発できます。例えば、情報検索モデルと要約専用モデルを組み合わせることで、ユーザーの要求に対して最適な応答を提供できます。
さらに、シーケンス機能を利用してモデル間の連携をスムーズに行えるため、複雑な処理も簡単に実現できます。このように、LangChainはさまざまな用途に応じたアプリケーションの開発をサポートし、柔軟かつ効果的なソリューションを提供します。開発者は、特定のニーズに応じて最適なモデルを選択し、応答の質を向上させることができます。
処理を連鎖的につなげられる
処理を連鎖的につなげられることで、開発者は異なる処理を自由に組み合わせられます。これにより、複雑なアプリケーションを効率的に構築できます。例えば、データの取得から処理、そして結果の出力までの一連の流れを、直感的に設計することができます。
この柔軟性により、特定のニーズに応じたカスタマイズが容易になり、開発者はより効果的なソリューションを提供できるようになります。LangChainは、この連鎖的な処理機能を活用することで、アプリケーション開発の可能性を大いに広げています。
会話の文脈を保持できる
LangChainは、ユーザーとの過去のやり取りを保存することで、次の会話でどのような回答を行うべきかを選べるようにしています。この文脈の保持により、過去の情報を踏まえた精度の高い応答が可能になります。
例えば、ユーザーが以前に述べた興味や好みを考慮することで、より関連性のある回答を提供できます。また、会話の流れに沿った自然な対話が実現されるため、ユーザーはスムーズで心地よいコミュニケーションを体験できます。
このような文脈の保持は、長期的なサポートを提供する際にも役立ち、ユーザーとの信頼関係を深める要素となります。結果として、LangChainを用いることで、よりパーソナライズされたサービスを実現し、ユーザーのニーズに応じた対応が可能になります。
外部ツールと連携できる
LangChainでは、開発者がさまざまな外部ツールを活用できるようになっています。外部APIの利用が可能なため、機能の拡張が簡単に行えます。例えば、外部データベースや他のクラウドサービスからデータを連携することができ、アプリケーションの機能を大幅に向上させられます。
外部ツールとの連携により、利用できる機能が増え、多様なニーズに対応できるようになります。また、これらの外部ツールを活用することで、一から新しい機能を開発する必要がなくなり、開発工数やコストの削減にもつながります。これにより、開発者は効率的に高品質なアプリケーションを提供できるようになります。
プロンプトを効率的に管理できる
LangChainでは、プロンプトを効率的に管理できるため、会話が違和感なくスムーズに進行します。豊富なプロンプトテンプレートを備えているため、特定の状況に最適な入力を容易に選択できます。これにより、自然言語処理モデルに対して適切な情報を提供し、一貫性のある高品質な応答を得ることが可能になります。
開発者にとっては、多数のプロンプトテンプレートがあることで、特定のニーズに応じた適切な回答を導き出すことができ、ユーザー体験を向上させられます。このように、プロンプトの効率的な管理は、効果的なコミュニケーションを実現し、アプリケーション全体の質を高める要素となっています。結果として、LangChainは開発者にとって強力なツールとなり、迅速かつ効果的なアプリケーション開発を支援します。
オープンソース
LangChainはオープンソースソフトウェアであり、無料で利用可能です。 LangChainは、IBM Researchによって開発されましたが、現在はオープンソースコミュニティによって管理され、Apache 2.0ライセンスでライセンスされています。
コードが公開されているため、誰でもその動作を理解し、監査することができる上に、誰でもLangChainの開発に貢献することができます。オープンソースなコミュニティは、さまざまなコラボレーションが生まれる革新の場です。
LangChainの基本機能
従来のLLMには以下のような難点がありました。
- 自身のニーズに合わせて複数のLLMを渡り歩くのが大変
- 外部のデータを参照するのが大変
- 外部のアプリやWebAPIと連携できない
- 長文の質問に対応しきれない
- 長いプロンプトをいちいち入力しなければならない
- 1つの指示に1つの応答を挟まないといけないため、複雑な回答への対応がし辛い
- 過去の会話内容を忘れる
生成AIを使ったアプリの実装には多くの知識やコストが必要でした。
しかし、LangChainを活用することでこれらの問題を解消し、ニーズに合わせた生成AIアプリケーションを簡単に実装できるようになったのです。
ここではLangChainの機能について、分かりやすく紹介します。
Model I/O(モデル):様々なLLMのインポート
LangChainはGPT-3、Jurassic-1 Jumbo、Megatron-Turing NLGなど、ほぼすべてのLLMへの汎用インタフェースとして、LLM用アプリケーションの開発を支えてくれるフレームワークです。
LLMはAIが自然言語を解釈するための根幹となるモノですので、多くの企業が競うように独自LLMを開発しています。
また、 新しいLLMが開発された場合も、LangChainで簡単に統合することができます。
※多くのオープンソースモデルがHugging Face(外部リンク)から入手可能です。
Prompt(プロンプト):指示を容易化
LangChainはプロンプト管理フレームワークの一つです。プロンプト管理 は、LLMアプリケーション開発において重要な役割を果たします。
LLMは、与えられたプロンプトに基づいてテキストを生成するため、プロンプトが適切に設計されていない場合、LLMは望ましい結果を生成できない可能性があります。
「プロンプトテンプレート」「例セレクター」「プロンプトバリエーター」などといった機能により開発者は効果的なプロンプトを簡単に作成し、LLMのパフォーマンスを向上させることができます。
Chains(チェーン):複数のプロンプトやLLMの連結
従来のLLM活用では、外部機能はおろかLLMの応答さえ連結させることが難しく、一回づつ応答する必要がありました。
LangChainはチェーンとよばれる機能により、LLMを他のコンポーネントと組み合わせ、一塊の動作として実装できます。
LangChainの名前はこのチェーン機能から来ていると言っても過言ではない、LangChainの中核をなす機能です。
最も基本的なチェーンとしてLLMChainを例に上げましょう。LLMChainは、名前の通り特定のLLMとそのプロンプトテンプレートを繋げます。事前に熟練のプロンプトエンジニアが「ExamplePrompt」というテンプレートを作り、GPT4をAPI登録してある状態で、
と指示したあと、
と一行コーディングするだけで、gpt4を ExamplePromptテンプレートで実行できます。
- ユーザーからの入力を受け取り
- 事前に用意したプロンプトテンプレートでフォーマットし
- 最適化された「質問」を LLM に渡す
このような定番の動作を一連のまとまりとして実行できるのです。
LangChainにはこのチェーンを司るChainsクラスが用意されており、システムエンジニアはニーズに合わせたチェーンを自由に設計可能です。
- 各種Chainsの利用
- SequentialChainの利用
- Chainクラスのサブクラスを用いたカスタムチェーンの作成
など、特定のニーズに応じて異なるプロンプト、異なるツール、異なるパラメーター、異なるモデルをまたぐ複数の処理の連なりを、一塊のものとして実行できます。
Indexes(インデックス):外部データの参照
LangChainはインデックス機能を提供しています。LangChainは、PDF、CSV、JSONなどの既存のドキュメントや外部データを取り込み、インデックス化することができます。
例えば、社内のマニュアルや顧客データなどをLangChainでインデックス化することで、LLMはこれらの情報に基づいて質問に答えたり、タスクを実行したりすることができるのです。
また、インデックス化されたドキュメントに対して検索機能を提供することで、ユーザーはLLMに対して質問を入力し、関連するドキュメントや情報を迅速に見つけることができます。
例えば、顧客が製品に関する質問をLLMに尋ねた場合、LangChainは製品マニュアルやFAQなどの関連するドキュメントを検索し、顧客提供することが可能になります。
Meomory(メモリ):履歴の保持
LangChainは、会話履歴などの情報を長期的に保存するための中央インターフェースを提供します。
これにより、LLMは過去の会話内容をコンテキストとして理解し、より自然で人間らしい応答を生成することができます。
また、過去の会話内容からユーザーの好みやニーズを学習することで、よりパーソナライズされた応答を提供することができます。
Pythonを使ったLangChainの使い方
それでは、ここからはLangChainのPythonwo使った実際の使い方を紹介します。
Pythonを使用すれば、様々なLLMアプリケーションを構築するための強力なフレームワークとなるでしょう。
LangChainのインストール
LangChainを使用するには、まずpipを使用してインストールする必要があります。 以下のコマンドを実行します。
LLMモデルの読み込み
LLMモデルを使用するには、まずLangChain APIを使用して読み込む必要があります。 以下の例では、OpenAIのGPT-3モデルを読み込みます。
from langchain.llm import OpenAIAgent
# OpenAI APIキーを設定
api_key = “YOUR_OPENAI_API_KEY”
# LLMモデルを読み込む
agent = OpenAIAgent(model_id=”text-davinci-003″, api_key=api_key)
プロンプトの作成
LLMモデルを実行するには、まずプロンプトを作成する必要があります。 プロンプトは、LLMモデルに与えられる指示であり、生成される出力を大きく左右します。 以下の例では、”今日の天気は?”というプロンプトを作成します。
LLMモデルの実行
プロンプトを作成したら、LLMモデルを実行して応答を取得することができます。 以下の例では、agent.run()メソッドを使用してGPT-3モデルを実行し、応答を出力します。
print(response){
“choices”: [
{
“text”: “今日の天気は晴れです。”,
“logprob”: -0.8320793212890625
},
{
“text”: “今日の天気は曇りです。”,
“logprob”: -0.9876543210987654
},
{
“text”: “今日の天気は雨です。”,
“logprob”: -1.143210987654321
}
]
}
この出力は、GPT-3モデルが生成した3つの可能な応答を示しています。 各応答には、テキストと確率が含まれています。 確率は、LLMモデルがこの応答が正しいと考えた確率を示します。
例えば、ChatGPTを拡張することで以下のようなシステムが構築可能です。
自動応答サポートシステム
LangChainで、自社の内部ドキュメントやナレッジベース(知見集)とChatGPTをつなぐことで、ChatGPTが従業員のトラブルに迅速に回答する業務サポート用チャットボットを構築できます。
顧客用マニュアルを繋げれば、カスタマーサポートの自動応答チャットボットも作れます。
採用プロセスのサポート
企業の採用ポリシーや求めているスキルなどを繋げることで、ChatGPTを介して求職者の質問に答える求人用サポートシステムを作成できます。
より専門的な情報や業務で使うデータベースと繋げ、採用担当者が採用候補を整理するボットを開発しても良いでしょう。
議事録の要約
従来のChatGPTでは、議事録の要約を行おうとしても省略言語が多すぎて使い物にならないケースがほとんどでした。
LangChainで社内のプロジェクト用語や担当者名をつなぐことで、適切な議事録の要約が可能になります。
OpenAI以外でLangChainを使う方法
OpenAI以外もLangChainを使い方法はあるのでしょうか?実は、LangChainをOpenAI以外で使う方法はあります。下記にその方法を記述します。
Google PaLMを使用する方法
Google PaLMを利用する方法があります。Google PaLMは、様々な自然言語の処理に対応できるようになっています。この場合の利用可能にするまでの手順を解説します。
Google Cloudアカウントを作成プロジェクトを作成します。PaLM APIへのアクセスを有効にします。LangChainとGoogle PaLMを利用するために、langchainライブラリと、GoogleのAPIクライアントライブラリをインストールします。
pip install langchain google-cloud |
Google CloudのAPIキーを環境変数に設定すれば、LangChainがPaLM APIを利用できます。
from langchain import OpenAI, GooglePaLM
# Google PaLMモデルのインスタンスを作成 model = GooglePaLM(api_key=’your_api_key_here’)
# プロンプトを設定 prompt = “こんにちは!今日の天気は?”
# 応答を取得 response = model.generate(prompt) print(response) |
HuggingFaceのモデルを使用する方法
HuggingFaceのモデルを使用するやり方もあります。多彩な自然言語処理モデルを提供してくれるのが、HuggingFaceです。この場合の、利用可能にするまでの手順を解説します。
Hugging Faceのサイトで、アカウントを作成します。
LangChainとHugging FaceのTransformersライブラリをインストールします。
pip install langchain transformers |
LangChainを用いてHugging Faceのモデルを設定します。
プロンプトを送り応答をもらいます。
from langchain import HuggingFace
# Hugging Faceモデルのインスタンスを作成 model = HuggingFace(model_name=”gpt2″) # 使用するモデルを指定
# プロンプトを設定 prompt = “今日は何をする予定ですか?”
# 応答を取得 response = model.generate(prompt) print(response) |
Anthropicのモデル(Claude)を使用する方法
Anthropicのモデルを使用するやり方もあります。この場合の、利用可能にするまでの手順を解説します。
Anthropicのサイトで、アカウントを作成します。
LangChainとHugging FaceのTransformersライブラリをインストールします。
pip install langchain anthropic |
環境変数にAnthropicのAPIキーを設定します。
export ANTHROPIC_API_KEY=’your_api_key_here’ |
LangChainを用いてHugging Faceのモデルを設定します。
プロンプトを送り応答をもらいます。
from langchain import Claude
# Claudeモデルのインスタンスを作成 model = Claude(api_key=’your_api_key_here’)
# プロンプトを設定 prompt = “最近のテクノロジーのトレンドについて教えてください。”
# 応答を取得 response = model.generate(prompt) print(response) |
Llama 2を使用する方法
Llama 2モデルのモデルを使用するやり方もあります。この場合の、利用可能にするまでの手順を解説します。
Hugging Faceのモデルハブからダウンロードします。Hugging Faceのアカウントを作成し、必要なモデルを選択します。
LangChainとHugging FaceのTransformersライブラリをインストールします。
pip install langchain transformers |
Llama 2モデルをローディングして、LangChainで使用可能にします。
# Llama 2モデルのインスタンスを作成
model = HuggingFace(model_name=”meta-llama/Llama-2-7b”) # 使用するモデルを指定
# プロンプトを設定 prompt = “最近のAI技術について教えてください。”
# 応答を取得 response = model.generate(prompt) print(response) |
Azure OpenAIを使用する方法
Azure OpenAIはMicrosoftのクラウドサービスです。この場合の、利用可能にするまでの手順を解説します。
Azure OpenAIのサイトで、アカウントを作成します。
Azureポータルにアクセスし、OpenAIリソースを作成します。OpenAIリソースの設定を行いAPIキーを取得を取得します。
LangChainとAzure OpenAIを利用するためのライブラリのインストールを行います。
pip install langchain openai |
環境変数を設定します。
export AZURE_OPENAI_API_KEY=’your_api_key_here’
export AZURE_OPENAI_ENDPOINT=’https://your-resource-name.openai.azure.com/’ |
Azure OpenAIのモデルを設定し、プロンプトを送信します。
from langchain import OpenAI
# Azure OpenAIのインスタンスを作成 model = OpenAI( api_key=’your_api_key_here’, endpoint=’https://your-resource-name.openai.azure.com/’, model_name=’gpt-35-turbo’ # 使用するモデル名を指定 )
# プロンプトを設定 prompt = “最近の技術トレンドについて教えてください。”
# 応答を取得 response = model.generate(prompt) print(response) |
LangChainでできることや活用事例
LangChainとChatGPTをビジネス活用する際には、多くの場合自社のニーズに合わせたシステム開発方法を選ばなくてはいけません。
まずは現状の問題点や課題と目標を洗い出し、生成AIを使ったアイディアを探りましょう。
この項ではLangChainを使った実践的な使い方について、いくつかの事例やポイントを紹介します。
Allyによる個人識別情報マスクモジュール
アメリカ最大のデジタル専用銀行を運営するAlly Financial Inc.では、毎日何千人という顧客に対してカスタマーサポートを行う必要があります。
そのため、金融サービス業界ではかなり早期に生成型AIによるカスタマーサポート支援プラットフォームを採用しました。Ally.aiは商用グレードのLLMによって、顧客毎の通話の全文を共有し、案件ごとに要約することで日々の業務を効率的にサポートします。
とはいえ、非常に個人情報の取扱に厳しい銀行業界ではLLMに会話を渡す前にPII(個人識別情報)を削除しなくてはいけません。
LangChainを活用することで、Allyのエンジニアはさまざまな形式のPIIをマスクするAlly.ai向けのモジュールを開発。
Allyのデータと商用LLMとの間をLangChainによって開発されたモジュールが橋渡しすることで、コンプライアンスに準拠した安全なAI活用を実現しています。
楽天AI for Business
楽天グループ株式会社は、LangChainとLangSmithを使用したAIによる企業支援プラットフォーム「楽天AI for Business」を展開しています。
楽天AI for Businessは市場分析や顧客対応といった様々な業務をサポートする総合AIプラットフォームで、クライアントのビジネス活動を支えます。
具体的には、市場の様々なデータを分析し、関連データグラフを可視化する「Rakuten AI Analyst」や、マーケットプレイスでのAIカスタマーサポート「Rakuten AI Agent」、クライアントのドキュメントを要約しリアルタイムの質問に自動応答できる「Rakuten AI Librarian」です。
Elasticによるセキュリティ向けAIサポートElastic AI Assistant
Elasticsearch B.V.は、分散型全文検索/分析エンジンサービスを展開するテック企業で、FacebookやNetflix、ソフトバンクなど様々な企業の「検索システム」を裏側から支えています。
近年、ElasticはLangChainとLangSmithを活用したセキュリティ向け AIアシスタントをリリースしました。
「アラート要約」「ワークフローの提案」「クエリ生成や変換」などの機能で、セキュリティチームの業務を独自AIで支援します。
Langchainの欠点や利用する際の注意点
LangChainはオープンソースで開発されており、有志によって組織されたコミュニティに支えられています。
そのため商用ソフトウェアとは違い、利用する際には様々なトラブルが起こることに注意が必要です。
学習曲線が高い
LangChainを利用する際、基本的な概念や構成要素を理解するには時間がかかります。LangChainは非常に高い柔軟性を持っていますが、プロンプト管理、チェーン、メモリといった主要な概念をしっかり把握しておかなければいけません。
これには学習時間がかかるため、初心者にはハードルとなることがあります。また、こうした点を考慮し、段階的に学習を進める必要があります。
デバッグが難しい
デバッグを行う際、特に複雑なフローを構築していると、多くの時間を要することがあります。不具合が発生した場合、その原因がプロンプト設定やモデルの選択、さらにはフロー全体にあるのかを切り分けるのが難しくなります。
このため、問題の特定には試行錯誤が必要で、特に初心者には大きなハードルとなる可能性があります。効果的なデバッグのためには、各要素を段階的に確認し、シンプルなフローから徐々に複雑なものへと進むことが重要です。
カスタマイズが複雑になりがち
カスタマイズが非常に複雑になる点も注意が必要です。独自の要件や特定のニーズに基づいてカスタマイズを行う際は、全体像をしっかり把握してから進めなければいけません。さまざまな要素が相互に影響を及ぼすため、十分に理解せずに変更を加えると、思わぬ問題が発生する恐れがあります。
特に、プロンプト管理やモデル選定、フロー設計などが絡むと、意図しない動作が引き起こされることもあります。したがって、計画的にカスタマイズを進めることが成功の鍵です。
厳密なメンテナンスや保守管理が必要
LangCHainは、自社で更新情報やバグ・脆弱性の報告を定期的に確認し、自社の事情に合わせてメンテナンスを行わなければいけません。
プロジェクトの複雑さによっては、必要な機能を自前で開発する必要も出てくるでしょう。
ライセンスの条件に注意が必要
OSSはライセンスを遵守しなければ著作権違反になります。
MITライセンスは比較的条件が緩い寛容型ライセンスであるため、基本的にはビジネスの障害になることは稀ですが、ライセンスの義務は満たした上で利用しましょう。
まとめ:LangChainはLLMに不可欠なフレームワーク
LangChainというChatGPTを始めとした生成AIを簡単に拡張できるフレームワークの登場は、未来のシステム開発に革命をもたらす可能性を秘めています。
LangChainについて、どういうもの中を解説してきました。システム開発段階では、多種類の機能があり、開発コスト・工数の削減に役立つものだという子が理解できたのではないでしょうか。
もっと開発期間・コスト削減するために、社内の体制が整うまで外部のITシステム開発会社から支援してもらうのも良い手段です。
株式会社Jiteraは、豊富な国内実績と業務自動化プラットフォームにより多くの企業様のITシステム導入をサポートしてきました。
ビジネスへのAI活用や、ChatGPT活用にご興味をお持ちの企業様、ぜひ一度Jiteraにお問い合わせください。経験豊富なエンジニアによる併走支援で、様々なニーズに合わせたご提案をさせていただきます。