File size: 9,712 Bytes
c9eca86
5c1e4b6
b516230
8488d6b
 
c9eca86
 
 
 
 
 
 
114225b
c9eca86
 
 
 
 
 
 
 
7612cff
c9eca86
7612cff
c9eca86
 
 
 
 
 
 
 
 
7612cff
c9eca86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7612cff
 
c9eca86
7612cff
c9eca86
 
 
 
 
 
 
 
 
7612cff
c9eca86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b24f86a
c9eca86
 
b24f86a
c9eca86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c501407
 
 
 
8c6f103
 
 
 
 
 
 
 
 
c9eca86
 
b24f86a
c9eca86
 
b24f86a
c9eca86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c501407
 
 
 
c9eca86
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
import google.generativeai as genai
import os

genai.configure(api_key=os.getenv("gemini_token"))
                
def call_ai_api(prompt):
    # Set up the model
    generation_config = {
    "temperature": 1,
    "top_p": 0.95,
    "max_output_tokens": 5000000,
    }
    model = genai.GenerativeModel(model_name="gemini-1.5-pro-latest",
                                generation_config=generation_config)
    response = model.generate_content(prompt)
    return response.text


def generer_prompt_seo(titre_article, mot_cle_principal, ton_cible, mots_cles_associes,optional_text):
    mots_cles_lexicaux = mots_cles_associes
    if optional_text :
        p=f"Données optionnel sur l'article : {optional_text}"
    else:
        p=""
    prompt = f"""
    CONTEXTE:
    Veuillez écrire un article de 1500 - 2000 mots. N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
    Vous êtes un rédacteur SEO chargé de composer un article de blog optimisé pour le SEO sur le sujet suivant.
    Voici les informations et directives à suivre :

    Titre de l'article : {titre_article}
    Mot-clé principal : {mot_cle_principal}
    Ton et/ou public cible : {ton_cible}
    Mots-clés lexicaux à inclure : {mots_cles_lexicaux}{p}

    INSTRUCTIONS:
    NOMBRE DE MOTS : 1000 à 1500
    ### Règles de rédaction :
N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
    1. Structure de l'article avec des titres hiérarchisés.
    2. Optimisation du mot-clé principal (densité d'environ 1,5%, utilisation dans le titre SEO, méta description, et répartition uniforme).
    3. Inclusion de sous-titres et de mots-clés LSI pour enrichir le contenu sans bourrage de mots-clés.
    4. Titres et méta descriptions attractifs avec appels à l'action.
    5. Ton informatif et engageant, avec une variété de vocabulaire.
    6. Introduction et conclusion engageantes avec le mot-clé principal.
    7. Section FAQ avec trois questions/réponses courtes.
    8. Au moins un lien externe vers une source crédible.
N'hésitez pas à prendre votre temps pour réfléchir à votre réponse j'ai besoin d'un long article.
    Assurez que l'article soit lisible, bien structuré et visuellement attrayant.
    """
    return prompt
def generate_seo_prompt(article_title, main_keyword, target_tone, associated_keywords,optional_text):
    lexical_keywords = associated_keywords
    if optional_text:
        p = f"Données optionnel sur l'article : {optional_text}"
    else:
        p = ""
    prompt = f"""
    CONTEXT:
    Please write an article of 1500 - 2000 words. Feel free to take your time to think about your response, I need a long article.
    You are an SEO writer tasked with composing an SEO-optimized blog article on the following topic.
    Here are the information and guidelines to follow:

    Article title: {article_title}
    Main keyword: {main_keyword}
    Target tone and/or audience: {target_tone}
    Lexical keywords to include: {lexical_keywords}{p}

    INSTRUCTIONS:
    WORD COUNT: 1000 to 1500
    ### Writing rules:
    Feel free to take your time to think about your response, I need a long article.
    1. Structure the article with hierarchical headings.
    2. Optimize the main keyword (density of about 1.5%, use in the SEO title, meta description, and evenly distributed).
    3. Include subheadings and LSI keywords to enrich the content without keyword stuffing.
    4. Attractive titles and meta descriptions with calls to action.
    5. Informative and engaging tone, with a variety of vocabulary.
    6. Engaging introduction and conclusion with the main keyword.
    7. FAQ section with three short questions/answers.
    8. At least one external link to a credible source.
    Feel free to take your time to think about your response, I need a long article.
    Ensure that the article is readable, well-structured, and visually appealing.
    """
    return prompt


def create_pipeline_fr(titre_article, mot_cle_principal, ton_cible, optional_text):
    # Initial AI API call
    mots_cles_champ_lexical=generer_mots(titre_article,mot_cle_principal)
    pp=generer_prompt_seo(titre_article, mot_cle_principal, ton_cible, mots_cles_champ_lexical,optional_text)
    rep = call_ai_api(pp)
    # Second AI API call with additional elaboration request
    prompt2 = f"D'après le prompt {pp}, j'ai eu le résultat suivant : {rep}. Élaborer plus que ça."
    rep2 = call_ai_api(prompt2)

    # Third AI API call with further instructions
    prompt3 = (f"D'après le prompt {pp}, j'ai eu le résultat suivant : {rep}. Élaborer plus que ça. {rep2} "
               "Le texte est toujours beaucoup trop court. Aussi, il n'y a aucune gestion des titres, le premier est un H2, "
               "et les sous-titres sont balisés comme des paragraphes. Concernant le lien tout à la fin, il faudrait qu'il soit intégré au texte. "
               "Dernier point, la meta description ne doit pas apparaître quand on demande un article.")
    rep3 = call_ai_api(prompt3)

    # Fourth AI API call to fix title issues and meta description
    prompt4 = ("Fix ça : Mauvaise gestion des titres, le premier titre doit être un H1. Le mot-clé principal n'est pas assez utilisé, il faut une densité de 1,5%. "
               "Le titre ne doit contenir une majuscule que sur le premier mot de la phrase, pas sur les autres. "
               "La meta description ne doit pas être rédigée. " + rep3)
    rep4 = call_ai_api(prompt4)

    # Fifth AI API call to fix keyword density and internal link
    prompt5 = (f"Fix ça - Le mot-clé principal : {mot_cle_principal} n'est pas assez utilisé, il faut une densité de 1,5% environ. "
               "Ajoute un lien à l'intérieur d'un texte, et rends le FAQ après la conclusion. et n'ajoute pas de remarque a la fin je veux que dans la sortie que du texte " + rep4)
    rep5 = call_ai_api(prompt5)

    # Sixth AI API call to ensure the text length
    prompt6 = ("Trop court, seulement j'aurai besoin de 1500 mots minimum attendu. "
               "Laisse la même structure de texte, ajoute juste du contenu. " + rep5)
    rep6 = call_ai_api(prompt6)
    
    prompt7= ("La seule chose qu'il faudrait corriger."
              "c'est la mise en gras des mots-clés LSI/mots-clés associés et/ou mots importants du texte. LAISSE LE MEME TEXT " + rep6)
    rep7= call_ai_api(prompt7)
    
    # Eighth AI API call to ensure HTML formatting and specific content rules
    prompt8 = (f"Pour la mise en gras, utiliser le format HTML avec <strong>. "
               "Certaines réponses ont du texte en plus de l’article, il ne faut que l’article en réponse, aucun autre texte avant ou après. "
               "Assure-toi que {titre_article} est le titre principal et qu'il ne s'est pas changé. "
               "LAISSE LE MEME TEXTE. " + rep7)
    rep8 = call_ai_api(prompt8)

    return rep8


def create_pipeline(article_title, main_keyword, target_tone,optional_text):
    # Initial AI API call
    lexical_field_keywords=generate_words(article_title, main_keyword)
    pp = generate_seo_prompt(article_title, main_keyword, target_tone, lexical_field_keywords,optional_text)
    
    rep = call_ai_api(pp)
    
    # Second AI API call with additional elaboration request
    prompt2 = f"Based on the prompt {pp}, I got the following result: {rep}. Elaborate further."
    rep2 = call_ai_api(prompt2)

    # Third AI API call with further instructions
    prompt3 = (f"Based on the prompt {pp}, I got the following result: {rep}. Elaborate further. {rep2} "
               "The text is still way too short. Also, there is no title management, the first title is an H2, "
               "and the subtitles are marked as paragraphs. Regarding the link at the end, it should be integrated into the text. "
               "Lastly, the meta description should not appear when requesting an article.")
    rep3 = call_ai_api(prompt3)

    # Fourth AI API call to fix title issues and meta description
    prompt4 = ("Fix this: Poor title management, the first title must be an H1. The main keyword is not used enough, it should have a density of 1.5%. "
               "The title should only have a capital letter on the first word of the sentence, not on the others. "
               "The meta description should not be written. " + rep3)
    rep4 = call_ai_api(prompt4)

    # Fifth AI API call to fix keyword density and internal link
    prompt5 = (f"Fix this - The main keyword: {main_keyword} is not used enough, it should have a density of about 1.5%. "
               "Add a link inside the text, and place the FAQ after the conclusion. " + rep4)
    rep5 = call_ai_api(prompt5)

    # Sixth AI API call to ensure the text length
    prompt6 = ("Too short, I need a minimum of 1500 words expected. "
               "Keep the same text structure, just add more content. " + rep5)
    rep6 = call_ai_api(prompt6)

    prompt7 = ("The only thing that needs correcting is the bolding of LSI keywords/associated keywords and/or important words in the text. KEEP THE SAME TEXT " + rep6)
    rep7 = call_ai_api(prompt7)

    return rep7

def generer_mots(titre_article,mot_cle_principal):
  words=call_ai_api("Generes moi des mots-clés similaires a partir de ca ( SEULEMENT DES MOTS OU GROUPE DE MOTS séparés par virgules ) :"+titre_article+" et "+mot_cle_principal)
  return words

def generate_words(article_title, main_keyword):
    words = call_ai_api("Generate similar keywords from these (ONLY WORDS OR GROUPS OF WORDS separated by commas): " + article_title + " and " + main_keyword)
    return words