AizuDemy

Tutorial Agentic AI: Automasi Code Review Lokal Ollama & CrewAI

Tutorial Agentic AI: Automasi Code Review Lokal Ollama & CrewAI
๐Ÿ“‹ Daftar Isi Materi Tutup โ–ด

Masalah Code Review Manual dan Solusi Agentic AI

Antrean Pull Request (PR) hambat siklus rilis software. Lead engineer buang 15 sampai 20 jam per minggu verifikasi kode manual. Masalah umum: syntax error sepele, pelanggaran konvensi, variabel tak terpakai, potensi SQL Injection dasar, fungsi terlalu kompleks. Tinjauan manual lambat, tidak konsisten, picu pemborosan sumber daya tim.

Kirim kode internal ke API LLM cloud buat risiko data privasi leak dan pelanggaran kerahasiaan kekayaan intelektual. Solusi: jalankan Agentic AI penuh di infrastruktur lokal pakai Ollama dan CrewAI.

Arsitektur Agentic AI vs Chatbot Standar

Chatbot biasa terima prompt tunggal, beri jawaban pasif tanpa konteks repositori. Agentic AI bekerja mandiri dengan spesifikasi sistem berikut:

  • Role specialization: Agen punya spesialisasi tugas. Agen Keamanan periksa kerentanan. Agen Performa analisa alokasi memori dan CPU. Agen Style verifikasi standar Clean Code.
  • Multi-agent orchestration: Agen bagi tugas kompleks, tinjau kode secara paralel, gabung temuan jadi satu laporan utuh.
  • Local execution: Semua model jalan di hardware lokal. Data tetap di jaringan internal. Bebas biaya API vendor luar.

Persiapan Stack & Infrastructure Lokal

Pemilihan model LLM tepat tentukan tingkat akurasi audit. Model Qwen2.5-Coder 7B punya akurasi tinggi pada tugas coding, analisis sintaksis, dan refactoring.

1. Spesifikasi Hardware Minimum

  • CPU: 8 core x86_64 / Apple Silicon (M1/M2/M3).
  • RAM: Minimal 16 GB.
  • GPU: Nvidia VRAM 8 GB (RTX 3060/4060) atau Apple Silicon Unified Memory 16 GB+.
  • Storage: SSD NVMe 10 GB ruang kosong.

2. Instalasi dan Pengujian Ollama

Pasang Ollama pada sistem operasi host. Jalankan perintah terminal untuk tarik model 7B quantized (Q4_K_M):

ollama pull qwen2.5-coder:7b

Uji respons HTTP endpoint lokal Ollama:

curl http://localhost:11434/api/generate -d '{"model": "qwen2.5-coder:7b", "prompt": "Buat fungsi Python balikkan string.", "stream": false}'

Pastikan API kembalikan respons JSON valid dan status HTTP 200 OK.

Setup Environment Python & CrewAI

CrewAI kerangka kerja orchestrator agen AI. Gunakan virtualenv untuk isolasi pustaka Python.

1. Buat Virtual Environment

python3 -m venv venv
source venv/bin/activate

2. Pasang Dependencies

pip install crewai crewai-tools langchain-community

Implementasi Agen Code Review (agents.py)

Buat script agents.py. Inisialisasi koneksi ke Ollama lokal via LLM class punya CrewAI.

from crewai import Agent, LLM

local_llm = LLM(
    model="ollama/qwen2.5-coder:7b",
    base_url="http://localhost:11434"
)

security_agent = Agent(
    role="Senior Security Auditor",
    goal="Identifikasi celah keamanan seperti SQL Injection, XSS, hardcoded secret, dan input validation buruk.",
    backstory="Pakar siber berpengalaman. Fokus analisis kerentanan kode sesuai panduan OWASP Top 10.",
    verbose=True,
    allow_delegation=False,
    llm=local_llm
)

performance_agent = Agent(
    role="Principal Performance Engineer",
    goal="Deteksi loop tidak efisien, N+1 query problem, memory leak, dan kompleksitas algoritma tinggi.",
    backstory="Spesialis optimasi runtime sistem terdistribusi. Ahli alokasi memori dan batas kompleksitas Big-O.",
    verbose=True,
    allow_delegation=False,
    llm=local_llm
)

style_agent = Agent(
    role="Lead Code Reviewer",
    goal="Pastikan kode ikuti prinsip Clean Code, konvensi penamaan jelas, dan fungsi modular.",
    backstory="Penjaga standar arsitektur software. Tegas terhadap keterbacaan dan struktur kode.",
    verbose=True,
    allow_delegation=False,
    llm=local_llm
)

Definisi Tugas Review (tasks.py)

Tiap agen butuh instruksi tugas (Task) spesifik beserta ekspektasi format output audit.

from crewai import Task
from agents import security_agent, performance_agent, style_agent

def create_tasks(code_snippet):
    security_task = Task(
        description=f"Audit kode berikut dari segi keamanan:\n{code_snippet}\nTulis poin kerentanan dan saran perbaikan.",
        expected_output="Daftar kerentanan keamanan beserta line number dan perbaikan kode.",
        agent=security_agent
    )

    performance_task = Task(
        description=f"Analisis efisiensi eksekusi dan memori kode berikut:\n{code_snippet}\nBeri rekomendasi optimasi.",
        expected_output="Daftar bottleneck performa dan saran refactoring.",
        agent=performance_agent
    )

    style_task = Task(
        description=f"Tinjau gaya penulisan dan struktur kode berikut:\n{code_snippet}\nEvaluasi penamaan variabel dan modularitas.",
        expected_output="Catatan perbaikan struktur kode dan kepatuhan standar penulisan.",
        agent=style_agent
    )

    return [security_task, performance_task, style_task]

Eksekusi Crew dan Agregasi Hasil (main.py)

Susun orchestration di main.py. Muat berkas kode target, jalankan tim agen secara sekuensial, cetak laporan akhir markdown.

import sys
from crewai import Crew, Process
from agents import security_agent, performance_agent, style_agent
from tasks import create_tasks

def run_review(file_path):
    with open(file_path, 'r') as f:
        code_content = f.read()

    tasks = create_tasks(code_content)

    crew = Crew(
        agents=[security_agent, performance_agent, style_agent],
        tasks=tasks,
        process=Process.sequential,
        verbose=True
    )

    result = crew.kickoff()
    print("\n=== LAPORAN CODE REVIEW LOKAL ===\n")
    print(result)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Penggunaan: python main.py ")
        sys.exit(1)
    run_review(sys.argv[1])

Integrasi Git Workflow Pre-Commit Hook

Otomatiskan pemicu audit tiap kali developer hendak melakukan commit pada repositori lokal.

Untuk mengonfigurasi otomatisasi pengujian kode sebelum commit, ikuti urutan langkah berikut:

  1. Buka repositori target, masuk ke direktori .git/hooks/.
  2. Buat berkas skrip baru bernama pre-commit.
  3. Masukkan perintah pengujian diff sebelum commit diterima.
#!/bin/bash
# .git/hooks/pre-commit

STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(py|js|ts|go)$')

if [ -z "$STAGED_FILES" ]; then
    exit 0
fi

echo "Menjalankan Agentic AI Code Review lokal..."
for FILE in $STAGED_FILES; do
    python3 path/to/main.py "$FILE"
    if [ $? -ne 0 ]; then
        echo "Code review gagal pada $FILE. Cancel commit."
        exit 1
    fi
done

exit 0

Beri izin eksekusi berkas hook:

chmod +x .git/hooks/pre-commit

Optimasi Performa & Tuning Memori LLM

Jalankan model lokal hemat resource dengan konfigurasi parameter Ollama.

1. Konfigurasi Modelfile Khusus

Buat berkas Modelfile untuk sesuaikan context window dan num_thread sesuai hardware host:

FROM qwen2.5-coder:7b
PARAMETER num_ctx 8192
PARAMETER temperature 0.2
PARAMETER num_thread 8

Buat model baru dari Modelfile custom:

ollama create custom-coder -f Modelfile

2. Strategi Pemilihan Kuantisasi Model

  • Q4_K_M (4-bit): Hemat VRAM (~4.5 GB). Kecepatan token tinggi. Tepat untuk laptop developer.
  • Q8_0 (8-bit): Butuh VRAM ~8.5 GB. Presisi sintaksis lebih tinggi untuk basis kode rumit.
  • F16 / Q5_K_M: Tepat untuk dedicated server GPU internal tim engineering.

Evaluasi & Kesimpulan

Agentic AI lokal berbasis Ollama dan CrewAI pangkas waktu code review manual hingga 70%. Data internal tetap aman. Tidak ada tagihan API cloud. Tim engineering fokus buat fitur baru tanpa korbankan kualitas dan keamanan kode.

๐Ÿ“– Artikel Terkait