Compare commits
5 Commits
ea2f52c577
...
RAG
| Author | SHA1 | Date | |
|---|---|---|---|
|
7c92d4fc31
|
|||
|
33f54e8e30
|
|||
|
6795fdc7fa
|
|||
|
de1745b670
|
|||
|
3a14bd3f2b
|
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,5 +1,10 @@
|
|||||||
.venv/
|
.venv/
|
||||||
.env
|
.env
|
||||||
|
mlflow.db
|
||||||
|
|
||||||
# Par sécurité
|
# Par sécurité
|
||||||
documents_projet/
|
documents_projet/
|
||||||
|
chroma_db/
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
51
RAG/init.py
Normal file
51
RAG/init.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Ce fichier vise à préparer les documents dans le RAG.
|
||||||
|
# Une fois lancé, une base de données vectorielle locale sera générée
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
from langchain_community.document_loaders import DirectoryLoader, TextLoader # Charge les docs
|
||||||
|
from langchain_text_splitters import RecursiveCharacterTextSplitter # Divise le texte en chunks
|
||||||
|
from langchain_huggingface import HuggingFaceEmbeddings # Tokénize le texte
|
||||||
|
from langchain_chroma import Chroma # BDD, serait PG vector en prod'
|
||||||
|
|
||||||
|
print("=== GENERATION DE LA BDD LOCALE ===")
|
||||||
|
|
||||||
|
base_dir = Path(__file__).resolve().parent.parent # Dossier parent, où sont les données
|
||||||
|
|
||||||
|
# Chargement de tous les documents txt du dossier docs/
|
||||||
|
try:
|
||||||
|
loader = DirectoryLoader(
|
||||||
|
path= base_dir.as_posix() + "/documents_projet/",
|
||||||
|
glob="**/*.txt",
|
||||||
|
loader_cls=TextLoader,
|
||||||
|
show_progress=True)
|
||||||
|
docs = loader.load()
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print("ERREUR: Le dossier \"documents_projet\" n'est pas présent ! Il faut l'ajouter à la racine du projet avant de lancer ce script.")
|
||||||
|
import sys
|
||||||
|
sys.exit(1) # J'arrête ici
|
||||||
|
|
||||||
|
|
||||||
|
print(f"Documents chargés: {len(docs)}")
|
||||||
|
|
||||||
|
# Maintenant que j'ai chargé les documents, je vais les découper en chunks
|
||||||
|
# (taille d'un chunk = 500 caractères, chevauchement = 100 caractères)
|
||||||
|
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000/2, chunk_overlap=200/2)
|
||||||
|
chunks = text_splitter.split_documents(docs) # Découpage des documents
|
||||||
|
|
||||||
|
print(f"Ces documents ont été divisés en {len(chunks)} chunks de texte.")
|
||||||
|
print("Exemple de chunk : ")
|
||||||
|
print("===")
|
||||||
|
print(chunks[-1])
|
||||||
|
print("===")
|
||||||
|
|
||||||
|
|
||||||
|
# Création du modèle d'embeddings
|
||||||
|
# https://docs.langchain.com/oss/python/integrations/text_embedding/huggingfacehub
|
||||||
|
# https://huggingface.co/jinaai/jina-clip-v2
|
||||||
|
embeddings = HuggingFaceEmbeddings(model_name="jinaai/jina-embeddings-v3", model_kwargs={"trust_remote_code": True})
|
||||||
|
|
||||||
|
# Stockage des embeddings dans ChromaDB dans un dossier local "chroma_db"
|
||||||
|
vectorstore = Chroma.from_documents(documents=chunks,embedding=embeddings, persist_directory=base_dir.as_posix()+"/chroma_db/",) # https://docs.langchain.com/oss/python/integrations/vectorstores/chroma
|
||||||
|
|
||||||
|
print(f"Documents chargés et base de données créée à {base_dir.as_posix()+"/chroma_db/"} !")
|
||||||
BIN
imgs/projet.png
Normal file
BIN
imgs/projet.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 131 KiB |
22
readme.md
22
readme.md
@@ -3,4 +3,24 @@
|
|||||||
**Les documents liés au projet ne sont pas inclus dans ce repo, il faut les ajouter à la racine dans "documents_projet/" !**
|
**Les documents liés au projet ne sont pas inclus dans ce repo, il faut les ajouter à la racine dans "documents_projet/" !**
|
||||||
|
|
||||||
## Workflow
|
## Workflow
|
||||||

|

|
||||||
|
|
||||||
|
## Mise en place
|
||||||
|
|
||||||
|
La première étape est d'installer le `venv` Python:
|
||||||
|
```
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Puis de définir les variables d'env de l'agent
|
||||||
|
```
|
||||||
|
cp AgentReact/.env.template AgentReact/.env
|
||||||
|
nano AgentReact/.env
|
||||||
|
```
|
||||||
|
|
||||||
|
Une fois le dossier **documents_projet** ajouté à la racine, il est possible de générer la base de données vectorielle
|
||||||
|
```
|
||||||
|
python RAG/init.py
|
||||||
|
```
|
||||||
|
|||||||
27
roadmap.md
Normal file
27
roadmap.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Roadmap
|
||||||
|
> Plan d'action du développement
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Préparation du projet
|
||||||
|
- [X] Initialisation du projet, template d'agent préparé
|
||||||
|
- [X] Première ébauche du Workflow
|
||||||
|
- [X] Préparation de la roadmap
|
||||||
|
- [X] Mise en place du système de **RAG**
|
||||||
|
- [X] Lecture des documents et mise en base de données vectorielle
|
||||||
|
|
||||||
|
## Mise en place de l'agent
|
||||||
|
- [ ] Préparation du `State`
|
||||||
|
- [ ] Développement des outils de l'agent
|
||||||
|
- [ ] Préparation des nœuds
|
||||||
|
- [ ] Branchement des nœuds entre-eux
|
||||||
|
|
||||||
|
## Amélioration de l'agent
|
||||||
|
- [ ] Sauvegarde de l'état de l'agent
|
||||||
|
- [ ] Système de redémarrage après un arrêt
|
||||||
|
- [ ] Détection de *prompt injection*
|
||||||
|
- [ ] Génération d'un PDF en sortie du système
|
||||||
|
|
||||||
|
## Autres pistes
|
||||||
|
- [ ] Enregistrement des sources dans le `state` **?**
|
||||||
|
- [ ] Deuxième agent de validation de la mise en page du rapport ?
|
||||||
Reference in New Issue
Block a user