نماذج العالم والتخطيط التنبؤي
وكلاء يحاكون الحالات المستقبلية قبل التصرف: المحاكاة الذهنية للذكاء الاصطناعي.
نماذج العالم والتخطيط التنبؤي درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.
ما هو نموذج العالم؟
نموذج العالم هو التمثيل الداخلي للوكيل عن البيئة: ما الكائنات الموجودة، وما حالاتها، وما القواعد التي تحكم تغيرها، وما الذي يستطيع الوكيل فعله للتأثير فيها. وهو المحاكاة الذهنية للعالم من منظور الوكيل.
من دون نموذج للعالم، لا يستطيع الوكيل إلا الاستجابة للملاحظات. أما بوجوده، فيستطيع التنبؤ والتخطيط.
تمثيل حالة العالم
حالة العالم هي لقطة لجميع الحقائق ذات الصلة بالبيئة في لحظة معينة. قد تكون هذه الحالة بالنسبة إلى وكيل إنترنت الأشياء قراءات المستشعرات الحالية وحالات الأجهزة. وبالنسبة إلى وكيل برمجي، قد تكون حالة الملفات وواجهات API وقواعد البيانات التي يديرها.
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())نموذج الانتقال
يحدد نموذج الانتقال كيفية تغير حالة العالم استجابةً لإجراء ما: next_state = transition(current_state, action). ويتيح للوكيل التنبؤ بشكل العالم بعد تنفيذ إجراء ما دون تنفيذه فعليًا.
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'))التخطيط الاستشرافي
تحاكي عملية التخطيط الاستشرافي N خطوات في المستقبل قبل الالتزام بإجراء ما. ويستكشف الوكيل عدة تسلسلات من الإجراءات، ويقيّم كل حالة ناتجة، ثم يختار التسلسل الذي يقود إلى أفضل نتيجة متوقعة.
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 كنموذج للعالم
في البيئات المعقدة التي يصعب إضفاء الطابع الرسمي عليها، يمكن أن يعمل LLM نفسه نموذجًا للعالم. اطلبوا منه التنبؤ بما سيحدث إذا اتخذ الوكيل إجراءً محددًا. ويستبدل هذا النهج شيئًا من الدقة بقدر أكبر من العمومية، إذ يستطيع LLM الاستدلال في مجالات اعتباطية.
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)التخطيط القائم على النموذج مقابل التخطيط الخالي من النموذج
القائم على النموذج: يمتلك الوكيل نموذجًا صريحًا للعالم، ويحاكي الحالات المستقبلية، ويخطط. وهو أكثر كفاءة من حيث العينات ويعمم بصورة أفضل. الخالي من النموذج: يتعلم الوكيل أزواج قيمة الفعل من الخبرة دون استخدام نموذج. وهو أبسط، لكنه يتطلب مزيدًا من التفاعلات لتعلم سياسة.
# 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"]}')عدم اليقين في نماذج العالم
نماذج العالم تقريبية. تعاملوا مع عدم اليقين بالحفاظ على توزيع احتمالي للحالات المحتملة بدلًا من تقدير نقطي واحد. وعندما يكون عدم اليقين مرتفعًا، اتخذوا إجراءات محافظة أو اجمعوا مزيدًا من المعلومات قبل التصرف.
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()}')تحديث نموذج العالم
بعد كل إجراء، يلاحظ الوكيل النتيجة الفعلية ويحدّث نموذج العالم لديه. وإذا كان التنبؤ خاطئًا، يُحدَّث النموذج ليصبح أكثر دقة. وهذه هي دورة الملاحظة-التحديث-التخطيط التي تقود تعلم الوكيل القائم على النموذج.
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)التخطيط باستخدام LLM: محاكاة 3 خطوات
في مجالات اللغة الطبيعية، اطلبوا من LLM محاكاة 3 خطوات من خطة مقترحة قبل تنفيذها. ويقيّم LLM النتيجة المتوقعة لكل خطوة، وينبه إلى المشكلات المحتملة، مما يمنع الوكيل من اتخاذ إجراءات ذات عواقب متوقعة سيئة.
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 resultمتى تثقون بنموذج العالم؟
لا يكون نموذج العالم جيدًا إلا بقدر دقة دالة الانتقال والحالة الأولية. في البيئات سريعة التغيّر، يتقادم النموذج بسرعة. طبّقوا عتبة للتقادم: إذا لم يُحدَّث النموذج خلال N ثوانٍ وكان الإجراء عالي المخاطر، فأعيدوا رصد البيئة أولًا.
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)الاستدلال المضاد للواقع
يتيح نموذج العالم الاستدلال المضاد للواقع: «ماذا كان سيحدث لو أنني اتخذت الإجراء A بدلًا من الإجراء B؟» وهذا مفيد جدًا للتعلّم من الأخطاء دون تكرارها؛ إذ يستطيع الوكيل محاكاة الحالة المضادة للواقع لفهم سبب إفضاء اختياره إلى نتيجة دون المستوى الأمثل.
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)اختبروا معرفتكم
ما الميزة الأساسية التي يتمتع بها وكيل قائم على نموذج مقارنةً بوكيل غير قائم على نموذج؟
مراجعة: نماذج العالم والتخطيط التنبؤي
عمل رائع! أهم النقاط المستخلصة:
- حالة العالم: لقطة لجميع سمات الكيانات ذات الصلة في لحظة زمنية معينة
- نموذج الانتقال:
next_state = transition(state, action)— يتنبأ بالتأثيرات - الاستشراف: محاكاة N خطوات إلى الأمام، وتقييم النتائج، واختيار أفضل إجراء
- استخدام LLM كنموذج للعالم: مناسب للمجالات التي يصعب إضفاء طابع رسمي عليها
- عدم اليقين: الاحتفاظ بتوزيعات لا بتقديرات نقطية؛ وتجنب اتخاذ إجراء عند ارتفاع عدم اليقين
- تقادم النموذج: إعادة رصد البيئة قبل الإجراءات عالية المخاطر إذا كان النموذج قديمًا
التالي: تحديات المواءمة — لماذا يصعب بناء وكلاء مستقلين يحققون منفعة حقيقية.
الأسئلة الشائعة
هل درس «نماذج العالم والتخطيط التنبؤي» مجاني؟
نعم — نص درس «نماذج العالم والتخطيط التنبؤي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «نماذج العالم والتخطيط التنبؤي»؟
وكلاء يحاكون الحالات المستقبلية قبل التصرف: المحاكاة الذهنية للذكاء الاصطناعي. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «نماذج العالم والتخطيط التنبؤي»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- من المساعد إلى الوكيل المستقل
- نماذج العالم والتخطيط التنبؤي
- تحديات المواءمة في الوكلاء المستقلين
- آفاق البحث: AGI وما بعده