File size: 3,804 Bytes
814d355
85e590f
e1c034a
 
f046245
e1c034a
 
 
73f73b3
 
e1c034a
 
 
 
 
 
792ff76
e1c034a
 
154424a
 
e1c034a
 
 
 
7173121
e1c034a
 
 
9c65178
e1c034a
 
 
 
7173121
e1c034a
 
 
9c65178
e1c034a
 
 
 
7173121
e1c034a
 
85e590f
e1c034a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85e590f
 
e1c034a
 
85e590f
e1c034a
 
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
import os

import streamlit as st
from crewai import Agent, Crew, Process, Task
from crewai_tools import SerperDevTool
from langchain_google_genai import ChatGoogleGenerativeAI

# Assurez-vous que vos clés API sont définies dans les variables d'environnement
os.environ["GEMINI_API_KEY"] = "AIzaSyD6yZxfVOnh63GXBJjakAupk9aP4CZrgrQ"
os.environ["SERPER_API_KEY"] = "9b90a274d9e704ff5b21c0367f9ae1161779b573"

# Définition des agents
project_manager = Agent(
    role="Chef de Projet",
    goal="Coordonner les autres agents pour assurer la cohérence et la qualité de l'exposé.",
    backstory="Un chef de projet expérimenté avec une expertise dans la gestion d'équipes et la coordination de projets complexes.",
    llm=ChatGoogleGenerativeAI(model="gemini-pro", google_api_key=os.environ["GEMINI_API_KEY"]),
    verbose=True,
    allow_delegation=True,
)

topic_analyst = Agent(
    role="Analyste de Thème",
    goal="Analyser le thème de l'exposé et générer un plan détaillé.",
    backstory="Un expert en recherche et en structuration de contenu, capable de décomposer des sujets complexes en plans clairs et concis.",
    llm=ChatGoogleGenerativeAI(model="gemini-pro", google_api_key=os.environ["GEMINI_API_KEY"]),
    verbose=True,
    tools=[SerperDevTool()],
)

content_writer = Agent(
    role="Rédacteur de Contenu",
    goal="Rédiger les sections de l'exposé en se basant sur le plan et les recherches.",
    backstory="Un rédacteur spécialisé dans la création de contenu clair, concis et engageant.",
    llm=ChatGoogleGenerativeAI(model="gemini-pro", google_api_key=os.environ["GEMINI_API_KEY"]),
    verbose=True,
    tools=[SerperDevTool()],
)

editor = Agent(
    role="Éditeur/Réviseur",
    goal="Réviser et peaufiner le contenu, assurer la cohérence du style et du ton, corriger les erreurs.",
    backstory="Un éditeur expérimenté avec un souci du détail et une excellente maîtrise de la langue.",
    llm=ChatGoogleGenerativeAI(model="gemini-pro", google_api_key=os.environ["GEMINI_API_KEY"]),
    verbose=True,
)

# Définition des tâches
def assign_tasks(topic):
    analyze_topic_task = Task(
        description=f"Analyser le thème '{topic}' et générer un plan détaillé pour l'exposé, divisé en sections claires.",
        expected_output="Un plan détaillé de l'exposé au format markdown.",
        agent=topic_analyst,
    )

    write_content_task = Task(
        description=f"Rédiger les sections de l'exposé en se basant sur le plan généré par l'analyste de thème et sur des recherches approfondies.",
        expected_output="Contenu des sections au format markdown.",
        agent=content_writer,
        context=[analyze_topic_task],
    )

    edit_content_task = Task(
        description="Réviser et corriger l'ensemble du contenu de l'exposé, en s'assurant de la cohérence, de la clarté et de l'absence d'erreurs.",
        expected_output="Contenu de l'exposé révisé et corrigé au format markdown.",
        agent=editor,
        context=[write_content_task],
    )

    return [analyze_topic_task, write_content_task, edit_content_task]

# Configuration de l'interface Streamlit
st.title("🤖 Générateur d'Exposés avec CrewAI")

topic = st.text_input("Entrez le thème de l'exposé:", "L'Intelligence Artificielle en 2024")

if st.button("Générer l'exposé"):
    with st.spinner("Création de l'équipe d'agents..."):
        crew = Crew(
            agents=[project_manager, topic_analyst, content_writer, editor],
            tasks=assign_tasks(topic),
            process=Process.hierarchical,
            verbose=True,
        )

    with st.spinner("Génération de l'exposé..."):
        result = crew.kickoff()

        st.success("Exposé généré avec succès!")
        st.markdown(result)