Model Dunia dan Perencanaan Prediktif
Agen yang menyimulasikan keadaan masa depan sebelum bertindak: simulasi mental untuk kecerdasan buatan.
Model Dunia dan Perencanaan Prediktif adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Apa Itu Model Dunia?
Model dunia adalah representasi internal agen tentang lingkungan: objek apa yang ada, bagaimana keadaannya, aturan apa yang mengatur perubahannya, dan apa yang dapat dilakukan agen untuk memengaruhinya. Model ini merupakan simulasi mental agen tentang dunia.
Tanpa model dunia, agen hanya dapat bereaksi terhadap pengamatan. Dengan model dunia, agen dapat memprediksi dan merencanakan.
Representasi Keadaan Dunia
Keadaan dunia adalah gambaran semua fakta yang relevan tentang lingkungan pada suatu waktu. Untuk agen IoT, ini dapat berupa pembacaan sensor dan keadaan perangkat saat ini. Untuk agen perangkat lunak, ini dapat berupa keadaan berkas, API, dan basis data yang dikelolanya.
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any
@dataclass
class WorldState:
timestamp: str = ''
entities: dict = field(default_factory=dict) # entity_id -> attributes
relationships: list = field(default_factory=list)
agent_position: str = 'idle'
pending_actions: list = field(default_factory=list)
def __post_init__(self):
if not self.timestamp:
self.timestamp = datetime.utcnow().isoformat()
def update_entity(self, entity_id: str, attributes: dict):
current = self.entities.get(entity_id, {})
self.entities[entity_id] = {**current, **attributes}
def snapshot(self) -> dict:
return {
'timestamp': self.timestamp,
'entities': dict(self.entities),
'agent_position': self.agent_position
}
# Example:
world = WorldState()
world.update_entity('server_room', {'temp_c': 22.5, 'humidity': 55})
world.update_entity('hvac_unit_1', {'status': 'off', 'setpoint': 22})
print(world.snapshot())Model Transisi
Model transisi menentukan bagaimana keadaan dunia berubah sebagai respons terhadap suatu tindakan: next_state = transition(current_state, action). Model ini memungkinkan agen memprediksi seperti apa dunia setelah melakukan suatu tindakan tanpa benar-benar melakukannya.
import copy
def transition(state: WorldState, action: dict) -> WorldState:
"""
Predict next state given current state and action.
Returns a new WorldState (does not modify original).
"""
next_state = copy.deepcopy(state)
action_type = action.get('type')
target = action.get('target')
params = action.get('params', {})
if action_type == 'TURN_ON_HVAC':
next_state.update_entity(target, {
'status': 'on',
'setpoint': params.get('setpoint', 22)
})
# Simulate temperature effect (simplified linear model)
room = action.get('room', 'server_room')
current_temp = next_state.entities.get(room, {}).get('temp_c', 25)
next_state.update_entity(room, {
'temp_c': max(current_temp - 2, params.get('setpoint', 22))
})
elif action_type == 'SEND_ALERT':
next_state.pending_actions.append({'alert_sent': True})
return next_state
# Predict effect of turning on HVAC:
action = {'type': 'TURN_ON_HVAC', 'target': 'hvac_unit_1',
'room': 'server_room', 'params': {'setpoint': 20}}
next_world = transition(world, action)
print('After action:', next_world.entities.get('server_room'))Perencanaan Pandang ke Depan
Perencanaan pandang ke depan menyimulasikan N langkah ke masa depan sebelum menetapkan suatu tindakan. Agen mengeksplorasi beberapa rangkaian tindakan, mengevaluasi setiap keadaan yang dihasilkan, lalu memilih rangkaian yang mengarah pada hasil prediksi terbaik.
def evaluate_state(state: WorldState) -> float:
"""
Compute a scalar utility score for a world state.
Higher = better for the agent's goals.
"""
score = 1.0
server_room = state.entities.get('server_room', {})
temp = server_room.get('temp_c', 25)
# Penalty for high temperature
if temp > 30:
score -= (temp - 30) * 0.2
# Penalty for very low temperature (over-cooling)
if temp < 18:
score -= (18 - temp) * 0.1
return max(0.0, score)
def lookahead(state: WorldState, possible_actions: list, depth: int = 3) -> dict:
"""Evaluate top-level actions by simulating depth steps ahead."""
best_action = None
best_score = -float('inf')
for action in possible_actions:
simulated = transition(state, action)
# Simulate depth more steps (simplified: no branching)
for _ in range(depth - 1):
simulated = transition(simulated, {'type': 'NOOP'})
score = evaluate_state(simulated)
if score > best_score:
best_score = score
best_action = action
return {'best_action': best_action, 'expected_score': round(best_score, 3)}LLM sebagai Model Dunia
Untuk lingkungan yang kompleks dan sulit diformalkan, LLM itu sendiri dapat berfungsi sebagai model dunia. Minta LLM memprediksi apa yang akan terjadi jika agen melakukan tindakan tertentu. Cara ini menukar presisi dengan keumuman—LLM dapat menalar tentang berbagai bidang.
import anthropic
import json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def llm_predict(
current_state: dict,
proposed_action: dict,
domain_description: str = ''
) -> dict:
prompt = (
f'Domain: {domain_description}\n\n'
f'Current state: {json.dumps(current_state, indent=2)}\n\n'
f'Proposed action: {json.dumps(proposed_action, indent=2)}\n\n'
'Predict the next world state after this action. '
'Consider direct effects and second-order effects.\n'
'Return JSON: {"predicted_state": dict, '
'"confidence": float, "side_effects": [str]}'
)
response = client.messages.create(
model='claude-opus-4-5', max_tokens=512,
messages=[{'role': 'user', 'content': prompt}]
)
return json.loads(response.content[0].text)Perencanaan Berbasis Model vs Tanpa Model
Berbasis model: agen memiliki model dunia yang eksplisit, menyimulasikan keadaan masa depan, dan merencanakan. Lebih efisien dalam penggunaan sampel dan lebih mampu melakukan generalisasi. Tanpa model: agen mempelajari pasangan nilai tindakan dari pengalaman tanpa model. Lebih sederhana, tetapi memerlukan lebih banyak interaksi untuk mempelajari kebijakan.
# Comparison table
COMPARISON = {
'model_based': {
'pros': [
'Can plan before acting (lookahead)',
'Works well with limited data',
'Interpretable — you can inspect the world model',
'Can simulate counterfactuals'
],
'cons': [
'Model can be wrong (model mismatch)',
'Complex to build for arbitrary domains',
'Planning is computationally expensive'
],
'examples': 'AlphaGo, MCTS, agent with explicit WorldState'
},
'model_free': {
'pros': [
'No need to model the world explicitly',
'Learns from raw experience',
'Simpler architecture'
],
'cons': [
'Requires many interactions to learn',
'Poor generalisation to new scenarios',
'Cannot reason about unseen situations'
],
'examples': 'Q-learning, policy gradient, basic RLHF'
}
}
for approach, info in COMPARISON.items():
print(f'{approach}: {info["examples"]}')Ketidakpastian dalam Model Dunia
Model dunia merupakan pendekatan. Perhitungkan ketidakpastian dengan mempertahankan distribusi probabilitas atas berbagai keadaan yang mungkin, bukan satu perkiraan titik. Saat ketidakpastian tinggi, lakukan tindakan konservatif atau kumpulkan lebih banyak informasi sebelum bertindak.
from statistics import mean, stdev
@dataclass
class UncertainState:
entity_id: str
attribute: str
samples: list # multiple estimates
def mean(self) -> float:
return mean(self.samples) if self.samples else 0.0
def uncertainty(self) -> float:
if len(self.samples) < 2:
return float('inf')
return stdev(self.samples)
def should_gather_more_data(self, threshold: float = 2.0) -> bool:
return self.uncertainty() > threshold
# Example: uncertain temperature estimate from multiple sensors
temp_state = UncertainState(
entity_id='server_room',
attribute='temp_c',
samples=[22.1, 22.8, 21.9, 34.5, 22.3] # one outlier
)
print(f'Mean temp: {temp_state.mean():.1f}C')
print(f'Uncertainty (stdev): {temp_state.uncertainty():.2f}')
print(f'Gather more data: {temp_state.should_gather_more_data()}')Memperbarui Model Dunia
Setelah setiap tindakan, agen mengamati hasil sebenarnya dan memperbarui model dunianya. Jika prediksinya salah, model diperbarui agar lebih akurat. Inilah siklus amati-perbarui-rencanakan yang mendorong pembelajaran agen berbasis model.
class WorldModelAgent:
def __init__(self):
self.world = WorldState()
self.prediction_errors = []
def act(self, action: dict) -> dict:
# 1. Predict next state
predicted = transition(self.world, action)
# 2. Take the action in the real world
actual_observation = self._execute_action(action)
# 3. Measure prediction error
for entity_id, attrs in actual_observation.items():
for attr, actual_val in attrs.items():
predicted_val = predicted.entities.get(entity_id, {}).get(attr)
if predicted_val is not None:
error = abs(actual_val - predicted_val)
self.prediction_errors.append(error)
# 4. Update world model with actual observation
for entity_id, attrs in actual_observation.items():
self.world.update_entity(entity_id, attrs)
return actual_observation
def _execute_action(self, action: dict) -> dict:
# Placeholder — in production this calls real APIs/sensors
return {'server_room': {'temp_c': 23.0}}
def model_accuracy(self) -> float:
if not self.prediction_errors:
return 1.0
return max(0.0, 1.0 - mean(self.prediction_errors) / 10)Perencanaan dengan LLM: Simulasikan 3 Langkah
Untuk ranah bahasa alami, minta LLM menyimulasikan 3 langkah dari rencana yang diusulkan sebelum menjalankannya. LLM mengevaluasi hasil prediksi setiap langkah dan menandai potensi masalah—mencegah agen melakukan tindakan dengan konsekuensi yang diprediksi buruk.
import anthropic
import json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def simulate_plan_steps(goal: str, proposed_steps: list) -> dict:
steps_str = json.dumps(proposed_steps, indent=2)
prompt = (
f'Goal: {goal}\n\n'
f'Proposed plan steps:\n{steps_str}\n\n'
'Simulate executing each step in order. For each step predict:\n'
'- What changes in the world?\n'
'- What could go wrong?\n'
'- Is this step reversible?\n\n'
'Return JSON: {"step_simulations": [{"step": int, '
'"predicted_outcome": str, "risks": [str], "reversible": bool}], '
'"plan_safe": bool, "recommendation": str}'
)
response = client.messages.create(
model='claude-opus-4-5', max_tokens=1024,
messages=[{'role': 'user', 'content': prompt}]
)
result = json.loads(response.content[0].text)
if not result['plan_safe']:
print(f'Plan safety concern: {result["recommendation"]}')
return resultKapan Memercayai Model Dunia
Model dunia hanya sebaik akurasi fungsi transisi dan keadaan awalnya. Dalam lingkungan yang berubah dengan cepat, model akan segera menjadi usang. Terapkan ambang keusangan: jika model belum diperbarui selama N detik dan suatu tindakan berisiko tinggi, amati kembali lingkungan terlebih dahulu.
from datetime import datetime, timedelta
class StaleAwareWorldModel:
def __init__(self, max_age_seconds: int = 60):
self.state = WorldState()
self.max_age = timedelta(seconds=max_age_seconds)
self.last_observation_time = datetime.utcnow()
def is_stale(self) -> bool:
age = datetime.utcnow() - self.last_observation_time
return age > self.max_age
def refresh(self, observation_fn):
new_observations = observation_fn()
for entity_id, attrs in new_observations.items():
self.state.update_entity(entity_id, attrs)
self.last_observation_time = datetime.utcnow()
print(f'World model refreshed')
def plan_action(self, action: dict, observation_fn) -> dict:
if self.is_stale():
print('World model stale — refreshing before planning')
self.refresh(observation_fn)
return lookahead(self.state, [action], depth=3)Penalaran Kontrafaktual
Model dunia memungkinkan penalaran kontrafaktual: 'Apa yang akan terjadi seandainya saya mengambil tindakan A, bukan tindakan B?' Hal ini sangat berguna untuk belajar dari kesalahan tanpa mengulanginya — agen dapat menyimulasikan situasi kontrafaktual untuk memahami alasan pilihannya menghasilkan dampak yang kurang optimal.
import anthropic
import json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def counterfactual_analysis(
actual_state_before: dict,
action_taken: dict,
actual_outcome: dict,
alternative_action: dict
) -> dict:
prompt = (
'Analyse a counterfactual scenario:\n\n'
f'Initial state: {json.dumps(actual_state_before, indent=2)}\n'
f'Action taken: {json.dumps(action_taken, indent=2)}\n'
f'Actual outcome: {json.dumps(actual_outcome, indent=2)}\n\n'
f'Alternative action considered: {json.dumps(alternative_action, indent=2)}\n\n'
'What would likely have happened with the alternative action?\n'
'Return JSON: {"counterfactual_outcome": str, '
'"better_choice": str, "lesson": str}'
)
response = client.messages.create(
model='claude-opus-4-5', max_tokens=512,
messages=[{'role': 'user', 'content': prompt}]
)
return json.loads(response.content[0].text)Uji Pemahaman
Apa keunggulan utama agen berbasis model dibandingkan agen tanpa model?
Rangkuman: Model Dunia dan Perencanaan Prediktif
Bagus sekali! Hal-hal penting yang perlu diingat:
- Keadaan dunia: gambaran semua atribut entitas yang relevan pada suatu waktu
- Model transisi:
next_state = transition(state, action)— memprediksi dampak - Peninjauan ke depan: menyimulasikan N langkah ke depan, mengevaluasi hasil, lalu memilih tindakan terbaik
- LLM sebagai model dunia: berguna untuk ranah yang sulit diformalkan
- Ketidakpastian: pertahankan distribusi, bukan perkiraan titik; hindari tindakan saat ketidakpastian tinggi
- Keusangan: amati kembali sebelum tindakan berisiko tinggi jika model sudah lama
Selanjutnya: tantangan penyelarasan — alasan membangun agen otonom yang benar-benar bermanfaat itu sulit.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Model Dunia dan Perencanaan Prediktif” gratis?
Ya — teks lengkap “Model Dunia dan Perencanaan Prediktif” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Model Dunia dan Perencanaan Prediktif”?
Agen yang menyimulasikan keadaan masa depan sebelum bertindak: simulasi mental untuk kecerdasan buatan. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Model Dunia dan Perencanaan Prediktif” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dari Asisten Menjadi Agen Otonom
- Model Dunia dan Perencanaan Prediktif
- Tantangan Penyelarasan pada Agen Otonom
- Garis Depan Riset: AGI dan Selanjutnya