CrewAI to framework Pythona do tworzenia zespołów agentów AI, które współpracują przy rozwiązywaniu złożonych zadań. To jak montowanie drużyny specjalistów, gdzie każdy ma swoją rolę!
1# pip install crewai crewai-tools
2
3from crewai import Agent, Task, Crew, Process
4from langchain_openai import ChatOpenAI
5
6# Model LLM
7llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)1# Agent researcher
2researcher = Agent(
3 role="Senior Research Analyst",
4 goal="Przeprowadzać dokładne badania i dostarczać wiarygodne informacje",
5 backstory="""Jesteś doświadczonym analitykiem z 15-letnim doświadczeniem
6 w badaniu trendów technologicznych. Specjalizujesz się w analizie AI i ML.
7 Zawsze weryfikujesz fakty i szukasz wiarygodnych źródeł.""",
8 verbose=True,
9 allow_delegation=False,
10 llm=llm
11)
12
13# Agent writer
14writer = Agent(
15 role="Content Writer",
16 goal="Tworzyć angażujące i edukacyjne treści na temat technologii",
17 backstory="""Jesteś utalentowanym pisarzem technicznym z pasją do
18 tłumaczenia złożonych koncepcji na prosty język. Twoje artykuły
19 są zawsze dobrze zorganizowane i przyjemne w czytaniu.""",
20 verbose=True,
21 allow_delegation=True,
22 llm=llm
23)
24
25# Agent editor
26editor = Agent(
27 role="Senior Editor",
28 goal="Zapewnić najwyższą jakość publikowanych treści",
29 backstory="""Jesteś doświadczonym redaktorem z okiem do szczegółów.
30 Dbasz o spójność stylu, poprawność faktyczną i klarowność przekazu.
31 Nie boisz się proponować zmian, które poprawią tekst.""",
32 verbose=True,
33 allow_delegation=False,
34 llm=llm
35)1# Zadanie badawcze
2research_task = Task(
3 description="""Przeprowadź dokładne badanie na temat: {topic}
4
5 Twoje zadanie:
6 1. Znajdź najnowsze informacje i trendy
7 2. Zidentyfikuj kluczowych graczy i technologie
8 3. Przeanalizuj potencjalne zastosowania
9 4. Oceń przyszłe kierunki rozwoju
10
11 Dostarcz szczegółowy raport z badań.""",
12 expected_output="Szczegółowy raport badawczy z cytatami i źródłami",
13 agent=researcher
14)
15
16# Zadanie pisarskie
17writing_task = Task(
18 description="""Na podstawie raportu badawczego napisz artykuł blogowy.
19
20 Wymagania:
21 1. Wciągający wstęp
22 2. Jasna struktura z nagłówkami
23 3. Praktyczne przykłady
24 4. Podsumowanie z kluczowymi wnioskami
25 5. Długość: 1000-1500 słów
26
27 Używaj przystępnego języka dla czytelników technicznych.""",
28 expected_output="Kompletny artykuł blogowy gotowy do publikacji",
29 agent=writer,
30 context=[research_task] # Używa wyniku poprzedniego zadania
31)
32
33# Zadanie redakcyjne
34editing_task = Task(
35 description="""Zrecenzuj i popraw artykuł.
36
37 Sprawdź:
38 1. Poprawność gramatyczną i stylistyczną
39 2. Spójność argumentacji
40 3. Klarowność przekazu
41 4. Angażujący ton
42
43 Wprowadź niezbędne poprawki.""",
44 expected_output="Zredagowany, finalny artykuł",
45 agent=editor,
46 context=[writing_task]
47)1# Tworzenie zespołu
2content_crew = Crew(
3 agents=[researcher, writer, editor],
4 tasks=[research_task, writing_task, editing_task],
5 process=Process.sequential, # lub Process.hierarchical
6 verbose=True
7)
8
9# Uruchomienie z inputami
10result = content_crew.kickoff(inputs={"topic": "RAG w enterprise AI"})
11print(result)1from crewai_tools import (
2 SerperDevTool, # Wyszukiwanie Google
3 WebsiteSearchTool, # Przeszukiwanie stron
4 FileReadTool, # Czytanie plików
5 PDFSearchTool, # Przeszukiwanie PDF
6)
7
8# Konfiguracja narzędzi
9search_tool = SerperDevTool()
10web_tool = WebsiteSearchTool()
11file_tool = FileReadTool()
12
13# Agent z narzędziami
14researcher_with_tools = Agent(
15 role="Research Analyst",
16 goal="Zbierać i analizować informacje z różnych źródeł",
17 backstory="Ekspert w wyszukiwaniu informacji...",
18 tools=[search_tool, web_tool, file_tool],
19 verbose=True,
20 llm=llm
21)
22
23# Własne narzędzie
24from crewai_tools import BaseTool
25from pydantic import BaseModel, Field
26
27class DatabaseQueryInput(BaseModel):
28 query: str = Field(description="SQL query to execute")
29
30class DatabaseQueryTool(BaseTool):
31 name: str = "Database Query"
32 description: str = "Wykonuje zapytania SQL na bazie danych"
33 args_schema: type[BaseModel] = DatabaseQueryInput
34
35 def _run(self, query: str) -> str:
36 # Implementacja zapytania
37 return f"Wynik zapytania: {query}"1# Manager koordynujący
2manager = Agent(
3 role="Project Manager",
4 goal="Koordynować pracę zespołu i zapewnić terminową realizację",
5 backstory="Doświadczony PM z umiejętnością zarządzania zespołami AI",
6 verbose=True,
7 llm=llm
8)
9
10# Crew z hierarchią
11hierarchical_crew = Crew(
12 agents=[researcher, writer, editor],
13 tasks=[research_task, writing_task, editing_task],
14 process=Process.hierarchical,
15 manager_agent=manager, # lub manager_llm=llm
16 verbose=True
17)1# Crew z pamięcią
2crew_with_memory = Crew(
3 agents=[researcher, writer],
4 tasks=[research_task, writing_task],
5 process=Process.sequential,
6 memory=True, # Włącza pamięć
7 embedder={
8 "provider": "openai",
9 "config": {"model": "text-embedding-3-small"}
10 },
11 verbose=True
12)
13
14# Agent z pamięcią
15agent_with_memory = Agent(
16 role="Assistant",
17 goal="Pomagać użytkownikowi",
18 backstory="...",
19 memory=True,
20 llm=llm
21)1from crewai.callbacks import CrewCallback
2
3class ProgressCallback(CrewCallback):
4 """Callback do śledzenia postępu."""
5
6 def on_task_start(self, task: Task):
7 print(f"🚀 Rozpoczynam: {task.description[:50]}...")
8
9 def on_task_end(self, task: Task, output: str):
10 print(f"✅ Zakończono: {task.description[:50]}")
11 print(f" Output: {output[:100]}...")
12
13 def on_agent_action(self, agent: Agent, action: str):
14 print(f"🤖 {agent.role}: {action}")
15
16# Użycie
17crew = Crew(
18 agents=[researcher, writer],
19 tasks=[research_task, writing_task],
20 callbacks=[ProgressCallback()],
21 verbose=True
22)1import asyncio
2
3async def run_crew_async(topic: str) -> str:
4 """Asynchroniczne uruchomienie crew."""
5 crew = Crew(
6 agents=[researcher, writer],
7 tasks=[research_task, writing_task],
8 process=Process.sequential
9 )
10
11 result = await crew.kickoff_async(inputs={"topic": topic})
12 return result
13
14# Równoległe uruchomienie wielu crew
15async def run_multiple_crews():
16 topics = ["AI w medycynie", "AI w finansach", "AI w edukacji"]
17
18 tasks = [run_crew_async(topic) for topic in topics]
19 results = await asyncio.gather(*tasks)
20
21 return dict(zip(topics, results))
22
23results = asyncio.run(run_multiple_crews())1def create_content_pipeline(topic: str) -> str:
2 """Kompletny pipeline tworzenia treści."""
3
4 # Agenci
5 seo_analyst = Agent(
6 role="SEO Specialist",
7 goal="Optymalizować treści pod kątem wyszukiwarek",
8 backstory="Ekspert SEO z doświadczeniem w content marketingu",
9 tools=[SerperDevTool()],
10 llm=llm
11 )
12
13 # Zadania
14 seo_task = Task(
15 description=f"Przeanalizuj słowa kluczowe dla tematu: {topic}",
16 expected_output="Lista 10 słów kluczowych z ich potencjałem",
17 agent=seo_analyst
18 )
19
20 # Crew
21 pipeline = Crew(
22 agents=[seo_analyst, researcher, writer, editor],
23 tasks=[seo_task, research_task, writing_task, editing_task],
24 process=Process.sequential,
25 verbose=True
26 )
27
28 return pipeline.kickoff()
29
30# Uruchomienie
31article = create_content_pipeline("Machine Learning w 2025")CrewAI to potężny framework do budowania zespołów AI. W następnej lekcji poznasz produkcyjne systemy RAG - jak wdrażać te technologie w enterprise!