Ce projet intègre Langchain avec FastAPI d'une manière asynchrone et évolutive, fournissant un cadre d'indexation et de récupération de documents, en utilisant PostgreSQL / PGVector.
Les fichiers sont organisés en intégres par file_id . Le cas d'utilisation principal est pour l'intégration avec Librechat, mais cette API simple peut être utilisée pour n'importe quel cas d'utilisation basé sur ID.
La raison principale d'utiliser l'approche ID est de travailler avec des intégres au niveau du fichier. Cela permet des requêtes ciblées lorsqu'elles sont combinées avec des métadonnées de fichier stockées dans une base de données, comme celle de Librechat.
L'API évoluera au fil du temps pour utiliser différentes méthodes de requête / réévaluation, les modèles d'intégration et les magasins vectoriels.
.env basé sur la section ci-dessousdocker compose up (commence également API RAG)docker compose -f ./db-compose.yaml updocker compose up (démarre également PSQL / PGVector)docker compose -f ./api-compose.yaml upDB_HOST au nom d'hôte de la base de données correctepip install -r requirements.txt
uvicorn main:appLes variables d'environnement suivantes sont nécessaires pour exécuter l'application:
RAG_OPENAI_API_KEY : La touche API pour Openai API Embeddings (si vous utilisez des paramètres par défaut).
OPENAI_API_KEY fonctionnera mais RAG_OPENAI_API_KEY le remplacera afin de ne pas entrer en conflit avec le paramètre Liberchat. RAG_OPENAI_BASEURL : (Facultatif) L'URL de base pour vos intégres API OpenAI
RAG_OPENAI_PROXY : (facultatif) Proxy pour les incorporations API OpenAI
VECTOR_DB_TYPE : (facultatif) Sélectionnez le type de base de données vectorielle, par défaut à pgvector .
POSTGRES_DB : (facultatif) Le nom de la base de données PostgreSQL, utilisé lorsque VECTOR_DB_TYPE=pgvector .
POSTGRES_USER : (facultatif) le nom d'utilisateur pour se connecter à la base de données PostgreSQL.
POSTGRES_PASSWORD : (facultatif) Le mot de passe de connexion à la base de données PostgreSQL.
DB_HOST : (facultatif) Le nom d'hôte ou l'adresse IP du serveur de base de données PostgreSQL.
DB_PORT : (facultatif) Le numéro de port du serveur de base de données PostgreSQL.
RAG_HOST : (facultatif) Le nom d'hôte ou l'adresse IP où le serveur API s'exécutera. Par défaut "0.0.0.0"
RAG_PORT : (facultatif) Le numéro de port où le serveur API s'exécutera. Par défaut est le port 8000.
JWT_SECRET : (facultatif) La clé secrète utilisée pour vérifier les jetons JWT pour les demandes.
COLLECTION_NAME : (facultatif) Le nom de la collection dans la boutique vectorielle. La valeur par défaut est "TestCollection".
CHUNK_SIZE : (facultatif) la taille des morceaux pour le traitement de texte. La valeur par défaut est "1500".
CHUNK_OVERLAP : (facultatif) Le chevauchement entre les morceaux pendant le traitement de texte. La valeur par défaut est "100".
RAG_UPLOAD_DIR : (facultatif) Le répertoire où les fichiers téléchargés sont stockés. La valeur par défaut est "./uploads/".
PDF_EXTRACT_IMAGES : (facultatif) Une valeur booléenne indiquant s'il faut extraire des images des fichiers PDF. La valeur par défaut est "faux".
DEBUG_RAG_API : (Facultatif) réglé sur "True" pour afficher plus de sortie de journalisation verbeux dans la console du serveur et pour activer les routes de base de données PostgreSQL
CONSOLE_JSON : (facultatif) réglé sur "true" pour se connecter en tant que JSON pour les agrégations de journalisation des nuages
EMBEDDINGS_PROVIDER : (facultatif) "Openai", "Bedrock", "Azure", "HuggingFace", "HuggingFacetei" ou "Ollama", où "HuggingFace" utilise phrase_transorgers; par défaut "Openai"
EMBEDDINGS_MODEL : (Facultatif) Définissez un modèle d'intégration valide à utiliser à partir du fournisseur configuré.
RAG_AZURE_OPENAI_API_VERSION : (Facultatif) La valeur par défaut est 2023-05-15 . La version de l'API Azure Openai.
RAG_AZURE_OPENAI_API_KEY : (Facultatif) La clé API pour le service Azure Openai.
AZURE_OPENAI_API_KEY fonctionnera, mais RAG_AZURE_OPENAI_API_KEY le remplacera afin de ne pas entrer en conflit avec le paramètre Librechat. RAG_AZURE_OPENAI_ENDPOINT : (facultatif) L'URL de point de terminaison pour le service Azure OpenAI, y compris la ressource.
https://YOUR_RESOURCE_NAME.openai.azure.com .AZURE_OPENAI_ENDPOINT fonctionnera, mais RAG_AZURE_OPENAI_ENDPOINT le remplacera afin de ne pas entrer en conflit avec le paramètre Librechat. HF_TOKEN : (facultatif) Si nécessaire pour l'option huggingface .
OLLAMA_BASE_URL : (Facultatif) par défaut http://ollama:11434 .
ATLAS_SEARCH_INDEX : (facultatif) Le nom de l'index de recherche vectorielle si l'utilisation d'Atlas MongoDB, par défaut vers vector_index
MONGO_VECTOR_COLLECTION : déprécié pour MongoDB, veuillez utiliser ATLAS_SEARCH_INDEX et COLLECTION_NAME
AWS_DEFAULT_REGION : (facultatif) par défaut us-east-1
AWS_ACCESS_KEY_ID : (facultatif) nécessaire pour les intérêts du substratum rocheux
AWS_SECRET_ACCESS_KEY : (facultatif) nécessaire pour les intérêts du substratum rocheux
Assurez-vous de définir ces variables d'environnement avant d'exécuter l'application. Vous pouvez les définir dans un fichier .env ou en tant que variables d'environnement système.
Au lieu d'utiliser le PGVector par défaut, nous pourrions utiliser Atlas MongoDB comme base de données vectorielle. Pour ce faire, définissez les variables d'environnement suivantes
VECTOR_DB_TYPE = atlas-mongo
ATLAS_MONGO_DB_URI = <mongodb+srv://...>
COLLECTION_NAME = <vector collection>
ATLAS_SEARCH_INDEX = <vector search index> L' ATLAS_MONGO_DB_URI pourrait être identique ou différent de ce qui est utilisé par Librechat. Même si c'est le même, la collection $COLLECTION_NAME doit être complètement nouvelle, distincte de toutes les collections utilisées par Librechat. De plus, créez un index de recherche vectorielle de la collection ci-dessus (n'oubliez pas d'attribuer $ATLAS_SEARCH_INDEX ) avec le JSON suivant:
{
"fields" : [
{
"numDimensions" : 1536 ,
"path" : " embedding " ,
"similarity" : " cosine " ,
"type" : " vector "
},
{
"path" : " file_id " ,
"type" : " filter "
}
]
}Suivez l'une des quatre méthodes documentées pour créer l'indice vectoriel.
Assurez-vous que votre instance RDS Postgres adhère à cette exigence:
The pgvector extension version 0.5.0 is available on database instances in Amazon RDS running PostgreSQL 15.4-R2 and higher, 14.9-R2 and higher, 13.12-R2 and higher, and 12.16-R2 and higher in all applicable AWS Regions, including the AWS GovCloud (US) Regions.
Afin de configurer RDS Postgres avec API RAG, vous pouvez suivre ces étapes:
Créez une instance / cluster RDS à l'aide de la documentation AWS fournie.
Connectez-vous au cluster RDS à l'aide de la chaîne de connexion de point de terminaison à partir de la console RDS ou à partir de votre sortie de solution IAC.
La connexion est via l' utilisateur principal .
Créez une base de données dédiée pour RAG_API: create database rag_api; .
Créer un rôle utilisateur dédié pour cette base de données: create role rag;
Passez à la base de données que vous venez de créer: c rag_api
Activer l'extension vectorielle: create extension vector;
Utilisez la documentation fournie ci-dessus pour configurer la chaîne de connexion au cluster d'instance RDS Postgres .
Notes:
create role x with superuser;Exécutez les commandes suivantes pour installer le format pré-engagement, qui utilise le formateur de code noir:
pip install pre-commit
pre-commit install