アーパボー(ARPABLE)
アープらしいエンジニア、それを称賛する言葉・・・アーパボー
AI

たとえ話で学ぶLangChainとOpenAI GPT API

たとえ話で学ぶLangChainとOpenAI GPT API

この記事では、LangChainとOpenAI GPT APIの基本概要や主要機能を、わかりやすいたとえ話を用いて解説します。さらに、これらのツールを活用した具体的なアプリケーション開発方法や実装例を紹介し、開発プロセスの効率化や柔軟性の向上について詳しく説明します。
初心者でも理解しやすい内容で、AIアプリ開発の基礎から応用までを網羅します。

LangChainとOpenAI GPT APIは「映画監督と俳優」

LangChainは、大規模言語モデル(LLM)を活用したアプリケーション開発を効率化するフレームワークです。一方、OpenAI GPT APIは、テキスト生成や質問応答などの機能を提供する強力なAIエンジンです。

この関係を映画制作にたとえると以下のようになりそれぞれが連携することで洗練されたAIアプリが完成します。

  • LangChain = 映画の監督と脚本
  • OpenAI API = 優れた俳優

たとえ話:
LangChainは「映画の監督と脚本」のようなもので、映画の構成やシーンの流れを決めます。一方、OpenAI APIは「優れた俳優」のようなもので、監督の指示に従い、実際に演技(テキスト生成)を行います。LangChainを使うことで、監督(開発者)はストーリー(プロンプトやデータの流れ)を組み立て、俳優(OpenAI API)に適切な演技をさせることで、完成度の高い作品(AIアプリ)を作ることができます。

参考:
LangChainの公式ウェブサイト: https://www.langchain.com/ 
OpenAI GPT APIの公式ドキュメント:、 https://platform.openai.com/docs/models/gpt 

LangChainの概要と基本機能

LangChainの役割と利点

LangChainは、大規模言語モデル(LLM)を使ったアプリケーション開発を効率化するフレームワークです。主な特徴は以下の通りです:

LLMと外部データソースやツールの連携を簡単にする

LangChainは、大規模言語モデル(LLM)と外部のデータベースやAPIなどを簡単に接続できる機能を提供します。これにより、LLMの能力を拡張し、より正確で有用な情報を生成できます。

たとえ話:
LangChainは、料理人(LLM)と食材供給者(外部データソース)をスムーズにつなぐ仲介人のようなものです。料理人は必要な食材をすぐに手に入れ、より美味しい料理(情報)を作ることができます。

開発プロセスを簡略化し、柔軟性が高い

LangChainは、LLMを使ったアプリケーション開発を効率化するためのツールやコンポーネントを提供します。これにより、開発者は複雑な機能を簡単に実装でき、様々なニーズに柔軟に対応できます。

たとえ話:
LangChainは、レゴブロックのようなものです。開発者は必要な機能(ブロック)を選んで組み合わせるだけで、複雑な構造(アプリケーション)を簡単に作ることができます。また、必要に応じて簡単に組み替えることもできます。

多様な統合オプションを提供

LangChainは、様々なLLM、データソース、ツールとの統合をサポートしています。これにより、開発者は自分のプロジェクトに最適なコンポーネントを選択し、カスタマイズされたソリューションを構築できます。

たとえ話:
LangChainは、多機能な万能調理器具のようなものです。料理人(開発者)は、この一つの道具で様々な調理法(統合オプション)を使い分けることができ、多様な料理(アプリケーション)を作ることができます。

LangChainでできること

LangChainを使用して、以下のような高度なアプリケーションを開発できます:

複雑な質問応答システム

  • 社内文書やマニュアルを対象とした検索システム:従業員が業務関連の質問をすると、関連文書から適切な回答を抽出して提示します
  • 多言語対応の顧客サポートチャットボット:複数言語での問い合わせに対応し、製品情報や troubleshooting ガイドから回答を生成します

テキスト要約ツール

  • 長文の論文や報告書の自動要約:研究者や学生向けに、長い学術論文の主要ポイントを抽出してコンパクトにまとめます
  • ニュース記事のダイジェスト生成:複数のニュースソースから記事を収集し、重要なトピックスを簡潔に要約します

コンテンツ生成アプリケーション

  • パーソナライズされたマーケティングコピーの作成:顧客データを分析し、個々の嗜好に合わせた商品説明や広告文を自動生成します
  • ソーシャルメディア投稿の自動作成:ブランドのガイドラインに沿って、様々なプラットフォーム向けの投稿文を生成します

自律的なタスク実行エージェント

  • データ分析の自動化:与えられたデータセットに対して、適切な分析手法を選択し、結果をレポートにまとめるAIエージェントを構築します
  • マルチステップのタスク実行:複数の段階を要する複雑なタスク(例:旅行計画の立案)を自動的に実行するエージェントを開発します

これらのアプリケーションは、LangChainの機能(Chains、Agents、Memory等)を組み合わせることで実現可能です。例えば、質問応答システムでは外部データソースとの連携やメモリ機能を活用し、自律エージェントではツールの選択や実行を自動化することで、より高度で効率的なAIソリューションを構築できます

具体的な活用例としては、カスタマーサポート、データ分析、研究支援などがあります。

LangChainの主要な機能とコンポーネント

❶ Models

機能の概要:
LLMやチャットモデルなど、さまざまな言語モデルへのインターフェースを提供し、OpenAI GPTやGoogle PaLMなどの外部APIやローカルモデルを統一的に扱えます。

たとえ話:「いろいろな料理を作れるキッチンの調理器具
フライパンやオーブン、電子レンジなど、目的に応じて使う調理器具が違います。
Modelsは、これらの「調理器具」を一つの棚で管理していて、必要なときにすぐに取り出して使えるようにするイメージです。

❷ Prompts

機能の概要:
LLMに指示を与えるためのテンプレートを管理します。プロンプトの作成やフォーマット、最適化を支援し、動的な生成も可能です。

たとえ話:「レストランのレシピカード
料理を作るにはレシピカードに書かれた指示が必要です。
Promptsはこの「レシピカード」に当たり、必要な材料(テキスト入力)や調理手順(指示)を整理して、Models(調理器具)が正しい料理を作りやすくします。

❸ Chains

機能の概要:
複数のLLM呼び出しや他の操作を連結して、より複雑なワークフローを構築します。単一のタスクを超えた多段階の処理を実現できます。

たとえ話:「ベルトコンベア式の調理ライン
ハンバーガーを作る際、パンを並べる → パテを挟む → ソースをかける → 野菜を挟む、
といったステップが連続して行われます。
Chainsは、複数の手順を1つの流れに組み込み、順番に仕上げていく「ベルトコンベア」のようなイメージです。

➍ Memory

機能の概要:
会話の履歴や重要な情報を保持し、後続の処理に活用する機能を提供します。文脈を考慮した応答や長期的な情報の維持が可能です。

たとえ話:「料理メモ帳や倉庫
今日作った料理の味付けや使った材料をメモしておけば、次に同じ料理を作るときや別のアレンジをするときに役立ちます。
Memoryは、会話や処理で得た情報を蓄えておき、後から参照することで、より文脈に合った結果を出せるようにしています。

❺ Indexes

機能の概要:
外部データソースをインデックス化し、LLMがアクセスできるようにします。大量のテキストデータを効率的に検索・利用できます。

たとえ話:「大型食材庫や図書館の書架
大きなレストランの食材庫や図書館の本棚には、膨大な食材や本が収納されています。
Indexesはこの「棚」にあたる部分で、必要な情報をすぐ取り出せるよう整理しているイメージです。

❻ Agents

機能の概要:
LLMが自律的にタスクを実行するためのフレームワークです。目標に応じて適切なツールを選択し、複雑な問題解決を行うことができます。

たとえ話:「熟練シェフ(または店長)
熟練シェフは、レストランのキッチンでどの調理器具(Models)を使い、どのレシピ(Prompts)を参照し、どの順番(Chains)で作業を進めるかを判断します。
Agentsは、この「熟練シェフ」のように目的を見据えて自律的に必要な工程や道具を選び、ベストな料理(解決策)を出すよう指示を行います。

これらのコンポーネントを組み合わせることで、LangChainは

  • 「どの調理器具(Models)を使い、どのレシピ(Prompts)をもとに料理を作り、
  • 工程(Chains)をどう組み立てるか、
  • また情報をどう整理(Indexes)し、
  • 必要に応じて蓄積された知識(Memory)を使い、
  • 最終的に誰がそれをまとめて判断するのか(Agents)」

といった流れを、一つの仕組みとして構築できるわけです。
これにより、複雑なLLMアプリケーションを一気通貫で実現しやすくなります。

OpenAI GPT APIの基本

OpenAI APIの利用開始手順

  1. OpenAIのウェブサイトでアカウントを作成
  2. APIキーを取得
  3. プログラミング言語(例:Python)を使ってAPIを呼び出す

APIキーの管理方法

APIキーは重要な情報なので、以下の方法で安全に管理します:

  • 環境変数として保存
  • GitHubなどにアップロードする際は注意
  • 定期的にAPIキーをローテーション(再生成)する

APIの基本的な使い方

  1. APIエンドポイントにリクエストを送信
  2. リクエストには使用するモデル、プロンプト、パラメータを含める
  3. APIからのレスポンスを受け取り、生成されたテキストを利用

Google Colabを使って実装してみよう

Google Colabとは

Google Colabは、ブラウザ上でPythonコードを実行できる無料のクラウドベース環境です。

主な特徴は以下の通りです。

  • 環境構築不要
  • GPUやTPUの利用可能
  • 多くのPythonライブラリがプリインストール済み
  • Google Driveと連携可能

使用方法

  1. Googleアカウントでログイン
  2. 新しいノートブックを作成
  3. コードセルにPythonコードを記述・実行
  4. 必要なライブラリをpipでインストール

GPT APIを使用した実装例

シンプルな対話型チャットボット

本記事では、OpenAIのGPT APIを使用して、簡単な対話型チャットボットを実装する方法を解説します。

1,コード実装

以下のコードは、ユーザーとAIの対話を維持しながら応答を生成するシンプルなチャットボットの実装例です。

import openai
import os

def chat_with_gpt():
    """
    シンプルなチャットボットを実装し、ユーザーと継続的に対話を行う。
    終了するには 'quit' を入力。
    """
    openai.api_key = os.getenv("OPENAI_API_KEY")  # 環境変数からAPIキーを取得
    messages = []
    
    print("チャットボットを開始します。終了するには 'quit' と入力してください。")
    
    while True:
        user_input = input("あなた: ")
        if user_input.lower() == 'quit':
            print("チャットを終了します。")
            break
        
        messages.append({"role": "user", "content": user_input})
        
        try:
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=messages
            )
            bot_reply = response['choices'][0]['message']['content']
            print(f"ボット: {bot_reply}")
            messages.append({"role": "assistant", "content": bot_reply})
        except Exception as e:
            print("エラーが発生しました:", e)

# チャットボットの実行
chat_with_gpt()
2,コードの解説
  1. APIキーの設定: 環境変数 OPENAI_API_KEY からAPIキーを取得。
  2. メッセージのリスト管理: messages リストを使用し、過去の会話履歴を保存。
  3. ユーザー入力の受付: input() を使用し、ユーザーの発言を受け取る。
  4. APIリクエストの送信: openai.ChatCompletion.create() で、GPT-3.5-turbo にメッセージを送信し、応答を取得。
  5. エラーハンドリング: APIリクエスト中にエラーが発生した場合に備え、try-except 文を使用。
  6. ループ処理: while True により、ユーザーが quit を入力するまで継続的に対話を行う。
3,実行例
チャットボットを開始します。終了するには 'quit' と入力してください。
あなた: こんにちは
ボット: こんにちは!今日はどんなお手伝いができますか?
あなた: Pythonでリストをソートする方法を教えて
ボット: Pythonでリストをソートするには、`sort()` メソッドを使用できます。

`sort()` メソッドを使用(リストを直接変更):
```python
my_list = [3, 1, 4, 1, 5, 9, 2, 6]
my_list.sort()
print(my_list)  # [1, 1, 2, 3, 4, 5, 6, 9]

あなた: quit
ボット: ありがとうございました!またお話ししましょう。
チャットを終了します。

 

本記事では、GPT APIを活用したシンプルなチャットボットの実装について解説しました。本実装は、ユーザー入力に対してリアルタイムに応答し、会話のコンテキストを保持できる点が特徴です。
システムプロンプトの変更や機能の拡張により、特定の専門知識を持つAIアシスタントへの応用も可能です。また、エラーハンドリングを組み込むことで、より堅牢な実装となります。

今後はLangChainなどのフレームワークと統合することで、より高度なAIアプリケーションの開発が期待されます。

LangChainとOpenAI APIの連携

環境設定とライブラリのインストール手順

LangChainとOpenAI APIを連携させるのは、まるでレゴブロックを組み立てるようなものです。まずは、必要なピース(ライブラリ)を用意しましょう。

1,必要なライブラリのインストール:

pip install langchain openai

これは、おもちゃ屋さんでレゴセットを購入するようなものです。

2,APIキーの設定:

export OPENAI_API_KEY=’YOUR_API_KEY’

これは、レゴセットの説明書を安全な場所に保管するようなものです。

3,Pythonでの環境変数の使用:

import os
api_key = os.getenv(‘OPENAI_API_KEY’)

これは、必要なときに説明書を取り出すようなものです。

Chainを使った実装方法とコード

LangChainのChainは、複雑なレゴ作品を作るための設計図のようなものです。単純なブロックの組み合わせから、驚くほど複雑な構造を作り出せます。以下は、AI搭載の歯ブラシを製造する会社の名前と説明を生成する例です:

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.chains import LLMChain, SimpleSequentialChain

# OpenAI LLMの初期化(温度設定で創造性を調整)
llm = OpenAI(temperature=0.7)

# 会社名生成チェーン
name_prompt = PromptTemplate(
    input_variables=["product"],
    template="AIを使って{product}を作る会社の良い名前は何ですか?"
)
name_chain = LLMChain(llm=llm, prompt=name_prompt)

# 会社説明生成チェーン
description_prompt = PromptTemplate(
    input_variables=["company_name"],
    template="{company_name}という会社の20字程度の説明文を書いてください。"
)
description_chain = LLMChain(llm=llm, prompt=description_prompt)

# チェーンの連結(レゴブロックの組み立て)
overall_chain = SimpleSequentialChain(
    chains=[name_chain, description_chain],
    verbose=True
)

# チェーンの実行(完成したレゴ作品のお披露目)
product = "AI搭載の歯ブラシ"
result = overall_chain.run(product)

# 実行結果を出力
print(result)

 

このコードは、次のような流れで動作します:

  1. 会社名の生成:AI搭載の歯ブラシを製造する会社の名前を考えます。
  2. 会社の説明文の生成:生成された会社名に基づいて、簡潔な説明文を作成します。

例えば、以下のような結果が得られるかもしれません:

会社名:スマイルAIブラッシュ
説明文:最先端のAI技術を活用し、個別化された歯磨き体験を提供する革新的な歯ブラシメーカー。

 

このように、LangChainを使うことで、複数のAI処理を簡単に連携させ、より複雑で高度なタスクを実行できます。
それはまるで、単純なレゴブロックから複雑な建造物を作り上げるようなものです。各ブロック(Chain)は独立して機能しますが、それらを組み合わせることで、想像力豊かなAIアプリケーションを構築できるのです。

まとめ

LangChainとOpenAI APIを活用することで、LLM(大規模言語モデル)を駆使したアプリケーション開発が大幅に効率化できます。LangChainは、LLMと外部データやツールをスムーズに統合し、柔軟な開発を可能にするフレームワークです。一方、OpenAI APIは、高性能な言語モデルを手軽に利用できる「万能ツール」として、テキスト生成や質問応答、対話型アプリケーションの開発を支えます。

特に、LangChainの Chains(処理の連結)Agents(自律的なタスク実行) を活用することで、単純なプロンプト応答を超えた高度なAIシステムを構築できます。また、Google Colabを利用すれば、環境構築不要で誰でも簡単に試せるため、AI開発のハードルが大幅に下がります。

今後、LangChainと自己改善型RAG(Retriever-Augmented Generation)などの技術を組み合わせることで、より高度なAIエージェントや業務支援システムの開発が期待されます。AIの活用を考えている方は、ぜひこれらのツールを試しながら、自分のプロジェクトに適用してみてください!

以上

筆者プロフィール
ケニー狩野(中小企業診断士、PMP、ITコーディネータ)
キヤノン(株)でアーキテクト、プロマネとして多数のプロジェクトをリード。
現在、株式会社ベーネテック代表、株式会社アープ取締役、一般社団法人Society 5.0振興協会評議員ブロックチェーン導入評価委員長。
これまでの知見を活かしブロックチェーンや人工知能技術の推進に従事。趣味はダイビングと囲碁。
2018年「リアル・イノベーション・マインド」を出版。