15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LangChainの基礎 - Streamlitを用いた外部検索付きLLMのチャットデモまでの道のり①

15
Last updated at Posted at 2025-11-28

はじめに

こんにちは、新卒エンジニアです。
最近LLMの勉強を始めようと考えました。そうはいってもLLMに関して右左もわからないのが現状です。ということで、最終ゴールを「Streamlitを用いた外部検索付きLLMのチャットデモ」を作ることとしてそれまでの道のりを記事にしようと思います。第一回の本記事では、LLM開発のフレームワークであるLangChainの基礎について書いてみました。

LangChainとは

Pythonのライブラリの一つで、LLM開発で用いられるフレームワークです。LangChainは「プロンプト管理」「外部ツール/検索連携」「会話メモリ」「RAG」「出力整形」を共通インターフェースで素早く組み合わせることができます。LangChainには様々な機能がありますが、今回は基本的な概念について触れています。

LangChainを使ってみる

今回はローカルでの実装のためOllamaのllama3を使用します。
Ollama は、ローカル環境で LLM を簡単に実行できるオープンソースツールで、Docker のように簡単にモデルを管理・実行できる点が特徴です。

モデルI/O

LLM入出力を統一インターフェース(Runnable)で扱うことができます。

llm = ChatOllama(model="llama3", temperature=0)

ここではローカルの llama3 モデルを LangChain の Runnable (統一インターフェース) として初期化し、パラメータ temperature=0 で生成のランダム性を最小化しています。

ChatPromptTemplate

ChatPromptTemplateは、LLM(大規模言語モデル)に渡す「会話形式のメッセージ」をテンプレートとして管理するLangChainの機能です。

  • 複数のメッセージ(system, user, assistantなど)をリストで定義できる
  • プレースホルダ(例: {question})を使い、実行時に値を埋め込む
  • LLMが期待する「会話履歴」形式に自動変換してくれる
prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたは簡潔に答えるアシスタントです。"),
    ("user", "{question}")
])

from_messagesは、ChatPromptTemplate のクラスメソッドです。
会話形式のメッセージ(system, user, assistantなど)をリストで受け取り、テンプレートを作成します。

  • ("system", ...):モデルの振る舞いを指示
  • ("user", "{question}"):ユーザーの質問(後で値が埋まる)

Chain

Chainは、LangChainの基本的な構造で「複数の処理(Runnable)を順番につなげて一連の流れを作る仕組み」です。

  • 入力(例: 辞書型データ)を、複数の処理(プロンプト生成 → モデル呼び出し)に順番に渡す
  • 各処理は「Runnable」と呼ばれ、|(パイプ)でつなぐことでデータが流れる
chain = prompt | llm
  • prompt:入力データ({"question": ...})を会話形式メッセージに変換
  • llm:そのメッセージを使ってモデル(llama3)が回答を生成

invoke

invokeは、Runnable(プロンプト・モデル・チェーンなど)に入力を渡して、1回だけ処理を実行するためのメソッドです。
Chainや各コンポーネント(PromptTemplate, LLMなど)で使えます。
これにより「入力→出力」の流れを簡単に実現できます。

if __name__ == "__main__":
    result = chain.invoke({"question": "LangChainって何ですか?"})
    print(result.content)

この部分はPythonスクリプトとして直接実行されたときだけ動くメイン処理です。

全体のコード

import os
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate

llm = ChatOllama(model="llama3", temperature=0)

prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたは簡潔に答えるアシスタントです。"),
    ("user", "{question}")
])

chain = prompt | llm

if __name__ == "__main__":
    result = chain.invoke({"question": "LangChainって何ですか?"})
    print(result.content)

実際に実行してみます。

$ python langchain_sampl01.py
LangChainは、AIが自然言語を生成するためのフレームワークです。多くのNLPモデルを組み合わせて、長文や会話のような自然言語を生成することができます。

上手く動作しましたね。いい感じです。

最後に

今回は超初心者向けのLangChain解説を行いました。LangChainとはなんぞやというところから始めたので、今回の記事をきっかけにさらに様々な機能を使ってみようと思っています。
次回の記事では、今回作ったものをパワーアップさせ、会話履歴の保持や、ツール呼び出しなどが出来たらいいなと考えています。

参考

次回の記事

15
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?