LlamaIndex(GPT Index)にDevelopersIOの記事を100件読み込ませて質問してみた

2023.03.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

吉川@広島です。

本家ChatGPTとは違う、オリジナル知識を持ったChatGPTを作るにはどうしたら良いか調べていたところLlama IndexLangChainを知りました。

そこで、LlamaIndexを使ってDevelopersIOブログを直近100記事ほど読み込ませ、本家ChatGPTとChatGPT+Llama Indexそれぞれに以下の質問をしてみました。

  • DevelopersIOブログ内において、AWSに関する記事のURLを1つください。また、記事の要約を教えてください。

本家ChatGPTに聞いた場合:

ChatGPT+Llama IndexにDevelopersIOブログを直近100記事ほど読み込ませた場合:

記事のURLは"https://dev.classmethod.jp/news/230316-aws-trouble-webinar/"です。記事の要約は、Amazon S3の運用において問題発生時の「問題の切り分け」「情報採取」「サポート問合せのコツ」をお伝えするウェビナーの紹介記事です。AWSを導入したばかりで運用方法を学びたい、問題発生時にすばやく対応できるように準備をしたい方におすすめとされています。

本家ChatGPTの方は存在しない記事を紹介したのに対し、Llama Indexを使った方は実際に存在するURL、そして正しいと評価できそうな要約を教えてくれました1

Llama Index(GPT Index) とは

jerryjliu/gpt_index: LlamaIndex (GPT Index) is a project that provides a central interface to connect your LLM's with external data.

上記READMEをDeepL翻訳しつつ読みました。

現状はChatGPTやDavinciなどのLLM製品に与えられるコンテキスト(知識)のサイズに限界があるという課題があり、それに対する1つの解として開発されているOSSのようです。

ChatGPTに標準で組み込まれていない知識を与えた上で、

  • 質疑応答
  • まとめ
  • テキスト生成(ストーリー、TODO、メールなど)

などができるだろうと説明されています。

やってみた手順

環境

  • macOS monterey(Intel)
  • Python 3.8.3
  • pip 23.0.1
  • llama-index 0.4.21

インストール

pipでllama-indexをインストールします。

pip install llama-index

以下のようなエラーが発生しました。

ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.
WARNING: You are using pip version 20.2.4; however, version 23.0.1 is available.
You should consider upgrading via the '/Users/{username}/.anyenv/envs/pyenv/versions/3.8.3/bin/python3.8 -m pip install --upgrade pip' command.

警告でpipのバージョンが古いと出ているので上げてみます。

pip install --upgrade pip

するとllama-indexのインストールが成功しました。

記事URL一覧を用意する

まず記事100件分のURLを用意します。今回はCSVファイルで用意しました。

URL1
URL2
URL3
以下省略...

Index作成コード

上述のCSVファイルを読み込み配列にします。そしてLlama Indexの GPTSimplePageReader に配列URLで渡します。こうするだけでページ内容を読み込み、インデックスファイルを作成してくれます。

# create-index.py
import csv
from llama_index import GPTSimpleVectorIndex, SimpleWebPageReader
from llama_index.langchain_helpers.chatgpt import ChatGPTLLMPredictor

article_urls = []
with open('tmp/article-urls.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        article_urls.append(row[0])

documents = SimpleWebPageReader().load_data(article_urls)
index = GPTSimpleVectorIndex(documents=documents, llm_predictor=ChatGPTLLMPredictor()
)
index.save_to_disk('tmp/index.json')

上記スクリプトを実行すると、

python create-index.py

再びエラーが出ました。

ModuleNotFoundError: No module named 'html2text'

html2text を別途インストールする必要があったようです。

pip install html2text

再度実行し、6〜7分待つと完了しました。

Indexロード+クエリコード

続いて、インデックスをロードして質問してみます。

# query.py
from llama_index import GPTSimpleVectorIndex
from llama_index.langchain_helpers.chatgpt import ChatGPTLLMPredictor

index = GPTSimpleVectorIndex.load_from_disk('tmp/index.json', llm_predictor=ChatGPTLLMPredictor())
answer = index.query("DevelopersIOブログ内において、AWSに関する記事のURLを1つください。また、記事の要約を教えてください。")
print(answer)
python query.py
記事のURLは"https://dev.classmethod.jp/news/230316-aws-trouble-webinar/"です。記事の要約は、Amazon S3の運用において問題発生時の「問題の切り分け」「情報採取」「サポート問合せのコツ」をお伝えするウェビナーの紹介記事です。AWSを導入したばかりで運用方法を学びたい、問題発生時にすばやく対応できるように準備をしたい方におすすめとされています。

上記出力が得られました。

参考


  1. 正確にはブログ記事でなくニュースなので、意図した出力とは若干ずれています。インデックスの作り方や質問文などを改善することで、より狙った情報をヒットさせられそうです。