プログラミングの話

persist()について

langchainを使用していた際に、

persist()したインデックスデータががうまく使えず困ったことがあったので、

そのことについて書いていきます。

結論

結論から、
何が原因で使えなかったかというと、

persist()で作成されるディレクトリを理解してなかったから

です。

すでにあるディレクトリを指定してpersist()を実行すると、
そのディレクトリ配下に乱数の羅列みたいなディレクトリが作成されます。

persist()したディレクトリを読み込んで使う際は

この乱数の羅列みたいなディレクトリ親ディレクトリを指定して使います

ちなみに、
一回読み込んで使うと乱数の羅列みたいなディレクトリと同じ階層に、
chroma.sqlite3が作成されるようです。

また、

あらかじめインデックスデータをまとめるディレクトリを作成していて、
その配下に、データを保存したい場合
は、

まとめのディレクトリの後に、作成したいディレクトリ名を指定すれば、

指定した名前で、まとめディレクトリ配下に新しいディレクトリを作成することができます。

例として、
google driveのpersist_dir配下に作成したいとすると

persist_directory = "/content/drive/My Drive/persist_dir/作成したいディレクトリ名"

こんな感じです。


persist()で作成されるディレクトリ構成はこんな感じ

persist_dir(まとめディレクトリ、自分で作成)
├── 作成したディレクトリ名persistで作成される、読み込んで使うディレクトリ
│ ├── 乱数ディレクトリ
│ ├── chroma.sqlite3 (一度読み込まれた後に作成される)



なぜうまくいかなかったのか詳しく

最初、保存データをまとめるディレクトリを作って、
それを指定してpersist()しました。

それでつくられた乱数ディレクトリを読み込んでみたのですが、
うまくいかない。

それで、乱数ディレクトリの中のものを指定したり、
当時は理解してなかったので、
突然現れたchroma.sqlite3をどうにかして使うのかな、とか
乱数だとわかりずらいから名前変えて作りたい、とか
よくわからないことをしつつ、いろいろ格闘してました。

結局、persist()で作成されるディレクトリを理解してなくて
どのディレクトリを読み込めばいいのかがよくわかっていなかった
ためにうまく使えなかったという感じです。

この情報、説明が役に立てば幸いです。
見ていただいてありがとうございました。



-プログラミングの話