iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
生成式 AI

一起來打造 PTT 文章智慧問答系統!系列 第 17

【Day 17】建立向量資料庫基礎 - Gemini Embedding 與 Pinecone 初步串接

  • 分享至 

  • xImage
  •  

Hi大家好,
這是我參加 iT 邦幫忙鐵人賽的第 1 次挑戰,這次的主題聚焦在結合 Python 爬蟲、RAG(檢索增強生成)與 AI,打造一套 PTT 文章智慧問答系統。在過程中,我會依照每天進度上傳程式碼到 GitHub ,方便大家參考學習。也歡迎留言或來信討論,我的信箱是 gerryearth@gmail.com


我們今天將一步步帶你把文章的段落轉換成可被 AI 理解的向量,並存入 Pinecone 向量資料庫,為未來的語意檢索打好基礎。整個過程會用到 Google 的 Gemini Embedding API,以及 Pinecone 這個專業的向量儲存服務,讓資料不只是存起來,而是能被智慧地搜尋與分析。


今日目標

  • 申請 Google API key
  • 使用 Gemini Embedding API 將文字轉為向量
  • 串接 Pinecone 向量資料庫

Gemini API 申請

Gemini 有提供免費的 Embedding API,我們就來快速申請吧!
首先進入 Google AI Studio 登入自己的 Google 帳號,點選右上角的 Get API key 再點選 Create API key。
https://ithelp.ithome.com.tw/upload/images/20250701/20172834ojl2y7Mddg.png
再來選擇 Gemini API 專案,並建立 API key。
https://ithelp.ithome.com.tw/upload/images/20250701/20172834Vcm8L2tu0l.png
確認方案為 Free,就可以得到免費方案的 API key 了!
https://ithelp.ithome.com.tw/upload/images/20250701/20172834B4ILA0ANoD.png


環境變數

環境變數(Environment Variables)是作業系統提供的一種機制,用來在程式運行時提供一些外部設定值。設置環境變數有幾個重要的原因與用途:

1. 集中管理設定值

  • 環境變數可以儲存程式所需的重要參數(如資料庫連線字串、API 金鑰、主機位址等)。
  • 把這些參數抽離程式碼,使程式更彈性、方便維護。

2. 提高安全性

  • 敏感資料(密碼、憑證等)不應硬編在程式碼中,環境變數可將這些資料從原始碼中分離出來,避免洩漏。
  • 結合 .env 檔與 .gitignore 使用時,還可避免將敏感資訊推送至 Git 倉庫。

3. 方便在不同環境中部署

  • 同一份程式碼可以在不同環境(開發、測試、正式)使用不同的環境變數來對應不同的設定。

設置環境變數的主要目的是:讓應用程式更安全、靈活、易於部署與維護。

設置環境變數

請在 .env 放入剛剛拿到的 API key,格式為:

GOOGLE_API_KEY="AIzaSy..."

這邊需特別注意版本控制不要追蹤此檔案(保護好此檔案的內容),在 .gitignore 加上:

*.env

讀取環境變數

建立 env_settings.py 使用套件 pydantic-settings 讀取 .env 內的環境變數:

from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict

BASE_DIR = Path(__file__).parent

class EnvSettings(BaseSettings):
    GOOGLE_API_KEY : str = None
    model_config = SettingsConfigDict(
        env_file=BASE_DIR / '.env',
        env_file_encoding='utf-8',
        extra='ignore'
    )

要安裝套件:

pip install pydantic_settings

以下是詳細說明:

  • Path(__file__).parent:取得目前這個 Python 檔案所在的資料夾,並儲存在 BASE_DIR 變數中。這樣可以動態定位 .env 檔案的位置。
  • EnvSettings 繼承自 BaseSettings,這是 pydantic-settings 提供的類別,用來自動載入環境變數。
  • GOOGLE_API_KEY 是一個設定欄位,型別為 str,預設為 None。這會自動對應到 .env 中的 GOOGLE_API_KEY 變數。
  • env_file:指定 .env 檔案的路徑來載入環境變數。
  • env_file_encoding='utf-8':指定編碼方式為 UTF-8。
  • extra='ignore':如果 .env 檔或環境中有未宣告的變數,則忽略不報錯。

使用方式範例

隨便建立暫時的檔案測試:

from langchain_google_genai import GoogleGenerativeAIEmbeddings
from env_settings import EnvSettings
from pydantic import SecretStr

env_settings = EnvSettings()

embeddings = GoogleGenerativeAIEmbeddings(model="models/text-embedding-004",google_api_key=SecretStr(env_settings.GOOGLE_API_KEY))
vector = embeddings.embed_query("hello, world!")
print(vector[:5])

要安裝套件:

pip install langchain-google-genai

如果沒報錯就代表你上述步驟你都成功完成囉!


Pinecone

建立 Pinecone Index

進入 Pinecone 網站,註冊登入後點 Create Index,依照以下內容設定,其餘為預設
https://ithelp.ithome.com.tw/upload/images/20250814/201728340SQFORTZ9e.png
建立完成就會得到如下的 Index:
https://ithelp.ithome.com.tw/upload/images/20250814/201728343SG3H7YJAH.png

我們會使用 Google 的 gemini-embedding-001,維度是 3072 維。

取得 Pinecone API key

在 Pinecone 中建立 API key
https://ithelp.ithome.com.tw/upload/images/20250701/201728344Tqu7JdVG1.png
取名為 default 並建立
https://ithelp.ithome.com.tw/upload/images/20250701/20172834HZj7UQxVsv.png

注意這裡必須建立完馬上存 API key,之後將不能再存取!

將段落儲存為向量資料

一樣建立暫時的檔案,假裝你已經有切好的段落,試著存入 Pinecone:

from pinecone import Pinecone
from langchain_pinecone import PineconeVectorStore
from langchain_google_genai import GoogleGenerativeAIEmbeddings
from env_settings import EnvSettings
from pydantic import SecretStr

env_settings = EnvSettings()

vector_store = PineconeVectorStore(
    index=Pinecone(
        api_key=env_settings.PINECONE_API_KEY,
    ).Index(env_settings.PINECONE_INDEX_NAME),
    embedding=GoogleGenerativeAIEmbeddings(model="models/gemini-embedding-001", google_api_key=SecretStr(env_settings.GOOGLE_API_KEY)),
)

vector_store.add_texts(["hello, world!"])
print('完成!')

要安裝套件:

pip install pinecone-client langchain-pinecone

.env 檔案要記得加:

PINECONE_API_KEY="..."
PINECONE_INDEX_NAME='rag'

env_settings.py 也要加入喔!

https://ithelp.ithome.com.tw/upload/images/20250701/20172834G6rwN5clhO.png


雖然今天只有簡單練習 Gemini API 跟 Pinecone 的串接,但明天 【Day18】Pinecone 整合實戰 - 從資料向量化到自動任務串接 會實際在我們的專案中串接此功能,敬請期待~


上一篇
【Day 16】認識 RAG 與 向量資料庫 - 整合 RAG 與 Pinecone 的運作流程
系列文
一起來打造 PTT 文章智慧問答系統!17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言