Team Ai
Apppublic

FerdinandPyCode/AuthringApp

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes
pattern_voici_decouvrez.py104 linesDownload Raw Back to root
1from langchain.prompts import PromptTemplate2from langchain.output_parsers import PydanticOutputParser3from pydantic import BaseModel, Field4from typing import List, Tuple5import json6from langchain.chat_models import ChatOpenAI7 8 9# Modèle de sortie pour la détection des expressions "VOICI" et "DÉCOUVREZ"10class ReformulationDetail(BaseModel):11    original: str = Field(..., description="Phrase originale contenant 'VOICI' ou 'DÉCOUVREZ'.")12    explanation: str = Field(..., description="Explication sur pourquoi l'expression alourdit la phrase.")13    reformulation_1: str = Field(..., description="Reformulation basée sur l'approche Anticipation/Intrigue.")14    reformulation_2: str = Field(..., description="Reformulation basée sur l'approche Conversationnel.")15    reformulation_3: str = Field(..., description="Reformulation basée sur l'approche Accompagnement doux.")16 17    def to_dict(self):18        return {19            "original": self.original,20            "explanation": self.explanation,21            "reformulation_1": self.reformulation_1,22            "reformulation_2": self.reformulation_2,23            "reformulation_3": self.reformulation_3,24        }25 26class Summary(BaseModel):27    total_occurrences: int = Field(..., description="Nombre total d'occurrences de 'VOICI' et 'DÉCOUVREZ'.")28    reformulations_provided: int = Field(..., description="Nombre de reformulations proposées.")29 30    def to_dict(self):31        return {32            "total_occurrences": self.total_occurrences,33            "reformulations_provided": self.reformulations_provided,34        }35 36class DetectionResult(BaseModel):37    reformulations: List[ReformulationDetail] = Field(..., description="Liste des reformulations proposées pour chaque occurrence.")38    summary: Summary = Field(..., description="Résumé de la détection.")39 40    def to_dict(self):41        return {42            "reformulations": [reformulation.to_dict() for reformulation in self.reformulations],43            "summary": self.summary.to_dict()44        }45 46# Création du template pour la détection de l'utilisation de "VOICI" et "DÉCOUVREZ" à la fin d'une introduction47def voici_decouvrez_prompt_template():48    return """49Tu es un éditeur de texte IA extrêmement performant et rigoureux. Ta tâche est d'analyser **précisément** le texte fourni pour détecter **toutes les occurrences** des expressions **"VOICI"** et **"DÉCOUVREZ"** situées **à la fin d'une introduction**.50L'introduction , c'est le premier paragraphe.51Pour chaque occurrence identifiée, tu dois obligatoirement :52 531. **Citer exactement** la phrase originale contenant "VOICI" ou "DÉCOUVREZ".542. **Expliquer brièvement et clairement** pourquoi l'utilisation de ce terme peut alourdir ou rendre la transition vers le contenu moins fluide.553. **Proposer trois reformulations distinctes**, selon les approches suivantes :56    - **Anticipation/Intrigue** : Créer de l'attente ou de l'intrigue pour susciter l'intérêt du lecteur.57    - **Conversationnel** : Formuler la phrase de manière plus engageante et naturelle.58    - **Accompagnement doux** : Offrir une transition progressive et moins directive vers le contenu.59 60### Format attendu pour chaque occurrence :61 62- **Original** : "[Phrase originale]"63    - **Explication** : "[Explication concise]"64    - **Reformulation 1 (Anticipation/Intrigue)** : "[Reformulation ici]"65    - **Reformulation 2 (Conversationnel)** : "[Reformulation ici]"66    - **Reformulation 3 (Accompagnement doux)** : "[Reformulation ici]"67 68Le texte à analyser est le suivant :69```{text}```70Le format de la sortie doit être en JSON.71```{format_instruction}```72"""73 74def detect_voici_decouvrez(text):75    # Création du modèle de sortie avec Pydantic76    output_parser = PydanticOutputParser(pydantic_object=DetectionResult)77 78    # Génération du prompt à partir du modèle79    gen_prompt_template = PromptTemplate(80        input_variables=["text"],81        template=voici_decouvrez_prompt_template(),82        partial_variables={'format_instruction': output_parser.get_format_instructions()}83    )84 85    # Création du modèle de langage (avec LLM)86    llm = ChatOpenAI(model='gpt-4', temperature=0.5, api_key="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")87 88    # Chaîne de traitement du prompt avec le modèle et le parseur89    llm_chain = gen_prompt_template | llm | output_parser90 91    # Appel du modèle avec le texte fourni92    result_dict = llm_chain.invoke({"text": text}).to_dict()93 94    # Conversion du résultat en JSON95    json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)96 97    # Génération du prompt final98    final_prompt = gen_prompt_template.format(text=text)99 100    # Retour des résultats101    return {102        "result": json_result,103        "prompt": final_prompt104    }