LangChain

【Python】LangChainで大規模言語モデル(LLM)を活用する

【Python】LangChainで大規模言語モデル(LLM) を活用する

Pythonで大規模言語モデルを活用する際に使用できるLangChainの概要について解説します。

LangChainとは

LangChainとは、大規模言語モデル(LLM: Large Language Model)を活用するためのオープンソースPythonライブラリです。公式サイトは、こちらを参照してください。

LangChainは、LLMを用いた複雑なタスクを実行するアプリケーションの構築を目的とし、ツールの統合、タスク指向の設計、拡張性を特徴としています。また、オープンソースプロジェクトとして、開発者や研究者がコミュニティを通じて改善を続けています。

この記事では、LangChainの概要と基本的な使い方について紹介します。

LangChainにおける重要な構成要素

LangChainの理解には、以下の構成要素が重要です。

構成要素概要
Model(モデル)LangChainの中核で、自然言語処理や機械学習タスクを実行する言語モデルです。
Prompt(プロンプト)モデルへの入力で、実行するべきタスクを指示します。
Memory(メモリ)過去の対話やデータを保存し、文脈を理解するためのコンポーネントです。
Index(インデックス)大量の情報を効率的に検索するためのデータ構造です。
Chain(チェイン)異なる機能やサービスを組み合わせてタスクを連結します。
Agent(エージェント)構成要素を統合し、特定のタスクを実行します。

LangChainのライブラリ構成

LangChainは、バージョン0.1.0以降、ライブラリの構成が変更され、安定性が向上しました。以前は、単一の大規模パッケージで管理されており、扱いにくさと頻繁な更新が課題でした。

バージョン0.1.0以降では、以下の表に示すように3つのパッケージに分割されています。

パッケージ概要
langchain-core基本機能とコアライブラリを提供します。
langchain高度なチェーン、エージェント、検索機能(リトリーバル)などを提供します。
langchain-community外部サービスとの統合や追加のユーティリティを提供します。

なお、外部サービスは独自のパッケージとして提供される場合もあり、例えば、OpenAIのlangchain-openaiなどがあります。パッケージ分割により、開発・保守が容易になり、ユーザも柔軟に選択ができます。

ただし、アップデート時にはパッケージ間の依存関係と互換性に注意してください。詳細は、各種公式ドキュメントを参照してください。

LangChainの基本的な使い方

ここでは、LangChainの基本的な使い方を紹介します。例として、OpenAIのモデルに対して基本的な問い合わせを行う例を見ていきます。

本記事で使用するバージョンは以下の通りです。バージョンが異なる場合は動作しないことがあります。

  • Python: 3.11.5
  • langchain: 0.2.11
  • langchain-core: 0.2.26
  • langchain-community: 0.2.10
  • langchain-openai: 0.1.16

LangChainのインストール

LangChainは、pipでインストールできます。以下のコマンドを実行してください。

pip install langchain langchain-community langchain-openai

langchainをインストールするとlangchain-coreも同時にインストールされますが、langchain-communitylangchain-openaiは個別に指定する必要があります。

もし、本記事のバージョンで動作させたい場合は、次のようにバージョンを指定してください。

pip install langchain==0.2.11 langchain-core==0.2.26 langchain-community==0.2.10 langchain-openai==0.1.16

OpenAI APIの設定

OpenAIのAPIを使用するには、APIキーが必要です。キーの取得については「OpenAI APIの使い方の基本」の記事の中で紹介しているため参考にしてください。

APIキーの管理はコンフィグファイルや環境変数で管理できます。利用場面に応じて選択してください。

コンフィグファイルでの管理

コンフィグファイルの管理は、configparserモジュールを使用します。config.iniに以下のようにAPIキーを指定してください。

[OPENAI]
key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

環境変数への設定

APIキーは環境変数に設定することも可能です。例えばWindowsであれば、以下のように環境変数にAPIキーを指定します。

OPENAI_API_KEYの環境変数

基本的な使い方

LangChainでOpenAIのモデルに対して問い合わせを行う例を紹介します。

import configparser

from langchain_openai import ChatOpenAI

# コンフィグファイルからキーを取得する
config = configparser.ConfigParser()
config.read("config.ini")

# モデルを生成する
llm = ChatOpenAI(
    openai_api_key=config["OPENAI"]["key"],
    model="gpt-3.5-turbo",
)

# 問い合わせを実行する
response = llm.invoke("Pythonの歴史について教えてください。")

# 結果を出力する
print("========== レスポンス ==========")
print("=== 内容")
print(response.content)
print("=== メタデータ")
print(response.response_metadata)
【実行結果例】
========== レスポンス ==========
=== 内容
Pythonは、1980年代末にオランダのプログラマであるGuido van Rossumによって開発されました。彼は、コードの読みやすさやシンプルさを重視し、プログラミングをより楽にするためにPythonを作成しました。

Pythonは、1991年に最初の公開バージョンがリリースされ、徐々に人気を集めていきました。その後、Pythonはオープンソースのプログラミング言語として広く普及し、コミュニティによってさまざまな改良や拡張が行われてきました。

現在、Pythonは非常に人気のあるプログラミング言語であり、Web開発、データ解析、機械学習などさまざまな分野で使用されています。Pythonのシンプルな構文や豊富なライブラリ、コミュニティのサポートが、その人気を支えています。Pythonは、柔軟性と多様性を備えた言語として、今後もさらなる発展が期待されています。
=== メタデータ
{'token_usage': {'completion_tokens': 334, 'prompt_tokens': 23, 'total_tokens': 357}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}

上記例では、langchain_openaiChatOpenAIクラスを用いてChatGPTへ問い合わせを行っています。モデルとしては、"gpt-3.5-turbo"を指定していますが、"gpt-4o"等の最新のモデルを指定することも可能です。

なお、環境変数に設定した場合は、以下のようにopenai_api_keyを省略しても動作します。

llm = ChatOpenAI(model="gpt-3.5-turbo")

モデルの実行には、invokeメソッドを使用します。回答結果はcontentで取得可能です。

また、response_metadataから使用したモデルやトークン数といったメタデータを取得可能です。

キャッシュの利用

OpenAIのAPIの使用は有料となっています。コスト節約とレスポンス向上のためキャッシュを使用することも可能です。以下はキャッシュを設定した例になります。

import configparser

from langchain.globals import set_llm_cache
from langchain_community.cache import InMemoryCache
from langchain_openai import ChatOpenAI

# キャッシュの設定 (InMemoryCache)
set_llm_cache(InMemoryCache())

# コンフィグファイルからキーを取得する
config = configparser.ConfigParser()
config.read("config.ini")

# モデルを生成する
llm = ChatOpenAI(
    openai_api_key=config["OPENAI"]["key"],
    model="gpt-3.5-turbo",
)

# 問い合わせを実行する
response = llm.invoke("Pythonの概要について教えてください。")

# 結果を出力する
print("===== レスポンス (1回目)")
print(response.content)
print("=====")

# 2回目の問い合わせを実行する
response = llm.invoke("Pythonの概要について教えてください。")

# 結果を出力する
print("===== レスポンス (2回目)")
print(response.content)
print("=====")
【実行結果】
===== レスポンス (1回目)
Pythonは汎用プログラミング言語であり、1991年にGuido van Rossumによって作られました。Pythonはシンプルで読みやすい文法を持ち、多くの標準ライブラリを提供しています。また、オブジェクト指向、手続き型、関数型などのプログラミングスタイルに対応しており、幅広い用途に利用されています。

Pythonは動的型付け言語であり、コードの記述が簡潔で、初心者にも学習しやすい言語として広く利用されています。また、データ分析、機械学習、Web開発などの分野で高い人気を持っており、多くの開発者に愛用されています。Pythonはクロスプラットフォームであり、Windows、Mac、Linuxなどさまざまな環境で利用できます。
=====
===== レスポンス (2回目)
Pythonは汎用プログラミング言語であり、1991年にGuido van Rossumによって作られました。Pythonはシンプルで読みやすい文法を持ち、多くの標準ライブラリを提供しています。また、オブジェクト指向、手続き型、関数型などのプログラミングスタイルに対応しており、幅広い用途に利用されています。

Pythonは動的型付け言語であり、コードの記述が簡潔で、初心者にも学習しやすい言語として広く利用されています。また、データ分析、機械学習、Web開発などの分野で高い人気を持っており、多くの開発者に愛用されています。Pythonはクロスプラットフォームであり、Windows、Mac、Linuxなどさまざまな環境で利用できます。
=====

上記プログラムは、先に紹介したプログラムと同様です。キャッシュ機能はInMemoryCacheをインポートし、set_llm_cacheで設定します。

実行結果を見ると、1回目と2回目のレスポンスは全く同じであることが分かります。これはキャッシュからのデータ取得がされているためです。

LangChainの様々な機能

LangChainには他にも様々な機能があります。以下ページの内容も参考にしてください。

まとめ

Pythonで大規模言語モデルを活用する際に使用できるLangChainの概要について解説しました。

LangChainは、Model、Prompt、Memory、Index、Chain、Agentといった構成要素で構成されており、LLMを利用した複雑なタスクの開発を支援します。

また、OpenAIモデルを使った基本的な利用方法についても説明しました。LangChainには他にも多くの便利な機能があります。これらの機能を活用することで、より高度なアプリケーションの開発が可能です。ぜひ、LangChainを活用してみてください。