LangChainとOpenAI APIでLLMプログラミングに入門する

Python

はじめに

LLMをPythonから使うだけなら、OpenAI APIを直接呼び出すこともできます。ただ、実際に少し作り込もうとすると、すぐに次のような要素が出てきます。

  • プロンプトをテンプレート化したい
  • モデルの呼び出し部分を差し替えやすくしたい
  • 出力を文字列やJSONとして扱いやすくしたい
  • 将来的には検索、外部ツール、履歴管理なども組み合わせたい

このような処理を、部品としてつなげやすくするためのライブラリが LangChain です。この記事では、まず一番小さな例として、LangChainとOpenAI APIを使って、質問に答えるLLMプログラムを作ります。

この記事のコードは、2026年7月時点のLangChain/OpenAI APIまわりの書き方を前提にしています。LangChainは更新が速いので、動かない場合はインストール済みパッケージのバージョンと公式ドキュメントも確認してください。

この記事で作るもの

作る処理はとても単純です。ユーザーの質問を受け取り、プロンプトに埋め込み、OpenAIのチャットモデルに渡し、返ってきた回答を文字列として受け取ります。

LangChainでは、この流れを次のようにつなげます。

chain = prompt | model | parser

最初はこの1行の意味が少し不思議に見えるかもしれませんが、考え方はシンプルです。入力文を作る部品、モデルを呼ぶ部品、出力を整える部品を、左から右へ順番につないでいるだけです。

ライブラリのインストール

まず、必要なライブラリをインストールします。

pip install langchain langchain-openai

Pythonからimportするときの名前は、langchain_openai です。pipで入れるパッケージ名は langchain-openai、import名は langchain_openai なので、ここは少し紛らわしいところです。

APIキーの設定

OpenAI APIを使うため、環境変数 OPENAI_API_KEY を設定します。ターミナルで設定するなら、例えば次のようにします。

export OPENAI_API_KEY="your_api_key"

Jupyter Notebookなどで試すだけなら、Pythonコード内で一時的に設定することもできます。

import os

os.environ["OPENAI_API_KEY"] = "your_api_key"

ただし、実際の開発ではAPIキーをコードに直接書かない方が安全です。公開リポジトリに置く可能性がある場合は、.env ファイルや環境変数で管理するのが無難です。

最小コード

まずは、全体像を先に見ます。

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

prompt = PromptTemplate.from_template(
    """
以下のユーザーの質問に対して、初心者にもわかるように答えてください。

質問: {question}
"""
)

model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
parser = StrOutputParser()

chain = prompt | model | parser

result = chain.invoke({"question": "LangChainを使うと何が便利ですか?"})
print(result)

このコードを実行すると、question に入れた質問がプロンプトに埋め込まれ、OpenAIのモデルに渡されます。返ってきた回答は文字列として result に入ります。

PromptTemplateで入力文を作る

まずはプロンプトです。

prompt = PromptTemplate.from_template(
    """
以下のユーザーの質問に対して、初心者にもわかるように答えてください。

質問: {question}
"""
)

{question} の部分が、あとで差し込まれる変数です。例えば、次のように実行したとします。

chain.invoke({"question": "LangChainを使うと何が便利ですか?"})

すると、モデルにはおおむね次のような文章が渡されます。

以下のユーザーの質問に対して、初心者にもわかるように答えてください。

質問: LangChainを使うと何が便利ですか?

つまり、PromptTemplate毎回変わる入力を、決まった形のプロンプトに差し込むための部品です。

ChatOpenAIでモデルを呼び出す

次に、モデルを用意します。

model = ChatOpenAI(model="gpt-4o-mini", temperature=0)

ここでは、OpenAIのチャットモデルをLangChain経由で呼び出しています。temperature=0 は、回答のばらつきを抑えたいときによく使う設定です。毎回なるべく安定した回答がほしい場合は、まず 0 にしておくと挙動を確認しやすくなります。

StrOutputParserで文字列として受け取る

モデルから返ってくる出力は、そのままだとLangChainのメッセージオブジェクトです。ブログ記事や簡単なスクリプトでは、まず文字列として扱いたいことが多いので、ここでは StrOutputParser を使います。

parser = StrOutputParser()

この部品を最後につなげておくと、モデルの回答本文だけを文字列として取り出しやすくなります。

chainで部品をつなぐ

ここまでの3つをつなげます。

chain = prompt | model | parser

この | は、LangChainの処理を左から右へ渡していくための書き方です。流れとしては、次のようになります。

入力データ
  ↓
PromptTemplateでプロンプト化
  ↓
ChatOpenAIでモデルに送信
  ↓
StrOutputParserで文字列化
  ↓
結果を受け取る

最初は少し独特に見えますが、慣れると「処理の流れ」がかなり読みやすくなります。

実行する

チェーンを実行するときは、invoke を使います。

result = chain.invoke({"question": "LangChainを使うと何が便利ですか?"})
print(result)

PromptTemplate の中で {question} を使っているので、invoke に渡す辞書にも question というキーを指定します。キー名がずれていると、プロンプトに値を差し込めずエラーになります。

よくあるつまずき

pipの名前とimport名が違う

インストールは次のようにします。

pip install langchain-openai

一方、Pythonコードでは次のようにimportします。

from langchain_openai import ChatOpenAI

-_ の違いで混乱しやすいので注意してください。

APIキーが設定されていない

OPENAI_API_KEY が設定されていないと、モデル呼び出し時に認証エラーになります。ターミナルで実行している場合は、そのターミナル内で環境変数が設定されているか確認してください。

echo $OPENAI_API_KEY

ライブラリのバージョンでimport先が変わる

LangChainは更新が速いライブラリです。古い記事では、次のようなimportが使われていることがあります。

from langchain.prompts import PromptTemplate
from langchain.schema.output_parser import StrOutputParser

最近の書き方では、この記事のように langchain_core からimportする形がよく使われます。

from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

エラーが出る場合は、まずインストール済みのLangChainのバージョンと、公式ドキュメントの書き方を確認するとよいです。

まとめ

この記事では、LangChainとOpenAI APIを使って、最小構成のLLMプログラムを作りました。重要なのは、次の3つです。

  • PromptTemplate で入力をプロンプトに変換する
  • ChatOpenAI でモデルを呼び出す
  • StrOutputParser で出力を文字列として受け取る

この3つを prompt | model | parser のようにつなぐと、入力から出力までの流れを1つのチェーンとして扱えます。ここまで理解できれば、次は会話履歴を持たせたり、外部データを検索して回答させたり、ツール実行と組み合わせたりする方向に進めます。LangChainは機能が多いですが、最初はこの小さなチェーンの理解から始めると見通しがよくなります。

さらに学びたい方へ

LangChainのコードを読みやすくするには、Pythonの関数や型ヒントに慣れておくと役立ちます。

Pythonの型ヒント(型アノテーション)のすすめ https://tobarilabo.com/type_hint/

独学でも十分進められますが、動画で流れを見たい場合は以下の講座も参考になります。

コメント

タイトルとURLをコピーしました