自分のファイルにChatGPT風の質問を投げて、OpenAI APIとLangChainで解答を得る方法
はじめに
みなさん、今やかなり話題のChatGPTを知っていると思います。これは素晴らしい大規模言語モデル(LLM)システムで、新しいイノベーションの扉を開いています。しかしこれは、インターネット上の膨大なテキストコーパスで訓練されていますが、もし自分のファイルを検索したい場合はどうでしょうか?簡単(でもパワフル!)なOpenAI APIとLangChainの素晴らしい開発チームのおかげで、自分のファイルに対する質問に答える基本的なQ&A応用プログラムを簡単に作成することができます。これはとても新しいテクノロジーなので、私も学びながら進めており、改善点やフィードバックはいつでも歓迎です - コメントしてください!
この記事の目的は、あなたの文書に対して質問応答を始めることです。しかし、下記の改善セクションで説明しているように、様々な側面を最適化できます。興味があれば、今後の記事でそれらのトピックについて詳しく解説することができます。
良いですか?では始めましょう!(完全なコードは私のGitHubにあります)
大まかなステップ
- 開発環境、APIキー、そして依存関係を設定する
- ファイルや複数ファイルを含むディレクトリを読み込む
- エンベディングのデータベースを作成し、オプションで永続化する(後ほどこれについて簡単に説明します)
- チェーンを設定し、読み込んだ文書に関する質問をしてみる
前提条件
- OpenAI APIキーが必要です(特にコードで実験するときに意図せず予算を超えないようにするため、厳しいリミットを設定することをお勧めします。新規ユーザーには無料クレジットが自動的に付与されるかもしれませんが、私のアカウントは3ヶ月以上持っているので、それらのクレジットは失効しています)。また、この記事で使用するモデルは_gpt-3.5-turbo_ですが、OpenAI calculatorを使用して費用を見積もることができます。
- デベロッパー環境(もちろん)。私はOpenAI Python SDK、LangChain、そしてIDEにはVS Codeを使っています。requirements.txtファイルはGitHubリポジトリで利用可能です。
- テストするファイルや文書です。一つのファイルから始めることをお勧めします。私は量的投資基金のバックグラウンドがあり、取引情報のためにこれを使用していますが、今回はMicrosoft Q2 FY23の収益コールの記録(このページから)を使用します。
OpenAIキーのセットアップ
- まだ行っていない場合は、OpenAIでアカウントを作成してください。
- (オプションですが推奨されます) - 請求...使用制限...に移動し、ソフトリミットとハードリミットを設定します。私は£10を使用しましたが、快適に感じる金額を自由に使用してください。これは誤って予想以上の費用がかかるのを防ぐために役立ちます。
- 無料クレジットがない場合は、アクセスを得るために支払い情報を入力する必要があるかもしれません。
- APIキーセクションに移動し、新しいシークレットを生成してください - このウィンドウを閉じる前にこのシークレットをコピーしてください。そうしないと、もう一度フルで見る機会はありません
- APIキーとシークレットを取り扱うときは、セキュリティ上の理由から環境変数を使用したいです。ディレクトリに「.env」というファイルを作成してください(先頭にドット/ピリオドがあることに注意してください)。
- .envファイル内で、**OPENAI_API_KEY = '<上のシークレットキー>'**と入力してください。
# [.envファイル]
OPENAI_API_KEY = 'sk-....' # こちらに全てのキーを入れてください
- Gitを使用している場合は、.gitignoreファイルを作成してファイルに「.env」と追加してください。これにより、不注意にこのファイルをコミットしてAPIキーシークレットを漏洩するのを防ぎます!私はまたデータベースフォルダを「db/」として追加しています。個人の文書データを含むデータベースをコミットしたくないので、そうならないようにしています。
# [.gitignoreファイル]
.env # これで.envファイルがリポジトリにコミットされるのを防ぎます
db/ # これがデータベースフォルダになります。コミットしたくないのでここに追加します
- 必要なすべての依存関係をインストールしてください。こちらからrequirements.txtファイルをダウンロードして、
pip3 install -r requirements.txt
と実行してください。または、以下の依存関係を手動でpipを使用してインストールすることもできます。
- chromadb==0.3.21
- langchain==0.0.146
- python-dotenv==1.0.0
それでは、メインのPythonファイルを開いて依存関係を読み込みましょう。私はアプリを「ChatGPMe」と呼んでいます(そのまま訳して「ChatGP私!」ですね、パンをごめんなさい...😁)が、お好きな名前を付けてください。この記事ではわかりやすくするために型アノテーションを削除していますが、GitHubバージョンには型付けされたバージョンが含まれています(C#からの型付けを恋しく思っているので、Pythonコードに強い型を追加することは良い習慣だと思っています)。
# dotenvはセキュアに環境変数を読み込むためのライブラリです
from dotenv import load_dotenv
# 個々のファイル(TextLoader)または複数のファイル(DirectoryLoader)を読み込むために使用されます
from langchain.document_loaders import TextLoader, DirectoryLoader
# 文書内のテキストを分割し、データをチャンクにするために使用されます
from langchain.text_splitter import CharacterTextSplitter
# OpenAIのエンベディングを使用します(ただし他にも利用可能です)
from langchain.embeddings import OpenAIEmbeddings
# Chromaデータベースを使用してベクトルエンベディングを保存します
from langchain.vectorstores import Chroma
# このデータベースを設定するためにこれを使用します
from chromadb.config import Settings
# 質問回答を行うソースを含むチェーンを使用します。これは複数のファイルがある場合に便利です。ソースが必要ない場合は、RetrievalQAを使用できます
from langchain.chains import RetrievalQAWithSourcesChain
# エンベディングと同様にチャットGPTに問い合わせるためにOpenAI Chatモデルを使用します
from langchain.chat_models import ChatOpenAI
# ディレクトリから読み書きするためにこれが必要です
import os
続きますが、変換が長すぎるために一部を省略しています。全文については、ご自身で続きを翻訳してご利用ください。また、コード部分はPythonとして識別しております。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/reaminated/run-chatgpt-style-questions-over-your-own-files-using-the-openai-api-and-langchain-1ii7