from crewai import Agent, Task, Crew, LLM
from dotenv import load_dotenv
load_dotenv()
from langchain_google_genai import ChatGoogleGenerativeAI
import os
‘’‘llm=ChatGoogleGenerativeAI(model=“gemini-1.5-pro”,
verbose=True,
temperature=0.5,
google_api_key=os.getenv(’…'),
)
llm = LLM(
model=“gemini-1.5-pro”,
base_url= “https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=GEMINI_API_KEY”,
os.environ[“GEMINI_API_KEY”] = “AIzaSyDS_ZRVF7CvEAtExVlhqXfRNBatY-Vyw3I”
)
‘’’
‘’’
api_gemini = os.environ.get(“GEMINI-API-KEY”)
llm = ChatGoogleGenerativeAI(
model=“gemini-pro”, verbose=True, temperature=0.1, google_api_key=api_gemini
)
‘’’
Definizione degli agenti
triage_agent = Agent(
role=“Assistente di Triage in Sicurezza Informatica”,
goal=(
"Identificare possibili attacchi (ransomware, phishing, smishing, DoS, defacement, USB) "
“e delegare a un agente specializzato se necessario.”
),
backstory=(
"Sei un esperto di sicurezza informatica incaricato di diagnosticare "
"diverse tipologie di attacchi informatici. "
"Poni sempre una sola domanda alla volta e attendi la risposta "
"dell’utente prima di procedere. "
“Se riconosci i sintomi di un certo attacco, delega il lavoro all’agente corrispondente.”
),
verbose=True,
llm=LLM(
model=“gemini/gemini-1.5-flash”,
temperature=0.5,
),
allow_delegation=True
)
ransomware_agent = Agent(
role=“Esperto in Ransomware”,
goal=“Guidare l’utente nel mitigare un attacco ransomware e proteggere i dati”,
backstory=(
"Sei un assistente esperto in sicurezza informatica, specializzato nella gestione di incidenti ransomware. "
"Aiuta l’utente a identificare, contenere e mitigare l’attacco, proteggendo i dati "
"e raccogliendo informazioni per eventuali analisi successive. "
“Fornisci istruzioni pratiche e poni sempre una sola domanda alla volta.”
),
verbose=True,
llm=LLM(
model=“gemini/gemini-1.5-flash”,
temperature=0.5,
),
allow_delegation=False
)
Definizione dei task
diagnosi_iniziale = Task(
description=(
"Il TriageAgent deve chiedere all’utente: "Cosa c’è che non va con il tuo PC?" "
"e capire in base ai sintomi se potrebbe trattarsi di Ransomware (o altro). "
“Se capisce che è Ransomware, delega il lavoro al RansomwareAgent.”
),
expected_output=(
“1) Una domanda iniziale all’utente;\n”
"2) Se trova parole chiave legate a Ransomware (‘riscatto’, ‘file criptati’, ‘estensione strana’), "
“delega a RansomwareAgent.”
),
agent=triage_agent
)
ransomware_handling = Task(
description=(
"Se il triage rivela un attacco Ransomware, questo task va al RansomwareAgent. "
"Fai domande mirate (installazioni sospette, estensioni, file di riscatto), "
"istruisci a disconnettere il device dalla rete, non spegnere il PC, e fornisci linee guida su segnalazione "
“ed eventuali best practice (backup, cambi password, ecc.).”
),
expected_output=(
“Fornisci un supporto passo-passo per mitigare il Ransomware, facendo UNA domanda alla volta.”
),
agent=ransomware_agent
)
Configura il Crew
crew = Crew(
agents=[triage_agent, ransomware_agent],
tasks=[
diagnosi_iniziale,
ransomware_handling,
],
memory=True # conserva il contesto
)
Funzione principale
def main():
print(“=== Assistente Triage & Ransomware (gemini-1.5-pro) ===”)
print(“Digita ‘exit’ o ‘quit’ per uscire.\n”)
# Interazione con l'utente
current_task = diagnosi_iniziale
while True:
user_message = input("Tu: ")
if user_message.lower() in ["exit", "quit"]:
print("Fine. Grazie e arrivederci!")
break
# Passa il messaggio al task corrente
result = current_task.run({"user_input": user_message})
print("Assistente:", result, "\n")
# Passa al prossimo task se delegato
if current_task.agent.delegate_to:
current_task = ransomware_handling
if name == “main”:
main()
and give me this error
LLM value is already an LLM object
LLM value is already an LLM object
Traceback (most recent call last):
File “/Users/mattiacastiello/Desktop/crewAI/agenticrewAi.py”, line 98, in
crew = Crew(
^^^^^
File “/opt/anaconda3/envs/pacy/lib/python3.12/site-packages/pydantic/main.py”, line 214, in init
validated_self = self.pydantic_validator.validate_python(data, self_instance=self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for Crew
Value error, Please provide an OpenAI API key. You can get one at https://platform.openai.com/account/api-keys [type=value_error, input_value={‘agents’: [Agent(role=As…olta.)], ‘memory’: True}, input_type=dict]