Membuat AI Coding Agent yang Bisa Memperbaiki Bug Sendiri

Membuat AI Coding Agent yang Bisa Memperbaiki Bug Sendiri

Pendahuluan

Bug adalah musuh utama produktivitas pengembang. Dengan memanfaatkan Large Language Models (LLM) seperti ChatGPT Plus, Claude Pro, Gemini Advanced, atau Perplexity Pro, kita dapat membangun AI Coding Agent yang tidak hanya mendeteksi bug, tetapi juga menghasilkan patch otomatis. Tutorial ini memaparkan arsitektur, persiapan, dan implementasi praktis, serta best‑practice keamanan untuk deployment di production.

Prasyarat & Persiapan

Item Keterangan Tool
Akun LLM Akun ChatGPT Plus (ai-chat) atau Claude Pro (ai-chat) ChatGPT Plus / Claude Pro
API Key Simpan di .env
Python 3.11+ Untuk skrip agent
Git Version control
GitHub Repository Menyimpan kode dan workflow
GitHub Actions CI/CD pipeline
Docker Opsional, untuk isolasi lingkungan
Notion AI Dokumentasi otomatis Notion AI
Canva Pro Membuat diagram arsitektur Canva Pro
Adobe Firefly Membuat ilustrasi kode Adobe Firefly
Remove.bg Membersihkan background gambar Remove.bg

Catatan: Pastikan variabel OPENAI_API_KEY atau CLAUDE_API_KEY sudah diset di environment.

Langkah‑Demi‑Langkah

1. Siapkan Repository dan Struktur Direktori

git init ai-coding-agent
cd ai-coding-agent
mkdir src tests docs
touch src/__init__.py

2. Konfigurasi LLM

Buat file config.yaml:

llm:
  provider: chatgpt_plus   # opsi: chatgpt_plus, claude_pro, gemini_advanced, perplexity_pro
  api_key: ${OPENAI_API_KEY}
  model: gpt-4o-mini

3. Instalasi Dependensi

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

requirements.txt:

openai==1.30.0
anthropic==0.27.0
google-generativeai==0.7.0
perplexity==0.1.0
python-dotenv==1.0.1
requests==2.32.3

4. Buat Agent Utama

src/agent.py:

import os
import yaml
import json
import requests
from dotenv import load_dotenv

load_dotenv()

with open("config.yaml") as f:
    cfg = yaml.safe_load(f)

LLM_PROVIDER = cfg["llm"]["provider"]
API_KEY = cfg["llm"]["api_key"]
MODEL = cfg["llm"]["model"]

def ask_llm(prompt: str) -> str:
    if LLM_PROVIDER == "chatgpt_plus":
        url = "https://api.openai.com/v1/chat/completions"
        headers = {"Authorization": f"Bearer {API_KEY}"}
        payload = {
            "model": MODEL,
            "messages": [{"role": "user", "content": prompt}],
            "temperature": 0.2,
        }
        resp = requests.post(url, headers=headers, json=payload)
        return resp.json()["choices"][0]["message"]["content"]

    elif LLM_PROVIDER == "claude_pro":
        url = "https://api.anthropic.com/v1/messages"
        headers = {
            "x-api-key": API_KEY,
            "anthropic-version": "2023-06-01",
            "content-type": "application/json",
        }
        payload = {
            "model": MODEL,
            "max_tokens": 2048,
            "messages": [{"role": "user", "content": prompt}],
        }
        resp = requests.post(url, headers=headers, json=payload)
        return resp.json()["content"][0]["text"]

    # Tambahkan provider lain jika diperlukan

def detect_and_fix(file_path: str) -> None:
    with open(file_path, "r") as f:
        code = f.read()

    prompt = f"""
    Analisis kode berikut dan identifikasi bug yang mungkin terjadi.
    Jika ada bug, berikan patch lengkap dalam format diff.

    Kode:
    ```python
    {code}
    ```
    """
    response = ask_llm(prompt)
    print("LLM Response:\n", response)

    # Parsing diff dan menerapkan patch
    if response.strip().startswith("```diff"):
        diff = response.split("```diff")[1].split("```")[0]
        apply_patch(file_path, diff)

def apply_patch(file_path: str, diff: str) -> None:
    import subprocess
    with open("temp.patch", "w") as f:
        f.write(diff)
    subprocess.run(["patch", file_path, "temp.patch"], check=True)
    os.remove("temp.patch")
    print(f"Patch diterapkan pada {file_path}")

if __name__ == "__main__":
    import sys
    if len(sys.argv) != 2:
        print("Usage: python agent.py <file_path>")
        sys.exit(1)
    detect_and_fix(sys.argv[1])

5. Integrasi dengan GitHub Actions

Buat workflow ci.yml di .github/workflows/ci.yml:

name: AI Bug Fix

on:
  pull_request:
    branches: [main]

jobs:
  ai-fix:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - name: Install dependencies
        run: |
          python -m venv .venv
          source .venv/bin/activate
          pip install -r requirements.txt
      - name: Run AI Agent
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: |
          source .venv/bin/activate
          python src/agent.py tests/sample_bug.py
      - name: Commit patch
        run: |
          git config user.email "ci@example.com"
          git config user.name "CI Bot"
          git add tests/sample_bug.py
          git commit -m "AI: Fix bug in sample_bug.py"
          git push

Catatan: Simpan OPENAI_API_KEY di GitHub Secrets.

6. Dokumentasi Otomatis

Gunakan Notion AI untuk menulis dokumentasi hasil patch:

notion-ai --page "AI Bug Fix Documentation" --content "Patch applied to sample_bug.py: ..."

7. Visualisasi Arsitektur

Buat diagram arsitektur menggunakan Canva Pro:

  1. Buka Canva Pro
  2. Pilih template “Software Architecture”
  3. Tambahkan elemen: GitHub, CI/CD, LLM, Agent, Repository
  4. Export sebagai PNG, lalu bersihkan background dengan Remove.bg

8. Ilustrasi Kode

Gunakan Adobe Firefly untuk membuat ilustrasi kode yang menarik:

firefly generate "Python code snippet showing diff patch" --format png

Tips Optimasi & Keamanan

Praktik Penjelasan
Rate Limiting Batasi panggilan ke LLM menggunakan queue atau back‑off.
Secrets Management Simpan API key di GitHub Secrets atau Vault.
Audit Log Catat setiap patch yang dihasilkan, termasuk prompt dan output.
Testing Jalankan unit tests setelah patch diterapkan.
Rollback Simpan snapshot sebelum patch, gunakan git revert jika perlu.
Model Selection Gunakan model yang hemat biaya (mis. gpt-4o-mini) untuk produksi.
Input Sanitization Validasi kode sumber sebelum dikirim ke LLM.

Troubleshooting Error Umum

Error Penyebab Solusi
requests.exceptions.ConnectionError Jaringan terputus atau API key tidak valid Periksa koneksi internet dan pastikan API key benar.
patch: No such file or directory File patch tidak ditemukan Pastikan apply_patch menulis file temp.patch dengan benar.
Permission denied Izin file tidak cukup Jalankan script dengan hak akses yang memadai atau ubah permission.
LLM provider not supported Provider tidak terdaftar Tambahkan blok elif untuk provider baru atau gunakan provider yang didukung.
Rate limit exceeded Terlalu banyak panggilan API Implementasikan back‑off atau batasi frekuensi panggilan.

Kesimpulan

Dengan mengikuti langkah‑demi‑langkah di atas, Anda dapat membangun AI Coding Agent yang mampu mendeteksi dan memperbaiki bug secara otomatis, mengintegrasikannya ke pipeline CI/CD, serta menjaga keamanan dan auditability. Selamat mencoba dan semoga produktivitas tim Anda meningkat!

🏷️ Topik Terkait: