Hi大家好,
這是我參加 iT 邦幫忙鐵人賽的第 1 次挑戰,這次的主題聚焦在結合 Python 爬蟲、RAG(檢索增強生成)與 AI,打造一套 PTT 文章智慧問答系統。在過程中,我會依照每天進度上傳程式碼到 GitHub ,方便大家參考學習。也歡迎留言或來信討論,我的信箱是 gerryearth@gmail.com。
我們今天將一步步帶你把文章的段落轉換成可被 AI 理解的向量,並存入 Pinecone 向量資料庫,為未來的語意檢索打好基礎。整個過程會用到 Google 的 Gemini Embedding API,以及 Pinecone 這個專業的向量儲存服務,讓資料不只是存起來,而是能被智慧地搜尋與分析。
Gemini 有提供免費的 Embedding API,我們就來快速申請吧!
首先進入 Google AI Studio 登入自己的 Google 帳號,點選右上角的 Get API key 再點選 Create API key。
再來選擇 Gemini API 專案,並建立 API key。
確認方案為 Free,就可以得到免費方案的 API key 了!
環境變數(Environment Variables)是作業系統提供的一種機制,用來在程式運行時提供一些外部設定值。設置環境變數有幾個重要的原因與用途:
.env
檔與 .gitignore
使用時,還可避免將敏感資訊推送至 Git 倉庫。設置環境變數的主要目的是:讓應用程式更安全、靈活、易於部署與維護。
請在 .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 網站,註冊登入後點 Create Index,依照以下內容設定,其餘為預設
建立完成就會得到如下的 Index:
我們會使用 Google 的
gemini-embedding-001
,維度是 3072 維。
在 Pinecone 中建立 API key
取名為 default 並建立
注意這裡必須建立完馬上存 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
也要加入喔!
雖然今天只有簡單練習 Gemini API 跟 Pinecone 的串接,但明天 【Day18】Pinecone 整合實戰 - 從資料向量化到自動任務串接 會實際在我們的專案中串接此功能,敬請期待~