【Python】LangChain Chainsとは?|ChatGPTを組み合わせた複数言語処理モデル作成

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • LangChain Chains」の概要・Pythonでの実装方法が知りたい
  • ChatGPTとChainsを組み合わせたチェーンを構築したい
目次

LangChainとは?

【LangChain公式】https://python.langchain.com/en/latest/index.html

LangChainとは、ChatGPTを代表とするような大規模言語モデル(LLM)の機能を拡張し、サービスとして展開する際に役立つライブラリです。

LangChainの主要機能

LangChainの主要な機能として以下があります。

主要機能概要
Models様々な大規模言語モデルを同じインターフェース上で取り扱えるようにする機能
Promptsプロンプトの管理、最適化、シリアル化ができる機能
Memory言語モデルを用いてユーザーと対話した履歴を記憶する機能
Data connection言語モデルに外部データを投入し、外部データに基づく回答を生成する機能
Chainsチェーンを複数繋げて、一連の処理を連続実行する機能
Agentsユーザーからの要望をどんな手段・順序で応えるか決定・実行する機能

LangChainの各種機能の詳細を知りたい方は、こちらの記事をご覧下さい。

あわせて読みたい
LangChainとは?|概要・主要機能を徹底解説 LangChainの概要および主要機能であるModels・Prompts・Data Connection・Agents・Memory・Chainsについて解説します。

【参考】LangChainを用いたプログラミング実装におすすめの学習教材

LangChainライブラリを用いてプログラミングし、アプリケーションを実装したい方向けに、おすすめの学習教材をご紹介します。

LangChain|Chains(チェーン)

LangChain Chainsとは、文字通りチェーンを繋げて、一連の処理を連続して実行できるようにする機能です。チェーンの最小単位は、プロンプトと言語モデルをもとに構成されます。

1つのプロンプトに対して1つの回答を得るようなシンプルなタスクであれば、Chainsの機能は不要です。一方、プロンプトが複雑化したタスクは、この機能が本領を発揮します。

例えば上図のように、正確な最終出力を得るために、段階的に中間結果を出力する場合に有効です。このように、中間的な推論ステップを用いて複雑な推論能力向上させ、最終的に適切な回答を得るための手法をChain-of-Thought(COT)プロンプティングと呼びます。

Chainsの種類一覧

Langchain Chainsの機能を細分化すると、以下3つに分けられます。

  • LLM Chain
  • Sequential Chain
  • Custom Chain

LLM Chain

LLM Chainとは、プロンプトとLLM からの構成される最小単位のチェーンです。Simple Chainとも呼ばれます。

Sequential Chain

Sequential Chainとは、複数のチェーンを順番に実行するためのチェーンです。

Custom Chain

Custom Chainとは、特定のケースに対応すべく、自由に繋いだカスタマイズドなチェーンです。

Custom Chainを用いると、各Chainの入出力を細かく定義でき、複雑な質問への対応力が向上します。

【LangChain事前準備】Python環境構築・OpenAIのChatGPT API取得

PythonとLangChainによるLangChain Chains機能構築に際して必要な事前準備を行います。

Pythonライブラリのインストール

プログラム実装に際して、以下に示すライブラリを事前にインストールしておきましょう。

OpenAI

ChatGPTを代表とするOpenAI社のAPI利用に際して必要となるライブラリです。

pip install openai

LangChain

LangChainの利用に際して必要となるライブラリです。

pip install langchain

【ChatGPT】OpenAI社のAPI発行

LangChain機能構築に際して、OpenAI社が提供するGPTモデルをAPI経由で呼び出す必要があります。

OpenAI社の公式サイトから「API シークレットキー」を事前に発行しておきましょう。なお、シークレットキーの発行方法はこちらの記事で詳しく解説しています。

あわせて読みたい
【Python×ChatGPT】チャットボット作成入門|OpenAI APIの利用申請手順も解説 「ChatGPT APIの利用手順」と「PythonでChatGPT APIを呼び出し、チャットボットを作成する方法」についてそれぞれ解説します。

【Python×LangChain】LLM Chainを用いた基本操作

プロンプトとLLM からの構成される最小単位のチェーンである「LLM ChainSimple Chain)」の実装をもとに、チェーンの基本操作を解説します。

  • Pythonライブラリのインストール
  • Prompt Templateの作成
  • LLMの作成
  • Memoryの作成
  • LLM Chainの作成
  • LLM Chainの動作確認

Pythonライブラリのインストール

Pythonプログラムの先頭に、OpenAI社のサイトから取得したシークレットキーを配置します。

import openai
import os

# APIシークレットキーを記述
SECRET_KEY  = "............."

# API認証情報設定
os.environ["OPENAI_API_KEY"] = SECRET_KEY

Prompt Templateの作成

LLMに渡すPrompt Templateを指定します。以下のコードを実行しましょう。

コード

from langchain.prompts import PromptTemplate

# ========================================================================
# Prompt Template作成
# ========================================================================

# テンプレート
template = "{input_text}"

# プロンプトテンプレート
Prompt_Template = PromptTemplate(
                    input_variables = ["input_text"],  # 入力変数
                    template        = template,        # テンプレート
                )

【参考】LangChain Prompts

LangChain Promptsの概要・使い方について詳しく知りたい方はこちらの記事をご覧ください。

あわせて読みたい
【Python】LangChain Promptsとは|Templates・Example Selectors・Output Parsers LangChain Promptsの概要および主要機能である「Prompt Template」「Example Selectors」「Output Parsers」のPython実装方法について詳しく解説します。

LLMの作成

モデルの主体となるLLMを実装します。以下のコードを実行しましょう。

コード

from langchain.llms import OpenAI

# ========================================================================
# LLMの作成
# ========================================================================

# LLM
LLM = OpenAI(
            model_name  = "text-davinci-003",  # OpenAI モデル名
            temperature = 0.5,                 # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
            )

【参考】LangChain Models

LangChain Modelsの概要・使い方について詳しく知りたい方はこちらの記事をご覧ください。

あわせて読みたい
【Python】LangChain Modelsとは?|LLM・チャットモデル・Embeddingsの実装方法 「LangChain Modelsの概要」と「LLM・チャットモデル・EmbeddingsのPython実装方法」について詳しく解説します。

Memoryの作成

言語モデル実装後、ユーザーとの質疑応答結果を記録したい場合、LangChain Memory機能が有効です。こちらも任意で実装します。

コード

from langchain.memory import ConversationBufferMemory

# ========================================================================
# Memoryの作成
# ========================================================================

Memory = ConversationBufferMemory()

【参考】LangChain Memory

LangChain Memoryの概要・使い方について詳しく知りたい方はこちらの記事をご覧ください。

あわせて読みたい
【Python】LangChain Memoryとは|ChatGPTが過去の会話履歴に基づき返答できる機能作成 PythonによるChatGPT利用に際して、「過去の会話履歴に基づき返答するチャットボット」を実現する機能である「LangChain Memory」の概要・実装方法を解説します。

LLM Chainの作成

前述で作成した「Prompt Template」「LLM」「Memory」を指定したLLM Chainを構築します。以下のコードを実行しましょう。

コード

from langchain.chains import LLMChain

# ========================================================================
# LLM Chain作成
# ========================================================================

# Chain作成
chain = LLMChain(llm     = LLM,              # 大規模言語モデル(LLM)
                 prompt  = Prompt_Template,  # プロンプトテンプレート
                 memory  = Memory,           # メモリ
                 verbose = False,            # プロンプト途中結果の表示有無
                )

引数情報

スクロールできます
引数名概要
llm言語モデルを指定(LLM・チャットモデル・Embeddingsモデルが指定可能)
prompt言語モデルに渡すプロンプトテンプレートを指定
memoryユーザーとのやり取りを記録するメモリを指定(デフォルト:None)
verboseChain実行時にプロンプトの中間結果を表示するか否かを指定

LLM Chainの動作確認

前述まででLLM Chainの実装が完了しました。最後にLLM Chainを実際に動かしてみましょう。実行には2通りの方法があります。

実行方法(1)

Chainの実行はchain.run({"key":"value"})形式で記述すると実行できます。また、複数の回答を同時に得たい場合は、chain.run({"key":"value1"},{"key":"value"2},・・・)という書き方も可能です。

# ========================================================================
# 結果出力
# ========================================================================

# Chain実行
results = chain.run({'input_text': "Pythonとは何か?"})

実行方法(2)

もう一つの方法はchain("入力文章")を実行する方法です。こちらの実行方法は、出力形式を指定できます。

# ========================================================================
# 結果出力
# ========================================================================

# Chain実行
results = chain(
                "Pythonとは何か?",            # 入力変数
                return_only_outputs = True,  # 出力形式の指定
               )

# 出力
print(results)

出力イメージ

# 出力
print(results)

# 出力イメージ
# Pythonはオープンソースのプログラミング言語です。
# 動的な型付け、非常に読みやすい文法、そして大規模なソフトウェア開発への優れたサポートを提供します。
# PythonはWeb開発、データ分析、機械学習、自動化、その他のプログラミングタスクを容易に行うことができるように設計されています。

LLM Chainを用いたモデル実行コードまとめ

ここまで解説したPythonコードを以下にまとめます。

import openai
import os
from langchain.prompts import PromptTemplate
from langchain.chains  import LLMChain
from langchain.memory  import ConversationBufferMemory
from langchain.llms    import OpenAI

# ========================================================================
# API認証情報
# ========================================================================

# APIシークレットキーを記述
SECRET_KEY  = "............."

# API認証情報設定
os.environ["OPENAI_API_KEY"] = SECRET_KEY

# ========================================================================
# Prompt Template作成
# ========================================================================

# テンプレート
template = "{input_text}"

# プロンプトテンプレート
Prompt_Template = PromptTemplate(
                    input_variables = ["input_text"],  # 入力変数
                    template        = template,        # テンプレート
                )

# ========================================================================
# LLMの作成
# ========================================================================

# LLM
LLM = OpenAI(
            model_name  = "text-davinci-003",  # OpenAI モデル名
            temperature = 0.5,                 # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
            )

# ========================================================================
# Memoryの作成
# ========================================================================

Memory = ConversationBufferMemory()

# ========================================================================
# LLM Chain作成
# ========================================================================

# Chain作成
chain = LLMChain(llm     = LLM,              # 大規模言語モデル(LLM)
                 prompt  = Prompt_Template,  # プロンプトテンプレート
                 memory  = Memory,           # メモリ
                 verbose = False,            # プロンプト途中結果の表示有無
                )

# ========================================================================
# 結果出力
# ========================================================================

# Chain実行
results = chain.run({'input_text': "Pythonとは何か?"})

# 出力
print(results)

【Python×LangChain】チャットモデルを用いてLLM Chainを実装

前述で紹介したLLM Chainの基本操作コードでは、言語モデルにLLMを指定しました。一方、チャットモデルを指定し、LLM Chainの実装も可能です。

前述の実装方法と記述手順は大きく変わらないため、コードをまとめて掲載します。

import openai
import os
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
)

from langchain.prompts import PromptTemplate
from langchain.chains  import LLMChain
from langchain.memory  import ConversationBufferMemory
from langchain.llms    import OpenAI

# ========================================================================
# API認証情報
# ========================================================================

# APIシークレットキーを記述
SECRET_KEY  = "............."

# API認証情報設定
os.environ["OPENAI_API_KEY"] = SECRET_KEY

# ========================================================================
# Prompt Template作成
# ========================================================================

# テンプレート
template = "{input_text}"

# ユーザーメッセージプロンプト
human_message_prompt = HumanMessagePromptTemplate(
                        prompt = PromptTemplate(
                            template        = template,        # テンプレート
                            input_variables = ["input_text"],  # 入力変数
                        ))


# チャットプロンプトテンプレート
Prompt_Template = ChatPromptTemplate.from_messages([human_message_prompt])

# ========================================================================
# チャットモデルの作成
# ========================================================================

Chat_Model = ChatOpenAI(
                        model_name   = "gpt-3.5-turbo",  # OpenAI モデル名
                        temperature = 0.9,               # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
                        )

# ========================================================================
# Memoryの作成
# ========================================================================

Memory = ConversationBufferMemory()

# ========================================================================
# LLM Chain作成
# ========================================================================

# Chain作成
chain = LLMChain(llm     = Chat_Model,       # 言語モデル
                 prompt  = Prompt_Template,  # プロンプトテンプレート
                 memory  = Memory,           # メモリ
                 verbose = False,            # プロンプト途中結果の表示有無
                )

# ========================================================================
# 結果出力
# ========================================================================

# Chain実行
results = chain.run({'input_text': "Pythonとは何か?"})

# 出力
print(results)

【Python×LangChain】Sequential Chainsの実装方法

複数のチェーンを順番に実行するための「Sequential Chain」の実装方法について解説します。

解説内容

「入力されたテキストを100文字以内に要約するChain_1」と「要約された文章を受け取り、英語翻訳するChain_2」を順次実行するSequential Chainの作成方法について解説します。

手順

  • Pythonライブラリのインストール
  • LLM Chainの複数作成
  • Sequential Chainを用いたLLM Chainの結合
  • Sequential Chainの動作確認

Pythonライブラリのインストール

Pythonプログラムの先頭に、OpenAI社のサイトから取得したシークレットキーを配置します。

import openai
import os

# APIシークレットキーを記述
SECRET_KEY  = "............."

# API認証情報設定
os.environ["OPENAI_API_KEY"] = SECRET_KEY

LLM Chainの複数作成

後述するSequential Chainに渡すLLM Chainを作成します。

from langchain.prompts import PromptTemplate
from langchain.chains  import LLMChain
from langchain.llms    import OpenAI

# ========================================================================
# LLM Chain (1) - ユーザー入力文章を100文字以内に要約するチェーン
# ========================================================================

# Prompt Templateの作成(1)
Prompt_Template_1 = PromptTemplate(
                        template        = "{input_text}の内容を100文字以内に要約してください。",
                        input_variables = ["input_text"],                                                
                                  )

# LLMの作成(1)
LLM_1   =  OpenAI()

# LLM Chain(1)
Chain_1 = LLMChain(
                    llm     = LLM_1,              # 言語モデル
                    prompt  = Prompt_Template_1,  # プロンプトテンプレート
                    memory  = None,               # メモリー
                    verbose = True,               # プロンプト途中結果の表示有無
                   )

# ========================================================================
# LLM Chain (2) - 要約した文章を受け取り、英語翻訳するチェーン
# ========================================================================

# Prompt Templateの作成(2)
Prompt_Template_2 = PromptTemplate(
                        template        = "{summary}を英語に翻訳してください。",
                        input_variables = ["summary"],
                                  )

# LLMの作成(2)
LLM_2   =  OpenAI()

# LLM Chain(2)
Chain_2 = LLMChain(
                    llm     = LLM_2,              # 言語モデル
                    prompt  = Prompt_Template_2,  # プロンプトテンプレート
                    memory  = None,               # メモリー
                    verbose = True,               # プロンプト途中結果の表示有無
                  )

Sequential Chainを用いたLLM Chainの結合

前述で作成したChain_1およびChain_2を結合したSequentialChainを実装します。

コード

from langchain.chains  import SimpleSequentialChain

# ========================================================================
# SimpleSequentialChainを用いたLLM Chainの結合
# ========================================================================

# SimpleSequentialChain
chains = SimpleSequentialChain(chains  = [Chain_1, Chain_2],   # 結合するチェーンリスト
                               verbose = True,                 # プロンプト途中結果の表示有無
                              )

Sequential Chainの動作確認

最後に、作成したSequential Chainを実行します。

入力テキストに長文を渡し、出力結果を確認してみましょう。

コード

# ========================================================================
# SimpleSequentialChainの動作確認
# ========================================================================

# 入力テキスト
input_text = \
 """
 Pythonは、高水準のオブジェクト指向プログラミング言語です。
 Pythonは、簡単な構文と優れたライブラリ群により、多くの用途で広く使用されています。
 Pythonは、Webアプリケーション、データ分析、人工知能、機械学習、科学計算、ネットワーク自動化、IoT、ゲーム開発などに使用されています。
 Pythonはフリーでオープンソースであり、世界中の開発者コミュニティによって継続的に開発されています。
 また、Pythonは、多くのプラットフォームで動作するため、たとえばWindows、Mac、Linuxなど、ほぼすべてのオペレーティングシステムで実行できます。
 """

# 実行
results = chains.run(input_text)

出力イメージ

# 出力イメージ
# > Entering new SimpleSequentialChain chain...

# > Entering new LLMChain chain...
# Prompt after formatting:
#  Pythonは、高水準のオブジェクト指向プログラミング言語です。
#  Pythonは、簡単な構文と優れたライブラリ群により、多くの用途で広く使用されています。
#  Pythonは、Webアプリケーション、データ分析、人工知能、機械学習、科学計算、ネットワーク自動化、IoT、ゲーム開発などに使用されています。
#  Pythonはフリーでオープンソースであり、世界中の開発者コミュニティによって継続的に開発されています。
#  また、Pythonは、多くのプラットフォームで動作するため、たとえばWindows、Mac、Linuxなど、ほぼすべてのオペレーティングシステムで実行できます。
#  の内容を100文字以内に要約してください。

# > Finished chain.
# Pythonはオープンソースのオブジェクト指向プログラミング言語で、Webアプリケーション開発やデータ分析、人工知能などの多くの用途に使用されています。Windows, Mac, Linuxなどの多くのプラットフォームで動作するため、世界中の開発者コミュニティによって継続的に開発されています。

# > Entering new LLMChain chain...
# Prompt after formatting:
# Pythonはオープンソースのオブジェクト指向プログラミング言語で、Webアプリケーション開発やデータ分析、人工知能などの多くの用途に使用されています。Windows, Mac, Linuxなどの多くのプラットフォームで動作するため、世界中の開発者コミュニティによって継続的に開発されています。を英語に翻訳してください。

# > Finished chain.
# Python is an open source object-oriented programming language, used for many applications such as web application development, data analysis, and artificial intelligence, and runs on many platforms such as Windows, Mac, Linux, and is continuously developed by the global developer community.

# > Finished chain.

【参考】Python × LangChain Chains|機能拡張

LangChain Chainsを用いると、様々な機能拡張が可能です。最後に、LangChain Chainsを応用した参考記事をご紹介します。

SQLDatabaseChain

自然言語の問い合わせをもとに、SQLを発行し、データベースを参照・結果を出力するSQLDatabaseChainについて、概要・実装方法をご紹介します。

あわせて読みたい
【LangChain】自然言語からSQLデータベース参照|ChatGPT APIとPythonによる実装解説 「OpenAI APIとPythonを用いて、自然言語から直接SQLデータベースを参照する方法が知りたい」「LangChainのSQLDatabaseChain機能について知りたい」このような要望にお応えします。

【参考】PythonによるLLM実装|ChatGPT・LangChain

本記事では、PythonでLLMを構築し、様々なタスクをこなす機能の実装方法を多数解説しています。

Python × ChatGPT関連記事

【あわせて読みたい】

Python × LangChain関連記事

【あわせて読みたい】

自然言語処理の学習におすすめの書籍

あわせて読みたい
自然言語処理(NLP)学習におすすめ入門本・動画教材8選|Pythonによる機械学習・ディープラーニング向け... 「自然言語処理の概要とそれを実装するPythonプログラミング手法を学びたい」「機械学習・AIを組み合わせたモデル開発手法を知りたい」このような要望にお答えします。

自然言語処理の概要について詳しく学びたい方向けに、厳選したおすすめの学習教材を紹介しています。

最後に

この記事が気に入ったら
フォローしてね!

目次