はじめに
こんにちは、新卒エンジニアです。
最近LLMの勉強を始めようと考えました。そうはいってもLLMに関して右左もわからないのが現状です。ということで、最終ゴールを「Streamlitを用いた外部検索付きLLMのチャットデモ」を作ることとしてそれまでの道のりを記事にしようと思います。第一回の本記事では、LLM開発のフレームワークであるLangChainの基礎について書いてみました。
LangChainとは
Pythonのライブラリの一つで、LLM開発で用いられるフレームワークです。LangChainは「プロンプト管理」「外部ツール/検索連携」「会話メモリ」「RAG」「出力整形」を共通インターフェースで素早く組み合わせることができます。LangChainには様々な機能がありますが、今回は基本的な概念について触れています。
LangChainを使ってみる
今回はローカルでの実装のためOllamaのllama3を使用します。
Ollama は、ローカル環境で LLM を簡単に実行できるオープンソースツールで、Docker のように簡単にモデルを管理・実行できる点が特徴です。
モデルI/O
LLM入出力を統一インターフェース(Runnable)で扱うことができます。
llm = ChatOllama(model="llama3", temperature=0)
ここではローカルの llama3 モデルを LangChain の Runnable (統一インターフェース) として初期化し、パラメータ temperature=0 で生成のランダム性を最小化しています。
ChatPromptTemplate
ChatPromptTemplateは、LLM(大規模言語モデル)に渡す「会話形式のメッセージ」をテンプレートとして管理するLangChainの機能です。
- 複数のメッセージ(system, user, assistantなど)をリストで定義できる
- プレースホルダ(例: {question})を使い、実行時に値を埋め込む
- LLMが期待する「会話履歴」形式に自動変換してくれる
prompt = ChatPromptTemplate.from_messages([
("system", "あなたは簡潔に答えるアシスタントです。"),
("user", "{question}")
])
from_messagesは、ChatPromptTemplate のクラスメソッドです。
会話形式のメッセージ(system, user, assistantなど)をリストで受け取り、テンプレートを作成します。
- ("system", ...):モデルの振る舞いを指示
- ("user", "{question}"):ユーザーの質問(後で値が埋まる)
Chain
Chainは、LangChainの基本的な構造で「複数の処理(Runnable)を順番につなげて一連の流れを作る仕組み」です。
- 入力(例: 辞書型データ)を、複数の処理(プロンプト生成 → モデル呼び出し)に順番に渡す
- 各処理は「Runnable」と呼ばれ、|(パイプ)でつなぐことでデータが流れる
chain = prompt | llm
- prompt:入力データ({"question": ...})を会話形式メッセージに変換
- llm:そのメッセージを使ってモデル(llama3)が回答を生成
invoke
invokeは、Runnable(プロンプト・モデル・チェーンなど)に入力を渡して、1回だけ処理を実行するためのメソッドです。
Chainや各コンポーネント(PromptTemplate, LLMなど)で使えます。
これにより「入力→出力」の流れを簡単に実現できます。
if __name__ == "__main__":
result = chain.invoke({"question": "LangChainって何ですか?"})
print(result.content)
この部分はPythonスクリプトとして直接実行されたときだけ動くメイン処理です。
全体のコード
import os
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOllama(model="llama3", temperature=0)
prompt = ChatPromptTemplate.from_messages([
("system", "あなたは簡潔に答えるアシスタントです。"),
("user", "{question}")
])
chain = prompt | llm
if __name__ == "__main__":
result = chain.invoke({"question": "LangChainって何ですか?"})
print(result.content)
実際に実行してみます。
$ python langchain_sampl01.py
LangChainは、AIが自然言語を生成するためのフレームワークです。多くのNLPモデルを組み合わせて、長文や会話のような自然言語を生成することができます。
上手く動作しましたね。いい感じです。
最後に
今回は超初心者向けのLangChain解説を行いました。LangChainとはなんぞやというところから始めたので、今回の記事をきっかけにさらに様々な機能を使ってみようと思っています。
次回の記事では、今回作ったものをパワーアップさせ、会話履歴の保持や、ツール呼び出しなどが出来たらいいなと考えています。
参考
次回の記事