Pilih senjata: kerangka kerja vs loop sendiri
A0 — Fondasi Agent & Lingkungan
Sumber:https://nikhilpentapalli.medium.com/building-ai-agents-from-scratch-no-frameworks-7e75b11396d8buka di tab baru ↗
Membangun agent tidak harus rumit dan tidak wajib menggunakan framework berat seperti LangChain atau CrewAI. Kamu bisa membangun agent otonom murni dengan Python/TypeScript dan API LLM standar.
Model Layer vs Application Layer
- Model Layer (LLM): Menginterpretasikan bahasa alami, merutekan intent, dan memilih alat (
"calculator","knowledge_search", atau"none"). - Application Layer (Kodemu): Mengeksekusi fungsi matematika, mencari data, memvalidasi schema, dan mengendalikan alur loop.
Implementasi Agent dari Nol (No Frameworks)
Berikut adalah blueprint minimal agen lengkap yang menggunakan simulasi function calling berbasis prompt terstruktur:
import os
import re
import json
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
# 1. TOOL DEFINITIONS
def calculate_expression(expression):
safe_expr = re.sub(r'[^0-9+\-*/(). ]', '', expression)
if safe_expr.strip() == "":
return None
try:
return eval(safe_expr)
except Exception:
return None
knowledge_base = {
"python": "Python adalah bahasa pemrograman yang terkenal dengan keterbacaannya.",
"openai": "OpenAI adalah perusahaan riset AI pembuat ChatGPT dan GPT-4.",
"agent": "AI Agent adalah sistem yang mempersepsikan input, memutuskan aksi, dan mengeksekusi tools."
}
def search_knowledge(query):
q = query.lower()
for keyword, value in knowledge_base.items():
if keyword in q:
return value
return "Informasi tidak ditemukan di knowledge base."
# 2. MODEL LAYER (TOOL SELECTOR)
def query_tool_selector(user_input):
messages = [
{
"role": "system",
"content": (
"Kamu adalah AI Assistant. Berdasarkan pesan pengguna, pilih tool yang tepat: "
"'calculator', 'knowledge_search', atau 'none'.\n"
"Jawab HANYA dalam format JSON valid seperti ini:\n"
'{"tool": "calculator", "input": "5 * (4 + 3)"}\n'
'atau\n'
'{"tool": "knowledge_search", "input": "python"}\n'
'atau\n'
'{"tool": "none", "input": "Halo!"}'
)
},
{"role": "user", "content": user_input}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # atau model lokal / deepseek / qwen
messages=messages,
temperature=0
)
try:
data = json.loads(response.choices[0].message.content)
return data.get("tool"), data.get("input")
except Exception:
return "none", user_input
# 3. APPLICATION LAYER (REASONING LOOP & EXECUTOR)
def run_agent(user_input):
tool_name, tool_input = query_tool_selector(user_input)
print(f"[*] Tool Terpilih: {tool_name} | Input: {tool_input}")
if tool_name == "calculator":
result = calculate_expression(tool_input)
return f"Hasil Perhitungan: {result}"
elif tool_name == "knowledge_search":
result = search_knowledge(tool_input)
return f"Hasil Pencarian: {result}"
else:
return f"Respons Langsung: {tool_input}"
Mengapa Pendekatan Ini Kuat?
- Zero Framework Lock-in: Nol dependensi misterius, kamu paham 100% setiap baris eksekusi.
- Swappable: Sangat mudah mengganti model dari OpenAI ke DeepSeek, GLM, Kimi, atau Claude.
- Mudah Diaudit: Setiap step, pemilihan tool, dan payload JSON tercatat transparan.
A0