業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
プロセスの全体像前処理・特徴量生成Fine Tuning手法まとめ機械学習モデルの選び方モデル評価手法プロトタイピング探索的分析(EDA)
AI

執筆者:Handbook編集部

PineconeをPythonで使う方法

概要

この記事では、Pinecone というマネージドベクトルデータベースを Python で使う方法について解説します。

前提

Pinecone を使うにあたり、そのセットアップを終わらせていることを前提としています。

1. Pinecone のインストール

以下のシェルコマンドを使って、Python クライアントをインストールします。Python のバージョンは 3.6 以降を想定しています。

pip3 install pinecone-client

Jupyter ノートブックを使って Pinecone をインストールすることもできます。

!pip3 install pinecone-client

2. Pinecone API キーの取得

Pinecone のホームページへ移動します。

サインアップ、もしくはサインインするとコンソールに移動します。 そこで「API Keys」ボタンを押すと以下のような画面になります。

Value の値が API キーであるため、これを取得します。

3. 使用法

Pinecone を Python で使う方法を紹介します。

Pinecone の import と初期化

YOUR_API_KEYには、Pinecone のコンソールから取得した自分の API キーを入力します。 同様に、YOUR_ENVIRONMENTには、Pinecone のコンソールから取得した自分の環境を入力します。

import pinecone

pinecone.init(
    api_key = "YOUR_API_KEY",
    environment = "YOUR_ENVIRONMENT"
)

インデックスの作成

以下では、類似性検索にコサイン類似度が使用される 4 次元の「example-index」という名前のインデックスを作成します。

pinecone.create_index(
    "example-index",
    dimension = 4,
    metric = "cosine",
    pod_type = "s1"
)

主要なパラメータは、次のとおりです。

  • name: インデックスの名前
  • dimension: ベクトルの次元数
  • metric: 類似度の計算方法(cosinedotproducteuclidean
  • pod_type: Pod の種類(Pod は Index を管理するハードウェアの単位です。)

インデックスのリストの取得

以下では、インデックスのリストを取得します。

pinecone.list_indexes()

# 出力:
# ['example-index']

インデックスの説明の取得

以下では、インデックスの説明を取得します。

index_description = pinecone.describe_index("example-index")
print(index_description)

# 出力 :
# IndexDescription(name='example-index', metric='cosine', replicas=1, dimension=4.0, shards=1, pods=1, pod_type='p1', status={'ready': True, 'state': 'Ready'}, metadata_config=None, source_collection='')

ベクトルの挿入

以下では、ベクトルを挿入します。

# インデックスへの接続
index = pinecone.Index("example-index")

upsert_response = index.upsert(
    vectors = [
        (
            "vec1",                # ベクトルID
            [0.1, 0.2, 0.3, 0.4],  # 密ベクトルの値
            {"people": "Alice"}    # ベクトルのメタデータ
        ),
        (
            "vec2",
            [0.2, 0.3, 0.3, 0.5],
            {"people": "Bob"}
        )
    ],
    namespace="example-namespace"
)

インデックスの統計の取得

以下では、インデックスの統計を取得します。

# インデックスへの接続
index = pinecone.Index("example-index")

index_stats_response = index.describe_index_stats()
print(index_stats_response)

# 出力 :
# {'dimension': 4,
#  'index_fullness': 0.0,
#  'namespaces': {'example-namespace': {'vector_count': 2}},
#  'total_vector_count': 2}

インデックスのクエリ

以下では、インデックスをクエリします。

## インデックスへの接続
index = pinecone.Index("example-index")

query_response = index.query(
    namespace = "example-namespace", # クエリする名前空間
    top_k = 10,                      # 各クエリに対して返される結果の数
    include_values = True,           # responseにベクトル値が含まれるか
    include_metadata = True,         # responseにメタデータが含まれるか
    vector = [0.1, 0.2, 0.3, 0.4],   # クエリベクトル
    filter = {                       # 適用するフィルタ
        "people": {"$in": ["Alice", "Bob", "Carol"]}
    }
)

print(query_response)

# 出力 :
# {'matches': [{'id': 'vec1',
#               'metadata': {'people': 'Alice'},
#               'score': 1.0,
#               'values': [0.1, 0.2, 0.3, 0.4]},
#              {'id': 'vec2',
#               'metadata': {'people': 'Bob'},
#               'score': 0.985353649,
#               'values': [0.2, 0.3, 0.3, 0.5]}],
# 'namespace': 'example-namespace'}

インデックスの削除

以下では、インデックスを削除します。

pinecone.delete_index("example-index")

ID によるベクトルの取得

以下では、ID を使ってベクトルの取得します。

## インデックスへの接続
index = pinecone.Index("example-index")

fetch_response = index.fetch(
    ids = ["vec1", "vec2"],
    namespace = "example-namespace"
)
print(fetch_response)

# 出力 :
# {'namespace': 'example-namespace',
# 'vectors': {'vec1': {'id': 'vec1',
#                      'metadata': {'people': 'Alice'},
#                      'values': [0.1, 0.2, 0.3, 0.4]},
#             'vec2': {'id': 'vec2',
#                      'metadata': {'people': 'Bob'},
#                      'values': [0.2, 0.3, 0.3, 0.5]}}}

ID によるベクトルの更新

以下では、ID を使ってベクトルを更新します。

## インデックスへの接続
index = pinecone.Index("example-index")

update_response = index.update(
    id = "vec1",
    values = [0.1, 0.2, 0.3, 0.4],
    set_metadata = {"people": "Dave"},
    namespace = "example-namespace"
)

ベクトルの削除

以下では、ベクトルを削除します。

index = pinecone.Index("example-index")

delete_response = index.delete(
    ids = ["vec1", "vec2"],
    namespace = "example-namespace"
)

参照

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年06月13日に最終更新
読み込み中...