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, manager_llm=ChatGoogleGenerativeAI(model="gemini-pro", google_api_key=os.environ["GEMINI_API_KEY"]), 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)