Chroma Framework est une application basée sur Python conçue pour gérer et rechercher des incorporations de texte à l'aide d'un modèle de transformateur de phrase. Le framework permet aux utilisateurs de créer des collections d'incorporation de texte, d'ajouter de nouveaux documents et d'interroger les textes les plus proches en fonction des requêtes d'entrée.
⛩️ Gestion d'intégration ⛩️ -> Créer et gérer les collections d'incorporation de texte.
Addtion de documents -> Ajouter de nouveaux documents à la collection avec des métadonnées.
? Recherche de texte ? -> Trouvez les textes les plus proches d'une requête donnée à l'aide du modèle d'incorporation.
Gestion des chemins dynamiques -> Déterminer automatiquement les chemins de fichier par rapport au répertoire du projet.
Clone le référentiel :
git clone https://github.com/yourusername/chromadb_frameworkAccédez au répertoire du projet :
cd chromadb_frameworkInstallez toutes les dépendances requises (le cas échéant) .
pip install -r requirements.txtAssurez-vous que Python 3.x est installé.
Exécutez l'application en exécutant:
python main.pySuivez les invites à l'écran pour gérer les intégres et les textes de recherche.
? project-root
├── ? config
│ ├── ? __ init __ .py
│ └── ? constants.py
│
├── ? src
│ ├── ? __ init __ .py
│ ├── ? client.py
│ ├── ? collection.py
│ └── ? data.py
│
├── ? utils
│ ├── ? __ init __ .py
│ └── ? helpers.py
│
├── ? .gitignore
├── ? .gitattributes
└── ? main.pyconfig.py/ : contient des fichiers de configuration.
SRC / : contient des fichiers de code source.
utils / : contient des fonctions utilitaires.
.gitignore : spécifie les fichiers et les répertoires à ignorer par GIT (par exemple, les environnements virtuels, la construction d'artefacts).
.GitAttributes : assure des terminaisons de ligne cohérentes sur différents systèmes d'exploitation dans le référentiel.
main.py : le point d'entrée de l'application. Initialise les paramètres, gère les opérations d'intégration et gère les recherches de texte.
from config . constants import MODEL_NAME , COLLECTION_NAME , INPUT_QUERY
from src . client import get_client
from src . collection import get_or_create_collection , add_collection , find_closest_texts
from src . data import get_data
from utils . helpers import set_def_llm , get_path
def main ():
model_name = MODEL_NAME
collection_name = COLLECTION_NAME
input_query = INPUT_QUERY
my_client = get_client ()
my_folder_path = get_path ()
embedding_function = set_def_llm ( model_name )
my_collection = get_or_create_collection ( my_client , collection_name , embedding_function = embedding_function )
my_documents , my_metadatas , my_ids = get_data ( my_folder_path )
add_collection ( my_collection , my_documents , my_metadatas , my_ids )
my_closest_texts = find_closest_texts ( my_collection , input_query )
print ( "Closest text(s):" , my_closest_texts )
if __name__ == "__main__" :
main ()HEARDERS.PY : fonctions utilitaires pour définir le modèle et obtenir des chemins.
from os . path import abspath , dirname , join
from chromadb . utils import embedding_functions
def set_def_llm ( model_name = None ):
try :
if model_name :
return embedding_functions . SentenceTransformerEmbeddingFunction ( model_name = model_name )
else :
return embedding_functions . DefaultEmbeddingFunction ()
except Exception as e :
print ( f"An error occurred while setting the sentence transformer. n " )
return None
def get_path ( folder_name = "texts" ):
try :
current_path = dirname ( abspath ( __file__ ))
project_path = dirname ( current_path )
full_path = join ( project_path , folder_name )
return full_path
except Exception as e :
print ( f"An error occurred while getting the folder path. n " )client.py : fonctionne pour créer le client de base de données.
from chromadb import PersistentClient
def get_client ( path = "vector_db" ):
try :
client = PersistentClient ( path = path )
return client
except FileNotFoundError :
print ( f"Database directory not found:" )
except Exception as e :
print ( f"An error occurred while creating the client: { e } " )Collection.py : Fonctions pour gérer les collections et les textes de recherche.
def get_or_create_collection ( client , name , embedding_function ):
try :
return client . get_or_create_collection ( name = name , embedding_function = embedding_function )
except Exception as e :
print ( f"An error occurred while creating the collection: { e } " )
def add_collection ( collection , documents , metadatas , ids ):
try :
collection . add (
documents = documents ,
metadatas = metadatas ,
ids = ids
)
except Exception as e :
print ( f"An error occurred while adding to the collection: { e } " )
def find_closest_texts ( collection , input_query , n_results = 2 ):
try :
closest_text_names = list ()
results = collection . query (
query_texts = [ input_query ],
include = [ "metadatas" ],
n_results = n_results
)
for item in results [ "metadatas" ][ 0 ]:
closest_text_names . append ( item [ "source" ])
return closest_text_names
except Exception as e :
print ( f"An error occurred while finding the closest text: { e } " )data.py : fonctionne pour récupérer les données du dossier spécifié.
from os import listdir
from os . path import join
def get_data ( folder_path ):
try :
documents = list ()
metadatas = list ()
ids = list ()
id_count = 1
for file_name in listdir ( folder_path ):
if file_name . endswith ( ".txt" ):
file_path = join ( folder_path , file_name )
id = "id" + str ( id_count )
with open ( file_path ) as file :
content = file . read ()
documents . append ( content )
metadatas . append ({ "source" : file_name })
ids . append ( id )
id_count += 1
return documents , metadatas , ids
except Exception as e :
print ( f"An error occurred while creating the data: { e } " )
return [], [], []Ce projet est autorisé en vertu de la licence publique générale GNU V3.0 (GPL-3.0) - voir le fichier de licence pour plus de détails.
Faites-moi savoir s'il y a des détails spécifiques que vous souhaitez ajuster ou des sections supplémentaires que vous souhaitez inclure!