株式会社renue
renueについて
renueは、AIで業務を実装する会社です
AIコンサルティングから図面AI・広告運用エージェント・コールセンターAIまで、実際に動いているサービスをご覧いただけます。renueが何をしている会社か、まずはサービス一覧からご確認ください。
LangChainとは?
LangChainとは、GPT-4やClaudeなどの大規模言語モデル(LLM)を活用したアプリケーション開発を効率化するオープンソースフレームワークです。2022年にHarrison Chase氏によって開発され、広く利用されているAI開発ライブラリの一つです。
LangChainの最大の特徴は、LLMの呼び出しだけに留まらず、外部データとの連携・ツール実行・複数ステップのワークフロー構築まで一貫してサポートする点にあります。プロンプト管理・チェーン処理・エージェント制御・メモリ管理など、実用的なAIアプリ開発に必要な機能がモジュール化されており、これらを組み合わせることで複雑なAIシステムを迅速に構築できます。
LangChainが解決する課題
LLMを単体で呼び出すだけでは、以下のような課題があります。
- 最新情報や社内ドキュメントは、モデルを呼ぶだけで自動的に取得されるわけではない。必要な内容を入力に含めるか、検索・取得する仕組みを用意する
- 複数のLLM呼び出しや外部ツール連携を管理するコードが複雑になる
- 会話の文脈(メモリ)を適切に保持・管理する仕組みが必要になる
- 検索・計算・APIコールなどのツールをLLMに使わせるための実装コストが高い
LangChainはこれらをすべて抽象化し、開発者がアプリのロジックに集中できる環境を提供します。
LangChainの主要コンポーネント
LangChainは複数のモジュールで構成されています。それぞれの役割を理解することで、目的に応じた適切な使い方ができます。
1. Models(モデル)
OpenAI・Anthropic・Google Geminiなど、さまざまなLLMプロバイダーへの統一インターフェースを提供します。プロバイダーを切り替えても、コードの大部分を変更せずに済むため、モデル選定の柔軟性が高まります。
2. Prompts(プロンプト)
プロンプトテンプレートを管理する仕組みです。変数の埋め込みや、Few-shotプロンプトの構造化など、再利用可能なプロンプト設計が可能になります。
3. Chains(チェーン)とLCEL
複数の処理ステップを連結する仕組みです。LCEL(LangChain Expression Language)では、パイプ演算子(|)でコンポーネントをつなぎ、処理を宣言的に記述できます。以下は固定された処理の例です。動的なエージェントにはcreate_agentも使えます。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template("{topic}について100字で説明してください")
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model | StrOutputParser()
result = chain.invoke({"topic": "機械学習"})
print(result)
4. Agents(エージェント)
LLM自身がどのツールをどの順番で使うかを判断しながら処理を進める仕組みです。ChainはあらかじめワークフローをコードとしてLLMに固定するのに対し、Agentは「次に何をするか」をLLMが動的に決定します。
5. Tools(ツール)
Agentが利用できる機能の単位です。Web検索・計算機・データベース検索・APIコールなど、LangChainには多数のビルトインツールが用意されており、カスタムツールの作成も容易です。
6. Memory(メモリ)
会話履歴を保持・参照する仕組みです。現行のLangChainエージェントでは、同一会話内の短期メモリをstateとcheckpointerで管理します。長い履歴は削除・切り詰め・要約などで調整します。旧来のバッファ・サマリー・ウィンドウメモリのAPIを、そのまま現行create_agentに当てはめないようにします(短期メモリの公式説明)。
7. Document Loaders・Text Splitters・Vector Stores
外部ドキュメントをLLMが扱える形式に変換するコンポーネント群です。RAG(Retrieval-Augmented Generation)構築の中核を担います。
LangChainのインストールと基本的な使い方
インストール
LangChainはpipでインストールできます。使用するプロバイダーやChroma連携などは追加パッケージを使います。以下は2026年9月17日にPython 3.12でimportとローカル処理を確認した版です。新しい仮想環境でインストールしてください。OpenAIを呼ぶ例は、事前に環境変数OPENAI_API_KEYを設定し、API料金・モデルの利用権限を確認します(公式の連携一覧)。
# 基本インストール(Python 3.12の新しい仮想環境で実行)
python -m pip install langchain==1.4.1 langchain-core==1.6.3 langgraph==1.2.11
# OpenAI利用の場合
python -m pip install langchain-openai==1.6.2
# Anthropic(Claude)利用の場合
python -m pip install langchain-anthropic==1.7.2
# RAGに必要なパッケージ
python -m pip install langchain-community==0.4.2 langchain-text-splitters==1.1.2 langchain-chroma==1.1.0 chromadb==1.5.9
基本的なLLM呼び出し
import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
# 実行前に環境変数OPENAI_API_KEYを設定する(キーをコードへ直書きしない)
if not os.environ.get("OPENAI_API_KEY"):
raise RuntimeError("OPENAI_API_KEYを環境変数に設定してください")
model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
response = model.invoke([HumanMessage(content="LangChainとは何ですか?")])
print(response.content)
プロンプトテンプレートの活用
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "あなたは{role}の専門家です。"),
("human", "{question}")
])
chain = prompt | model
response = chain.invoke({
"role": "AI開発",
"question": "RAGとファインチューニングの使い分けは?"
})
print(response.content)
RAG(Retrieval-Augmented Generation)の構築
RAGとは、LLMの回答を生成する前に外部ドキュメントから関連情報を検索し、その情報をコンテキストとして与えることで回答精度を高める手法です。社内ドキュメントQ&AシステムやナレッジベースチャットボットなどはRAGの代表的なユースケースです。
RAGの基本フロー
- ドキュメント読み込み:PDF・Word・Webページなどを読み込む(Document Loaders)
- テキスト分割:ドキュメントを適切なチャンクに分割する(Text Splitters)
- ベクトル化:テキストを数値ベクトルに変換する(Embeddings)
- ベクトルDB保存:ベクトルをデータベースに格納する(Vector Stores)
- 検索:クエリに類似したドキュメントを取得する(Retrievers)
- 回答生成:取得したコンテキストとともにLLMで回答を生成する
LangChainによるRAG実装例
同じディレクトリに、利用を許可された検証用テキストをcompany_docs.txtとして用意し、OPENAI_API_KEYを設定します。以下は学習用の最小例で、読み込んだテキストをEmbedding APIへ、検索結果を生成APIへ送ります。分割はlangchain-text-splitters、Chroma連携はlangchain-chromaを使います。
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 1. ドキュメント読み込み
loader = TextLoader("./company_docs.txt", encoding="utf-8")
documents = loader.load()
# 2. テキスト分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)
# 3&4. ベクトル化 & ベクトルDB保存
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)
# 5. Retriever作成
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 6. RAGチェーン構築
prompt = ChatPromptTemplate.from_template("""
以下のコンテキストを参考に質問に回答してください。
コンテキスト: {context}
質問: {question}
""")
model = ChatOpenAI(model="gpt-4o-mini")
def format_docs(docs):
return (chr(10)*2).join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt | model | StrOutputParser()
)
answer = rag_chain.invoke("会社の有給休暇ポリシーは?")
print(answer)
RAG品質向上のポイント
サブクエリを生成するアプローチがLangGraphとの組み合わせで有効であり、基本的なRAGを超えた高度な検索戦略が注目されています。具体的には以下の手法が効果的です。
- チャンクサイズの最適化:コンテンツの性質に応じてchunk_sizeとchunk_overlapを調整する
- Re-ranking:検索結果を関連度で並び替えて精度を向上させる
- Hybrid Search:ベクトル検索とキーワード検索を組み合わせる
- Query Expansion:クエリを複数のサブクエリに分解して幅広く検索する
- Contextual Compression:取得したドキュメントから関連部分のみを抽出する
LangChainとLangGraphの違い
LangGraphは同じ開発元による、状態を持つエージェント向けの低レベルな実行基盤です。LangGraphはLangChainなしでも使え、現行LangChainのエージェントはLangGraphを基盤にしています。両者を「単純なチェーン専用」と「高度な処理専用」とで切り分けず、必要な制御の細かさで選びます(LangGraph公式、LangChainの構成)。
アーキテクチャの違い
| 項目 | LangChain | LangGraph |
|---|---|---|
| 処理構造 | LCELの処理連結と、LangGraphを基盤とするエージェント | グラフ・ステートマシン |
| 状態管理 | エージェントのstate・checkpointerで管理 | 明示的な状態管理 |
| ループ・分岐 | エージェントのツール呼び出しループ等に対応 | ループ・条件分岐が可能 |
| Human-in-the-loop | HITLミドルウェアで承認・修正・拒否等に対応 | ネイティブサポート |
| デバッグ性 | LangSmith等で処理を追跡・評価 | ノード・状態遷移を明示し、LangSmith等で追跡 |
| 学習曲線 | 高レベルAPIから始めやすい | グラフ・状態・永続化の設計を理解する必要 |
| 適した用途 | RAG・チャットボット・ツール利用エージェント | 独自の状態遷移や細かな制御が必要なワークフロー |
比較の出典:LangChain Agents、短期メモリ、Human-in-the-loop、LangGraph概要。同じ機能でも、あらかじめ用意されたAPIを使うか、グラフを直接設計するかで作業量が変わります。
LangGraphのシンプルな例
from langgraph.graph import StateGraph, END
from typing import TypedDict
class AgentState(TypedDict):
messages: list
step: int
def process_node(state: AgentState) -> AgentState:
state["step"] += 1
return state
def should_continue(state: AgentState) -> str:
if state["step"] >= 3:
return END
return "process"
workflow = StateGraph(AgentState)
workflow.add_node("process", process_node)
workflow.set_entry_point("process")
workflow.add_conditional_edges("process", should_continue)
app = workflow.compile()
result = app.invoke({"messages": [], "step": 0})
どちらを選ぶべきか
RAGの固定パイプラインにはLangChainのコンポーネントを使えます。ツールを繰り返し呼ぶエージェントや人間の承認も、LangChainのcreate_agentとミドルウェアで実装できます。状態遷移や決められた処理とLLMの判断を組み合わせる順序まで細かく設計したい場合は、LangGraphを直接使う方法が適しています。単にループや承認が必要という理由だけで、LangChainでは実装できないと判断しないことが大切です。
LangChainの実践的なユースケース
1. 社内ドキュメント検索システム
社内マニュアル・規程・過去の提案書などをRAGで検索可能にするシステムです。新入社員のオンボーディングや担当者の情報収集にかかる時間を大幅に削減できます。
2. カスタマーサポートボット
製品マニュアルやFAQをベクトルDBに格納し、ユーザーの質問に対して関連情報を引き出しながら回答するボットです。LLMの幻覚リスクを抑えつつ、正確な製品情報に基づいた回答が可能です。
3. コード生成・レビュー支援
社内コーディング規約や過去のコードベースをコンテキストとして与え、一貫性のあるコード生成や自動レビューを実現します。
4. 議事録・ドキュメント自動生成
会議の文字起こしや録音データから構造化された議事録を自動生成します。LangChainのチェーン処理で要約・アクションアイテム抽出・議事録フォーマット化を連続実行できます。
5. マルチエージェントシステム
調査エージェント・執筆エージェント・レビューエージェントなど、役割の異なるエージェントが協調して複雑なタスクを処理するシステムです。LangGraphと組み合わせることで実現しやすくなります。
LangChainエコシステム:関連ツール
LangSmith
LangSmithはLLMアプリケーションの追跡・デバッグ・監視・評価を支援するプラットフォームで、LangChain以外のフレームワークにも対応します。処理の入出力や性能を確認する選択肢の一つであり、LangChainの本番利用に必須という意味ではありません。
LangServe
LangServeはLangChainのRunnableやチェーンをREST APIとして公開する、FastAPIベースのライブラリです。APIドキュメントも生成できますが、公式リポジトリは非推奨を明示し、2026年5月にアーカイブされています。現行のLangGraph型エージェント全般の標準配備方法とは扱わず、新規構築時はLangSmith Deploymentなど、対象フレームワークと運用条件に合う方法を比較します。
LangFlow
LangflowはPythonベースのオープンソースツールで、GUI上でコンポーネントをドラッグ&ドロップし、AIワークフローを構築・検証できます。特定のLLMやベクトルストアに限定されず、プロトタイピングや非エンジニアとの協業に活用できます。
LangChain導入時の注意点
- バージョン管理:LangChainは活発に開発されており、バージョン間でAPIが変わることがある。本番環境ではバージョンを固定することを推奨
- オーバーエンジニアリングに注意:シンプルなLLM呼び出しにLangChainは不要な場合もある。複雑さに応じて採用を判断する
- コスト管理:チェーンが長くなるほどトークン消費が増える。LangSmithでトークン使用量を監視することが重要
- セキュリティ:外部ツールやAPIと連携する際は、権限管理・入力バリデーション・機密情報の取り扱いに注意が必要
- ハルシネーション対策:RAGを使っても完全にハルシネーションをなくせるわけではない。重要な情報は出典確認の仕組みを設ける
AIを活用した業務改善・システム構築はrenueにご相談ください
LangChainやLangGraphを活用したRAGシステム・AIエージェント・社内ナレッジ検索など、実用的なAI導入を支援します。技術選定から設計・実装・運用まで一貫してサポートします。
- 社内ドキュメント検索・Q&Aシステムの構築
- 業務自動化エージェントの設計・開発
- LLMを活用したデータ分析・レポート生成
- 既存システムへのAI機能追加
よくある質問(FAQ)
Q1. LangChainは無料で使えますか?
LangChain自体はオープンソース(MIT License)で無料で利用できます。ただし、OpenAIやAnthropicなどのLLMプロバイダーのAPIは有料です。また、LangSmithには無料プランと有料プランがあります。
Q2. LangChainを使うのにどのくらいのPython知識が必要ですか?
Pythonの基本文法(変数・関数・クラス・リスト操作)を理解していれば始められます。LangChainのドキュメントは豊富で、公式チュートリアルも充実しています。LLMのAPIを直接呼び出す経験があると、LangChainの抽象化がより理解しやすくなります。
Q3. LangChainとOpenAI APIを直接使う場合の違いは何ですか?
OpenAI APIを直接使う場合も、SDKやResponses APIの会話状態管理を利用できます。例えばprevious_response_idで応答をつないだり、Conversations APIで会話を保持したりできるため、履歴管理をすべて自前で実装する必要はありません。LangChainは複数プロバイダーのモデル、プロンプト、検索、ツールを共通の構成で組み合わせる際に役立ちます。一方、シンプルな1回のLLM呼び出しにはLangChainを使わない方がコードが簡潔な場合もあります。
Q4. RAGとファインチューニングはどう使い分けるべきですか?
RAGは最新情報・社内固有情報・頻繁に更新されるデータを参照させたい場合に適しています。データの追加・更新が容易で、出典の明示が可能です。ファインチューニングは特定のスタイル・フォーマット・ドメイン特有の表現をモデルに学習させたい場合に適しており、推論時のコンテキスト長を節約できます。多くのケースではRAGが最初の選択肢となります。
Q5. LangChainとLangGraphは同時に使えますか?
はい、組み合わせて使えます。LangGraphはLangChainなしでも利用でき、現行LangChainのエージェントはLangGraphを基盤としています。LangChainのプロンプト・モデル・ツール等をLangGraphのノード内で使うこともできます。RAGの検索・回答生成をLangChainで組み、全体の制御をLangGraphで設計する構成は一つの選択肢です(LangGraph公式、LangChainの構成)。
Q6. LangChainは本番環境での利用に向いていますか?
はい、適切な設計があれば本番環境でも利用できます。本番運用にはLangSmithによるモニタリング・エラーハンドリングの実装・レスポンスキャッシュの活用・適切なバージョン固定が重要です。2026年現在、多くの企業がLangChain/LangGraphを用いた本番AIシステムを運用しています。




