
Terraform Provider for Pinecone v1.0.0 がリリースされたため、アップデートをまとめてみた
こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。
先日、Terraform Provider for Pinecone v1.0.0 がリリースされました。
Released v1.0.0 of the Terraform Provider for Pinecone. This version adds support for sparse indexes, indexes with integrated embedding and reranking, index tags, and index deletion protection.
今回のリリースによって、アップデートがいくつかあったため、本エントリでご紹介します。
アップデートまとめ
インデックスのタグ付けと削除保護のサポート
まず初めにインデックスに対して、タグ付けと削除保護をサポートしました。
以下のように pinecone_index
に設定します。個人的に削除保護はありがたいですね。
terraform {
required_providers {
pinecone = {
source = "pinecone-io/pinecone"
}
}
}
provider "pinecone" {}
resource "pinecone_index" "test" {
name = "tf-test-index"
dimension = 10
spec = {
serverless = {
cloud = "aws"
region = "us-west-2"
}
}
+ deletion_protection = "enabled"
+ tags = {
+ environment = "development"
+ data_type = "text"
+ }
}
Integrated index のサポート
続いて Integrated index がデプロイできるようになりました。
embed
部分を利用して、エンべディングモデルや、データタイプを指定します。
terraform {
required_providers {
pinecone = {
source = "pinecone-io/pinecone"
}
}
}
provider "pinecone" {}
resource "pinecone_index" "test" {
name = "tf-test-index"
spec = {
serverless = {
cloud = "aws"
region = "us-west-2"
}
}
+ embed = {
+ model = "multilingual-e5-large"
+ field_map = {
+ text = "chunk_text"
+ }
+ }
}
Integrated index
Integrated index(統合されたインデックス)は、ベクトルデータベースの機能の 1 つで、インデックス作成時にエンべディングモデルを併せて指定し、インデックスを作成する方法です。
Integrated index を利用することで、エンべディング処理は Pinecone 側で自動的に行われます。つまり、ユーザーはエンべディングを意識することなく、ベクトルデータベースを扱えます。
なお、Integrated index は現在、サーバレスインデックスでの提供のみサポートしています。
クラウドプロバイダーを利用せず、素の Pinecone で RAG を利用するケースでは非常に便利ですね。
Sparse index のサポート
Integrated index に加えて、 Sparse index もサポートしました。
vector_type
に sparse
を指定するようです。
terraform {
required_providers {
pinecone = {
source = "pinecone-io/pinecone"
}
}
}
provider "pinecone" {}
resource "pinecone_index" "test" {
name = "tf-test-index"
dimension = 10
metric = "dotproduct"
vector_type = "sparse"
spec = {
serverless = {
cloud = "aws"
region = "us-west-2"
}
}
}
Sparse index
Sparse index はレキシカル検索(キーワード検索)用のベクトルデータベースです。文書内の単語またはフレーズを表す、一連の数値(スパースベクトル)を格納します。
現在、Sparse index およびレキシカル検索はパブリックプレビュー状態です。
Sparse index と Dense Index(コサイン類似度/ユークリッド距離で計算するベクトルデータベース)を併用することで、ハイブリッド検索をサポートします。
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
# To get the unique host for an index,
# see https://docs.pinecone.io/guides/data/target-an-index
dense_index = pc.Index(host="INDEX_HOST")
sparse_index = pc.Index(host="INDEX_HOST")
# Define the query
query = "Q3 2024 us economic data"
# Search the dense index and rerank the results
dr = dense_index.search(
namespace="example-namespace",
query={
"top_k": 20,
"inputs": {
"text": query
}
},
rerank={
"model": "cohere-rerank-3.5",
"rank_fields": ["chunk_text"]
}
)
# Search the sparse index and rerank the results
sr = sparse_index.search(
namespace=NAMESPACE,
query={
"top_k": 20,
"inputs": {
"text": query
}
},
rerank={
"model": "cohere-rerank-3.5",
"rank_fields": ["chunk_text"]
}
)
# Merge and deduplicate the results
def merge_chunks(h1, h2):
"""Get the unique hits from two search results and return them as single array"""
h1_ids = [hit['_id'] for hit in h1['result']['hits']]
h2_ids = [hit['_id'] for hit in h2['result']['hits']]
deduped_hits = {hit['_id']: hit for hit in h1['result']['hits'] + h2['result']['hits']}.values()
return sorted(deduped_hits, key=lambda x: x['_score'], reverse=True)
merged = merge_chunks(sr, dr)
# Print the results
print("Query", query)
print("-----")
for row in mrgc:
print(f"{row['_id']} {round(row['_score'], 2)} - {row['fields']['chunk_text']}")
まとめ
以上、「Terraform Provider for Pinecone v1.0.0 がリリースされたため、アップデートをまとめてみた」でした。
普段、私は Amazon Bedrock Knowledge bases との統合で利用するシーンが多いのですが、知らないうちに多くの機能がリリースされており、勉強になりました。定期的にキャッチアップしていきたいですね。
クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!