استكشاف شجرة الأفكار
تفريع الأفكار وتقييمها.
استكشاف شجرة الأفكار درس مجاني في AI Prompt Engineering على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Prompt Engineering، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
من السلاسل إلى الأشجار
تعمّم شجرة الأفكار (ToT، Yao et al., 2023) سلسلة التفكير من مسار خطي واحد إلى شجرة بحث للحلول الجزئية. تمثل كل عقدة فكرة وسيطة مترابطة، وتستكشف الفروع امتدادات بديلة.
يتيح ذلك للنموذج التفكير بتأنٍّ: فيولّد خطوات تالية متعددة، ويقيّمها، ويُبقي على الواعدة منها، ويتراجع عن النهايات المسدودة، محاكيًا حل المشكلات المنهجي بدلًا من الالتزام بالفكرة الأولى.
class ThoughtNode:
def __init__(self, state, parent=None):
self.state = state # partial solution / reasoning so far
self.parent = parent
self.children = []
self.value = None # evaluator scoreالمكونات الأربعة لـ ToT
يتضمن نظام ToT أربعة خيارات تصميمية: تجزئة الأفكار (ما الذي يمثل خطوة)، ومولّد الأفكار (كيفية اقتراح الخطوات التالية)، ومقيّم الحالة (كيفية تقييم الحلول الجزئية)، وخوارزمية البحث (BFS أو DFS أو البحث الأفضل أولًا).
كل خيار منها عبارة عن موجّه أو سياسة منفصلة. ويعني تصميم ToT تحديد الخيارات الأربعة كلها لمهمتك.
tot = {
'decompose': step_definition, # e.g. one equation, one move
'generate': propose_thoughts, # sampling or proposal prompt
'evaluate': score_state, # value/vote prompt
'search': bfs_with_beam, # BFS | DFS | best-first
}توليد الأفكار المرشحة
هناك استراتيجيتان للتوليد: أخذ عينات من عدة أفكار مستقلة باستخدام درجة حرارة متوسطة (وهو مناسب عندما يكون الفضاء غنيًا)، أو اقتراح مجموعة من الخطوات التالية المختلفة في موجّه واحد (وهو مناسب عندما تريد خيارات متمايزة بوضوح).
ولّد عامل تفرع صغيرًا (غالبًا من 3 إلى 5)؛ فكثرة المرشحين تؤدي إلى انفجار مساحة البحث والتكلفة.
def propose_thoughts(state, k=4):
prompt = (
'Given the partial solution below, propose ' + str(k) +
' DISTINCT possible next steps.\n' + state
)
return parse_list(llm(prompt, temperature=0.7))تقييم الحالات
مقيّم الحالة هو ما يجعل ToT يتجاوز أخذ العينات العشوائي. فهو يقيّم مدى وعد الحل الجزئي، إما عبر موجّه للقيمة (قيّم هذه الحالة من 1 إلى 10 من حيث التقدم نحو حل المشكلة)، أو عبر موجّه للتصويت (أيّ الحالات التالية أكثر وعدًا؟).
غالبًا ما يكون التصويت بين المرشحين أكثر متانة من التقييم المطلق، لأن إصدار الأحكام النسبية أسهل على النموذج.
def score_state(state):
prompt = (
'Rate how likely this partial solution leads to a correct '
'final answer. Reply sure / likely / impossible.\n' + state
)
label = llm(prompt, temperature=0).strip().lower()
return {'sure': 1.0, 'likely': 0.5, 'impossible': 0.0}.get(label, 0.3)BFS مع بحث الحزمة
يوسّع ToT بأسلوب البحث بعرض أول جميع عقد الجبهة مستوىً واحدًا في كل مرة، ثم يُبقي فقط على أفضل b عقد وفق درجة المقيّم (أي حزمة). وهذا يحد من الانفجار مع استكشاف مسارات متعددة بالتوازي.
يوازن عرض الحزمة b بين اتساع الاستكشاف والتكلفة؛ ويُعد العرض 5 مع عمق 3 نقطة بداية شائعة للألغاز المهيكلة.
def bfs_with_beam(root, depth, branch, beam):
frontier = [root]
for _ in range(depth):
nxt = []
for node in frontier:
for t in propose_thoughts(node.state, branch):
child = ThoughtNode(node.state + '\n' + t, node)
child.value = score_state(child.state)
nxt.append(child)
frontier = sorted(nxt, key=lambda n: -n.value)[:beam]
return max(frontier, key=lambda n: n.value)DFS مع التراجع
يتعمق ToT بأسلوب البحث بالعمق أولًا في الفرع الأكثر وعدًا، ثم يتراجع عندما يرى المقيّم أن الحالة ميؤوس منها. ويناسب ذلك المشكلات التي تتضمن مفهومًا واضحًا للحالة الجزئية غير القابلة للتحقيق، مثل ألغاز القيود.
يتمثل المكسب الرئيسي في الكفاءة في استبعاد الفروع المستحيلة مبكرًا، وتجنب توسيع الأشجار الفرعية المحكوم عليها بالفشل.
def dfs(node, depth, branch, prune=0.2):
if depth == 0 or is_solution(node.state):
return node
for t in propose_thoughts(node.state, branch):
child = ThoughtNode(node.state + '\n' + t, node)
child.value = score_state(child.state)
if child.value < prune:
continue # backtrack: prune dead end
res = dfs(child, depth - 1, branch, prune)
if res and is_solution(res.state):
return res
return NoneToT في مقابل الاتساق الذاتي
يأخذ الاتساق الذاتي عينات من سلاسل مكتملة مستقلة ثم يصوّت بينها. أما ToT فيوجّه الاستكشاف بنشاط عبر التقييم المرحلي والتراجع، مستثمرًا موارد المعالجة حيث تكون الفرص واعدة.
يتفوق ToT في المشكلات التي تتطلب التخطيط أو البحث، أو التي تكون فيها الأخطاء المبكرة قاتلة (Game of 24 والكلمات المتقاطعة والتخطيط). أما المهام التي تتوفر لها سلاسل متنوعة منخفضة التكلفة وإجابة منفصلة، فيكون الاتساق الذاتي أبسط وغالبًا كافيًا.
# Rule of thumb
# - reachable by diverse single passes -> self-consistency
# - needs lookahead / pruning / backtrack -> tree-of-thought
# ToT cost ~ branch * depth * beam * (gen + eval) LLM callsتضخم التكلفة والميزانيات
تُعد ToT مكلفة؛ إذ تستلزم كل عقدة استدعاءات للتوليد والتقييم. وتتوسع التكلفة الإجمالية تقريبًا وفق عامل التفرع × العمق × عرض الحزمة، إضافةً إلى استدعاءات المقيّم. ومن دون ميزانية صارمة، قد تتضخم التكلفة.
حدّد إجمالي استدعاءات LLM، واستخدم البحث الأفضل أولًا لإنفاق الميزانية على الجبهة الأعلى قيمة، وانتقل إلى أفضل حل جزئي إذا نفدت الميزانية.
import heapq
def best_first(root, max_calls):
heap = [(-root.value, root)]
best, calls = root, 0
while heap and calls < max_calls:
_, node = heapq.heappop(heap)
for t in propose_thoughts(node.state, 3):
calls += 1
child = ThoughtNode(node.state + '\n' + t, node)
child.value = score_state(child.state); calls += 1
if child.value > best.value:
best = child
heapq.heappush(heap, (-child.value, child))
return bestموثوقية المقيّم
لا يكون ToT أفضل من مقيّمه. فقد يستبعد مقيّم سيئ المعايرة فروعًا صحيحة أو يلاحق نهايات مسدودة. حسّنه باستخدام التصويت (تقييمات متعددة لكل حالة)، أو أمثلة few-shot لحالات جيدة وسيئة، أو أداة تحقق خارجية (اختبار وحدة أو محلل أو مدقّق).
عندما يتوفر تحقق موضوعي (هل تتحقق المعادلة؟ هل تنجح الشيفرة؟)، ففضّله على حكم LLM.
def robust_eval(state, votes=3):
scores = [score_state(state) for _ in range(votes)]
return sum(scores) / votes # average to reduce judge noise
# Even better: replace with a deterministic verifier when availableقابلية التطبيق العملية
يحقق ToT فائدة في فئة محدودة لكنها مهمة من المشكلات: التخطيط متعدد الخطوات، والألغاز التوافقية، والمهام التي يكون فيها التحقق من خطوة أرخص من حل المشكلة بأكملها. أما في معظم التوجيهات اليومية، فإن ToT مبالغ فيه.
في النماذج ذات الاستدلال الأصلي والبحث المدمج القوي، يضيف هيكل ToT الصريح تكلفة غالبًا من دون مكسب كبير؛ لذا قِس الأداء قبل اعتماده.
def choose_strategy(task):
if task.requires_search and task.step_verifiable:
return 'tree-of-thought'
if task.discrete_answer:
return 'self-consistency'
return 'single chain-of-thought'محلل ToT مصغر
من البداية إلى النهاية: حدّد خطوة، واقترح تفرعًا صغيرًا من الأفكار، وقيّم كل فكرة (بالتصويت أو باستخدام أداة تحقق)، وابحث عبر BFS مع الحزمة أو DFS مع التراجع ضمن ميزانية للاستدعاءات، ثم أعد أفضل حالة نهائية.
سجّل أعداد العقد ودرجات المقيّم حتى تتمكن من ضبط عامل التفرع والعمق وعرض الحزمة تجريبيًا لكل مهمة.
def solve(problem, branch=4, depth=3, beam=5, budget=200):
root = ThoughtNode(problem)
root.value = score_state(root.state)
node = bfs_with_beam(root, depth, branch, beam)
return extract_solution(node.state)تحقق سريع
اختر استراتيجية التفكير المتأني المناسبة.
خلاصة
أهم النقاط:
- تعمّم ToT مفهوم CoT إلى شجرة بحث تتضمن توليد الأفكار وتقييم الحالات وخوارزمية للبحث.
- استخدم BFS مع حزمة أو DFS مع التراجع؛ وأبقِ عامل التفرع صغيرًا للتحكم في الانفجار.
- يمثل مقيّم الحالة العنصر الحاسم؛ فقوّه باستخدام التصويت أو أداة تحقق خارجية.
- تتوسع التكلفة وفق عامل التفرع × العمق × عرض الحزمة، لذا فرض ميزانية للاستدعاءات، وغالبًا عبر البحث الأفضل أولًا.
- خصص ToT لمشكلات التخطيط والمشكلات التوافقية القابلة للتحقق خطوةً بخطوة؛ فهو مبالغ فيه بالنسبة إلى التوجيهات اليومية.
الأسئلة الشائعة
هل درس «استكشاف شجرة الأفكار» مجاني؟
نعم — نص درس «استكشاف شجرة الأفكار» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Prompt Engineering، انتقل إلى CoddyKit PRO. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.
ماذا ستتعلم في «استكشاف شجرة الأفكار»؟
تفريع الأفكار وتقييمها. تتمرن على AI Prompt Engineering مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Prompt Engineering؟
لا تُشترط خبرة سابقة. AI Prompt Engineering على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «استكشاف شجرة الأفكار»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Prompt Engineering هذا؟
نعم. كل درس في AI Prompt Engineering يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التلقين بالتفكير المتسلسل
- أخذ عينات الاتساق الذاتي
- استكشاف شجرة الأفكار
- متى تفيد تلقينات الاستدلال