Mariamexpo / app.py
Docfile's picture
Update app.py
48627fd verified
raw
history blame
3.75 kB
import os
import streamlit as st
from crewai import Agent, Crew, Process, Task
from crewai_tools import SerperDevTool
from langchain_google_genai import ChatGoogleGenerativeAI
from crewai import LLM
# 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"
llm = LLM(
model="gemini/gemini-1.5-flash",
temperature=0.7,
timeout=120,
max_tokens=8000,
)
# 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=llm,
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=llm,
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=llm,
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=llm,
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é list en python. renvoie juste la liste et rien dautre exemple --> ['introduction','Conclusion']",
agent=topic_analyst,
)
r = list(analyze_topic_task)
cc = []
for i in r:
write_content_task = Task(
description=f"Rédiger cette sections {i} en te basant sur des recherches approfondies.",
expected_output="Contenu des sections au format markdown.",
agent=content_writer,
context=[analyze_topic_task],)
cc.append(write_content_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=[cc],
)
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=llm,
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)