Satu panggilan LLM cuma ngerjain satu hal. Minta dia riset topik, fact-check diri sendiri, dan nulis laporan polished dalam satu prompt, yang keluar malah halusinasi yang keliatan meyakinkan. Multi-agent system ngebagi kerjaan ke beberapa agent spesialis yang masing-masing fokus ke satu tugas.
CrewAI adalah framework Python open-source buat bangun sistem kayak gini. Kamu definisiin agent dengan peran, kasih tools, dan susun mereka jadi crew yang ngerjain task berurutan atau hierarkis.
Prasyarat
- Python 3.10 sampai 3.13 (cek dengan
python3 --version) - OpenAI API key (atau Anthropic, atau model Ollama lokal)
uvataupipuntuk manajemen package- 30 menit
Langkah 1: Install CrewAI
CrewAI 1.15.6 adalah rilis stabil terbaru per Juli 2026. Install bareng package tools-nya:
mkdir crewai-demo && cd crewai-demo
python3 -m venv .venv && source .venv/bin/activate
pip install crewai crewai-tools
Package crewai-tools ngasih agent kamu akses ke web search, file reading, code interpretation, dan belasan kapabilitas bawaan lainnya.
Langkah 2: Setup LLM
CrewAI default pake OpenAI. Set API key kamu:
export OPENAI_API_KEY="sk-..."
Mau provider lain? CrewAI support LLM apapun lewat LiteLLM. Buat Anthropic:
from crewai import LLM
claude = LLM(model="claude-sonnet-4-20250514", api_key="...")
Buat model lokal gratis via Ollama:
ollama_llm = LLM(model="ollama/llama3.1:8b", base_url="http://localhost:11434")
Sisa tutorial ini pake default (OpenAI). Ganti parameter llm di agent manapun kalau kamu mau campur model per agent.
Langkah 3: Bikin Agent
Setiap agent di CrewAI punya role, goal, dan backstory. Backstory bukan cuma hiasan — ini ngebentuk gimana agent ngedeketin tugasnya.
Bikin crew.py:
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool
# Kasih researcher tools search beneran
search_tool = SerperDevTool()
researcher = Agent(
role="Senior Research Analyst",
goal="Temukan informasi akurat terkini dan identifikasi tren utama",
backstory=(
"Kamu belasan tahun jadi research analyst di firma konsultan besar. "
"Kamu verifikasi fakta dari banyak sumber sebelum mengutip. "
"Kalau ada informasi yang kontradiktif, kamu flag itu, bukan pilih salah satu."
),
tools=[search_tool],
verbose=True,
allow_delegation=False,
)
writer = Agent(
role="Technical Content Writer",
goal="Ubah hasil riset jadi tulisan jelas dan engaging yang bisa diikuti non-expert",
backstory=(
"Kamu nulis untuk audiens umum. Kamu buang jargon, pake paragraf pendek, "
"dan lead dengan temuan paling penting. Kamu nggak pernah mengarang detail — "
"kalau riset nggak mendukung suatu klaim, kamu hapus klaim itu."
),
verbose=True,
allow_delegation=False,
)
verbose=True nge-print proses berpikir agent ke terminal. Nyalain pas development, matiin di production.
allow_delegation=False artinya agent ini ngerjain tugas sendiri tanpa lempar kerjaan ke agent lain. Di proses sequential, delegasi nggak diperlukan karena tugas jalan berurutan.
Langkah 4: Definisikan Task
Task ngasih tahu agent apa yang harus dikerjain. Task punya deskripsi, expected output, dan ditugasin ke satu agent.
research_task = Task(
description=(
"Riset kondisi terkini AI-assisted software development di tahun 2026. "
"Fokus ke: tools mana yang punya data adopsi nyata (bukan cuma hype), "
"dampak produktivitas yang terukur, dan batasan besar yang masih belum terpecahkan. "
"Temukan minimal 3 data point atau studi spesifik."
),
expected_output=(
"Brief riset terstruktur dengan: "
"1) Temuan utama dengan kutipan, "
"2) Data adopsi dari sumber kredibel, "
"3) Batasan utama dan masalah yang masih terbuka."
),
agent=researcher,
)
writing_task = Task(
description=(
"Pake brief riset untuk nulis artikel 800 kata untuk audiens teknis. "
"Buka dengan data point spesifik yang mengejutkan. Hindari kosakata AI — "
"nggak boleh \"pivotal\", \"landscape\", \"testament\", \"showcase\". "
"Maksimal satu em dash per paragraf."
),
expected_output="Artikel 800 kata yang polished dalam format markdown.",
agent=writer,
context=[research_task], # writer nerima output researcher
)
context=[research_task] adalah cara ngoper output satu agent ke agent lain. Writer nerima brief riset lengkap sebelum mulai nulis. Tanpa ini, tiap agent kerja dalam isolasi.
Langkah 5: Susun Crew
Crew ngegabungin agent, task, dan strategi proses:
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, writing_task],
process=Process.sequential, # task 1 jalan, baru task 2
verbose=True,
)
result = crew.kickoff()
print(result)
Process.sequential ngejalanin task berurutan: riset selesai, baru nulis mulai dengan hasil riset sebagai konteks. Process.hierarchical ngasih manager agent yang ngedelegasiin dan nge-review. Mulai dengan sequential kecuali kamu punya 4+ agent.
Langkah 6: Jalanin
export SERPER_API_KEY="your-serper-key" # free tier: serper.dev
python crew.py
Run pertama butuh 30-60 detik. Kamu bakal lihat researcher nge-search web, nyintesis temuan, dan writer ngubahnya jadi tulisan.
Contoh Output Nyata
Ini gambaran hasil run (diringkas):
[Senior Research Analyst] Mulai task...
> Searching: "AI assisted software development adoption 2026"
> Searching: "developer productivity AI tools study 2025 2026"
> 10 hasil ditemukan. Menyintesis...
[Senior Research Analyst] Task selesai.
[Technical Content Writer] Mulai task...
> Pake brief riset sebagai konteks.
> Nulis draft...
[Technical Content Writer] Task selesai.
## AI-Assisted Development di 2026: Gap Antara Hype dan Data
Survei Stack Overflow 2025 terhadap 65.000 developer menemukan 76% pakai atau berencana pakai AI coding tools — naik dari 44% di 2023. Tapi pemakaian dan produktivitas itu beda...
Kapan Pakai CrewAI vs Framework Lain
Kamu punya opsi. Ini panduan praktisnya.
Pakai CrewAI kalau:
- Kamu pengen agent berbasis peran yang berasa kayak tim (researcher, writer, reviewer)
- Kamu butuh tools bawaan (web search, code execution, file reading) tanpa wiring sendiri
- Proses sequential atau hierarchical cocok sama workflow kamu
- Kamu pengen deliver prototipe multi-agent dalam hitungan jam, bukan hari
Pakai LangGraph kalau:
- Kamu perlu kontrol detail atas state agent dan transisi antar state
- Workflow kamu berbentuk graph dengan branching kondisional dan cycles
- Yang kamu bangun lebih mirip state machine daripada tim
Pakai raw OpenAI function calling kalau:
- Kamu punya satu agent ngerjain satu hal
- Kamu nggak perlu komunikasi agent-ke-agent
- Kamu pengen dependensi seminimal mungkin
CrewAI dan LangGraph nggak mutually exclusive. Beberapa tim pake CrewAI buat prototipe cepat dan LangGraph begitu workflow udah cukup kompleks untuk butuh kontrol graph eksplisit.
Kesalahan Umum
Nggak pake search tool buat research agent. Tanpa SerperDevTool atau sejenisnya, agent ngehalusinasi data karena nggak punya cara buat nyari informasi. Selalu kasih research agent search tool.
Skip context antar task. Kalau writer nggak nerima hasil riset sebagai konteks, dia bakal halusinasi atau minta informasi yang harusnya udah dia punya.
Deskripsi task terlalu umum. "Tulis blog post" ngasilin output generik. "Tulis artikel 800 kata yang dibuka dengan data point spesifik, hindari kosakata AI, target pembaca teknis" ngasilin sesuatu yang berguna.
Jalanin dengan verbose=False pas development. Kamu nggak bisa debug yang nggak keliatan. Matiin verbosity cuma setelah crew ngasilin hasil yang konsisten.
Langkah Selanjutnya
- Tambah agent ketiga: fact-checker yang nge-review output writer terhadap brief riset
- Ganti ke
Process.hierarchicaldan tambah manager agent yang ngebagi tugas secara dinamis - Ganti OpenAI dengan model Ollama lokal (
ollama/llama3.1:8b) buat ngurangin biaya - Jelajah contoh cookbook CrewAI untuk pola automasi marketing, finance, dan HR
- Eksplor CrewAI Flows untuk automasi event-driven yang jalan lama