こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- LangChain Modelsについて知りたい。
- LangChain Modelsの「LLM」「チャットモデル」「Embeddingモデル」のPython実装方法が知りたい。
LangChainとは?

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

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

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

LangChain Modelsとは、ChatGPTを代表するGPT-3.5など、様々なLLM、チャットモデル、Embeddingsモデルを同じインターフェース上で取り扱えるようにする機能です。
様々なモデルを1つのインターフェースで扱うことで、モデル同士の組み合わせや、カスタマイズが実現でき、応用の幅が広がります。
LangChain Modelsでは、次の種類のモデルが1つのインターフェース上で取り扱い可能です。
- 大規模言語モデル(LLM)
- チャットモデル
- Embeddingsモデル
大規模言語モデル(LLM)

大規模言語モデル(LLM)とは、Large Language Modelsの略であり、大量のテキストデータを用いてトレーニングされた自然言語処理モデルです。
代表的な自然言語処理タスク
LLMでは、次のようなタスクをこなすことができます。
- 質疑応答
- テキスト分類
- 予測変換
- 文章要約
- 機械翻訳
- スパムフィルタ
チャットモデル

チャットモデルとは、チャットメッセージに対して適切な返答は返すことに特化したモデルです。
チャットモデル内部では同じくLLMが活用されています。一方、LLMの入出力形式に関してはチャットモデルに特化する形式として構造化されているのが特徴です。
Embeddingsモデル

Embeddings(埋め込み表現)とは、単語や文章等の自然言語の構成要素をベクトルに変換する処理を指します。このような処理が可能なモデルを、Embeddingsモデルと呼びます。
Embeddingsについてさらに詳しく学びたい方はこちらの記事をご覧ください。

【LangChain事前準備】Python環境構築・OpenAIのChatGPT API取得
PythonとLangChainを用いて、LLM・チャットモデル・Embeddingモデルの実装方法を後述します。そのためにいくつか実施すべき事前準備があります。
Pythonライブラリのインストール
プログラム実装に際して、以下に示すライブラリが必要となります。ターミナル(MacOS)またはコマンドプロンプト(Windows)を通じて事前にインストールしておきましょう。
OpenAI
ChatGPTを代表とするOpenAI社のAPI利用に際して必要となるライブラリです。
pip install openai
LangChain
LangChainの利用に際して必要となるライブラリです。
pip install langchain
tiktoken
文章の分散表現を得るために必要となるライブラリです。Embeddingモデルで利用します。
pip install tiktoken
【ChatGPT】OpenAI社のAPI発行

LangChain機能構築に際して、OpenAI社が提供するGPTモデルをAPI経由で呼び出す必要があります。
OpenAI社の公式サイトから「API シークレットキー」を事前に発行しておきましょう。なお、シークレットキーの発行方法はこちらの記事で詳しく解説しています。

【Python】LangChain Models|LLMの実装方法
LangChain Modelsの主要機能である「LLM」の実装方法について解説します。
Pythonライブラリのインストール
Pythonプログラムの先頭にライブラリとAPI認証情報を記述します。
前述したOpenAI社のサイトから取得したシークレットキー
を入力しましょう。
import openai
import os
# APIシークレットキーを記述
SECRET_KEY = "............."
# API認証情報設定
os.environ["OPENAI_API_KEY"] = SECRET_KEY
大規模言語モデル(LLM)作成
LLMは、langchain.llms.OpenAI
メソッドを用いて次のように作成できます。
コード
from langchain.llms import OpenAI
# =============================================================================
# LLMモデル作成
# =============================================================================
LLM = OpenAI(
model_name = "text-davinci-003", # OpenAI社のモデル名
temperature = 0.5, # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
max_tokens = 256, # 生成する単語の最大単語数
top_p = 1, # 核サンプリング:値が高いほど正確・事実に基づく回答、低いほど多様な回答を生成
frequency_penalty = 0, # 単語の繰り返し頻度。[-2:2]の範囲で設定し値が大きいほど繰り返し回数低下
presence_penalty = 0, # 単語をもう一度使うかどうか。[-2:2]で設定し値が大きいほど再出現率が低下
n = 1, # いくつの返答を生成するか
best_of = 1, # 最善の返答をいくつ返すか
batch_size = 20, # バッチサイズ
max_retries = 6, # API呼出失敗時の最大リトライ回数
)
引数情報
上記で利用したlangchain.llms.OpenAI
の引数情報について言及します。
引数名 | 概要 |
---|---|
model_name | OpenAI社が提供するGPTモデル名。 |
temperature | 0から2の範囲の範囲で出力する単語のランダム性を設定。値が低けほど最も確率が高い回答が常に選択されるため、結果はより決定論的になる。値が大きいほど、ランダム性が増し、多様で創造的な出力を得る。事実に基づくQAモデル作成の場合、この値を低くし、詩や創造的なタスクの場合、高い値の設定を推奨。 |
max_tokens | 生成する文章の最大単語数。 |
top_p | 核サンプリングと呼ばれるサンプリング手法。モデルの応答生成際して決定性を制御できる。値が低いほど正確で事実に基づいた回答が得やすく、値が高いほど多様な回答を得やすい。 |
frequency_penalty | 同じ単語の繰り返し頻度。[-2:2]の範囲で値を設定。値が大きいほど繰り返しにおけるペナルティが増加するため、単語の繰り返し回数は低下。一方、値が小さいほどペナルティも小さくなるため、同じ単語を繰り返し利用する回数が増加傾向にある。 |
presence_penalty | 単語をもう一度使うかどうか。[-2:2]の範囲で値を設定。値が大きいほど、2回目以降の単語の再出現率が低下。一方、値が小さいほどペナルティも小さくなるため、単語の再出現率は増加傾向にある。 |
n | 最大いくつの返答を生成するか。 |
best_of | 生成した返答数のうち、関連度の高い最善の返答をいくつまで出力するか。 |
batch_size | バッチサイズ |
max_retries | API呼出失敗時の最大リトライ回数 |
LLM実行|質疑応答
前述のLLMを実際に利用しましょう。LLMを用いた質疑応答は入力テキストを渡すと実現できます。
コード
# =============================================================================
# LLMモデル実行
# =============================================================================
# 入力文章
text = "日本の首都はどこ?"
# LLM実行
response = LLM(text)
出力イメージ
# 出力
print(response)
# 出力イメージ
# 日本の首都は東京都です。
LLM実行|文章生成
LLMを用いた文章生成はLLM.generate()
メソッドを用いて次のように記述します。
コード
# =============================================================================
# LLMモデル実行
# =============================================================================
# 入力文章|入力文章をリストで指定も可能
texts = ["面白いギャグを言って", "面白い詩を書いて"] * 10
# 文章生成
response = LLM.generate(texts)
出力イメージ
# 出力
print(response)
# 出力イメージ
# generations=[[Generation(text='ください\n\n「今日は雨だね。でも、明日はお天気になってくれるといいな。なんて、「雨が降っても、明日は晴れるという希望の光」だよ」',
# generation_info={'finish_reason': 'stop', 'logprobs': None})],
# [Generation(text='ください\n\n夜空に浮かぶ月は\n晴れた日の夢を照らす\n悲しみを抑えて笑える\n明日への期待が芽生える\n\n深い森を抜けて\n風が吹き抜ける\n自由の声が響いて\n私の胸を熱くさせる\n\n夜明けを待つ日々は\n夢を叶える旅路\n自分らしく生きる勇気を\nその手に掴み取ろう',
# generation_info={'finish_reason': 'stop', 'logprobs': None})],
# [Generation(text='ください\n\n「あなたの肩には何がありますか?」「肩こりです」',
# generation_info={'finish_reason': 'stop', 'logprobs': None})],
# [Generation(text='ください\n\n夜空を見上げていると、\n時間が止まり、\n心も落ち着いてくる。\n\n織りなす星屑の美しさに、\nそっと息をのむ。\n\n星たちは、\nあたたかな光を見つめている。\n\n私たちの未来を照らして、\n私たちを励ましてくれる。\n\n夜空を見上げれば、\n未来への希望を感じる。\nそして、\n未来を自分で切り開いていく勇気を持つことができる。',
# ・・・・
【Python】LangChain Models|チャットモデルの実装方法
LangChain Modelsの主要機能である「チャットモデル」の実装方法について解説します。
Pythonライブラリのインストール
Pythonプログラムの先頭にライブラリとAPI認証情報を記述します。
前述したOpenAI社のサイトから取得したシークレットキー
を入力しましょう。
import openai
import os
# APIシークレットキーを記述
SECRET_KEY = "............."
# API認証情報設定
os.environ["OPENAI_API_KEY"] = SECRET_KEY
チャットモデルの作成
チャットモデルは、langchain.chat_models.ChatOpenAI
メソッドを用いて次のように作成できます。
コード
from langchain.chat_models import ChatOpenAI
from langchain import PromptTemplate, LLMChain
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
# =============================================================================
# チャットモデル作成
# =============================================================================
chat_model = ChatOpenAI(
model_name = 'gpt-3.5-turbo', # OpenAI社のモデル名
temperature = 0.0, # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
max_tokens = None, # 生成する単語の最大単語数
n = 1, # いくつの返答を生成するか
max_retries = 6, # API呼出失敗時の最大リトライ回数
)
引数情報
上記で利用したlangchain.chat_models.ChatOpenAI
の引数情報について言及します。
引数名 | 概要 |
---|---|
model_name | OpenAI社が提供するGPTモデル名。 |
temperature | 0から2の範囲の範囲で出力する単語のランダム性を設定。値が低けほど最も確率が高い回答が常に選択されるため、結果はより決定論的になる。値が大きいほど、ランダム性が増し、多様で創造的な出力を得る。事実に基づくQAモデル作成の場合、この値を低くし、詩や創造的なタスクの場合、高い値の設定を推奨。 |
max_tokens | 生成する文章の最大単語数。 |
n | 最大いくつの返答を生成するか。 |
max_retries | API呼出失敗時の最大リトライ回数 |
【参考】応答メッセージ
1つ以上の応答メッセージをチャットモデルに渡すことで、チャットが実現できます。応答メッセージには以下4つの種類があります。
- AIMessage
- HumanMessage
- SystemMessage
- ChatMessage
チャットモデルは、これら応答メッセージを受け取ることで、役割(AI/Human/System/Chat)とメッセージを理解し、適切な返答を生成します。
チャットモデル実行|HumanMessage
前述のチャットモデルを実際に利用しましょう。汎用的に用いるHumanMessage
を指定し、チャットモデルを起動します。
コード
# =============================================================================
# チャットモデル実行
# =============================================================================
# 入力文章
text = "「私はアメリカに住んでいます。」この日本語文章を英語に翻訳してください。"
# チャットモデル
response = chat_model([HumanMessage(content=text)])
出力イメージ
# 出力
print(response)
# 出力イメージ
# content='"I live in America."' additional_kwargs={} example=False
チャットモデル実行|SystemMessage×HumanMessage
SystemMessageにチャットモデルが担う役割を渡すことができます。以下、HumanMessageと組み合わせることで次のようにチャットモデルを実行することも可能です。
コード
# =============================================================================
# チャットモデル実行
# =============================================================================
# 入力文章
system_text = "あなたは日本語を英語に翻訳するアシスタントです。"
human_text = "私はアメリカに住んでいます。"
# チャットモデル実行
response = chat_model([
SystemMessage(content = system_text),
HumanMessage(content = human_text)
])
出力イメージ
# 出力
print(response)
# 出力イメージ
# content='I live in America.' additional_kwargs={} example=False
チャットモデル実行|文章生成
チャットモデルに対して、generate
メソッドを指定し、複数のメッセージセットを生成できます。
コード
# =============================================================================
# チャットモデル実行
# =============================================================================
# 入力バッチ
batch_messages = [
[
SystemMessage(content = "あなたは日本語を英語に翻訳するアシスタントです。"),
HumanMessage(content = "私はアメリカに住んでいます。")
],
[
SystemMessage(content = "あなたは日本語を英語に翻訳するアシスタントです。"),
HumanMessage(content = "あなたの趣味はなんですか?")
],
]
# チャットモデル実行
response = chat_model.generate(batch_messages)
出力イメージ
# 出力
print(response)
# 出力イメージ
# generations=[[ChatGeneration(text='I live in America.',
# generation_info=None,
# message=AIMessage(content='I live in America.',
# additional_kwargs={},
# example=False))],
# [ChatGeneration(text='私は趣味を持っていません。私はプログラムされたタスクを実行するために設計されたコンピュータープログラムです。',
# generation_info=None,
# message=AIMessage(content='私は趣味を持っていません。私はプログラムされたタスクを実行するために設計されたコンピュータープログラムです。',
# additional_kwargs={},
# example=False))]]
# llm_output={'token_usage':
# {'prompt_tokens': 105,
# 'completion_tokens': 56,
# 'total_tokens': 161},
# 'model_name': 'gpt-3.5-turbo'}
【Python】LangChain Models|Embeddingモデルの実装方法
LangChain Modelsの主要機能である「Embeddingモデル」の実装方法について解説します。
Pythonライブラリのインストール
Pythonプログラムの先頭にライブラリとAPI認証情報を記述します。
前述したOpenAI社のサイトから取得したシークレットキー
を入力しましょう。
import openai
import os
# APIシークレットキーを記述
SECRET_KEY = "............."
# API認証情報設定
os.environ["OPENAI_API_KEY"] = SECRET_KEY
Embeddingモデル作成
Embeddingモデルは、langchain.embeddings.OpenAIEmbeddings
メソッドを用いて次のように作成できます。
コード
from langchain.embeddings import OpenAIEmbeddings
# =============================================================================
# Embeddingモデル作成
# =============================================================================
embedding_model = OpenAIEmbeddings(
model = 'text-embedding-ada-002', # OpenAI社のモデル名
embedding_ctx_length = 8191, # エンコーディング時の最大コンテキスト長
chunk_size = 1000, # チャンクの最大サイズ
max_retries = 6, # API呼出失敗時の最大リトライ回数
)
引数情報
langchain.embeddings.OpenAIEmbeddings
メソッドには次の引数を指定します。
引数名 | 概要 |
---|---|
model | OpenAI社のモデル名 |
embedding_ctx_length | エンコーディング時の最大コンテキスト長 |
chunk_size | チャンクの最大サイズ |
max_retries | API呼出失敗時の最大リトライ回数 |
Embeddingモデル実行
Embeddingモデルを実行すると、入力文章の分散表現を得ることができます。
コード
# =============================================================================
# Embeddingモデル実行
# =============================================================================
# 入力文章
text = "今日の天気は晴れです。"
# モデル実行
response = embedding_model.embed_query(text)
出力イメージ
# 出力
print(response)
# 出力イメージ
# [-0.004059304017573595, 0.01388087309896946, -0.01579236052930355, -0.0016934039304032922,
# 0.015152880921959877, 0.004486782010644674, -0.01504166703671217, -0.03294708952307701,
# -0.00753473537042737, -0.03700639307498932, -0.008521758019924164, 0.021450363099575043,
# -0.0024797203950583935, -0.016014788299798965, -0.006050725933164358, -0.014249268919229507,
# ・・・
【参考】PythonによるLLM実装|ChatGPT・LangChain

本記事では、PythonでLLMを構築し、様々なタスクをこなす機能の実装方法を多数解説しています。
Python × ChatGPT関連記事
Python × LangChain関連記事
自然言語処理の学習におすすめの書籍

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

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら