|
- namespace ToolsServices
- {
- public static class PromptService
- {
- #region Enum
- public enum ePrompt
- {
- ReActAgent_PromptSystem_LLM_Coder,
- ReActAgent_GenerateImage,
- ReActAgent_GenerateImageV2,
- ReActAgent_RechercheRAG,
- ReActAgent_SummarizeDoc,
- ReActAgent_SummarizeIntegralLongDoc,
- ReActAgent_SummarizeIntegralLongDoc_Final,
- GenererCVService_GenerateOneCV_Extract,
- GenererCVService_GenerateOneCV_Format,
- RechercheCVService_RechercheCV_Analyse,
- RechercheCVService_RechercheCV_Generate,
-
- EmailService_Generer_Mail,
-
- EmailService_AnalyserMail_Resume,
- EmailService_AnalyserMail_Resume_PJ,
- EmailService_AnalyserMail_Categorie,
- EmailService_AnalyserMail_Strategie,
- EmailService_AnalyserMail_Reponse,
- EmailService_AnalyserMail_Reponse_PJ,
-
- EmailSendService_AnalyserMail_BesoinReponse,
- EmailSendService_AnalyserMail_AllPointsChecked,
- EmailSendService_AnalyserMail_Relance,
-
- FactureService_AnalyserFacture_Extract,
- TF_From_DSFService_GenereTF,
- OllamaService_PromptSystem,
-
- TranscriptionAndResumeService_Resume
- }
- #endregion
-
- #region Propriétés
- public static string PromptNoQuery { get; }="No @QUERY";
- #endregion
- //
- #region Méthodes publiques
- public static string GetPromptBrut(ePrompt type)
- {
- string file = GetFileFromType(type);
- var txt = "";
- if (!File.Exists(file))
- {
- CreatePromptFile(type, file);
- }
-
- txt = TxtService.ExtractTextFromTxt(file);
- if ((txt.Trim().Length == 0))
- {
- LoggerService.LogWarning($"Contenu vide. Fichier prompt : {file} ");
- txt = CreatePromptFile(type, file);
- }
- return txt;
- }
-
- public static string GetPrompt(ePrompt type, string query="", string context1 = "", string context2 = "", string context3 = "", string context4 = "", string context5 = "", string context6 = "", string context7 = "")
- {
- try
- {
- var txt = GetPromptBrut(type);
-
- txt = txt.Replace("@QUERY", query);
- txt = txt.Replace("@CONTEXT1", context1);
- txt = txt.Replace("@CONTEXT2", context2);
- txt = txt.Replace("@CONTEXT3", context3);
- txt = txt.Replace("@CONTEXT4", context4);
- txt = txt.Replace("@CONTEXT5", context5);
- txt = txt.Replace("@CONTEXT6", context6);
- txt = txt.Replace("@CONTEXT7", context7);
-
- return txt;
- }
- catch (Exception ex)
- {
- LoggerService.LogError($"PromptService.GetPrompt : {ex.Message}");
- return string.Empty;
- }
- }
-
- public static (bool, string) SavePrompt(ePrompt type, string prompt, bool isConfirm=false)
- {
- try
- {
- if(prompt.Contains("@QUERY", StringComparison.CurrentCulture)
- || (!prompt.Contains("@QUERY", StringComparison.CurrentCulture) && isConfirm))
- {
- TxtService.CreateTextFile(GetFileFromType(type), prompt);
- }
- else
- {
- LoggerService.LogWarning($"PromptService.SavePrompt : Pas de @QUERY dans le prompt. Sauvegarde annulée.");
- return (false, PromptNoQuery);
- }
- }
-
- catch (Exception ex)
- {
- LoggerService.LogError($"PromptService.SavePrompt : {ex.Message}");
- return (false, ex.Message);
- }
- return (true, "");
- }
-
- public static List<ePrompt> GetAllPrompts()
- {
- return Enum.GetValues(typeof(ePrompt)).Cast<ePrompt>().ToList();
- }
- #endregion
-
- #region Méthodes privées
- private static string GetFileFromType(ePrompt type)
- {
- string file = string.Empty;
- switch (type)
- {
- case ePrompt.ReActAgent_PromptSystem_LLM_Coder:
- file = FichiersInternesService.PromptFiles.ReActAgent_PromptSystem_LLM_Coder;
- break;
- case ePrompt.ReActAgent_GenerateImage:
- file = FichiersInternesService.PromptFiles.ReActAgent_GenerateImage;
- break;
- case ePrompt.ReActAgent_GenerateImageV2:
- file = FichiersInternesService.PromptFiles.ReActAgent_GenerateImageV2;
- break;
- case ePrompt.ReActAgent_RechercheRAG:
- file = FichiersInternesService.PromptFiles.ReActAgent_RechercheRAG;
- break;
- case ePrompt.ReActAgent_SummarizeDoc:
- file = FichiersInternesService.PromptFiles.ReActAgent_SummarizeDoc;
- break;
- case ePrompt.ReActAgent_SummarizeIntegralLongDoc:
- file = FichiersInternesService.PromptFiles.ReActAgent_SummarizeIntegralLongDoc;
- break;
- case ePrompt.ReActAgent_SummarizeIntegralLongDoc_Final:
- file = FichiersInternesService.PromptFiles.ReActAgent_SummarizeIntegralLongDoc_Final;
- break;
- case ePrompt.GenererCVService_GenerateOneCV_Extract:
- file = FichiersInternesService.PromptFiles.GenererCVService_GenerateOneCV_Extract;
- break;
- case ePrompt.GenererCVService_GenerateOneCV_Format:
- file = FichiersInternesService.PromptFiles.GenererCVService_GenerateOneCV_Format;
- break;
- case ePrompt.RechercheCVService_RechercheCV_Analyse:
- file = FichiersInternesService.PromptFiles.RechercheCVService_RechercheCV_Analyse;
- break;
- case ePrompt.RechercheCVService_RechercheCV_Generate:
- file = FichiersInternesService.PromptFiles.RechercheCVService_RechercheCV_Generate;
- break;
- case ePrompt.EmailService_Generer_Mail:
- file = FichiersInternesService.PromptFiles.EmailService_Generer_Mail;
- break;
- case ePrompt.EmailService_AnalyserMail_Resume:
- file = FichiersInternesService.PromptFiles.EmailService_AnalyserMail_Resume;
- break;
- case ePrompt.EmailService_AnalyserMail_Resume_PJ:
- file = FichiersInternesService.PromptFiles.EmailService_AnalyserMail_Resume_PJ;
- break;
- case ePrompt.EmailService_AnalyserMail_Categorie:
- file = FichiersInternesService.PromptFiles.EmailService_AnalyserMail_Categorie;
- break;
- case ePrompt.EmailService_AnalyserMail_Strategie:
- file = FichiersInternesService.PromptFiles.EmailService_AnalyserMail_Strategie;
- break;
- case ePrompt.EmailService_AnalyserMail_Reponse:
- file = FichiersInternesService.PromptFiles.EmailService_AnalyserMail_Reponse;
- break;
- case ePrompt.EmailService_AnalyserMail_Reponse_PJ:
- file = FichiersInternesService.PromptFiles.EmailService_AnalyserMail_Reponse_PJ;
- break;
- case ePrompt.EmailSendService_AnalyserMail_BesoinReponse:
- file = FichiersInternesService.PromptFiles.EmailSendService_AnalyserMail_BesoinReponse;
- break;
- case ePrompt.EmailSendService_AnalyserMail_AllPointsChecked:
- file = FichiersInternesService.PromptFiles.EmailSendService_AnalyserMail_AllPointsChecked;
- break;
- case ePrompt.EmailSendService_AnalyserMail_Relance:
- file = FichiersInternesService.PromptFiles.EmailSendService_AnalyserMail_Relance;
- break;
- case ePrompt.FactureService_AnalyserFacture_Extract:
- file = FichiersInternesService.PromptFiles.FactureService_AnalyserFacture_Extract;
- break;
- case ePrompt.TF_From_DSFService_GenereTF:
- file = FichiersInternesService.PromptFiles.TF_From_DSFService_GenereTF;
- break;
- case ePrompt.OllamaService_PromptSystem:
- file = FichiersInternesService.PromptFiles.OllamaService_PromptSystem;
- break;
- case ePrompt.TranscriptionAndResumeService_Resume:
- file = FichiersInternesService.PromptFiles.TranscriptionAndResumeService_Resume;
- break;
-
- default:
- LoggerService.LogError($"PromptService.GetFileFromType : Type de prompt inconnu : {type}");
- throw new ArgumentException($"Type de prompt inconnu : {type}");
- }
- return file;
- }
-
- private static string CreatePromptFile(ePrompt type, string file)
- {
- try
- {
- string txt = string.Empty;
- switch (type)
- {
- case ePrompt.ReActAgent_PromptSystem_LLM_Coder:
- txt = CreatePromptFile_ReActAgent_PromptSystem_LLM_Coder();
- break;
- case ePrompt.ReActAgent_GenerateImage:
- txt = CreatePromptFile_ReActAgent_GenerateImage();
- break;
- case ePrompt.ReActAgent_GenerateImageV2:
- txt = CreatePromptFile_ReActAgent_GenerateImageV2();
- break;
- case ePrompt.ReActAgent_RechercheRAG:
- txt = CreatePromptFile_ReActAgent_RechercheRAG();
- break;
- case ePrompt.ReActAgent_SummarizeDoc:
- txt = CreatePromptFile_ReActAgent_SummarizeDoc();
- break;
- case ePrompt.ReActAgent_SummarizeIntegralLongDoc:
- txt = CreatePromptFile_ReActAgent_SummarizeIntegralLongDoc();
- break;
- case ePrompt.ReActAgent_SummarizeIntegralLongDoc_Final:
- txt = CreatePromptFile_ReActAgent_SummarizeIntegralLongDoc_Final();
- break;
- case ePrompt.GenererCVService_GenerateOneCV_Extract:
- txt = CreatePromptFile_GenererCVService_GenerateOneCV_Extract();
- break;
- case ePrompt.GenererCVService_GenerateOneCV_Format:
- txt = CreatePromptFile_GenererCVService_GenerateOneCV_Format();
- break;
- case ePrompt.RechercheCVService_RechercheCV_Analyse:
- txt = CreatePromptFile_RechercheCVService_RechercheCV_Analyse();
- break;
- case ePrompt.RechercheCVService_RechercheCV_Generate:
- txt = CreatePromptFile_RechercheCVService_RechercheCV_Generate();
- break;
- case ePrompt.EmailService_Generer_Mail:
- txt = CreatePromptFile_EmailService_Generer_Mail();
- break;
- case ePrompt.EmailService_AnalyserMail_Resume:
- txt = CreatePromptFile_EmailService_AnalyserMail_Resume();
- break;
- case ePrompt.EmailService_AnalyserMail_Resume_PJ:
- txt = CreatePromptFile_EmailService_AnalyserMail_Resume_PJ();
- break;
- case ePrompt.EmailService_AnalyserMail_Categorie:
- txt = CreatePromptFile_EmailService_AnalyserMail_Categorie();
- break;
- case ePrompt.EmailService_AnalyserMail_Strategie:
- txt = CreatePromptFile_EmailService_AnalyserMail_Strategie();
- break;
- case ePrompt.EmailService_AnalyserMail_Reponse:
- txt = CreatePromptFile_EmailService_AnalyserMail_Reponse();
- break;
- case ePrompt.EmailService_AnalyserMail_Reponse_PJ:
- txt = CreatePromptFile_EmailService_AnalyserMail_Reponse_PJ();
- break;
- case ePrompt.EmailSendService_AnalyserMail_BesoinReponse:
- txt = CreatePromptFile_EmailSendService_AnalyserMail_BesoinReponse();
- break;
- case ePrompt.EmailSendService_AnalyserMail_AllPointsChecked:
- txt = CreatePromptFile_EmailSendService_AnalyserMail_AllPointsChecked();
- break;
- case ePrompt.EmailSendService_AnalyserMail_Relance:
- txt = CreatePromptFile_EmailSendService_AnalyserMail_Relance();
- break;
- case ePrompt.FactureService_AnalyserFacture_Extract:
- txt = CreatePromptFile_FactureService_AnalyserFacture_Extract();
- break;
- case ePrompt.TranscriptionAndResumeService_Resume:
- txt = CreatePromptFile_TranscriptionAndResumeService_Resume();
- break;
- case ePrompt.TF_From_DSFService_GenereTF:
- txt = CreatePromptFile_TF_From_DSFService_GenereTF();
- break;
- case ePrompt.OllamaService_PromptSystem:
- txt = CreatePromptFile_OllamaService_PromptSystem();
- break;
-
- default:
- LoggerService.LogError($"PromptService.CreatePromptFile : Type de prompt inconnu : {type}");
- throw new ArgumentException($"Type de prompt inconnu : {type}");
- }
- TxtService.CreateTextFile(file, txt);
- LoggerService.LogInfo($"PromptService.CreatePromptFile : Fichier créé : {file}");
- return txt;
- }
- catch (Exception ex)
- {
- LoggerService.LogError($"PromptService.CreatePromptFile : {ex.Message}");
- return string.Empty;
- }
- }
-
- private static string CreatePromptFile_OllamaService_PromptSystem()
- {
- var txt = """
- Donne toujours tes réponses dans la langue Française
- Réponds uniquement avec des faits vérifiables. Si tu n'es pas sûr, réponds 'je ne sais pas'.
- """;
- return txt;
- }
-
- private static string CreatePromptFile_TranscriptionAndResumeService_Resume()
- {
- var txt = """
- Tu es un expert en résumé de texte.
- Résume le texte suivant de manière claire et concise, en utilisant des phrases complètes.
- Le contexte de ce texte est le suivant : @CONTEXT1
-
- Texte à résumer :
- @QUERY
- """;
- return txt;
- }
-
- private static string CreatePromptFile_TF_From_DSFService_GenereTF()
- {
- var txt = """
- Tu es un expert analyste de tests logiciels.
- Tu vas lire un document technique (spécifications fonctionnelles internes) et en déduire des cas de tests.
- Ne prends en compte que les chapitres "règles de gestion" pour générer les cas de tests.
- Pour chaque cas de test créé, tu indiques la référence de la règle de gestion (ID du tableau Regles de gestion)
-
- Important : Il ne s’agit PAS d’une œuvre protégée par copyright, mais bien d’un document technique interne.
-
- Produit le résultat directement au format CSV avec les colonnes :
- ID;Référence règle de gestion;Titre;Préconditions;Étapes;Résultat attendu
-
- Spécification :
- ---
- @QUERY
- ---
- """;
- return txt;
- }
-
- private static string CreatePromptFile_FactureService_AnalyserFacture_Extract()
- {
- var txt = """
- Tu es un assistant spécialisé dans l'extraction d'informations depuis des factures.
- Je vais te fournir le contenu brut d’une facture (texte brut sans mise en forme).
- À partir de ce contenu, génère un document structuré au format XML en respectant la structure suivante :
-
- <?xml version="1.0" encoding="UTF-8"?>
- <FACTURE>
- <Numero_facture></Numero_facture>
- <Date_facture></Date_facture>
- <Client>
- <code_client></code_client>
- <Nom></Nom>
- <Email></Email>
- <Telephone></Telephone>
- <Adresse></Adresse>
- <SIRET></SIRET>
- </Client>
- <Fournisseur>
- <Nom></Nom>
- <Email></Email>
- <Telephone></Telephone>
- <Adresse></Adresse>
- <SIRET></SIRET>
- </Fournisseur>
- <Totaux>
- <Total_HT></Total_HT>
- <Total_TVA></Total_TVA>
- <Total_TTC></Total_TTC>
- </Totaux>
- <Articles>
- <Article>
- <Reference></Reference>
- <Designation></Designation>
- <Prix_unitaire_HT></Prix_unitaire_HT>
- <Quantité_achetée></Quantité_achetée>
- <Montant_total_HT></Montant_total_HT
- </Article>
- </Articles>
- </FACTURE>
-
- Si une information est absente, laisse le champ vide. Ne fais aucun commentaire, retourne uniquement le XML.
- N'oublie aucun article
-
- Formate le tout proprement au format XML.
- Les nombres décimaux doivent être au format universel :
- - pour le séparateur décimal, utilise un point et non une virgule)
- - ne met pas de séparateur de milliers
-
- Les dates doivent être au format universel (ex : 2025-12-31)
-
- N'ajoute pas de texte explicatif.
-
- Voici un exemple :
-
- Texte brut : Page : 1/1Total HT1 919,02Net HT1 919,02Total TVA383,80Total TTC2 302,82NET A PAYER2 302,82RéférenceDésignationQtéUnitéPrix Uni. HTMt Tot HTTVAMt Tot TTCV/COMMANDE N°CD240457SYLVAINART855850,400m²19,991 007,5020,00...1 209,00ECOGRIS...48,000Sacs18,99911,5220,00...1 093,82Chantier: CCA 10 Sanitaires CA24039REFIN FEEL Warm Struct. 30x60 R réf.OQ79 Bte de 1.26m²WEBER Col Flex Eco Grise 25KgPrix donnés en enlèvement sur notre dépôt de Monthléry38,981 919,022 302,82Facture N°FA7672Date29/03/2024Echéance31/05/2024Mode de paiementVirement 45 jours fi...AEG Construction10 Rue Du Bois Guillaume91000 Evry CourcouronnesTél.: E-mail:a.dimascio@aeg-constructio...Portable:06 70 65 67 70N.I.I.:Date de paiementLR CONCEPTION SARL au capital de 5.000€ -25 Rue des Bourguignons -91310 MontlhéryTVA Intracommunautaire : FR55 491 155 214 -SIREN : 491 155 214 00035 -CODE NAF : 4752ATél : 01 64 49 19 70 -Fax : 01 64 49 73 65 -Email : lrconception@orange.fr
-
-
- XML:
- <?xml version="1.0" encoding="UTF-8"?>
- <FACTURE>
- <Numero_facture>FA7672</Numero_facture>
- <Date_facture>2024-03-29</Date_facture>
- <Client>
- <code_client></code_client>
- <Nom>AEG Construction</Nom>
- <Email>a.dimascio@aeg-construction.fr</Email>
- <Telephone>06 70 65 67 70</Telephone>
- <Adresse>10 Rue Du Bois Guillaume, 91000 Evry Courcouronnes</Adresse>
- <SIRET></SIRET>
- </Client>
- <Fournisseur>
- <Nom>LR CONCEPTION SARL</Nom>
- <Email>lrconception@orange.fr</Email>
- <Telephone>01 64 49 19 70</Telephone>
- <Adresse>25 Rue des Bourguignons, 91310 Montlhéry</Adresse>
- <SIRET>FR55 491 155 214 - SIREN : 491 155 214 00035</SIRET>
- </Fournisseur>
- <Totaux>
- <Total_HT>1919.02</Total_HT>
- <Total_TVA>383.8</Total_TVA>
- <Total_TTC>2302.82</Total_TTC>
- </Totaux>
- <Articles>
- <Article>
- <Reference>ART8558</Reference>
- <Designation>REFIN FEEL Warm Struct. 30x60 R réf.OQ79 Bte de 1.26m²</Designation>
- <Prix_unitaire_HT>19.99</Prix_unitaire_HT>
- <Quantité_achetée>50.400</Quantité_achetée>
- <Montant_total_HT>1007.50</Montant_total_HT>
- </Article>
- <Article>
- <Reference>ECOGRIS</Reference>
- <Designation>WEBER Col Flex Eco Grise 25Kg</Designation>
- <Prix_unitaire_HT>18.99</Prix_unitaire_HT>
- <Quantité_achetée>48</Quantité_achetée>
- <Montant_total_HT>911.952</Montant_total_HT>
- </Article>
- </Articles>
- </FACTURE>
-
-
- Fin de l'exemple
-
- A TRAITER
- Voici le contenu de la facture extrait :
-
- @QUERY
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailSendService_AnalyserMail_Relance()
- {
- var txt = """
- Génère un brouillon de mail en langue française de relance poli basé sur cette conversation :
- Objet : @QUERY
- Contenu : @CONTEXT1
-
- Voici la signature à insérer en fin de mail :
- Cordialement,
- @CONTEXT2
- @CONTEXT3
- @CONTEXT4
- """;
-
- return txt;
- }
-
- private static string CreatePromptFile_EmailSendService_AnalyserMail_AllPointsChecked()
- {
- var txt = """
- Réponds uniquement par oui ou non. Tous les points de ce mail ont-ils été traités ?
- Début du mail:
- @QUERY
- - fin du mail
- """;
-
- return txt;
- }
-
- private static string CreatePromptFile_EmailSendService_AnalyserMail_BesoinReponse()
- {
- var txt = """
- Réponds uniquement par oui ou non. Une réponse est-elle nécessaire à ce mail ?
- Début du mail:
- @QUERY
- - fin du mail
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailService_AnalyserMail_Reponse_PJ()
- {
- var txt = """
- Inclus dans la réponse proposée l'analyse des pièces jointes dont voici le résumé : @QUERY
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailService_AnalyserMail_Reponse()
- {
- var txt = """
- Rédige une réponse professionnelle à cet email en suivant la stratégie définie.
- Fais bien attention à qui a écrit le mail initial, que tu lui répondes à lui et non à celui qui a écrit un vieux mail et dont tu as la réponse.
-
- Objet : @QUERY
- Contenu : @CONTEXT1
- Résumé : @CONTEXT2
- Catégorie : @CONTEXT3
- Stratégie : @CONTEXT4
-
- La réponse doit être claire, polie, adaptée au contexte et suffisamment concise.
- Voici la signature à insérer en fin de mail :
- Cordialement,
- @CONTEXT5
- @CONTEXT6
- @CONTEXT7
-
- Ne rajoute rien d'autre à la signature
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailService_AnalyserMail_Strategie()
- {
- var txt = """
- Tu dois choisir une stratégie de réponse à un email.
-
- Catégorie : @QUERY
- Important : @CONTEXT1
- Urgent : @CONTEXT2
-
- Voici les options possibles :
- - Répondre avec une explication simple
- - Demander plus d'informations
- - Présenter des excuses et proposer une solution
- - Accuser réception et informer d'un délai
-
- Choisis la stratégie la plus adaptée en tenant compte de la **catégorie**, de l'**importance** et de l'**urgence**.
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailService_AnalyserMail_Categorie()
- {
- var txt = """
- Tu dois catégoriser un email en fonction de son contenu.
- Voici le résumé de l'email :
- @QUERY
-
- Catégorise ce message parmi les choix suivants :
- - Demande d'information
- - Réclamation
- - Demande de devis
- - Problème technique (bug, panne, incident)
- - Demande de fonctionnalité / évolution
- - Planning / organisation (délais, réunions, livraisons)
- - Validation / approbation (recette, maquette, cahier des charges)
- - Support utilisateur (aide à l’utilisation, questions non techniques)
- - Partage d’information interne (compte rendu, note, documentation)
- - Commercial / administratif (contrats, factures, commandes)
- - Formation
- - Emploi
- - Demande de réunion
- - Compte-rendu de réunion
- - Autre
-
- Réponds uniquement par une des catégories listées.
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailService_AnalyserMail_Resume_PJ()
- {
- var txt = """
-
- Inclus dans le résumé l'analyse des pièces jointes dont voici le résumé : @QUERY
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailService_AnalyserMail_Resume()
- {
- var txt = """
- Tu es un assistant professionnel chargé d'analyser un e-mail.
- Lis le contenu suivant et fais un résumé clair et concis.
-
- Ensuite, indique explicitement :
- - Une note d'importance entre 0 et 5 (5 étant la plus haute importance) avec justification si possible
- - Une note d'urgence entre 0 et 5 (5 étant la plus haute importance) avec justification si possible
- - Un mot pour définir l'analyse qui sera soit "Positif", soit "Négatif", soit "Neutre"
-
- Format de réponse attendu :
- Résumé : ...
-
- Importance (0-5) : ...
- Urgence (0-5) : ...
- Analyse : ...
-
- Objet : @QUERY
- Contenu : @CONTEXT1
- """;
- return txt;
- }
-
- private static string CreatePromptFile_EmailService_Generer_Mail()
- {
- var txt = """
- Redige un email selon la demande que voici @QUERY.
- Tiens compte du contexte que voici @CONTEXT1.
-
- Voici la signature à insérer en fin de mail :
- Cordialement,
- @CONTEXT2
- @CONTEXT3
- @CONTEXT4
- """;
- return txt;
- }
-
- private static string CreatePromptFile_RechercheCVService_RechercheCV_Generate()
- {
- var txt = """
- Tu es un assistant spécialisé dans l'extraction d'informations depuis des CV.
- Je vais te fournir le contenu brut d’un CV (texte brut sans mise en forme).
- À partir de ce contenu, génère un document structuré au format XML en respectant la structure suivante :
-
- <CV>
- <Identite>
- <Nom></Nom>
- <Prenom></Prenom>
- <Email></Email>
- <Telephone></Telephone>
- <Adresse></Adresse>
- <DateDeNaissance></DateDeNaissance>
- <Nationalite></Nationalite>
- </Identite>
- <Profil></Profil>
- <Competences>
- <Competence nom=""..."" niveau=""..."" />
- ...
- </Competences>
- <Langues>
- <Langue nom=""..."" niveau=""..."" />
- ...
- </Langues>
- <Experiences>
- <Experience>
- <Poste></Poste>
- <Entreprise></Entreprise>
- <Lieu></Lieu>
- <DateDebut></DateDebut>
- <DateFin></DateFin>
- <Description></Description>
- </Experience>
- ...
- </Experiences>
- <Formations>
- <Formation>
- <Diplome></Diplome>
- <Etablissement></Etablissement>
- <DateDebut></DateDebut>
- <DateFin></DateFin>
- </Formation>
- ...
- </Formations>
- <Certifications>
- <Certification>
- <Nom></Nom>
- <Organisme></Organisme>
- <Date></Date>
- </Certification>
- ...
- </Certifications>
- </CV>
-
- Si une information est absente, laisse le champ vide. Ne fais aucun commentaire, retourne uniquement le XML.
- N'oublie aucune expérience, aucune formation, aucune langue, ni aucune certification.
- Formate le tout proprement au format XML. N'ajoute pas de texte explicatif. Commence directement par <document>.
-
- Voici un contenu PDF extrait :
-
- @QUERY
- """;
- return txt;
- }
-
- private static string CreatePromptFile_RechercheCVService_RechercheCV_Analyse()
- {
- var txt = """
- Tu es un expert en recrutement. Ton rôle est d'évaluer la compatibilité entre une offre d'emploi et un CV.
-
- Analyse comparative :
-
- 1. **Points forts** : liste les éléments du CV qui correspondent bien aux exigences de l'offre (compétences, expériences, formations, etc.).
-
- 2. **Points manquants ou faibles** : identifie les éléments de l'offre qui sont absents ou peu développés dans le CV.
-
- 3. **Note de compatibilité** : donne une note globale de correspondance entre le CV et l'offre, sur 10, avec une explication.
-
- Voici les documents à comparer :
-
- ---
- **Offre d’emploi** :
- @QUERY
-
- ---
- **CV du candidat** :
- @CONTEXT1
-
- ---
- Réponds en suivant la structure suivante :
-
- **Points forts :**
- - …
-
- **Points manquants ou faibles :**
- - …
-
- **Note de compatibilité (sur 10) :**
- X/10 – Explication : …
- """;
- return txt;
- }
-
- private static string CreatePromptFile_GenererCVService_GenerateOneCV_Format()
- {
- var txt = """
- Voici un CV rédigé en texte. Reformate-le en XML structuré selon ce modèle :
-
- <CV>
- <Identite>
- <Nom></Nom>
- <Prenom></Prenom>
- <Email></Email>
- <Telephone></Telephone>
- <Adresse></Adresse>
- <DateDeNaissance></DateDeNaissance>
- <Nationalite></Nationalite>
- </Identite>
- <Profil></Profil>
- <Competences>
- <Competence nom="" niveau="" />
- ...
- </Competences>
- <Langues>
- <Langue nom="" niveau="" />
- ...
- </Langues>
- <Experiences>
- <Experience>
- <Poste></Poste>
- <Entreprise></Entreprise>
- <Lieu></Lieu>
- <DateDebut></DateDebut>
- <DateFin></DateFin>
- <Description></Description>
- </Experience>
- ...
- </Experiences>
- <Formations>
- <Formation>
- <Diplome></Diplome>
- <Etablissement></Etablissement>
- <DateDebut></DateDebut>
- <DateFin></DateFin>
- </Formation>
- ...
- </Formations>
- <Certifications>
- <Certification>
- <Nom></Nom>
- <Organisme></Organisme>
- <Date></Date>
- </Certification>
- ...
- </Certifications>
- </CV>
-
- Si une information est absente, laisse le champ vide. Ne commente pas.
-
- CV :
- <<<
- @QUERY
- >>>
- """;
- return txt;
- }
-
- private static string CreatePromptFile_GenererCVService_GenerateOneCV_Extract()
- {
- var txt = """
- Tu es un assistant RH.
-
- Voici un CV brut :
- <<<
- @QUERY
- >>>
-
- Ta mission :
- - Réécris le CV de façon à ce qu’il soit mis en valeur
- - Mets en avant les compétences pertinentes
- - Réorganise les expériences importantes
- - Reformule le résumé professionnel avec les bons mots-clés
- - Supprime les parties non utiles pour ce poste
-
- Rends un CV **entièrement réécrit** au format texte brut. Ne commente pas.
- """;
- return txt;
- }
-
- private static string CreatePromptFile_ReActAgent_SummarizeIntegralLongDoc_Final()
- {
- var txt = """
- Voici une série de résumés partiels :
-
- @QUERY
-
- Fais un résumé global cohérent en moins de 500 mots.
- """;
- return txt;
- }
-
- private static string CreatePromptFile_ReActAgent_SummarizeIntegralLongDoc()
- {
- var txt = """
- Tu es un assistant intelligent.
-
- Ta mission est de lire les extraits suivants d’un document, et d’en produire un résumé synthétique, structuré, et professionnel en moins de 100 mots.
- Ignore les mentions légales ou répétitions
-
- Extraits :
- @QUERY
-
- Résumé :
- """;
- return txt;
- }
-
- private static string CreatePromptFile_ReActAgent_SummarizeDoc()
- {
- var txt = """
- Tu es un assistant intelligent.
-
- Ta mission est de lire les extraits suivants d’un document, et d’en produire un résumé synthétique, structuré, et professionnel en moins de 100 mots.
- Ignore les mentions légales ou répétitions
-
- Extraits :
- @QUERY
-
- Résumé :
- """;
- return txt;
- }
-
- private static string CreatePromptFile_ReActAgent_RechercheRAG()
- {
- var txt = """
- Tu es un assistant spécialisé dans la lecture de documents d'entreprises.
- Le domaine professionnel concerné est le suivant : @CONTEXT2
-
- Question : @QUERY
-
- Context :
- @CONTEXT1
-
- Réponds uniquement à partir du contexte.
- Pour chaque information donnée, indique le document dont elle provient.
- Si tu n'as pas la réponse, dis que tu ne sais pas.
- """;
- return txt;
- }
-
- private static string CreatePromptFile_ReActAgent_PromptSystem_LLM_Coder()
- {
- var txt = """
- Tu es un expert en développement informatique
- """;
- return txt;
- }
-
- private static string CreatePromptFile_ReActAgent_GenerateImage()
- {
- var txt = """
- Transforme cette idée en prompt détaillé pour générer une image avec Fooocus : @QUERY
- """;
- return txt;
- }
-
- private static string CreatePromptFile_ReActAgent_GenerateImageV2()
- {
- string txt = $$$"""
- Tu es un assistant qui prépare une requête JSON pour Fooocus (text-to-image).
- À partir de cette description : "@QUERY", remplis toutes les propriétés suivantes de façon cohérente.
- Dans la partie "style_selections", ne prends que des styles existants dans Fooocus dont voici la liste :
- @CONTEXT1
- Réponds uniquement en JSON valide correspondant à la classe suivante :
-
- {
-
- "prompt": "...",
- "negative_prompt": "blurry, low quality, distorted, watermark, text, extra limbs, cropped",
- "style_selections": ["..."],
- "performance_selection": "Speed | Quality | Extreme Speed",
- "aspect_ratios_selection": "896*1152 | 1152*896 | 1024*1024 | etc.",
- "image_number": 1,
- "image_seed": -1,
- "sharpness": 2.0,
- "guidance_scale": 4.0,
- "base_model_name": "juggernautXL_v8Rundiffusion.safetensors",
- "refiner_model_name": "None",
- "refiner_switch": 0.5,
- "require_base64": false,
- "async_process": false,
- "loras": []
- }
-
- Exemple pour une image "un chat en armure médiévale" :
-
- {
-
- "prompt": "A highly detailed illustration of a cat in medieval knight armor, cinematic lighting",
- "negative_prompt": "blurry, low quality, distorted, watermark, text, cropped",
- "style_selections": ["Fantasy", "Cinematic"],
- "performance_selection": "Quality",
- "aspect_ratios_selection": "1024*1024",
- "image_number": 1,
- "image_seed": -1,
- "sharpness": 2.5,
- "guidance_scale": 6.0,
- "base_model_name": "juggernautXL_v8Rundiffusion.safetensors",
- "refiner_model_name": "None",
- "refiner_switch": 0.5,
- "require_base64": false,
- "async_process": false,
- "loras": []
- }
- """;
- return txt;
- }
- #endregion
- }
- }
|