LangChainで切り拓く、AIアプリケーション開発の新しい世界
![]()
【Hiroki】
Yukiさん、今日はよろしくお願いします!最近、AIのニュースを見ていると「LangChain(ラングチェーン)」という言葉をよく目にするんです。プログラミングでChatGPTやGeminiをより便利に使うためのツールだとは聞いたのですが、具体的に何ができて、なぜそんなに注目されているのか教えていただけますか?
![]()
【Yuki】
Hirokiくん、こんにちは。LangChainに興味を持ったのですね、とても良い視点だと思います...。AIの世界は進歩が速くて大変ですが、LangChainを理解すると、自分だけの高度なAIアプリが作れるようになるんですよ。
一言で言うと、LangChainは「大規模言語モデル(LLM)を用いたアプリケーションを開発するためのフレームワーク」です。LLMを単体で使うのではなく、外部のデータや他のツールと「鎖(Chain)」のようにつなぎ合わせて、より複雑なタスクをこなせるようにするための道具箱だと思ってください。
今日は、LangChainの基本的な考え方から、最新のGeminiモデルを使った具体的な仕組みまで、ゆっくり解説していきますね。
なぜLangChainが必要なのか
![]()
【Hiroki】
道具箱、ですか。でも、OpenAIのAPIやGoogleのGemini APIを直接呼び出すだけでも、AIと会話するアプリは作れますよね?どうしてわざわざLangChainという「中間に挟むもの」が必要になるんでしょうか。
![]()
【Yuki】
そうですね...。確かに、単純なチャットボットなら直接APIを叩くだけで十分かもしれません。でも、実際の現場で「使える」アプリを作ろうとすると、いくつもの壁にぶつかります。
例えば、「最新の社内ドキュメントを読み込ませて回答させたい(RAG)」とか、「AIに計算機やGoogle検索を使わせたい」、あるいは「複雑な処理を複数のステップに分けて実行させたい」といった要望です。これらをイチから実装しようとすると、コードがとても複雑になってしまうんです。
LangChainは、こうした「よくある処理」を共通のインターフェースで提供してくれます。さらに、モデルの切り替えが簡単というメリットもあります。昨日はOpenAIのモデルを使っていたけれど、今日は最新のGemini 2.0 Flashを使いたい、といった変更が最小限のコード修正で済むようになるんですよ。
![]()
【Hiroki】
なるほど。AIを組み込んだシステムを作るための「共通のルール」や「テンプレート」を提供してくれているイメージですね。
LangChainを構成する主要なモジュール
![]()
【Yuki】
その通りです。LangChainはいくつかのモジュールに分かれています。すべてを一度に覚えるのは大変なので、特に重要なものをいくつか紹介しますね。
- Model I/O: LLMとの入出力を管理します。プロンプトの作成や、モデルからの返答を扱いやすい形式に整える役割です。
- Retrieval(検索): 自分の持っているPDFやデータベースから、回答に必要な情報を探してくる仕組みです。
- Chains: 複数の処理をパイプラインのように連結します。
- Agents: LLMに「どのツールを使うべきか」を自分で判断させ、自律的に動かします。
これらが組み合わさることで、ただのチャット以上のことが可能になります。
最新モデルとの連携:Geminiの活用
![]()
【Hiroki】
最新のモデルを使う場合はどうなるんですか?例えば、GoogleのGeminiを使ってみたいときは。
![]()
【Yuki】
ちょうどいい質問ですね。LangChainは常にアップデートされていて、最新のライブラリやモデルにも対応しています。今の主流は langchain-google-genai というパッケージを使って、Googleの最新モデル、例えば gemini-1.5-flash や gemini-2.0-flash-exp(プレビュー版)を呼び出す構成です。
以前は google-generativeai を直接使っていましたが、LangChainを通すことで、他のモデルと同じ感覚で扱えるようになります。
Model I/O:プロンプトと出力の制御
![]()
【Hiroki】
まずは「Model I/O」から詳しく知りたいです。プロンプトを管理するって、具体的にどういうことですか?
![]()
【Yuki】
例えば、ユーザーからの入力を受け取って「〇〇について、3歳児にもわかるように説明して」というプロンプトを作りたいとき、文字列を直接結合するのはスマートではありません。
LangChainでは PromptTemplate という機能を使います。
from langchain_core.prompts import PromptTemplate
template = "{topic}について、3歳児にもわかるように優しく説明してください。"
prompt = PromptTemplate.from_template(template)
# 実行時に変数を埋め込む
formatted_prompt = prompt.format(topic="量子コンピュータ")
![]()
【Hiroki】
これなら、テンプレートを再利用しやすいですね。
![]()
【Yuki】
ええ、そうなんです。さらに、モデルからの返答は通常「ただの文字列」ですが、それをPythonの辞書型や、特定のクラスの形式で受け取りたいこともありますよね。そこで使うのが Output Parsers です。JSON形式で出力するように指定して、自動的にパース(解析)までしてくれるんですよ。
LangChain Expression Language (LCEL) の魔法
![]()
【Yuki】
次に、LangChainの現在の核心部分である LCEL(LangChain Expression Language) についてお話ししますね。これは、各コンポーネントを |(パイプ)記号でつなぐ書き方のことです。
![]()
【Hiroki】
パイプ...Linuxのコマンドみたいですね。
![]()
【Yuki】
まさにその感覚です!例えば、「プロンプトを作って」「モデルに投げて」「結果を文字列として取り出す」という一連の流れは、次のように書けます。
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.output_parsers import StrOutputParser
# 最新のGeminiモデルを指定
model = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp")
output_parser = StrOutputParser()
# チェーンの構築
chain = prompt | model | output_parser
# 実行
response = chain.invoke({"topic": "LangChain"})
print(response)
このように、処理の流れが視覚的にわかりやすくなるのがLCELの素晴らしいところです。非同期処理やストリーミング出力も、この書き方なら簡単に対応できるんですよ。
Retrieval:外部知識をAIに教える(RAG)
![]()
【Hiroki】
さっき「最新の社内資料を読み込ませる」という話がありましたが、それはどうやって実現するんですか?LLMの学習データには入っていない情報ですよね。
![]()
【Yuki】
それが RAG(Retrieval-Augmented Generation:検索拡張生成) という手法です。LangChainはこのRAGを実装するための機能が非常に充実しています。
手順はこうです: 1. 大量のテキストデータを、意味の近さを表す「ベクトル」という数値に変換します。 2. その数値を Vector Store(ベクトルデータベース) に保存します。 3. ユーザーの質問が来たら、似た意味を持つデータをデータベースから探してきます。 4. その情報をプロンプトに「参考資料」として添えて、LLMに回答させます。
![]()
【Hiroki】
つまり、AIに「カンニングペーパー」を渡して、それを見ながら答えさせているようなものですね。
![]()
【Yuki】
ふふ、分かりやすい例えですね。その通りです。LangChainには、PDFを読み込むための PyPDFLoader や、テキストを適切な長さに切る RecursiveCharacterTextSplitter など、RAGに必要な道具がすべて揃っています...。
Agents:AIが「道具」を使いこなす
![]()
【Hiroki】
最後の方に言っていた「Agents(エージェント)」についても教えてください。これは他の機能と何が違うんですか?
![]()
【Yuki】
エージェントは、LangChainの中でも特にワクワクする機能の一つです。通常のチェーンは、人間が決めた順番通りに処理が進みます。でもエージェントは、「次に何をすべきか」をAI自身に考えさせるんです。
例えば、「今日の東京の気温を調べて、それを元に服装をアドバイスして」と頼んだとします。 1. AIはまず「自分は現在の気温を知らない」と判断します。 2. そこで「検索ツール」を使って、東京の気温を調べます。 3. その結果を見てから、「厚手のコートが必要ですね」といった最終的な回答を作ります。
このように、状況に応じてGoogle検索や計算機、自前のAPIなどを使い分けるのがエージェントの役割です。最近では、より複雑なループや条件分岐を扱える LangGraph という拡張ライブラリも注目されていますね。
最新のGeminiライブラリについて
![]()
【Hiroki】
実際にコードを書くとき、今はどのライブラリを使うのが一番「ナウい」んでしょうか。
![]()
【Yuki】
Googleのモデルを使うなら、Googleが新しく出した google-genai SDKが非常に強力です。LangChainでもこれに対応したパッケージが開発されています。
最新のGemini 2.0シリーズでは、画像や動画、音声といったマルチモーダルな入力を非常に高いパフォーマンスで処理できます。LangChainを使えば、こうした最新モデルのパワーを、プロンプト管理やツール利用といった便利な機能と組み合わせて、すぐに自分のアプリに組み込めるんです。
学び始めるためのリソース
![]()
【Hiroki】
すごく面白そうです!僕も何か作ってみたくなりました。何から始めればいいでしょうか。
![]()
【Yuki】
まずは、LangChainの公式ドキュメントを眺めてみるのが一番だと思います...。英語がメインですが、コード例が豊富なので雰囲気は掴めるはずです。
また、Googleの公式ドキュメントでもLangChainを使ったチュートリアルが増えています。
![]()
【Hiroki】
ありがとうございます!まずは簡単なチャットボットから作って、そこにLCELを使って機能を追加していくところから始めてみます。
![]()
【Yuki】
いいですね。最初は少し難しく感じるかもしれませんが、パズルのようにパーツを組み合わせていく感覚が掴めれば、きっと楽しくなると思います。
AIはあくまで私たちの可能性を広げてくれるツールです。LangChainを使いこなすことで、Hirokiくんが「こんなものがあったらいいな」と思うアイデアを、形にしていけるようになるといいですね。
もし途中でエラーが出て困ったり、この「鎖」をどう繋げばいいか分からなくなったら、いつでも聞いてください。静かな夜にでも、ゆっくりコードを眺めながら一緒に考えましょう...。
![]()
【Hiroki】
はい!Yukiさん、丁寧に教えてくださってありがとうございました!頑張ってみます。
![]()
【Yuki】
応援していますね。AIとの対話も、プログラミングも、少しずつ仲良くなっていけば大丈夫です。では、今日の講義はここまでです。お疲れ様でした。
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。


