昨今、ChatGPTやGemini、Claudeなどの大規模言語モデル(LLM)の普及により、多くの開発者がAIアプリケーションを開発するようになっています。
単純なチャットボットだけでなく、文書検索やデータ分析、業務自動化など幅広い用途で活用されている一方で、LLM APIを直接利用する場合には、
- プロンプト管理
- 会話履歴の保持
- 外部ツールとの連携
- 複数モデルへの対応
などを個別に実装する必要があり、アプリケーションが複雑になるほど管理コストも増加してしまいます。
こうした課題を解決するために登場したのが、LangChainです。
この記事では、LangChainの使い方について詳しく解説していきたいと思います。
LangChainとは
LangChainは、LLMを中心としたアプリケーション開発を効率化できるよう設計されたオープンソースフレームワークです。
モデルの切り替えやツール連携、Agent開発まで統一的なAPIで実装できるのが特徴です。
また、LangChainは、AIアプリケーション開発に必要な様々な機能を提供しています。
主要機能のうちのいくつかを、以下に紹介します。
【 LLMs 】
その名の通り、言語モデルを扱う最も基本的な機能です。
様々なモデルの使用を可能とし、自然言語の生成や質疑応答といった処理を実現します。
【 Prompt templates 】
LLMに渡すプロンプトをテンプレート化することができる機能です。
この機能を利用してテキストを特定のフォーマットに整形することにより、再利用性を高めることができます。
【 Chains 】
フレームワーク自体の名前にも含まれるように、主要機能の中でも特に重要な機能の1つです。
モデルの呼び出しや複数プロンプトなどを組み合わせて、一連の動作として処理することができます。
【 Agents 】
入力テキストの内容や状況に応じて行うべき処理を自動で判断し、適切にツールを使い分けてくれる機能です。
あらかじめ定義されたフローに従うのではなく、リアルタイムで状況を判断して処理を実行します。
LangChainとAPIを直接呼び出す開発のどちらを選ぶべきか?違いと選定基準
APIを直接呼び出す場合とLangChainを使用する場合の違いを、以下にまとめました。
【 API直接呼び出し 】
メリット
- シンプル
- 軽量
- 学習コストが低い
- デバッグしやすい
デメリット
- モデル変更が大変
- プロンプト管理が煩雑
- ツール連携を自作する必要あり
【 LangChain 】
メリット
- モデルを切り替えやすい
- ツール連携を容易に実行可能
- AgentやRAGにも対応可能
デメリット
- 学習コストが少し高め
- バージョン変化へのこまめな対応が必要
プロジェクトの規模ややりたいことに合わせて使い分けるポイント
LangChainの強みは、モデルの切り替えやプロンプト管理、ツール連携といった複雑になりがちな処理を、自作することなく容易に行える点にあります。
個人利用や小規模開発などで、複雑な機能を必要としないケースでは使用せずとも問題ありませんが、複数のモデルやツールが必須となる開発においては開発効率に大きな差が出ます。
主に、以下の規模を基準に使い分けるのがおすすめです。
小規模プロジェクトの場合は導入や学習コストが低めのAPI直呼び、中〜大規模プロジェクトの場合はLangChainを採用するといいでしょう。
LangChainのGitHubリポジトリから学ぶ環境構築とパッケージの最新動向
Python版とTypeScript版の選び方とインストール手順
Python環境でインストールする場合は、以下のコマンドを実行します。
pip install langchain
pip install langchain-openaiインストールが完了したら、.envに使用するモデルのAPIキーを環境変数として設定しましょう。
export OPENAI_API_KEY=xxxxxTypeScriptの場合は、以下のコマンドでインストールできます。
npm install langchain
npm install @langchain/openai公式リポジトリの構造を理解して最新アップデートを追うコツ
公式リポジトリを確認する際は、以下の項目を中心に見るといいでしょう。
- README
- examples
- releases
- migration
特に、v1以降はAgent APIの変更が多いため、Migration Guide確認が重要となります。
LangChainによるLLMアプリ実装の基本とよく使う機能の使い方
PromptTemplateを使った入力の固定とモデルの呼び出し方
上述したように、PromptTemplateを使用することによって、繰り返し利用する可能性のあるテキストフォーマットをテンプレート化することができます。
from langchain_core.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_template("こんにちは、{name}さん")
prompt = template.format(name="太郎")
print(prompt)【実行結果】
こんにちは、太郎さんこれを呼び出したモデルと組み合わせることにより、特定のフォーマットに基づいたプロンプト生成を容易に行うことができます。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# テンプレートを作成
template = ChatPromptTemplate.from_template("{place}の県庁所在地は?")
prompt = template.format(name="北海道")
# モデルの呼び出し
chat = ChatOpenAI(model="gpt-5-nano")
output = chat.invoke([HumanMessage(content=prompt)])
print(output)パイプ記号(|)で処理をスマートに繋ぐLCELの書き方
LCELは、Chainsをより簡潔に記述することのできる新たな記法です。
以下のように、パイプ記号(|)を使用して記述します。
chain = prompt | modelfrom langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
template = PromptTemplate.from_template("{place}の県庁所在地は?")
chat = ChatOpenAI(model="gpt-5-nano")
chain = template | chat
output = chain. invoke({"place": "北海道"})
print(output)LangChain Agentとは?AIに自分で考えて動く仕組みを紐解く
LLMにGoogle検索などの「道具」を使わせる基本の考え方
入力テキストの内容や状況に応じて行うべき処理を自動で判断し、適切にツールを使い分けてくれる機能です。
あらかじめ定義されたフローに従うのではなく、リアルタイムで状況を判断して処理を実行します。
Agentは、モデル自身が次に行うべきアクションを自動で判断し、与えられたツールを使用して目的が完了するまで繰り返し処理を行う機能です。
Agentが利用する外部機能をToolと呼び、標準で用意されているツールから自作ツールまで、幅広く活用することができます。
以下は、LangChainで用意されているツールの一例です。
- Google Search
- Tavily Search
- Python REPL
- AWS Lambda
Agentを使用することにより、以下のような複雑な流れも自動で判断して処理してくれるようになります。
質問 → 天気情報が必要 → 天気APIを呼ぶ → 摂氏を取得 → 計算ツールを呼ぶ → 華氏へ変換 → 回答生成
思考・行動・観察を繰り返してゴールを目指すReActプロンプトの裏側
LangChain Agentの考え方の基礎となっているのが、ReAct(Reason + Act)です。
ReActとは、推論と行動の繰り返しによってタスクを解決する仕組みのことを言います。
ReActの基本サイクルは、以下の3つで構成されます。
- 思考(Thought) … 与えられたタスクに対し、AIが今何をすべきかを論理的に考える
- 行動(Action) … 思考結果に基づき、外部ツールを使用する指示を出す
- 観察(Observation)… 返ってきた結果やデータを読み取る
これらの工程を、Thought → Action → Observation → Thought → … といった流れで、目的の回答が得られるまで繰り返し実行します。
LangChain Agentの実践|外部ツールと連携したエージェント構築
ここからは、簡単なToolを登録してAgentに利用させる例を紹介します。
Google検索や計算機能をエージェントに組み込む実装ステップ
Agentで使用するツールは、標準で用意されているツールを利用する方法と、自作のツールを利用する方法の2通りがあります。
以下は、ツールを作成する場合のサンプルコードです。
@tool
def multiply(a: int, b: int) -> int:
"""
2つの整数を掛け算する
"""
return a * b@toolデコレータを付けることにより、関数をAgentが利用できるツールとして登録することができます。
ツールの準備が完了したら、続いて使用したいモデルを準備します。
model = ChatOpenAI(
model="gpt-4o"
)準備が完了したら、ツールとモデルをAgentへ登録します。
agent = create_agent(
model=model,
tools=[multiply]
)あとは、実行したいプロンプトをAgentに渡せばOKです。
response = agent.invoke(
{
"messages": [
{
"role": "user",
"content": "23×47を計算してください"
}
]
}
)
print(response)また、使用したいツールが複数ある場合は、以下のようにカンマで区切って記述することで合わせて登録できます。
agent = create_agent(
model=model,
tools=[
search_tool,
multiply
]
)これにより、複数のツールを組み合わせた処理を実行できます。
無限ループによるAPIコストの暴走を防ぐための設定と注意点
Agentは便利である反面、ツールを必要以上に呼び出してしまう問題も抱えています。
例えば、特定の情報を検索した際に取得した情報量が十分でないと判断した時など、同じ行為を延々と繰り返すループに陥ってしまう可能性があります。
そのため、実運用では実行回数の制限を設けたり、タイムアウトを設定するといった対策を取ることが重要となります。
具体的に取れる主な方法は以下の通りです。
- 最大実行回数を制限する
- タイムアウトを設定する
- 使用するツールの数を増やしすぎない
- Toolの説明文を適切に書く
ツールの過剰使用は処理面だけでなく、APIの利用料などコスト面でも影響が出る可能性があるため、十分な対策が必要です。
まとめ
LangChainは、AIアプリケーションの開発効率を高めてくれる便利なフレームワークです。
全ての機能を使いこなすにはある程度の慣れが必要となりますが、AIエージェントや業務自動化を実現するための有力な選択肢の一つで言えるでしょう。