2023-10-24 12:24:32 +00:00
|
|
|
|
# coding=utf-8
|
|
|
|
|
|
"""
|
|
|
|
|
|
@project: maxkb
|
|
|
|
|
|
@Author:虎
|
|
|
|
|
|
@file: embedding_config.py
|
|
|
|
|
|
@date:2023/10/23 16:03
|
|
|
|
|
|
@desc:
|
|
|
|
|
|
"""
|
|
|
|
|
|
import types
|
|
|
|
|
|
from smartdoc.const import CONFIG
|
2024-03-06 05:43:45 +00:00
|
|
|
|
from langchain_community.embeddings import HuggingFaceEmbeddings
|
2023-10-24 12:24:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EmbeddingModel:
|
|
|
|
|
|
instance = None
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_embedding_model():
|
|
|
|
|
|
"""
|
|
|
|
|
|
获取向量化模型
|
|
|
|
|
|
:return:
|
|
|
|
|
|
"""
|
|
|
|
|
|
if EmbeddingModel.instance is None:
|
|
|
|
|
|
model_name = CONFIG.get('EMBEDDING_MODEL_NAME')
|
|
|
|
|
|
cache_folder = CONFIG.get('EMBEDDING_MODEL_PATH')
|
|
|
|
|
|
device = CONFIG.get('EMBEDDING_DEVICE')
|
|
|
|
|
|
e = HuggingFaceEmbeddings(
|
|
|
|
|
|
model_name=model_name,
|
|
|
|
|
|
cache_folder=cache_folder,
|
|
|
|
|
|
model_kwargs={'device': device})
|
|
|
|
|
|
EmbeddingModel.instance = e
|
|
|
|
|
|
return EmbeddingModel.instance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VectorStore:
|
|
|
|
|
|
from embedding.vector.pg_vector import PGVector
|
|
|
|
|
|
from embedding.vector.base_vector import BaseVectorStore
|
|
|
|
|
|
instance_map = {
|
|
|
|
|
|
'pg_vector': PGVector,
|
|
|
|
|
|
}
|
|
|
|
|
|
instance = None
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_embedding_vector() -> BaseVectorStore:
|
|
|
|
|
|
from embedding.vector.pg_vector import PGVector
|
|
|
|
|
|
if VectorStore.instance is None:
|
|
|
|
|
|
from smartdoc.const import CONFIG
|
|
|
|
|
|
vector_store_class = VectorStore.instance_map.get(CONFIG.get("VECTOR_STORE_NAME"),
|
|
|
|
|
|
PGVector)
|
|
|
|
|
|
VectorStore.instance = vector_store_class()
|
|
|
|
|
|
return VectorStore.instance
|