LangChainとは?RAGの使い方!日本語対応と商用利用も解説

LangChainは大規模言語モデル(LLM)をより効率的に活用するためのフレームワークです。

さまざまな外部リソースと連携してLLMの応答を強化でき、RAGへの応用も可能です。

また、LangChain Agentsという機能では、自律的に考えてアクションを実行することもできます。

この記事では、LangChainの使い方やRAGの流れ、日本語対応状況や商用利用の可否について解説します。

目次

LangChainとは?

LangChainとは、大規模言語モデル(LLM)を活用したアプリケーションを開発するためのフレームワークです

LLMを外部のツールやデータベース、APIと組み合わせることで、より高度なアプリケーションやサービスの開発が可能となります。

LLMを他のシステムとスムーズに連携させられ、他システムからの情報を容易に取り込めるため、LLMの活用範囲が大きく広がります。

LangChainの導入により、LLMをより効率的に活用できるようになります。

まずはLangChainの特徴とできることをご紹介します。

LangChainの特徴

LangChainでは、さまざまな外部リソースとの連携が可能です。

通常ChatGPTなどのLLMと活用したアプリケーションは、単体ではLLMが学習したデータに基づいて回答を生成します。

しかし、LangChainではデータベースやWeb API、他のツールと連携することで、外部のデータベースに基づいた回答や、複数のツールの使い分けができます。

LangChainでできること

LangChainでは、GPT、Gemini、Llama、Claudeなど、さまざまなLLMを使い分けることができます。

また、基本的にLLMサービスはそのサービス上でしか利用できませんが、LangChainを使うことで自社内のインフラ環境でアプリケーションを実行することが可能となります。

さらに、LangChainは拡張性が高く、カスタム機能を取り入れることもできます。

LangChainは既存のLLMアプリケーションの制限を解消し、より効率的な利用を実現します。

LangChainの機能

続いて、LangChainの主な機能をご紹介します。

Model I/O

Model I/Oとは、LLMに対する入力(Input)と出力(Output)を効率的に管理するための機能です。

LangChainはテキスト入力に対してテキスト出力を返すLLMsと、チャット形式の入力に対して応答メッセージを返すChat modelsという2種類のモデルに対応しています。

これらのモデルは入出力形式が異なるため、モデルを切り替えたり、組み合わせたりする際に、Model I/Oが必要となります。

モデルへ入力するプロンプトは、Prompt Templatesという機能によってユーザーからの入力から動的に生成されます。

また、Output Parsersという機能を使うことで、出力をより適切な形式に変換できます。

特に、構造化データを生成する際に役立ちます。

Retrieval

Retrievalは、PDFやCSVなどの外部データを活用してLLMの応答を強化するための機能です。

LangChainでは後ほど紹介するRAGという手法を用いて、外部データを検索し、その情報をLLMのプロンプトに組み込むことで、より正確で最新の応答を生成します。

これにより、モデルの学習には使われていないユーザー固有のデータを利用して回答を生成することが可能となります。

ローカルでシステムを構築できるため、機密情報を含んだデータを活用したいときに最適です。

Chains

Chainsとは、LLMへの入力、ツールの使用、データの前処理など、複数の処理ステップを順序立てて組み合わせる機能です。

これらの処理を「チェーン」として構築し、再利用可能なコンポーネントとして管理することで、複雑なタスクを段階的に処理するアプリケーションの構築が容易になります。

Chainsを活用することで複数のプロンプト入力が可能となり、まず中間的な回答を生成し、それを基に最終的な回答を出力するCoTプロンプティングという手法が利用できます。

Memory

Memoryは、LLMを活用したアプリケーションにおいて、過去の対話履歴や状態を保持し、文脈を持った応答を生成するための機能です。

OpenAIなどのAPIを使っている場合、クエリが終了すると文脈や状態がリセットされてしまいます。

そこで、LangChainではMemory機能によって過去のやりとりに関する情報を保存することで、LLMが過去のコンテキストを考慮した応答を生成できるようになります。

Agents

Agentsは、LLMを推論エンジンとして使い、どのアクションを取るべきか、そしてそれらのアクションの入力はどうあるべきかを決定する機能です。

複数の異なるツールを用いて、次にとるべきアクションをLLMが自律的に決定していきます。

Agents機能については、後ほど詳しく説明します。

Callbacks

Callbacksは、LLMアプリケーションのさまざまな段階において、ログの記録、モニタリング、ストリーミングなどを効率的に実行できる機能です。

モデルへの入出力の記録やエラー監視、進行状況の可視化などが可能です。

開発中のデバックや、運用時のモニタリングや障害対応に役立ちます。

LangChain Agentsとは?機能の紹介

LangChain Agentsは、LLMがどのようなアクションを取るかを自律的に考え、ツールを選び、何度も推論と行動を繰り返して問題解決をする機能です。

LangChain AgentsにはTools、Agents、Toolkits、Agent Executorの4つの機能があります。

Tools

Toolsは、Agentが外部リソースとやり取りするための機能であり、Agentが特定のタスクを実行するために使用する具体的な機能やインターフェースを指します。

Web検索、計算、データベースへの問い合わせ、外部APIの呼び出し、ファイルの読み書きなどといった、LLMだけでは直接実行できない操作を可能にします。

Agents

Agentsは、ユーザーからの入力に基づいてツールを使い分け、自動的にタスクに取り組む機能です。

利用可能なツールのリスト、ユーザーの入力、検索結果、そして過去の対話履歴を考慮してLLMが次に実行すべきアクションを決定します。

ツールをどのように使うかを考える「頭脳」のような役割を持っています。

Toolkits

Toolkitsは、特定の目的やユースケースに関連する複数のツールをひとまとめにしたものです。

例えば、CSVファイルの操作、データベースとの対話、GitHubリポジトリの操作などのためのツール群があります。

Toolkitsを使うことで、特定のタスクに必要なツール群を一括でAgentに提供できるため、個々のツールを別々に設定する手間を省くことが可能です。

Agent Executor

Agent Executorは、Agentとツールを実際に組み合わせて実行するための機能です。

Agentの決定に従ってツールを呼び出し、その結果をAgentにフィードバックし、最終的な答えが得られるまでこのプロセスを繰り返します。

Agentの指示に従って、実際にツールを使わせてタスクを解く実行エンジンの役割を担っています。

LangChainの使い方

ここでは、OpenAIのAPIキーを用いたLangChainの使い方を解説します。

LangChainはPython、JavaScript、TypeScriptなどのプログラミング言語で利用できますが、この記事ではPythonを使ったやり方を説明します。

Python版ではLangChainの全機能を利用できるため、他の言語よりも高度な操作ができます。

STEP
OpenAIのAPIキーを発行

OpenAIのAPIキーを持っていない場合は、発行する必要があります。

まずはOpenAI Platformにアクセスします。

OpenAIのアカウントを持っている場合は画面中央または右上の「Log in」持っていない場合は「Sign up」を選択します。

ログインできたら、「Create new secret key」をクリックします。

APIキーに付ける名前を決め、権限を設定して発行します。

「Create secret key」をクリックすると、APIキーが発行できます。

発行したキーはコピーして、安全な場所に保管しておくようにしましょう。

APIキーは他の人に知られないよう厳重に取り扱うようにしてください。

STEP
必要なライブラリのインストール

LangChainはライブラリとして提供されています。

そのため、以下のコマンドを実行してLangChainのライブラリをインストールしましょう。

pip install langchain

また、今回はOpenAIと連携して使用するため、OpenAIのライブラリと連携用のライブラリもインストールします。

pip install openai langchain-openai

これで必要なライブラリのインストールは完了です。

STEP
APIキーの設定

続いてOpenAIのAPIキーを設定します。

APIキーはソースコードでも設定できますが、セキュリティリスクを避けるために以下のコマンドで環境変数として設定することをおすすめします。

export OPENAI_API_KEY="Your_API_key" # MacOS, Linux
set OPENAI_API_KEY="Your_API_key"    # Windows

これでLangChainを使ってOpenAIのモデルを呼び出す準備ができました。

STEP
プログラムの実行

LangChainを使ったプログラムを実装し、実行します。

今回は以下のようなコードを実行しました。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="o4-mini")
response = llm.invoke("LangChainについて教えてください")

print(response.content)

実行結果は以下の通りです。

LangChainを使い、OpenAIのモデルを動かせていることが分かります。

LangChainを使ったRAGの実装

LangChainはRAG開発をする上で強力なツールとなっています。

ここでは、LangChainを使ったRAGの実装について解説します。

RAGとは?

そもそもRAGとはRetrieval Augmented Generationの略であり、LLMの応答生成能力を向上させる技術です。

ユーザーの質問対して関連する情報を外部の知識データベースや文書から検索(Retrieval)し、検索で得られた情報と元の質問を組み合わせて、LLMがより正確で文脈に沿った回答を生成(Generation)します。

これにより、LLM単体では回答が難しい最新情報や専門知識に関する質問にも対応でき、ハルシネーションを抑制する効果もあります

主に質問応答システム社内用ナレッジシステムに利用されています。

LangChainを使ったRAGのやり方

以下の手順でLangChainを使ってRAGを実装できます。

STEP
必要なライブラリのインストール

LangChainを使うためのライブラリをインストールします。

先ほどと同様のライブラリをインストールしましょう。

pip install langchain openai langchain-openai

また、今回実装するコードではfaiss-cpulangchain-communityも必要になるので、以下のコマンドを実行してください。

pip install faiss-cpu
pip install -U langchain-community
STEP
ドキュメントをベクトル化して保存

LLMに与えるドキュメント(知識)を読み込み、ベクトル化して保存します。

from langchain_openai import OpenAIEmbeddings
from langchain_openai import ChatOpenAI
from langchain_community.vectorstores import FAISS

# テキストを読み込む
loader = TextLoader("test.txt", encoding="utf-8")
documents = loader.load()

# テキストをベクトル化
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(documents, embeddings)

今回はLLMに与える情報として、以下の文章をtest.txtに保存しました。

田中さんの期末テストの点数は、国語が85点、数学が90点、英語が80点、理科が95点、社会が85点である。
STEP
質問に対する回答生成

以下のコードによって、ドキュメントから関連情報を探してからユーザーの質問に回答します。

from langchain_community.document_loaders import TextLoader
from langchain.chains import RetrievalQA

# LLMを設定
llm = ChatOpenAI(model="gpt-4")

# RAGチェーンを構築
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=db.as_retriever()
)

# 質問
query = "田中さんの期末テストにおける英語の点数は?"
result = qa_chain.run(query)
print(result)

ステップ2のコードと合わせて実行すると、以下のような出力が得られました。

本来LLMの学習にないはずの、田中さんのテスト結果を出力していることが分かります。

今回はテキストファイルを読み込みましたが、PDFファイルやCSVファイルなどを情報として与えることもできます。

LangChainは商用利用できる?

LangChainはオープンソースソフトウェアであり、MITライセンスのもとで公開されています。

そのため、LangChainフレームワーク自体を商用目的のアプリケーションやサービスに組み込んで利用することが可能です。

また、ソースコードを自由に変更、改変することもできます。

ただし、LangChainのソフトウェア、またはその大部分を利用・再配布する際には、元の著作権表示とMITライセンスの全文を含める必要があります。

この点さえ注意すれば、LangChainは自由に商用利用可能です。

LangChainの日本語対応状況

LangChainは日本語に対応しており、基本的な機能は日本語で利用できます。

RAGの使用例でも示した通り、日本語のドキュメントを読み込んで回答を生成することも可能です。

実際には利用するLLMの日本語性能に依存しますが、GPTやGemini、Claudeなどの有名なモデルであれば問題なく使用できるでしょう。

そのため、LangChainは日本語のチャットボットの開発などに利用できます。

ただし、公式のドキュメントは基本的に英語で書かれているので、翻訳するか情報収集をしながら使うことになるでしょう。

まとめ

LangChainはLLMをより効率的に活用するためのフレームワークであり、商用利用も可能です。

外部リソースとの連携ができるためRAGへの応用も可能であり、チャットボットや社内ナレッジシステムとして活用できます。

LLMを活用したサービスを開発する上で、LangChainは有力な選択肢となるでしょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次