jiku log

データサイエンスの核心を掴む : 学びと発見の記録

「RAG・AIエージェント[実践]入門」を読む ~第4章 LangChainの基礎①LLM/Chat model~

はじめに

業務でLLMを活用していくためには,検索拡張生成(RAG)やAIエージェントといった技術が必要になってくると考えられる。これらの技術の基礎知識と実践経験を積むために,西見公宏・吉田真吾・大嶋勇樹 著「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」を読むことにした。

本記事は,第4章 「LangChainの基礎」におけるLLM / Chat modelに関する読書メモである。

  • 本書の紹介ページ

gihyo.jp

第4章 LangChainの基礎

本章では,LLMアプリケーション開発のフレームワークであるLangChainについて説明している。

4.1 LangChainの概要

なぜLangChainを学ぶのか

LLMを使ったアプリケーション開発に使えるフレームワークには,

などが挙げられる。

LangChainはの公式のドキュメントやクックブックには,論文などで提案された手法の実践例が多数掲載されており,LLMの発展的な手法を学ぶことができる,と本書では紹介している。

LangChainの全体像

LangChainの全体像は,以下から構成される。

LangChainの各種コンポーネントを提供するパッケージ群

LangChainは,コア機能はlangchain-coreというパッケージで,周辺機能は別のパッケージが提供する。

  • langchain-core
    • LangChain Expressional Language (LECL)などを提供する。LECLは,処理の連鎖(Chain)を表現する記述方法である。
  • partners(langchain-openaiなど)とlangchain-community
    • OpenAIなどの言語モデルをはじめとして,様々なサービスやOSSとのインテグレーションが実装されている。
    • partners パッケージとして独立していないものは,langchain-communityというパッケージで提供される。
  • langchain / langchain-text-splitters / langchain-experimental
    • langchain パッケージは,LLMアプリケーションの特定のユースケースに特化した機能を提供する。
    • langchain-text-splittersは,テキストをチャンクに分解する機能を提供する。
    • langchain-experimentalは,研究・実験目的のコードや,既知の脆弱性を含むコードを提供する。

4.2 LLM / Chat model

本節では,LangChainでの言語モデルの使用方法を提供するモジュールである,LLMChat modelを紹介する。

LLM

LLMは,1つのテキスト入力に対して1つのテキストの出力を返す,チャット形式ではない言語モデルを扱うコンポーネントである。

Chat model

Chat modelは,チャット形式の言語モデルをLangChainで扱うためのコンポーネントである。
サンプルコードは以下の通りである。

from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4o-mini", temperature=0)

messages = [
    SystemMessage("You are a helpful assistant."),
    HumanMessage("こんにちは!私はジョンと言います"),
    AIMessage(content="こんにちは、ジョンさん!どのようにお手伝いできますか?"),
    HumanMessage(content="私の名前がわかりますか?"),
]

ai_message = model.invoke(messages)
print(ai_message.content)

messageの構成要素は,Chat Completion APIの要素のうち,以下のように対応している。

Chat model Chat Completion API
SystemMessage "role": "system"
HumanMessage "role": "user"
AIMessage "role": "assistant"

LLMとChat modelの継承関係

LangChainのLLMとChat modelの継承関係は下図のようになっている。LLMとChat modelのそれぞれが,BaseLLMとBaseChatModelに継承される。これらはいずれも,BaseLanguageModelおよびRunnableに継承されている。

BaseLLMやBaseChatModelによって,OpenAI以外のClaudeやGeminiにも対応できるようになっている。

まとめと感想

LangChainの導入部分について理解した。実際にコードを動かして挙動を確認するのはこれからであるが,LangChain内のパッケージの継承関係を理解することで,これらのパッケージを使いこなしていきたい。