GPT Indexは実業務で使えるか?検証(1/n)
GPT Indexが使えるか、ちょっと真面目に検証してみた結果。
基本的な使い方はnpakaさんの記事参照。
実業務で使えるのかどうかを検証したかったので、真面目なDocumentを覚えさせて検索させてみる。
Oracle DBのヘルプセンターの記事を採用。
サイトからダウンロードできるpdfをtext化すると、以下のようになる。
このまま読ませるとGPT Indexが文書の区切りを認識できない。
14
ACFS -00506: 'string' の読取りに失敗しました。
原因: オープン・ファイルを読み取れませんでした。
処置: 最も可能性の高い原因は、ファイルのアクセス権限の問題です。
ACFS -00507: ボリューム・ディスク・ヘッダーを書き込む前に string へのシークに失敗しました。
原因: ボリュームへのシークに失敗しました。このメッセージには、エラーの詳細が示されたその他のメッ
セージが付随しています。
処置: その他のメッセージに示された問題を修正してください。解決策が不明の場合は、 Oracleサ
ポート・サービスに連絡してください。
ACFS -00508: ボリューム string のデバイスのメジャーおよびマイナー番号を取得できません
原因: ボリューム情報の取得に失敗しました。このメッセージには、エラーの詳細が示されたその他の
メッセージが付随しています。
処置: その他のメッセージに示された問題を修正してください。解決策が不明の場合は、 Oracleサ
ポート・サービスに連絡してください。
ACFS -00509: str ingに対してサポートされていないファイル・タイプであり、ブロック・デバイスではあり
ません
文書の区切りを認識させるようにスペースを入れる、とかの方法もあるようだが、うまくいかなかった。
そもそも、文書の区切り文字を指定できるのであれば、以下のようにプログラム上でリスト化して渡すことができる。
データをうまく渡せない不確実性を減らすためにもこのようにしてしまった方が良い気がする。
from gpt_index import GPTSimpleVectorIndex, Document
with open('./data/errmg.txt', 'r') as f:
text = f.read()
texts = text.split('\n\n')
documents = [Document(text) for text in texts]
index = GPTSimpleVectorIndex(documents)
indexができたので、質問してみる。
print(index.query("ACFS-00506に対する処置は?"))
> [query] Total LLM token usage: 168 tokens
> [query] Total embedding token usage: 19 tokens
The solution to ACFS-00506 is to check the file's access permissions.
なんと、英語で回答が返ってきた。文書の該当箇所は「ACFS-00506:'string'の読取りに失敗しました。 原因:オープン・ファイルを読み取れませんでした。 処置:最も可能性の高い原因は、ファイルのアクセス権限の問題です」なので、一応正しい。
でも、覚えさせた文書を使って回答しているというより、GPTが元々持っている知識で回答しているんじゃないだろうかと推測。
日本語で回答させることはできないだろうか。少し質問を変えてみる。
print(index.query("ACFS-00506に対する処置は?日本語で回答して"))
> [query] Total LLM token usage: 234 tokens
> [query] Total embedding token usage: 33 tokens
コマンドの使用法を確認し、必要な引数を指定してコマンドを再試行してください。
日本語になったが、回答内容がおかしい。
エラーコードを変えて同じ質問をしてみたが、いずれでも同じ回答が返ってきてしまった。つまり、初めに正しく回答できたと思われるケースでも、たまたま当たっていたということ。
Documentの渡し方に問題があるかもしれないが、現時点では使える結果にならず。