
ドキュメントをインデックスすれば新しめのライブラリを用いたコードも生成できるのか検証してみた
朝からこんなことを呟いていたので自己検証してみようと思います。
ChatGPTとペアプロするときに最新のドキュメントが踏まえられていない問題、LlamaIndexなりで最新ドキュメントインデックスすれば解決しそうな気がする。embeddingのお金はかかるけど。
— 野生のまーくん🐕🦺 (@mah_lab) March 19, 2023
ChatGPTは2021年までのデータしか持っていない
ChatGPTは2021年までのデータしか持っていないため、もちろんLangChainについては存在すら知りません。

さらにはこんなナナメ上のコードを提示してきます。

LlamaIndexでインデックス生成する
そんなわけで早速LlamaIndexを用いてインデックスを作成して、追加情報を与えた上でコードを書いてもらおうと思います。
冒頭でChatGPTにLangChainのコード例を書いてとお願いしたところナナメ上の回答を得られたことを受け、今回はLangChainのドキュメントからインデックスを生成します。
LangChainのリポジトリをクローンして、doc以下のファイルを根こそぎコピーし、インデックスのインプットとします。
embeddingにもお金がかかるので、必要なファイルのみに絞ります。今回はJupyter Notebook、reStructuredText、Markdownのファイルのみを取込対象としました。

そしておもむろにGPTSimpleVectorIndexでインデックスを生成します。
from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader
from llama_index.langchain_helpers.chatgpt import ChatGPTLLMPredictor
llm_predictor = ChatGPTLLMPredictor()
# dataディレクトリに入っているファイルをロード
documents = SimpleDirectoryReader('data').load_data()
index = GPTSimpleVectorIndex(
documents=documents,
llm_predictor=llm_predictor
)
サーバーエラーが起きてリトライしたログがありましたが、無事にインデックスを生成できました。911,020トークンほど利用したみたいです。embeddingにはtext-embedding-ada-002-v2が利用されるので、そんなに大した金額はかかりません。

クエリを実行する
日本語でお願いしたところ「日本語は無理ッス」と断られたため、英語でお願いしてみました。
# prompt = """
# LangChainを用いて巨大なサイズのドキュメントの要約を作成するコードを書いて下さい。
# """
prompt = """
Please write code using LangChain to create a summary of a large document.
"""
result = index.query(prompt)
print(result)
結果はこんな感じになりました。

ドキュメントにもそれっぽいコードが存在しているので、ちゃんとドキュメントを踏まえた上で回答していることが分かります。このコードでは動かないけど。
上記の例だけだと単に全文検索しているだけな感じもするので、もうちょっと生成系AIっぽいお願いもしてみます。
# prompt = """
# LangChainライブラリを用いて、プロンプトへの回答として検索エンジンに問い合わせをしてから返答するコードを書いて下さい。
# """
prompt = """
Please write code using the LangChain library that queries a search engine and returns a response after receiving a prompt.
"""
result = index.query(prompt)
print(result)

謎のコードが出力されました。これはあかんな。
LlamaIndexの扱いが雑すぎるのが問題なのか、GPT-4のAPIが使えるようになってからもう一度試してみるべきなのか。
現場からは以上です。
気軽にクリエイターの支援と、記事のオススメができます!