AI Prompt Engineering · درس

التلخيص الهرمي

الضغط التدريجي: الفصول ← الأقسام ← ملخص المستند

الدرس 3 من 413 خطوة

التلخيص الهرمي درس مجاني في AI Prompt Engineering على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Prompt Engineering، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Prompt Engineering 4 دروس في المجموع.

ما التلخيص الهرمي؟

يحاكي التلخيص الهرمي بنية المستند نفسه. فبدلاً من التعامل مع جميع المقاطع بالطريقة نفسها، يضغط المحتوى مستوى بعد مستوى:

  • الصفحات ← ملخصات الأقسام
  • الأقسام ← ملخصات الفصول
  • الفصول ← ملخص المستند

يمثل كل مستوى نسخة مضغوطة من المستوى الذي يليه مباشرةً. وهذه هي الطريقة التي يلخّص بها البشر الكتب — يقرؤون الفصول، ويكوّنون ملخصات ذهنية، ثم يدمجونها.

متى يُستخدم التلخيص الهرمي

يُعد التلخيص الهرمي الخيار المناسب للآتي:

  • الكتب: أكثر من 200 صفحة مع بنية واضحة للفصول
  • الأوراق البحثية: الملخص، والمقدمة، والمنهجية، والنتائج، والمناقشة
  • العقود القانونية: أقسام ذات عناوين محددة (التعريفات، والالتزامات، والإنهاء)
  • التقارير التقنية: الملخص التنفيذي ← النتائج ← الملاحق

ويُعد مبالغاً فيه بالنسبة إلى المقالات القصيرة. وتظهر فعاليته عندما تكون للمستند بنية شجرية طبيعية.

بنية شجرة المستند

مثّلوا المستند في صورة شجرة:

  • الجذر: الملخص النهائي
  • العُقد من المستوى 1: ملخصات الفصول
  • العُقد من المستوى 2: ملخصات الأقسام
  • الأوراق: نص الصفحة أو المقطع الأصلي

تجري عملية التلخيص من الأسفل إلى الأعلى: الأوراق ← المستوى 2 ← المستوى 1 ← الجذر. ويُشتق ملخص كل عُقدة من ملخصات أبنائها فقط.

from dataclasses import dataclass, field
from typing import List, Optional

@dataclass
class DocNode:
    title: str
    content: str = ''
    summary: str = ''
    children: List['DocNode'] = field(default_factory=list)

# Example: book with 3 chapters, each with 3 sections
book = DocNode(
    title='My Book',
    children=[
        DocNode('Chapter 1', children=[
            DocNode('Section 1.1', content='...raw text...'),
            DocNode('Section 1.2', content='...raw text...'),
        ]),
        DocNode('Chapter 2', children=[
            DocNode('Section 2.1', content='...raw text...'),
        ])
    ]
)

التلخيص من الأسفل إلى الأعلى

تنقّلوا في الشجرة من الأسفل إلى الأعلى. وتُلخّص العُقد الورقية انطلاقاً من محتواها الأصلي، بينما تُلخّص العُقد الداخلية انطلاقاً من ملخصات أبنائها.

import openai
client = openai.OpenAI(api_key='sk-...')

def summarize_text(text, role='section'):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system',
             'content': f'Summarize this {role} in 3-5 sentences.'},
            {'role': 'user', 'content': text}
        ]
    )
    return resp.choices[0].message.content

def summarize_tree(node, depth=0):
    role = ['document', 'chapter', 'section', 'page'][min(depth, 3)]
    if not node.children:
        node.summary = summarize_text(node.content, role)
    else:
        for child in node.children:
            summarize_tree(child, depth + 1)
        combined = '\n\n'.join(
            f'{c.title}:\n{c.summary}' for c in node.children
        )
        node.summary = summarize_text(combined, role)
    return node.summary

الضغط التدريجي

يعني الضغط التدريجي أن كل مستوى يقلل كثافة المعلومات. ومن القواعد التقريبية المفيدة:

  • الصفحة (2000 رمز) ← ملخص القسم (200 رمز) — ضغط بمقدار 10x
  • ملخص القسم (200 رمز) ← ملخص الفصل (100 رمز) — ضغط بمقدار 2x
  • ملخصات الفصول (5 × 100 رمز) ← المستند (150 رمزاً) — ضغط بمقدار 3x

الإجمالي: ضغط مستند من 10,000 رمز إلى نحو 150 رمزاً مع الحفاظ على الحجة الرئيسية. اطلبوا من كل مستوى الحفاظ على نسبة الضغط.

PAGE_PROMPT = 'Summarize this page in 2-3 sentences (under 80 words).'
SECTION_PROMPT = 'Given these page summaries, write a section summary in 3-4 sentences (under 120 words).'
CHAPTER_PROMPT = 'Given these section summaries, write a chapter summary in 4-5 sentences (under 150 words).'
DOC_PROMPT = 'Given these chapter summaries, write an executive summary of the entire document (under 200 words).'

الحفاظ على التماسك بين المستويات

من مخاطر التلخيص الهرمي أن تتناقض الملخصات في مستوى واحد أو تكرر بعضها، وأن تتراكم هذه الأخطاء في المستويات الأعلى. وتشمل استراتيجيات الحفاظ على التماسك ما يلي:

  • ضمّنوا عنوان القسم الأب في المطالبة حتى يعرف النموذج السياق
  • اطلبوا من النموذج تجنب تكرار الحقائق المذكورة مسبقاً في ملخصات الأقسام السابقة
  • في خطوة reduce النهائية، اطلبوا من النموذج صراحةً حل أي تناقضات
def summarize_sections_for_chapter(chapter_title, section_summaries):
    content = '\n\n'.join(
        f'Section: {s["title"]}\n{s["summary"]}'
        for s in section_summaries
    )
    prompt = (
        f'Chapter: {chapter_title}\n\n'
        'Below are summaries of each section. '
        'Write a unified chapter summary without repeating '
        'the same facts from multiple sections.\n\n' + content
    )
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return resp.choices[0].message.content

التسلسل الهرمي للورقة البحثية

تتمتع الأوراق البحثية بتسلسل هرمي طبيعي: الملخص ← المقدمة ← المنهجية ← النتائج ← المناقشة ← الخلاصة. ولكل قسم دور مميز، لذا استخدموا مطالبات خاصة بكل قسم:

SECTION_PROMPTS = {
    'abstract': 'Summarize the paper abstract: what problem, method, and result?',
    'introduction': 'Summarize the introduction: what gap does the paper address?',
    'methods': 'Summarize the methods: what approach was used?',
    'results': 'Summarize the results: what were the key findings and metrics?',
    'discussion': 'Summarize the discussion: what do the results mean?',
    'conclusion': 'Summarize the conclusion and future work.'
}

def summarize_paper(sections_dict):
    section_summaries = {}
    for section, text in sections_dict.items():
        prompt = SECTION_PROMPTS.get(section, 'Summarize this section.')
        section_summaries[section] = call_llm(prompt, text)
    return section_summaries

التسلسل الهرمي للعقد القانوني

تتبع العقود القانونية تسلسلاً هرمياً للبنود: التعريفات ← الالتزامات ← سبل الانتصاف ← الإنهاء ← القانون الحاكم. ويجب أن يحافظ التلخيص الهرمي على ما يلي:

  • الأرقام الدقيقة (مبالغ الدفع، والمواعيد النهائية)
  • أسماء الأطراف (العميل، والمورّد، والمرخِّص)
  • اللغة الشرطية (ما لم، إلا عند، شريطة أن)

اطلبوا من النموذج الإشارة إلى أي بند يتضمن مبلغاً رقمياً أو شرطاً أثناء تلخيصه، حتى لا يُحذف عن طريق الخطأ.

LEGAL_PROMPT = '''Summarize this contract clause in plain English.
Preserve: all monetary amounts, dates, party names, and conditionals.
Flag any obligation with [OBLIGATION] and any amount with [AMOUNT].'''

def summarize_clause(clause_text):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': LEGAL_PROMPT},
            {'role': 'user', 'content': clause_text}
        ]
    )
    return resp.choices[0].message.content

تخزين الملخصات الهرمية

خزّنوا شجرة الملخص كاملة، وليس ملخص الجذر فقط. يتيح ذلك ما يلي:

  • التعمق التدريجي — عرض ملخص الفصل، ثم ملخص القسم عند الطلب
  • الاسترجاع — مطابقة استعلام المستخدم مع ملخصات الأقسام، وليس المستند الكامل فقط
  • التحديث — عند تغيّر أحد الأقسام، لا تعيدوا تلخيص سوى ذلك الفرع من الشجرة
import json

def tree_to_dict(node):
    return {
        'title': node.title,
        'summary': node.summary,
        'children': [tree_to_dict(c) for c in node.children]
    }

def save_tree(node, path):
    with open(path, 'w') as f:
        json.dump(tree_to_dict(node), f, indent=2)
    print(f'Saved summary tree to {path}')

التحديثات التزايدية

عند تحديث مستند ما، تتيح البنية الهرمية إعادة التلخيص التزايدية. أعيدوا تلخيص العُقدة المعدّلة وأسلافها فقط — وتظل جميع الفروع الشقيقة صالحة.

بالنسبة إلى كتاب من 10 فصول عُدّل فيه الفصل 3: أعيدوا تلخيص أقسام الفصل 3، ثم الفصل 3، ثم الكتاب. وهكذا تعيدون حساب 3 عُقد بدلاً من جميع العُقد.

def update_node(node, updated_child_title):
    # Re-summarize the changed child
    for child in node.children:
        if child.title == updated_child_title:
            summarize_tree(child)  # re-summarize from leaves
            break
    # Re-summarize current node from updated children
    combined = '\n\n'.join(
        f'{c.title}:\n{c.summary}' for c in node.children
    )
    node.summary = summarize_text(combined)
    return node.summary

مقارنة بين التلخيص المسطح والهرمي

مقارنة بين map-reduce المسطح والتلخيص الهرمي:

  • المسطح: أبسط، ويتجاهل بنية المستند، وأفضل للمستندات المتجانسة (المقالات الإخبارية)
  • الهرمي: يراعي البنية، ويتيح التعمق التدريجي، ويحقق تماسكاً أفضل للمستندات المنظمة

عملياً، ادمجوا بين الأسلوبين: استخدموا map-reduce المسطح داخل كل فصل (عند وجود صفحات كثيرة)، ثم استخدموا التلخيص الهرمي عبر الفصول. وهذا هو الأسلوب الأكثر متانة للمستندات الواقعية.

اختبار المعرفة

في التلخيص الهرمي، في أي اتجاه تجري عملية التلخيص عبر شجرة المستند؟

مراجعة: التلخيص الهرمي

يحاكي التلخيص الهرمي بنية المستند لتحقيق نتائج أفضل:

  • مثّلوا المستند في صورة شجرة: الصفحات ← الأقسام ← الفصول ← المستند
  • لخّصوا من الأسفل إلى الأعلى: ابدؤوا بالأوراق وأنهوا بالجذر
  • يطبّق كل مستوى ضغطاً تدريجياً للحفاظ على التماسك
  • يُعد مناسباً للكتب، والأوراق البحثية، والعقود القانونية ذات البنية الهرمية الواضحة
  • خزّنوا الشجرة كاملة لتمكين الاسترجاع بالتعمق التدريجي والتحديثات التزايدية

الدرس التالي: الحفاظ على السياق بين المقاطع باستخدام التداخل والملخصات المتراكمة.

البدء مجانًا

تعلم AI Prompt Engineering مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
53
الدروس
199

الأسئلة الشائعة

هل درس «التلخيص الهرمي» مجاني؟

نعم — نص درس «التلخيص الهرمي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. استراتيجيات تقسيم النصوص الطويلة
  2. نمط تلخيص Map-Reduce
  3. التلخيص الهرمي
  4. الحفاظ على السياق عبر الأجزاء
← العودة إلى AI Prompt Engineering