ChatGPT×LangChain GPT-4でGoogle検索結果をもとに回答を作成する方法

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

今回は、GPT-4とLangChainフレームワークを組み合わせた対話型アプリケーションの実装方法を解説します。

LangChainは、言語モデルの機能を拡張し、インターネット上の最新情報を取得して回答を生成することができます。これをOpenAIの最新言語モデルGPT-4と組み合わせることにより、GPT-4の学習データに含まれていない最新情報も含めた回答を得ることが可能になります。

GPT-4をLangChainと組み合わせることで、最新情報を元にした回答が可能。

Pythonを使ったプログラミングの練習としてだけではなく、情報収集ツールとしてもぜひ活用してみてください。

目次

ChatGPTとは

ChatGPTは、OpenAIが提供する自然言語生成モデルです。GPT(Generative Pre-training Transformer)と呼ばれるモデルのアーキテクチャを採用しています。

GPTは、Transformerと呼ばれるニューラルネットワークを使用して、文書や言語処理タスクでのテキスト生成を行うモデルです。GPTは、大量のテキストデータを学習し、そのデータをもとに新しい文章を生成することができます。

ChatGPTは、GPTをもとにしたモデルであり、対話型システムやチャットボットなどで使われることを想定して開発されています。対話を続けることができるようになっており、ユーザーが入力するテキストに対して、自然で返答ができるようになっています。

今回は2023年5月現在、ChatGPT Plusでのみ使用可能となっている最新の言語モデルGPT-4のAPIを使ったアプリケーションの実装方法について解説します。

OpenAI APIキーの取得

PythonのプログラムからChatGPTを使用するためには、OpenAIのAPIキーを取得する必要があります。
取得の手順については以下の記事で解説しています。

オライリー・ジャパン
¥3,960 (2024/07/04 09:11時点 | Amazon調べ)

LangChainとは

LangChain は、言語モデルを利用したアプリケーションを開発するためのフレームワークです。
今回はこのLangChainのエージェントを使って、必要な最新情報をGoogle検索エンジンで取得し、ChatGPTに入力して回答を生成します。

LangChainの詳細については以下の記事で解説しています。

Google Programmable Search EngineのAPIキーを取得

LangChainを使ってWeb上の情報を収集する際に、Googleの検索エンジンAPIを経由して取得します。
以下の記事でGoogleの検索エンジンIDとAPIキーの取得方法について解説しますので、事前に取得を済ませておいてください。

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

今回のアプリケーション構築に必要なライブラリをインストールします。
以下のコマンドを実行してインストールしてください。

OpenAIのライブラリ

pip install openai

LangChainのライブラリ

pip install langchain

Googleの検索エンジンのライブラリ

pip install google-api-python-client

作成したPythonコード

ここからは実際にPythonでコードを実装する方法について解説します。

Pythonコード解説

このPythonプログラムは、GPT-4とLangChain、Google検索エンジンを組み合わせた対話型アプリケーションを実装しています。

LangChainは、言語モデルの機能を拡張するためのフレームワークで、このアプリケーションではユーザーが質問を入力すると、GPT-4を使って適切な回答を生成し、結果を表示します。

環境変数の設定

最初に、OpenAI APIキー、Google検索ID、およびGoogle APIキーを環境変数として設定しています。これにより、LangChainがこれらのAPIにアクセスできるようになります。

# 環境変数の準備
import os
os.environ["OPENAI_API_KEY"] = "OpenAIのAPIキー"
os.environ["GOOGLE_CSE_ID"] = "Googleの検索ID"
os.environ["GOOGLE_API_KEY"] = "GoogleのAPIキー"

LLMの設定

GPT-4を使用するためのLarge Language Model(LLM)オブジェクトを作成しています。
ここで、使用する言語モデルとしてGPT-4を設定します。

# LLMの設定
llm = OpenAI(model_name="gpt-4")

ツールのロード

このアプリケーションでは、Google検索を利用するために、google-searchツールをロードしています。

# 使用するツールをロード
tools = load_tools(["google-search"], llm=llm)

エージェントの初期化

initialize_agent()関数を使って、使用するツールとLLMを指定し、LangChainエージェントを初期化しています。このエージェントは、ユーザーからの入力を受け取り、適切な回答を生成する役割を担います。

# エージェントを初期化
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)

会話履歴の管理

ユーザーとエージェントの会話履歴をconversation_history変数に格納しています。これにより、過去の会話の内容を考慮して回答を生成することができます。

# 会話履歴を格納するための変数
conversation_history = ""

入力の受け付けと回答の生成

メインループでは、ユーザーからの入力を受け付け、それを会話履歴に追加します。

次に、エージェントに会話履歴を与えて回答を生成し、エラーが発生した場合はtry-except文で処理します。

最後に、生成された回答を表示し、会話履歴に追加します。

if __name__ == "__main__":
    ...

作成した全体のソースコード

作成した全体のPythonコードは以下の通りです。

from langchain.llms import OpenAI
from langchain.agents import load_tools
from langchain.agents import initialize_agent
import os

# 環境変数の準備
os.environ["OPENAI_API_KEY"] = "OpenAIのAPIキー"
os.environ["GOOGLE_CSE_ID"] = "Googleの検索ID"
os.environ["GOOGLE_API_KEY"] = "GoogleのAPIキー"

# LLMの設定
llm = OpenAI(model_name="gpt-4")

# 使用するツールをロード
tools = load_tools(["google-search"], llm=llm)

# エージェントを初期化
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)

# 会話履歴を格納するための変数
conversation_history = ""

if __name__ == "__main__":
    while True:
        # ユーザーからの入力を受け付ける
        user_input = input("質問を入力してください (終了するには 'exit' と入力してください):")
        
        # 入力が 'exit' の場合、ループを終了
        if user_input.lower() == "exit":
            break
        
        # 会話履歴にユーザーの入力を追加
        conversation_history += f"ユーザー: {user_input}\n"
        
        # エージェントに会話履歴を与えて回答を生成
        try:
            response = agent.run(conversation_history)
        except ValueError as e:
            # エラーが "Could not parse LLM output: `" で始まる場合、エラーメッセージを整形して response に格納
            response = str(e)
            if not response.startswith("Could not parse LLM output: `"):
                raise e
            response = response.removeprefix("Could not parse LLM output: `").removesuffix("`")
        
        # 回答を表示
        print("回答:", response)
        
        # 会話履歴にエージェントの回答を追加
        conversation_history += f"ChatGPT: {response}\n"

発生したエラー

GPT-4の回答生成時に以下のようなエラーが発生しました。

ValueError: Could not parse LLM output:

解決策が以下のページに掲載されています。

LangChainで取得したGoogleの検索結果のデータに、シングルクォーテーションが入っていることが原因のようなので、以下のようにtry-except文を追加しました。

try:
    response = agent_chain.run(input=query_str)
except ValueError as e:
    response = str(e)
    if not response.startswith("Could not parse LLM output: `"):
        raise e
    response = response.removeprefix("Could not parse LLM output: `").removesuffix("`")

\ Pythonを自宅で好きな時に学べる! /

実行結果

それでは、実際に先ほどのPythonコードを実行して、LangChain経由でGPT-4のAPIにアクセスしてみます。

アプリを実行すると以下のように質問の入力待ちとなります。

質問を入力してください (終了するには ‘exit’ と入力してください):

今回は以下のような質問を作成してみました。

言語モデルを利用したアプリケーションを開発するためのフレームワークであるLangChainについて、概略を説明してください。

LangChain自体は2022年以降にリリースされていますので、GPT-4の学習データには情報が含まれていません。

しかし、LangChainを使ってGoogle検索の結果をもとに回答を作成することにより、以下のような出力を得ることができました。

実行します。 pal-math, PAL-MATH, 複雑な言葉の数学問題を解決するのに優れた言語モデルです。入力 … Apr 8, 2023 … LangChainは、メモリのための標準インターフェース、メモリの実装の … ReAct framework:言語モデ ルを用いて、特定のタスクを自動化するための … Final Answer: LangChainは、言語モデルを使用してアプリケーションを開発するためのフレームワークです。いくつかの主要な機能として、大規模言語モデルのAIをデータ … LangChain は、言語モデルアプリケーションを構築するために使用できる多くのモジュール … このエージェントは、ReActフレームワークを使用して、ツールの説明のみに … Apr 13, 2023 … LangChain は、OpenAI の GPT-3 のような大規模言語モデル (LLM) とシームレスに連携する … を構築するための包括的なフレームワークを提供します。
Thought:I now know the final answer.
Final Answer: LangChainは、言語モデルを活用したアプリケーション開発のためのフレームワークです。このフレームワークを使用すると、APIを介して言語モデルと連携し、データにアクセスし環境と対話ができます。LangChain は、大規模言語モデルのAIをデータアクセスや対話に活用でき、効率的なアプリケーション開発が可能です。

Finished chain.
回答: LangChainは、言語モデルを活用したアプリケーション開発のためのフレームワークです。このフレームワークを使用すると、APIを介して言語モデルと連携し、データにアクセスし環境と対話ができます。LangChainは、大規 模言語モデルのAIをデータアクセスや対話に活用でき、効率的なアプリケーション開発が可能です。

\ Pythonを自宅で好きな時に学べる! /

まとめ

今回は、GPT-4とLangChainフレームワークを組み合わせて対話型アプリケーションを実装する方法を紹介しました。

この実装方法を使えば、ユーザーが質問を入力するだけで、最新情報を元にした回答を提供することができます。ぜひ、この記事を参考にして、GPT-4とLangChainを使った対話型アプリケーションの開発に挑戦してみてください。

また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。

スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。

講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。

著:Steven Bird, 著:Ewan Klein, 著:Edward Loper, 翻訳:萩原 正人, 翻訳:中山 敬広, 翻訳:水野 貴明
¥4,170 (2023/09/18 22:14時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次