エラーの発生状況誰にでも起こり得ることです。RAGパイプラインやベクトル検索ツールを構築していて、すべてが順調に見えるときがあります。APIキーもあり、ダッシュボードでインデックスも確認でき、コードもきれいに書けています。しかし、スクリプトを実行すると、次のトレースバックが発生してクラッシュしてしまいます。
pinecone.exceptions.NotFoundException: Index 'my-index' not found in project
これは通常、pc.Index("my-index")を呼び出した直後に発生します。PineconeのWebコンソールではインデックスが「Ready(準備完了)」と表示されているのに、Python SDKは存在しないと主張するため、非常に厄介なエラーです。
このエラーが発生する主な理由NotFoundExceptionがPineconeのインフラ側のバグであることは稀です。ほとんどの場合、ローカル環境とPinecone Cloudプロジェクト間の設定の不一致が原因です。考えられる主な原因は以下の通りです。
- 大文字・小文字の区別: Pineconeのインデックス名は厳密に大文字・小文字を区別します。インデックス名が
Knowledge-Baseであるのにpc.Index("knowledge-base")と呼び出すと、リクエストは失敗します。- APIキーの混同: 「開発用」プロジェクトのAPIキーを使用して、「本番用」プロジェクトにあるインデックスにアクセスしようとしている可能性があります。各APIキーは特定のプロジェクトにスコープが限定されています。- 「Starter」プランのスリープサイクル: 無料のStarterプランを使用している場合、7日間アクティビティがないとPineconeはインデックスを一時停止します。一時停止中のインデックスは、手動で再開されるまで404エラーを返すことがよくあります。- DNSの伝播: 新しいServerlessインデックスの場合、ホストURLがDNSを通じて伝播するまでに30〜60秒かかることがあります。作成した直後に接続しようとすると、SDKがインデックスを見つけられない場合があります。## クイック修正:可視性のチェック詳細なデバッグに入る前に、この診断スクリプトを実行してください。現在のAPIキーを使用して、SDKが実際に何を認識できているかを強制的に表示させます。
from pinecone import Pinecone
# 現在のキーで初期化
pc = Pinecone(api_key="YOUR_PINECONE_API_KEY")
# この特定のAPIキーがアクセスできるすべてのインデックスをリストアップ
indexes = pc.list_indexes()
print(f"{len(indexes)} 個のインデックスが見つかりました:")
for idx in indexes:
print(f"- 名前: {idx.name} | ホスト: {idx.host}")
出力されたリストにインデックス my-index が含まれていない場合、APIキーが間違ったプロジェクトを指していることは確実です。
恒久的な対策### 1. 環境変数を使用する文字列をハードコードすることは、タイポ(打ち間違い)の元です。設定の管理には .env ファイルを使用しましょう。これにより、ローカルスクリプトが本番環境と全く同じ文字列を使用していることを保証できます。SDK v3.0.0以降を使用している場合、セットアップは以下のようになります。
import os
from pinecone import Pinecone
from dotenv import load_dotenv
load_dotenv()
pc = Pinecone(api_key=os.getenv("PINECONE_API_KEY"))
index_name = os.getenv("PINECONE_INDEX_NAME")
# 防御的チェック:接続前に存在を確認
active_names = [i.name for i in pc.list_indexes()]
if index_name not in active_names:
print(f"エラー: {index_name} が見つかりません。利用可能: {active_names}")
else:
index = pc.Index(index_name)
2. ホストURLを明示的に指定するローカルネットワークやDNSの問題により、SDKの自動ルックアップが失敗することがあります。Pineconeのダッシュボードに表示されているフルホストURLを指定することで、ルックアップをバイパスできます。通常、pinecone.io で終わる長い文字列です。
# ホスト経由の手動接続(サーバーレスのトラブルシューティングに便利)
index = pc.Index(name="my-index", host="https://my-index-xyz.svc.us-east-1-aws.pinecone.io")
3. プロジェクトの分離を確認するPineconeコンソールにログインします。左上のプロジェクトセレクターを確認してください。複数のプロジェクトがある場合は、それぞれを確認してください。「Default」という名前のプロジェクトでインデックスを作成したのに、「Test-Project」という名前のプロジェクトのAPIキーを生成してしまうことは非常によくあります。キーはプロジェクトの境界を越えて使用することはできません。
最終確認接続が修正されたと思ったら、クイック統計チェックを実行してください。データが返ってくれば、接続は安定しています Jude:
# 接続を確認し、ベクトル数をチェック
stats = index.describe_index_stats()
print(f"接続成功。総ベクトル数: {stats['total_vector_count']}")
describe_index_stats() が次元数とカウントを含むJSONオブジェクトを返せば、準備完了です。それでもエラーが表示される場合は、試用期間の終了によりインデックスが削除されていないか確認してください。

