Membangun agent pertama: pola ReAct, tool loop yang aman, dan orchestrasi tugas. Kalian memahami kapan arsitektur agent cocok, cara membatasi loop, dan membangun agent end-to-end yang menyelesaikan tugas berlapis dengan toolstype: text

Di episode 5 kalian sudah membangun loop tool-calling sederhana. Episode ini mengangkatnya ke level berikutnya: agents — sistem yang bisa menalar, mengambil keputusan, memanggil tools, dan mengulang sampai tugas selesai. Inilah inti tren agentic AI yang mendominasi 2026.
Mengapa penting? Karena banyak tugas nyata tidak bisa diselesaikan dalam satu panggilan LLM: "cari data penjualan, bandingkan dengan target, lalu kirim ringkasan ke email" butuh beberapa langkah dengan keputusan di antaranya. Agent adalah cara membuat LLM menyelesaikan tugas semacam itu dengan aman dan terukur.
Agent = LLM + tools + loop pengambilan keputusan. Tanpa LLM, ia script biasa. Tanpa tools, ia chatbot. Tanpa loop, ia panggilan API satu kali.
Pola klasiknya adalah ReAct (Reasoning + Acting): model berpikir (reason) → bertindak (act/tool) → mengamati hasil (observe) → berpikir lagi, sampai jawaban final.
Kita buat agent riset sederhana dengan dua tools: web search dan kalkulator. Semua dengan loop manual yang transparan — ini penting agar kalian paham persis apa yang terjadi, sebelum memakai framework di episode 23.
import json
from openai import OpenAI
client = OpenAI()
TOOLS = [
{"type": "function", "function": {
"name": "web_search", "description": "Cari informasi terbaru di web.",
"parameters": {"type": "object", "properties": {
"query": {"type": "string"}}, "required": ["query"]}}},
{"type": "function", "function": {
"name": "calculate", "description": "Hitung ekspresi aritmatika.",
"parameters": {"type": "object", "properties": {
"expr": {"type": "string"}}, "required": ["expr"]}}},
]
def web_search(query: str) -> str:
return json.dumps({"query": query, "ringkasan": "placeholder hasil pencarian"})
def calculate(expr: str) -> str:
try:
return str(eval(expr)) # HANYA untuk demo; jangan di produksi
except Exception as e:
return json.dumps({"error": str(e)})
TOOL_IMPL = {"web_search": web_search, "calculate": calculate}
def run_agent(task: str, max_iter: int = 8) -> None:
messages = [{"role": "user", "content": task}]
for i in range(max_iter):
r = client.chat.completions.create(
model="gpt-4o-mini", messages=messages, tools=TOOLS)
msg = r.choices[0].message
print(f"\n[iter {i}] -> {msg.content or '(tool call)'}")
if not msg.tool_calls:
return
messages.append(msg)
for call in msg.tool_calls:
impl = TOOL_IMPL[call.function.name]
args = json.loads(call.function.arguments)
hasil = impl(**args)
print(f" tool {call.function.name}({args}) => {hasil}")
messages.append({"role": "tool", "tool_call_id": call.id,
"content": hasil})
print("\n[max iterasi tercapai, berhenti]")
run_agent("Hitung 15% dari 240.000 lalu cari arti singkatan RAG.")Perhatikan tiga komponen keamanan yang sudah tertanam sejak awal:
max_iter=8) mencegah loop tak berujung.Agent bukan solusi untuk segalanya:
| Tugas | Pola yang Cocok |
|---|---|
| Satu panggilan, format jelas | Langsung / structured output |
| Alur tetap, langkah diketahui | Workflow / pipeline terstruktur |
| Keputusan bergantung hasil langkah sebelumnya | Agent |
| Tugas berlapis yang bisa dipecah | Multi-agent (episode 23) |
Warning
Urutan kepentingan di 2026: paling sederhana dulu. Tambahkan "agency" hanya jika alur tetap benar-benar tidak bisa menangani variasi input. Setiap langkah agent adalah sumber biaya, latensi, dan error baru.
Untuk tugas kompleks, ada dua pendekatan:
Aturan praktis: mulai dengan single agent. Naik ke multi-agent hanya jika: (a) tugas benar-benar berlapis, (b) tools terlalu banyak sehingga membingungkan satu model, atau (c) butuh isolasi konteks antar peran. Multi-agent kita bahas mendalam di episode 23.
eval() di tool: contoh di atas memakai eval hanya untuk demo. Di produksi, parser aritmatika yang aman wajib.Inti yang harus dibawa pulang:
Di episode 12 selanjutnya kita membuat agent mengingat: memory & state management — short/long-term memory, persistensi percakapan, conversation state, dan agent dengan memori yang benar. Sampai jumpa di episode 12!