Bedah Repositori Qwen-Agent: Framework Ringkas untuk Membangun Autonomous Workflow di Lingkungan Lokal
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.
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+-------------------------------------------------------------------+
| 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 Adapter1. Model Adapter yang Transparan
Alih-alih membuat protokol pesan kustom, modulqwen_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 dariBaseTool, mendefinisikan skema parameter, dan mengimplementasikan metode call().
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 dalamqwen_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:
- Single-turn Tool Call: Eksekusi perintah Git sederhana.
- Multi-turn Dependency Chaining: Membaca isi file -> Menemukan bug -> Menulis patch -> Menjalankan unit test.
- Invalid Parameter Recovery: Kemampuan agen memperbaiki argumen JSON ketika tool mengembalikan pesan galat.
Tabel Komparasi Kinerja & Akurasi
| Parameter Evaluasi | Qwen2.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 Chaining | 72.0% | 86.4% | 96.0% | 97.5% |
| Toleransi terhadap Galat Input | Cukup (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 / Biaya | 8 GB VRAM | 28 GB VRAM | Pay-per-token (Nol beban VRAM) | Pay-per-token (Tinggi) |
| Kesesuaian Workflow | CLI lokal, inspeksi kode ringan | Refactoring modul skala sedang | Analisis repositori penuh, DevOps | Arsitektur 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.
+---------------------------------------------------------------------------------+
| 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:pip install -U qwen-agentLangkah 2: Definisikan Kumpulan Perkakas (Tools)
Kita buat berkas bernamaagent_tools.py yang berisi perkakas manipulasi berkas lokal:
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 utamadev_agent.py. Di sini, kita mengonfigurasi LLM adapter agar fleksibel—bisa beralih dari lingkungan lokal ke gerbang API terpadu kapan saja:
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:
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:
+-------------------------------------------------------------+
| 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—arahkanmodel_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 pesanobservation 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:
- Pasang repositori
qwen-agentdan coba jalankan contoh perkakas di lingkungan Python lokal Anda. - Manfaatkan AiStudio.id API Gateway sebagai
Sederhana dalam arsitektur, tajam dalam eksekusi. Itulah esensi rekayasa perangkat lunak yang sesungguhnya.
Catatan Penulis

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