はじめに
最近、Difyを学んでみたんですが、GUIベースの開発だとやっぱり効率が悪いなという感じがしました。他に何かいいのないかなぁと探していたところ、LangChainがいいと聞いたので学んでいきます!何事もまずは触ってみるところから始めていきます!
いつもの通り、座学はChatGPTに教えてもらい、その後Hands-onで手を動かしながら学んでいきます!
LangChain とは?
LangChain は LLM(大規模言語モデル)アプリケーションを簡単に作るためのフレームワーク。
LLM アプリは本来、こんな要素が必要:
- プロンプトの管理
- モデル呼び出し(OpenAI / Gemini / Claude など)
- 会話履歴の管理(メモリ)
- 外部ツールの実行(function calling)
- 検索+生成(RAG)
- チェーン(複数処理のパイプライン化)
LangChain は これらを部品化(モジュール化) して、
「繋げるだけで LLM アプリが作れる」ようにしてくれる。
LangChain の重要コンポーネント
LangChain は、大きく4つを理解すると一気にわかる。
① Model(LLMモデル呼び出し)
OpenAI, Anthropic, Google などの LLM を共通インターフェースで利用するクラス。
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4.1")
② Prompt(プロンプトのテンプレ化)
複雑になりがちなプロンプトをテンプレートとして管理できる。
from langchain.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "あなたは優秀なアシスタントです。"),
("human", "{question}"),
])
③ Chain(処理の流れをつなぐ)
Prompt → Model → Output の流れをパイプライン化する。
chain = prompt | model
result = chain.invoke({"question": "LangChainとは?"})
print(result)
この「パイプライン構造」が LangChain のコア思想。
④ Tools / Agent(外部ツール呼び出し)
LLM に API や Python 関数を使わせる。
from langchain.tools import tool
@tool
def add(a: int, b: int) -> int:
"足し算を実行"
return a + b
LLM が関数を自動で呼び出すようになる。
🔍 LangChain でできること
✔️ 1. Chatbot / 会話アプリ
プロンプト + モデル + メモリで実現。
✔️ 2. RAG(検索拡張生成)
ドキュメントを読み込んでベクター検索 → LLM で回答。
✔️ 3. Agent(自律エージェント)
LLM が「必要なツールを判断して実行 → まとめて答える」自動化。
✔️ 4. Workflow 構築
複数ステップの処理をチェーンとして構築。
Hands-on
今回は簡単なものを作って見ます!
python3 -m venv venv
source venv/bin/activate.fish
(venv) ~/develop/langchain_study $ pip install langchain langchain-openai python-dotenv
OPENROUTER_API_KEY=あなたのOpenRouterのAPIキー
# main.py
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate # ← ここを修正
import os
# ① .env の読み込み
load_dotenv()
# ② OpenRouter 用の ChatOpenAI モデル設定
# OpenAI互換APIなので base_url を変更するだけでOK
model = ChatOpenAI(
model="anthropic/claude-3.5-sonnet", # OpenRouter経由で利用するモデル
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1", # ←超重要
)
# ③ プロンプトテンプレート定義
prompt = ChatPromptTemplate.from_messages(
[
("system", "あなたは優秀な日本語アシスタントです。わかりやすく説明してください。"),
("human", "{question}"),
]
)
# ④ Prompt → Model のパイプライン(Chain)
chain = prompt | model
def main():
print("=== OpenRouter × LangChain チャット ===")
print("質問を入力してください(空でEnter → 終了)")
while True:
question = input("\nあなた > ").strip()
if not question:
print("終了します。")
break
# ⑤ チェーン実行
res = chain.invoke({"question": question})
# ChatMessage形式なので .content を参照
print("\nAI > " + res.content)
if __name__ == "__main__":
main()
python3 main.py
さいごに
Dify触った後でLangChainを触るとめっちゃいいなって感じがしました!!
やっぱりコードは書かないと!!
