見出し画像

ドキュメントをインデックスすれば新しめのライブラリを用いたコードも生成できるのか検証してみた

朝からこんなことを呟いていたので自己検証してみようと思います。

ChatGPTは2021年までのデータしか持っていない

ChatGPTは2021年までのデータしか持っていないため、もちろんLangChainについては存在すら知りません。

「LangChain?知らんな、そんなライブラリは」

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

text-davinci-002だと・・・!?

LlamaIndexでインデックス生成する

そんなわけで早速LlamaIndexを用いてインデックスを作成して、追加情報を与えた上でコードを書いてもらおうと思います。

冒頭でChatGPTにLangChainのコード例を書いてとお願いしたところナナメ上の回答を得られたことを受け、今回はLangChainのドキュメントからインデックスを生成します。

LangChainのリポジトリをクローンして、doc以下のファイルを根こそぎコピーし、インデックスのインプットとします。

embeddingにもお金がかかるので、必要なファイルのみに絞ります。今回はJupyter Notebook、reStructuredText、Markdownのファイルのみを取込対象としました。

dataディレクトリ配下に根こそぎ持ってくる

そしておもむろに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が使えるようになってからもう一度試してみるべきなのか。

現場からは以上です。


この記事が気に入ったらサポートをしてみませんか?