การสรุปแบบลำดับชั้น
การบีบอัดแบบค่อยเป็นค่อยไป: บท → ส่วน → สรุปเอกสาร
การสรุปแบบลำดับชั้น เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 โทเค็น) — บีบอัด 10 เท่า
- บทสรุปของส่วน (200 โทเค็น) → บทสรุปของบท (100 โทเค็น) — บีบอัด 2 เท่า
- บทสรุปของบท (5 × 100 โทเค็น) → เอกสาร (150 โทเค็น) — บีบอัด 3 เท่า
รวมแล้ว เอกสารขนาด 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).'การรักษาความต่อเนื่องข้ามระดับ
ความเสี่ยงของการสรุปแบบลำดับชั้นคือ บทสรุปในระดับเดียวกันอาจขัดแย้งหรือกล่าวซ้ำกัน และข้อผิดพลาดเหล่านี้จะสะสมเมื่อเลื่อนขึ้นไป วิธีรักษาความต่อเนื่องมีดังนี้:
- ใส่หัวข้อของส่วนที่ครอบอยู่ไว้ในพรอมต์ เพื่อให้โมเดลทราบบริบท
- ขอให้โมเดลหลีกเลี่ยงการกล่าวซ้ำข้อเท็จจริงที่ระบุไว้แล้วในบทสรุปของส่วนก่อนหน้า
- ในขั้นตอนรีดิวซ์สุดท้าย ให้ขอโมเดลอย่างชัดเจนเพื่อแก้ไขความขัดแย้งที่อาจมี
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เปรียบเทียบแบบราบกับแบบลำดับชั้น
แมป-รีดิวซ์แบบราบเทียบกับการสรุปแบบลำดับชั้น:
- แบบราบ: เรียบง่ายกว่า ไม่สนใจโครงสร้างเอกสาร และเหมาะกว่าสำหรับเอกสารที่มีรูปแบบสม่ำเสมอ (บทความข่าว)
- แบบลำดับชั้น: เคารพโครงสร้าง ช่วยให้เจาะลึกได้ และให้ความต่อเนื่องที่ดีกว่าสำหรับเอกสารที่มีโครงสร้าง
ในทางปฏิบัติ ให้ใช้ทั้งสองแบบร่วมกัน: ใช้แมป-รีดิวซ์แบบราบภายในแต่ละบท (ซึ่งมีหลายหน้า) แล้วใช้การสรุปแบบลำดับชั้นระหว่างบท วิธีนี้เป็นแนวทางที่มีความทนทานที่สุดสำหรับเอกสารในโลกจริง
ตรวจสอบความรู้
ในการสรุปแบบลำดับชั้น กระบวนการสรุปดำเนินผ่านต้นไม้เอกสารในทิศทางใด?
สรุป: การสรุปแบบลำดับชั้น
การสรุปแบบลำดับชั้นเลียนแบบโครงสร้างเอกสารเพื่อให้ได้ผลลัพธ์ที่ดีกว่า:
- จำลองเอกสารเป็นต้นไม้: หน้า → ส่วน → บท → เอกสาร
- สรุปจากล่างขึ้นบน: เริ่มจากโหนดใบและจบที่ราก
- แต่ละระดับใช้การบีบอัดแบบก้าวหน้าเพื่อรักษาความต่อเนื่อง
- เหมาะที่สุดสำหรับหนังสือ บทความวิจัย และสัญญาทางกฎหมายที่มีโครงสร้างลำดับชั้นชัดเจน
- จัดเก็บต้นไม้ทั้งหมดเพื่อให้รองรับการดึงข้อมูลแบบเจาะลึกและการอัปเดตแบบเพิ่มทีละส่วน
บทเรียนถัดไป: การรักษาบริบทข้ามชิ้นข้อความด้วยการซ้อนทับและบทสรุปสะสม
คำถามที่พบบ่อย
บทเรียน “การสรุปแบบลำดับชั้น” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสรุปแบบลำดับชั้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสรุปแบบลำดับชั้น”
การบีบอัดแบบค่อยเป็นค่อยไป: บท → ส่วน → สรุปเอกสาร คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การสรุปแบบลำดับชั้น” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม
ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กลยุทธ์การแบ่งข้อความยาวเป็นส่วน
- รูปแบบการสรุปแบบ Map-Reduce
- การสรุปแบบลำดับชั้น
- การรักษาบริบทระหว่างส่วนต่าง ๆ