Pinecone + OpenAI 中文教學教程:構建自定義語義搜索系統
一、背景介紹
當下 AI 問答系統、矩陣檢索、短文本分類等場景中,都需要很好地實現 “根據輸入進行相似給點搜索”。這種算法基礎稱為 “向量搜索”,它的核心是將文本轉換為向量后,在向量空間里搜索最相似的項目。
Pinecone 是一種專業的向量數據庫服務,支持高效的向量存儲、檢索和更新。
二、實驗目標
體驗 Pinecone 的基礎操作:
- 建立一個向量索引
- 將自定義的文本輸入轉換為向量并 upsert 到 Pinecone
- 輸入自然語言問題,搜索最相似文檔
示例場景:“動物百科問答” 搜索系統
三、環境準備
pip install -qU \openai==0.27.7 \pinecone==3.0.0 \sentence-transformers==3.4.1 \tqdm
四、設置 API Key
在 Pinecone 和 OpenAI 帳號中獲取 API Key,并填入如下代碼:
pinecone_api_key = 'your-pinecone-key'
openai_api_key = 'your-openai-key'
五、初始化 Pinecone 并創建索引
import pinecone
pinecone.init(api_key=pinecone_api_key, environment='gcp-starter')index_name = 'custom-animal-db'
if index_name not in pinecone.list_indexes():pinecone.create_index(index_name, dimension=1536)
index = pinecone.Index(index_name)
六、定義自定義文檔
documents = [{"id": "doc1", "text": "老虎是一種主要生活在亞洲的肉食動物"},{"id": "doc2", "text": "大象是陸地上最大的動物,有長鼻和大耳朵"},{"id": "doc3", "text": "保齡羊是生活在歐洲高原的羊類動物"},{"id": "doc4", "text": "老鼠是一種常見小型動物,有很強的生存力"}
]
七、使用 OpenAI 生成向量
import openai
openai.api_key = openai_api_keydef get_embedding(text):resp = openai.Embedding.create(input=text,model="text-embedding-ada-002")return resp['data'][0]['embedding']
八、將文檔向量化并 upsert 到 Pinecone
for doc in documents:vec = get_embedding(doc['text'])index.upsert([(doc['id'], vec, {"text": doc['text']})])
九、進行搜索:按問題返回相似給點
query = "哪些動物有長鼻或低溫生存力強?"
query_vec = get_embedding(query)result = index.query(vector=query_vec, top_k=2, include_metadata=True)for match in result["matches"]:print(f"Score: {match['score']:.2f}, Text: {match['metadata']['text']}")