Spaces:
Sleeping
Sleeping
| import psycopg2 | |
| from langchain_huggingface import HuggingFaceEmbeddings | |
| # 💡 將 Chroma 替換為 PostgreSQL 的向量儲存類 | |
| # 這裡我們使用 LangChain 提供的 PostgresVectorStore | |
| from langchain_community.vectorstores.pgvector import PGVector | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| # ⚠️ 請替換為您的實際配置 | |
| # 假設您的資料庫中已經創建了 'recipes_vectors' 表格 | |
| # --- 1. 資料庫連線設定 --- | |
| # --- 資料庫連線設定 --- | |
| DB_HOST=os.getenv("DB_HOST", "localhost") | |
| DB_PORT=os.getenv("DB_PORT") | |
| DB_DATABASE=os.getenv("DB_DATABASE") | |
| DB_USER=os.getenv("DB_USER") | |
| DB_PASSWORD=os.getenv("DB_PASSWORD") | |
| DB_CONFIG = { | |
| "host": DB_HOST, # 如果找不到,提供預設值 | |
| "database": DB_DATABASE, | |
| "user": DB_USER, | |
| "password": DB_PASSWORD, | |
| "port": DB_PORT | |
| } | |
| TABLE_NAME = "recipes" | |
| VECTOR_DIM = 384 # 確保這個維度和您的 'embedding' 欄位定義一致 | |
| # 🚨 選擇一個多語言模型。例如:BGE-M3 (維度 1024) 或 paraphrase-multilingual-mpnet-base-v2 (維度 768) | |
| MODEL_NAME = "sentence-transformers/all-MiniLM-L6-v2" | |
| # 這是 PGVector 實例使用的連接字串格式 | |
| CONNECTION_STRING = PGVector.connection_string_from_db_params( | |
| driver="psycopg2", | |
| **DB_CONFIG | |
| ) | |
| # --- 將此函數定義為 get_vectordb --- | |
| def get_vectordb(): | |
| """ | |
| 獲取已存在的 PostgreSQL 向量儲存實例 (PGVector)。 | |
| 此函數取代了原先獲取 Chroma 實例的功能。 | |
| """ | |
| embeddings = HuggingFaceEmbeddings( | |
| model_name=MODEL_NAME | |
| ) | |
| # 使用您的 PostgreSQL 連接字串和集合名稱 | |
| db = PGVector( | |
| connection_string=CONNECTION_STRING, | |
| embedding_function=embeddings, | |
| collection_name=TABLE_NAME, # 您的 recipe table 名稱 | |
| use_jsonb=True | |
| ) | |
| return db |