LangChainとOpenAIのAPIを使ってLLMプログラミングに入門する

Python

はじめに

LangChainは大規模言語モデル(LLM)を簡単に扱えるライブラリです。この記事では、LangChainを使って簡単なLLMプログラムを動かす方法を紹介します。

LangChainライブラリの種類

LangChainで使えるライブラリには以下のようなものがあります。それぞれのライブラリは異なるAIモデルやサービスを提供しており、用途に応じて選択できます。
どのサービスを使うにしても、各サービスのAPIキーを取得しておく必要があります。

  1. langchain: 基本的なLLMのチェーンを作成できます。
  2. langchain_openai: OpenAIのAPIを通じて、GPTシリーズやo1などのモデルを利用できます。
  3. langchain_anthropic: AnthropicのAPIを通じて、Claudeシリーズのモデルを利用できます。
  4. langchain_google_genai: GoogleのAPIを通じて、Geminiなどのモデルを利用できます。

この記事では基本のライブラリであるlangchainと、よく使われるlangchain_openaiを使用します。

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

以下のコマンドでlangchainとlangchain_openaiをインストールします。

pip install langchain langchain_openai

実際のコード

ライブラリのインポート

まずは必要なライブラリをインポートします。

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

PromptTemplateは、ユーザの入力を受け取り、モデルに渡すためのテンプレートを作成するためのクラスです。また、StrOutputParserは、モデルの出力を文字列としてパースするものです。

APIキーの設定

OpenAIのAPIキーは取得済みであるという前提で、環境変数「OPENAI_API_KEY」にAPIキーを設定しておきます。

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

APIキーを平文で打つのに抵抗がある人は、dotenv_pythonというライブラリを使って、「.env」ファイルにAPIキーを記述するなどの方法もあります。ここでは割愛します。

テンプレートの作成

LLMにはプロンプトという質問文を渡す必要がありますが、これをテンプレート化することができます。

prompt = PromptTemplate.from_template(
"""
以下のユーザの質問に対して、適切な回答をしてください。

ユーザの質問: {input}
"""
)

今回はこのようにただ質問を渡すだけのテンプレートにしています。RAGなどの応用を考えると、テンプレートの中に参照するコンテキストと質問文の2つを渡すようにカスタマイズしたりする場面もあります。

モデル

次に、使用するモデルを指定します。今回はgpt-4o-miniを使用します。

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

ChatOpenAIクラスは、OpenAIのChat Completion APIを使用して、対話型のチャットモデルを扱うことができます。チャット形式でないOpenAIクラスもありますが、こちらは1つのテキスト入力に対して1つのテキスト出力を返すだけのものです。

チェーンの作成

チェーンとは、テンプレート、モデル、パーサーを組み合わせて、ユーザの入力を受け取って出力結果を返す一連の処理を繋げたものです。LangChainはこのチェーンを作成しやすくするための様々なメソッドがあります。作りたい機能に合わせてLLMプログラムを柔軟にカスタマイズできるのがLangChainの特徴です。

chain = (
    prompt
    | model
    | StrOutputParser()
)

StrOutputParser()は、モデルの出力を文字列としてパースするものです。ただ文字列の出力を取り出すだけですが、このパーサーの部分をPydanticOutputParserなどに置き換えることで、JSONなどのフォーマットにカスタマイズすることができます。

このようにチェーンのパーツを組み合わせてカスタマイズできるようになっているのがLangChainの特徴です。

チェーンの実行

チェーンを実行するには、invoke()メソッドを使用します。

result = chain.invoke({"input": "LangChainを使って何ができるの?"})
print(result)

resultには、モデルの出力結果(回答)が格納されています。

プログラムの実行

上記のコードをllm_example.pyというファイルに保存して実行してみます。

python llm_example.py

すると以下のような結果が出力されます。実行結果は毎回多少異なります。

LangChainは、自然言語処理(NLP)や生成モデルを活用したアプリケーションを構築するためのフレームワークです。具体的には、以下のようなことができます。

1. **対話型アプリケーションの構築**: チャットボットやバーチャルアシスタントを作成し、ユーザーとの自然な対話を実現できます。

2. **情報検索**: 大量のデータから関連情報を抽出し、ユーザーの質問に対して適切な回答を提供することができます。

3. **テキスト生成**: 自然な文章を生成するアプリケーションを作成し、コンテンツ作成や自動応答システムに利用できます。

4. **データの前処理と分析**: テキストデータのクリーニングや分析を行い、機械学習モデルのトレーニングに役立てることができます。

5. **カスタムモデルの統合**: 既存のNLPモデルやAPIと統合し、特定のニーズに応じた機能を追加することができます。

LangChainは、これらの機能を簡単に実装できるように設計されており、開発者が迅速にプロトタイプを作成したり、商用アプリケーションを構築したりするのに役立ちます。

コード全体

コードの全体を再度載せておきます。

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

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

prompt = PromptTemplate.from_template(
"""
以下のユーザの質問に対して、適切な回答をしてください。

ユーザの質問: {input}
"""
)

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

chain = (
    prompt
    | model
    | StrOutputParser()
)

result = chain.invoke({"input": "LangChainを使って何ができるの?"})
print(result)

まとめ

LangChainを使うことで、簡単にLLMを活用したプログラムを作成することができます。この記事を参考に、自由にLLMを活用したプログラムを作成してみてください。

さらに学びたい方へ

Udemyのこちらの動画が勉強になります。

(Udemy動画は結構高いものもありますが、セールで80%OFFになったりもするので、セールのタイミングで一気に購入してしまうのがおすすめです)

コメント

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