Ada paradoks yang menggelitik setiap kali kita mengamati ekosistem rekayasa artificial intelligence belakangan ini. Ketika model dasar (foundation models) semakin cerdas memproses instruksi dan memanggil fungsi, framework orkestrasi di sekitarnya justru kerap berevolusi ke arah yang berlawanan: kian tambun, penuh lapisan abstraksi yang membingungkan, dan rapuh.

Banyak insinyur perangkat lunak mengeluhkan hal yang sama saat mencoba membangun agen mandiri (autonomous agents). Anda menginstal sebuah pustaka populer, dan tiba-tiba lingkungan virtual Anda dipenuhi puluhan dependensi berbobot ratusan megabita. Saat debugging, Anda harus menembus enam lapisan class inheritance hanya untuk mencari tahu mengapa parameter JSON gagal diparsing.

Di tengah kejenuhan terhadap framework yang terlalu rumit (over-engineered), tim riset Alibaba meluncurkan repositori Qwen-Agent. Pendekatan yang mereka ambil terasa seperti hembusan angin segar bagi mereka yang menyukai kesederhanaan gaya Unix: bangun modul kecil yang modular, pertahankan kendali alur data pada Python murni, dan biarkan model bahasa menangani penalaran tanpa dipaksa masuk ke dalam graf eksekusi yang kaku.

Mari kita bedah arsitektur internal repositori ini, menguji efektivitas function calling lokal berhadapan dengan model cloud, dan merakit alur kerja otomatis yang bisa langsung disematkan ke terminal pengembang.


Anatomi Repositori: Mengapa Qwen-Agent Terasa Ringkas?

Jika Anda mengkloning repositori qwen-agent dari GitHub, Anda tidak akan menemukan labirin abstraksi metafisik. Fondasi repositori ini dibangun di atas tiga pilar utama yang sangat lugas: LLM Wrapper, Tool Registry, dan Agent Loop.

python
qwen_agent/
├── agents/           # Logika orkestrasi: ReAct, FnCall, Assistant, Router
├── llm/              # Adapter interface: DashScope, OpenAI-compatible, vLLM, Ollama
├── tools/            # BaseTool & pustaka perkakas bawaan (code_interpreter, search, retrieval)
├── gui/              # Antarmuka Gradio opsional untuk prototyping cepat
└── utils/            # Utilitas tokenisasi, parsing JSON, dan caching
python
+-------------------------------------------------------------------+
|                        User / CLI Trigger                         |
+---------------------------------+---------------------------------+
                                  |
                                  v
+-------------------------------------------------------------------+
|                       Agent Loop(Assistant)                      |
|  - Membentuk system prompt & schema JSON                          |
|  - Mengelola riwayat percakapan(state buffer)                    |
+---------------------------------+---------------------------------+
                                  |
                                  v
+-------------------------------------------------------------------+
|                     LLM Adapter Interface                         |
|   (vLLM / Ollama Lokal  <--->  AiStudio.id / Cloud Gateway)       |
+---------------------------------+---------------------------------+
                                  |
            +---------------------+---------------------+
            | Respons Teks / Selesai                     | Panggilan Tool
            v                                           v
+-----------------------+                   +-----------------------+
| Return output ke CLI  |                   |     Tool Registry     |
+-----------------------+                   | - Validasi tipe data  |
                                            | - Eksekusi fungsi     |
                                            +-----------+-----------+
                                                        |
                                                        v
                                            +-----------------------+
                                            |  Observation String   |
                                            +-----------+-----------+
                                                        |
                                                        | (Looping kembali)
                                                        +-----> LLM Adapter

1. Model Adapter yang Transparan

Alih-alih membuat protokol pesan kustom, modul qwen_agent.llm secara cerdas mengadopsi struktur pesan berbasis kamus (dictionary-based messages) standar OpenAI. Ini berarti Anda bisa beralih secara mulus antara menjalankan model lokal via vLLM / Ollama dan menggunakan endpoint cloud tanpa menulis ulang logika agen Anda.

2. Tool Registry Berbasis Pydantic dan Type Hints

Mendefinisikan perkakas (tools) di Qwen-Agent tidak memerlukan pembungkus (wrapper) dekorator yang gelap. Anda cukup menurunkan kelas dari BaseTool, mendefinisikan skema parameter, dan mengimplementasikan metode call().
python
from qwen_agent.tools.base import BaseTool, register_tool

@register_tool('terminal_runner')
class TerminalRunner(BaseTool):
    description = 'Menjalankan perintah bash di lingkungan lokal untuk inspeksi repo.'
    parameters = [{
        'name': 'command',
        'type': 'string',
        'description': 'Perintah shell yang aman untuk dieksekusi',
        'required': True
    }]

    def call(self, params: str, **kwargs) -> str:
        import subprocess, json
        args = json.loads(params)
        cmd = args.get('command')
        try:
            res = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30)
            return res.stdout if res.returncode == 0 else f"Error: {res.stderr}"
        except Exception as e:
            return f"Gagal mengeksekusi perintah: {str(e)}"

3. Agen ReAct Tanpa 'Magic'

Eksekusi penalaran (reasoning loop) di dalam qwen_agent.agents.Assistant menggunakan format Thought-Action-Observation klasik. Saat model menghasilkan teks, parser internal memisahkan blok aksi, memanggil perkakas dari registry, menyisipkan hasil eksekusi (observation), lalu mengirimkannya kembali ke model sampai tugas tuntas. Semuanya berjalan dalam generator Python standar yang mendukung streaming token langsung ke konsol.

Uji Lapangan: Function Calling Lokal vs Model Skala Besar

Salah satu dilema terbesar insinyur perangkat lunak adalah: Apakah model lokal cukup tangguh untuk mengeksekusi pemanggilan fungsi bersarang tanpa halusinasi?

Kami menguji arsitektur Qwen-Agent di dua spektrum: lingkungan lokal menggunakan Qwen2.5-Coder-7B-Instruct (kuantisasi 4-bit via vLLM pada GPU 16GB VRAM) dan lingkungan terkelola tingkat lanjut menggunakan Qwen-2.5-72B / DeepSeek-V3 yang diakses melalui gerbang API.

Pengujian mencakup 50 skenario tugas rekayasa perangkat lunak:

  1. Single-turn Tool Call: Eksekusi perintah Git sederhana.

  2. Multi-turn Dependency Chaining: Membaca isi file -> Menemukan bug -> Menulis patch -> Menjalankan unit test.

  3. Invalid Parameter Recovery: Kemampuan agen memperbaiki argumen JSON ketika tool mengembalikan pesan galat.

Tabel Komparasi Kinerja & Akurasi

Parameter EvaluasiQwen2.5-Coder-7B (Lokal 4-bit)Qwen2.5-14B-Instruct (Lokal FP16)Qwen-2.5-72B (via AiStudio.id API)Claude 3.5 Sonnet (Cloud Frontier)
Akurasi Skema JSON (Single Turn)94.2%98.0%99.6%99.8%
Keberhasilan Multi-step Chaining72.0%86.4%96.0%97.5%
Toleransi terhadap Galat InputCukup (Cenderung mengulang loop)Baik (Mampu mengoreksi argumen)Sangat Baik (Koreksi instan)Sangat Baik (Analisis akar masalah)
Latensi per Langkah (Token/Detik)~45 tps (Lokal RTX 4090)~22 tps (Dual RTX 3090)~65 tps (Infrastruktur Terdistribusi)~55 tps (Cloud)
Kebutuhan VRAM / Biaya8 GB VRAM28 GB VRAMPay-per-token (Nol beban VRAM)Pay-per-token (Tinggi)
Kesesuaian WorkflowCLI lokal, inspeksi kode ringanRefactoring modul skala sedangAnalisis repositori penuh, DevOpsArsitektur sistem skala besar

Temuan pengujian ini menunjukkan batas yang tegas: Model 7B lokal sudah lebih dari cukup untuk alur kerja terstruktur yang deterministik (misalnya membuat commit message, menjalankan linter, dan mencari berkas). Namun, ketika alur kerja menuntut navigasi multi-berkas yang dalam, kapasitas penalaran model 72B jauh lebih unggul dalam menghindari infinite loop.


Langkah Praktis: Merakit CLI Agent Otomatis untuk Refactoring Kode

Mari kita terapkan repositori Qwen-Agent ke dalam skenario nyata: membangun asisten baris perintah (CLI agent) mandiri yang mampu membaca error log Python, mencari letak berkas yang bermasalah, merevisi kode secara otomatis, dan memastikan tes unit kembali hijau.

python
+---------------------------------------------------------------------------------+
|                                 TERMINAL WORKFLOW                               |
|                                                                                 |
| 1. User Trigger  --> "Perbaiki AssertionError pada tests/test_payment.py"       |
| 2. Agent Action  --> ReadFileTool("tests/test_payment.py")                     |
| 3. Agent Action  --> ReadFileTool("services/payment.py")                        |
| 4. Agent Action  --> ApplyPatchTool("services/payment.py", new_code)            |
| 5. Agent Action  --> TerminalRunner("pytest tests/test_payment.py")             |
| 6. Observation   --> 3 passed, 0 failed                                         |
| 7. Output Selesai--> Memberikan penjelasan perubahan ke developer              |
+---------------------------------------------------------------------------------+

Langkah 1: Instalasi Dependensi Inti

Pasang Qwen-Agent langsung dari repositori resmi:
bash
pip install -U qwen-agent

Langkah 2: Definisikan Kumpulan Perkakas (Tools)

Kita buat berkas bernama agent_tools.py yang berisi perkakas manipulasi berkas lokal:
python
import os
from qwen_agent.tools.base import BaseTool, register_tool

@register_tool('read_file')
class ReadFileTool(BaseTool):
    description = 'Membaca seluruh isi berkas teks dari repositori lokal.'
    parameters = [{
        'name': 'file_path',
        'type': 'string',
        'description': 'Jalur relatif berkas yang ingin dibaca',
        'required': True
    }]

    def call(self, params: str, **kwargs) -> str:
        import json
        path = json.loads(params).get('file_path')
        if not os.path.exists(path):
            return f"Galat: Berkas {path} tidak ditemukan."
        with open(path, 'r', encoding='utf-8') as f:
            return f.read()

@register_tool('write_file')
class WriteFileTool(BaseTool):
    description = 'Menulis atau menimpa isi berkas pada direktori lokal.'
    parameters = [
        {
            'name': 'file_path',
            'type': 'string',
            'description': 'Jalur relatif berkas yang akan ditulis',
            'required': True
        },
        {
            'name': 'content',
            'type': 'string',
            'description': 'Konten kode lengkap yang baru',
            'required': True
        }
    ]

    def call(self, params: str, **kwargs) -> str:
        import json
        data = json.loads(params)
        path = data.get('file_path')
        content = data.get('content')
        os.makedirs(os.path.dirname(path), exist_ok=True) if os.path.dirname(path) else None
        with open(path, 'w', encoding='utf-8') as f:
            f.write(content)
        return f"Berhasil memperbarui {path}."

Langkah 3: Konfigurasi Mesin Orkestrasi

Buat skrip utama dev_agent.py. Di sini, kita mengonfigurasi LLM adapter agar fleksibel—bisa beralih dari lingkungan lokal ke gerbang API terpadu kapan saja:
python
import sys
from qwen_agent.agents import Assistant
from agent_tools import ReadFileTool, WriteFileTool

def init_agent():
    # Konfigurasi LLM Adapter (Contoh implementasi hybrid fleksibel)
    llm_cfg = {
        'model': 'qwen2.5-72b-instruct',
        'model_server': 'https://api.aistudio.id/v1',  # Gerbang API komputasi tinggi
        'api_key': 'YOUR_AISTUDIO_API_KEY',           # Ganti dengan API Key Anda
        'generate_cfg': {
            'top_p': 0.8,
            'temperature': 0.2,                       # Nilai rendah untuk menjaga determinisme kode
            'max_input_tokens': 16000
        }
    }

    system_instruction = (
        "Anda adalah staf insinyur perangkat lunak senior di terminal lokal.\n"
        "Tugas Anda adalah membaca berkas kode, menemukan akar permasalahan galat, "
        "memperbaiki berkas tersebut menggunakan tool yang tersedia, dan memvalidasinya.\n"
        "Bekerjalah secara bertahap: Baca -> Analisis -> Tulis Perbaikan -> Konfirmasi."
    )

    bot = Assistant(
        llm=llm_cfg,
        system_message=system_instruction,
        function_list=['read_file', 'write_file', 'terminal_runner']
    )
    return bot

def main():
    if len(sys.argv) < 2:
        print("Penggunaan: python dev_agent.py '<instruksi perbaikan>'")
        sys.exit(1)

    user_query = sys.argv[1]
    bot = init_agent()

    messages = [{'role': 'user', 'content': user_query}]
    
    print("\n[\033[94mAgent Memulai Eksekusi\033[0m] Memproses instruksi...\n")
    
    for response in bot.run(messages=messages):
        # Qwen-Agent mengembalikan generator respons bertahap
        for msg in response:
            if msg.get('role') == 'assistant':
                content = msg.get('content', '')
                if content:
                    print(content, end='', flush=True)
    print("\n\n[\033[92mSelesai\033[0m] Alur kerja tuntas dieksekusi.")

if __name__ == '__main__':
    main()

Langkah 4: Uji Coba Eksekusi di Konsol

Jalankan perintah berikut di direktori proyek Anda:

bash
python dev_agent.py "Periksa tests/test_auth.py, cari tahu mengapa login gagal saat password mengandung simbol, dan perbaiki kodenya di auth/service.py"

Agen akan membaca berkas tes, mengidentifikasi fungsi regex yang keliru di auth/service.py, menuliskan modul yang diperbaiki, dan mencetak laporan perbaikan langsung di terminal Anda tanpa perlu membuka editor teks sama sekali.


Strategi Hybrid: Menggabungkan Efisiensi Lokal dengan Skalabilitas API

Dalam implementasi skala produksi di lingkungan korporasi atau startup, menjalankan segalanya 100% di mesin lokal sering kali membentur tembok keterbatasan perangkat keras. Memuat model 70B parameter membutuhkan perangkat keras kelas workstation dengan kartu grafis kelas enterprise. Sebaliknya, mengirim seluruh kode sensitif dan repositori raksasa ke server publik global memicu kekhawatiran regulasi serta biaya transfer data yang tidak ramah kantong.

Pendekatan paling rasional yang banyak diadopsi tim engineering modern adalah Arsitektur Hybrid:

python
+-------------------------------------------------------------+
|                     Local Workstation                       |
|                                                             |
|  +------------------------+      +-----------------------+  |
|  |   Qwen2.5-Coder-7B     |      |  Qwen-Agent Framework |  |
|  |   (Lokal / Caching)    |      |  (State & Execution)  |  |
|  +-----------+------------+      +-----------+-----------+  |
|              |                               |              |
|              | Tugas Rutin & Syntax          |              |
|              +---------------+---------------+              |
+------------------------------|------------------------------+
                               |
                               | Tugas Penalaran Kompleks
                               v
+-------------------------------------------------------------+
|             AiStudio.id API Gateway(Regional)              |
|                                                             |
|  - Rute latensi rendah(Server Asia Pasifik/Lokal)          |
|  - Akses terpadu ke model penalaran tinggi(Qwen 72B / Max) |
|  - Kompatibilitas OpenAI-endpoint standar                   |
+-------------------------------------------------------------+

1. Eksekusi Cepat di Tepi (Edge)

Gunakan model ringan lokal (Qwen 7B/14B) untuk tugas-tugas berulang, seperti validasi format data, pembuatan commit message, penyaringan sintaks, dan inspeksi awal berkas. Beban komputasi ini gratis dan berjalan instan tanpa koneksi internet.

2. Delegasi Tugas Kompleks melalui AiStudio.id API Gateway

Saat alur kerja membutuhkan penalaran mendalam—seperti refactoring modul yang saling terkait, analisis kerentanan keamanan (vulnerability scanning), atau penulisan skenario uji coba yang rumit—arahkan model_server Qwen-Agent ke gerbang API terpadu seperti AiStudio.id.

Keunggulan integrasi ini bagi pengembang lokal:
Satu Kunci, Ragam Pilihan Model: Anda tidak perlu mengelola banyak akun penyedia API luar negeri. Cukup ubah parameter model di konfigurasi Qwen-Agent untuk berganti dari Qwen-2.5-72B ke model penalaran lainnya secara instan.
Latensi Rendah Regional: Mengurangi round-trip time (RTT) jaringan saat agen melakukan multi-step tool calls yang membutuhkan 5 hingga 10 siklus komunikasi bolak-balik.
Efisiensi Pengeluaran: Anda hanya membayar token yang terpakai saat agen menghadapi tugas sulit, tanpa perlu menyewa instans komputasi GPU berbiaya tinggi yang menyala 24/7 di kantor.


Refleksi Praktisi: Apa yang Membuat Sistem Agentik Bekerja Nyata?

Ada godaan besar di kalangan pengembang untuk membangun sistem otonom yang bisa melakukan segalanya sekaligus: "Buatkan saya aplikasi e-commerce dari nol beserta basis datanya." Pengalaman menunjukkan bahwa pendekatan serakah seperti ini hampir selalu berujung pada kegagalan eksekusi.

Agar alur kerja berbasis Qwen-Agent benar-benar memberikan nilai tambah di lingkungan kerja harian, perhatikan tiga prinsip fundamental berikut:

1. Batasi Cakupan Alat (Constrained Tool Surfaces)

Jangan berikan akses terminal terbuka tanpa batas kepada agen jika tugasnya hanya memanipulasi berkas. Berikan perkakas spesifik dengan batasan yang jelas. Semakin sempit opsi aksi yang dimiliki LLM, semakin kecil probabilitas agen keluar dari jalur yang diharapkan (hallucinatory drift).

2. Utamakan Determinisme pada Level Alat

Biarkan LLM menangani ambiguitas bahasa manusia dan logika penalarannya, tetapi serahkan validasi data pada kode deterministik. Gunakan pustaka seperti Pydantic untuk memvalidasi tipe argumen sebelum fungsi dijalankan. Jika berkas tidak ditemukan, biarkan tool mengembalikan pesan galat yang deskriptif sehingga agen dapat membaca alasan kegagalan tersebut dan mencoba strategi alternatif.

3. Simpan Riwayat Konteks Tetap Ramping

Dalam alur kerja panjang, akumulasi pesan observation dari alat eksekusi bisa dengan cepat menghabiskan batas token (
context window). Bersihkan stdout yang terlalu panjang (misalnya hasil npm install atau tes unit ribuan baris) sebelum mengembalikannya ke memori agen. Cukup kirimkan 20 baris terakhir yang memuat indikasi galat.

Langkah Selanjutnya

Qwen-Agent membuktikan bahwa untuk membangun sistem agenik yang tangguh dan cerdas, kita tidak membutuhkan lapisan abstraksi yang rumit. Dengan arsitektur yang bersih, pemisahan tanggung jawab kode yang transparan, dan model dasar yang mahir dalam function calling, kita dapat membangun asisten otomatisasi yang langsung meningkatkan produktivitas harian di mesin lokal.

Bagi Anda yang ingin menguji implementasi ini di alur kerja tim:

  1. Pasang repositori qwen-agent dan coba jalankan contoh perkakas di lingkungan Python lokal Anda.

  2. Manfaatkan AiStudio.id API Gateway sebagai backend model untuk mendapatkan akses cepat ke model-model penalaran kelas atas tanpa kerepotan manajemen infrastruktur server.

  3. Mulailah dari otomatisasi kecil yang membosankan—seperti linting* otomatis, pembersihan cabang Git, atau dokumentasi modul—sebelum melangkah ke orkestrasi sistem yang lebih kompleks.

Sederhana dalam arsitektur, tajam dalam eksekusi. Itulah esensi rekayasa perangkat lunak yang sesungguhnya.


Catatan Penulis

Sandra
Sandra

> Sandra menulis seputar rekayasa prompt, efisiensi arsitektur AI, dan produk digital di AiStudio.id.