yoshidashingo / langchain-book

MIT License
140 stars 42 forks source link

212P 8.7章 ベクトル化時エラー発生 #21

Open mizuking01 opened 6 months ago

mizuking01 commented 6 months ago

エラーの説明

212P 9番「PDFファイルのテキスト分割とベクトル化」の実行時にエラーが発生しました

スクリーンショット

スクリーンショット 2024-04-30 181024

書籍の内容以外で実施したこと pineconeのAPIキーとインデックス名、環境名は何度も確認したので間違いはないと思います。 新しくAPIキーを作成も試しましたが駄目でした。 ライブラリのバージョンも確認しましたが同じでした。 環境

AWS Cloud9

その他

エラーの解決のため、その他ご自身で試したことや、確認したログなどがあれば記載してください。

os1ma commented 6 months ago

ご質問ありがとうございます。

私のほうで改めて確認したところ、Pineconeのアップデートにより、特定の条件下でそのエラーが発生することが分かりました。

結論としては、以下のどちらかで対応してください。

エラーの原因

ここから、エラーの原因や上記の対応方法で解決する理由をまとめます。 まずはエラーの原因についてです。

Pineconeでは、最近のアップデートにより、Index作成時に「Capacity mode」として「Serverless」と「Pods」が選択できるようになりました。

スクリーンショット 2024-04-30 19 02 35

Pineconeの管理画面上では、無料プランでは「Serverless」のみが選択できるようになっており、おそらく「Serverless」のIndexを作成されたのだと思います。

書籍に掲載しているソースコード(このリポジトリのmainブランチのソースコード)では、以下のように「environment」と「index_name」を指定してPineconeのIndexにアクセスしています。

https://github.com/yoshidashingo/langchain-book/blob/7f1d258af859686d8335f176dad2142f10d72f3c/chapter8/add_document.py#L21-L26

「Serverless」のIndexには「environment」は存在しないため、「environment」を指定すると以下のようにIndexが見つからないというエラーになります。

ValueError: No active indexes found in your Pinecone project, are you sure you're using the right Pinecone API key and Environment? Please double check your Pinecone dashboard.

つまり、「書籍に掲載しているソースコード(このリポジトリのmainブランチのソースコード)」の場合、PineconeのIndexは「Pods」を選択する必要がある、ということになります。

または、他の方法として、PineconeのIndexが「Serverless」の場合に対応したソースコードを使用することでも解決できる、ということになります。

[!NOTE] langchainなどのパッケージのバージョン次第かもしれませんが、environment=None と指定しても、内部でデフォルトの「environment」が指定されて同様のエラーになる場合があります。

(対応方法1)Pineconeの管理画面からIndexを削除して、書籍p213に掲載しているスクリプトでIndexを作成

Pineconeの無料プランの場合、管理画面上からは「Pods」を選択できなくなっていますが、APIからは「Pods」を選択できるようです。 そこで、書籍p213に掲載しているスクリプトを使用して「Pods」のIndexを作成すると、書籍の通りadd_document.pyも動作します。

該当のスクリプトは こちら からも確認できます。

(対応方法2)このリポジトリの「langchain-v0.1」ブランチのソースコードを使用

別の解決策として、PineconeのIndexが「Serverless」の場合に対応したソースコードを使用する方法もあります。

このリポジトリの「langchain-v0.1」ブランチのソースコードは、PineconeのIndexが「Serverless」の場合に対応しています。

ただし、「langchain-v0.1」ブランチのソースコードを使う際は、openaiやlangchainなどの各種パッケージも、対応するバージョンをインストールし直す必要があるので、ご注意ください。

「langchain-v0.1」ブランチのソースコードについて、詳細は こちら を参照してください。

よろしくお願いします。

os1ma commented 6 months ago

こちらのエラーについて、他にも遭遇する方がいそうなため、リポジトリのREADMEにこのIssueへのリンクを追加しました。

https://github.com/yoshidashingo/langchain-book/commit/b30653b721352fff8fed4e9c90b93a33cd0fb4fd