Spaces:
Sleeping
Sleeping
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) |