---
read_when:
    - คุณต้องการทำความเข้าใจการทำ Compaction อัตโนมัติและ /compact
    - คุณกำลังดีบักเซสชันยาวที่ถึงขีดจำกัดของบริบท
summary: OpenClaw สรุปบทสนทนายาว ๆ อย่างไรเพื่อให้อยู่ภายในขีดจำกัดของโมเดล
title: Compaction
x-i18n:
    generated_at: "2026-05-02T10:13:19Z"
    model: gpt-5.5
    provider: openai
    source_hash: 2f8e6f372508a0f5421654d3e2a694695eb8a7fda4e3928159bf8f08b2a2156b
    source_path: concepts/compaction.md
    workflow: 16
---

โมเดลทุกตัวมีหน้าต่างบริบท: จำนวนโทเค็นสูงสุดที่โมเดลสามารถประมวลผลได้ เมื่อบทสนทนาเข้าใกล้ขีดจำกัดนั้น OpenClaw จะ **compact** ข้อความเก่าให้เป็นสรุป เพื่อให้แชตดำเนินต่อได้

## วิธีทำงาน

1. รอบบทสนทนาเก่าจะถูกสรุปเป็นรายการแบบกะทัดรัด
2. สรุปจะถูกบันทึกในทรานสคริปต์ของเซสชัน
3. ข้อความล่าสุดจะถูกเก็บไว้ครบถ้วน

เมื่อ OpenClaw แบ่งประวัติเป็นชิ้นส่วนสำหรับ Compaction ระบบจะเก็บการเรียกเครื่องมือของผู้ช่วยไว้คู่กับรายการ `toolResult` ที่ตรงกัน หากจุดแบ่งตกอยู่ภายในบล็อกเครื่องมือ OpenClaw จะเลื่อนขอบเขตเพื่อให้คู่นั้นอยู่ด้วยกัน และรักษาส่วนท้ายปัจจุบันที่ยังไม่ถูกสรุปไว้

ประวัติบทสนทนาทั้งหมดยังคงอยู่บนดิสก์ Compaction เปลี่ยนเฉพาะสิ่งที่โมเดลเห็นในรอบถัดไปเท่านั้น

## Compaction อัตโนมัติ

Compaction อัตโนมัติเปิดอยู่ตามค่าเริ่มต้น ระบบจะทำงานเมื่อเซสชันใกล้ถึงขีดจำกัดบริบท หรือเมื่อโมเดลส่งข้อผิดพลาดบริบทล้นกลับมา (ในกรณีนั้น OpenClaw จะ compact แล้วลองใหม่)

คุณจะเห็น:

- `🧹 Auto-compaction complete` ในโหมด verbose
- `/status` แสดง `🧹 Compactions: <count>`

<Info>
ก่อน compact OpenClaw จะเตือนเอเจนต์โดยอัตโนมัติให้บันทึกโน้ตสำคัญลงในไฟล์ [memory](/th/concepts/memory) วิธีนี้ช่วยป้องกันการสูญเสียบริบท
</Info>

<AccordionGroup>
  <Accordion title="ลายเซ็นภาวะล้นที่รู้จัก">
    OpenClaw ตรวจจับบริบทล้นจากรูปแบบข้อผิดพลาดของผู้ให้บริการเหล่านี้:

    - `request_too_large`
    - `context length exceeded`
    - `input exceeds the maximum number of tokens`
    - `input token count exceeds the maximum number of input tokens`
    - `input is too long for the model`
    - `ollama error: context length exceeded`

  </Accordion>
</AccordionGroup>

## Compaction ด้วยตนเอง

พิมพ์ `/compact` ในแชตใดก็ได้เพื่อบังคับทำ Compaction เพิ่มคำสั่งเพื่อชี้นำสรุป:

```
/compact Focus on the API design decisions
```

เมื่อตั้งค่า `agents.defaults.compaction.keepRecentTokens` แล้ว Compaction ด้วยตนเองจะเคารพจุดตัดของ Pi นั้น และเก็บส่วนท้ายล่าสุดไว้ในบริบทที่สร้างใหม่ หากไม่มีงบประมาณการเก็บรักษาที่ระบุชัดเจน Compaction ด้วยตนเองจะทำงานเหมือนจุดตรวจแบบเด็ดขาด และดำเนินต่อจากสรุปใหม่เพียงอย่างเดียว

## การกำหนดค่า

กำหนดค่า Compaction ใต้ `agents.defaults.compaction` ใน `openclaw.json` ของคุณ ตัวปรับที่ใช้บ่อยที่สุดแสดงไว้ด้านล่าง สำหรับเอกสารอ้างอิงฉบับเต็ม ดู [เจาะลึกการจัดการเซสชัน](/th/reference/session-management-compaction)

### การใช้โมเดลอื่น

ตามค่าเริ่มต้น Compaction ใช้โมเดลหลักของเอเจนต์ ตั้งค่า `agents.defaults.compaction.model` เพื่อมอบหมายการสรุปให้โมเดลที่มีความสามารถสูงกว่าหรือเฉพาะทางกว่า การ override รับสตริง `provider/model-id` ใดก็ได้:

```json
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-6"
      }
    }
  }
}
```

สิ่งนี้ทำงานกับโมเดลภายในเครื่องได้ด้วย เช่น โมเดล Ollama ตัวที่สองที่อุทิศให้กับการสรุป:

```json
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "ollama/llama3.1:8b"
      }
    }
  }
}
```

เมื่อไม่ได้ตั้งค่า Compaction จะเริ่มด้วยโมเดลเซสชันที่ใช้งานอยู่ หากการสรุปล้มเหลวด้วยข้อผิดพลาดจากผู้ให้บริการที่มีสิทธิ์ใช้โมเดลสำรอง OpenClaw จะลองความพยายาม Compaction นั้นใหม่ผ่านห่วงโซ่โมเดลสำรองที่มีอยู่ของเซสชัน ตัวเลือกสำรองเป็นแบบชั่วคราวและจะไม่ถูกเขียนกลับไปยังสถานะเซสชัน การ override `agents.defaults.compaction.model` ที่ระบุชัดเจนยังคงตรงตัว และไม่สืบทอดห่วงโซ่สำรองของเซสชัน

### การรักษาตัวระบุ

การสรุป Compaction จะรักษาตัวระบุทึบแสงไว้ตามค่าเริ่มต้น (`identifierPolicy: "strict"`) override ด้วย `identifierPolicy: "off"` เพื่อปิดใช้งาน หรือใช้ `identifierPolicy: "custom"` พร้อม `identifierInstructions` สำหรับคำแนะนำแบบกำหนดเอง

### ตัวคุมไบต์ของทรานสคริปต์ที่ใช้งานอยู่

เมื่อตั้งค่า `agents.defaults.compaction.maxActiveTranscriptBytes` แล้ว OpenClaw จะเรียกใช้ Compaction ภายในเครื่องตามปกติก่อนการรัน หาก JSONL ที่ใช้งานอยู่มีขนาดถึงค่านั้น สิ่งนี้มีประโยชน์สำหรับเซสชันที่ทำงานยาวนาน ซึ่งการจัดการบริบทฝั่งผู้ให้บริการอาจทำให้บริบทโมเดลยังอยู่ในสภาพดี ขณะที่ทรานสคริปต์ภายในเครื่องเติบโตต่อไปเรื่อยๆ ระบบจะไม่แยกไบต์ JSONL ดิบ แต่จะขอให้ไปป์ไลน์ Compaction ปกติสร้างสรุปเชิงความหมาย

<Warning>
ตัวคุมไบต์ต้องใช้ `truncateAfterCompaction: true` หากไม่มีการหมุนเวียนทรานสคริปต์ ไฟล์ที่ใช้งานอยู่จะไม่เล็กลง และตัวคุมจะยังไม่ทำงาน
</Warning>

### ทรานสคริปต์ตัวสืบทอด

เมื่อเปิดใช้ `agents.defaults.compaction.truncateAfterCompaction` OpenClaw จะไม่เขียนทับทรานสคริปต์เดิมแบบ in place แต่จะสร้างทรานสคริปต์ตัวสืบทอดที่ใช้งานอยู่ใหม่จากสรุป Compaction, สถานะที่รักษาไว้ และส่วนท้ายที่ยังไม่ถูกสรุป จากนั้นเก็บ JSONL ก่อนหน้าไว้เป็นแหล่งจุดตรวจที่ถูกเก็บถาวร
ทรานสคริปต์ตัวสืบทอดยังลบรอบผู้ใช้ยาวๆ ที่ซ้ำกันแบบตรงตัวซึ่งมาถึงภายในหน้าต่างลองใหม่สั้นๆ ออกด้วย เพื่อไม่ให้พายุการลองใหม่ของช่องทางถูกพาเข้าสู่ทรานสคริปต์ที่ใช้งานอยู่ถัดไปหลัง Compaction

จุดตรวจก่อน Compaction จะถูกเก็บไว้เฉพาะขณะที่ยังต่ำกว่าขีดจำกัดขนาดจุดตรวจของ OpenClaw เท่านั้น ทรานสคริปต์ที่ใช้งานอยู่ซึ่งมีขนาดเกินยังคงถูก compact แต่ OpenClaw จะข้ามสแนปช็อต debug ขนาดใหญ่แทนการเพิ่มการใช้ดิสก์เป็นสองเท่า

### การแจ้งเตือน Compaction

ตามค่าเริ่มต้น Compaction ทำงานแบบเงียบ ตั้งค่า `notifyUser` เพื่อแสดงข้อความสถานะสั้นๆ เมื่อ Compaction เริ่มต้นและเสร็จสิ้น:

```json5
{
  agents: {
    defaults: {
      compaction: {
        notifyUser: true,
      },
    },
  },
}
```

### การ flush หน่วยความจำ

ก่อน Compaction OpenClaw สามารถรันรอบ **silent memory flush** เพื่อเก็บโน้ตที่คงทนลงดิสก์ ตั้งค่า `agents.defaults.compaction.memoryFlush.model` เมื่อรอบดูแลระบบนี้ควรใช้โมเดลภายในเครื่องแทนโมเดลบทสนทนาที่ใช้งานอยู่:

```json
{
  "agents": {
    "defaults": {
      "compaction": {
        "memoryFlush": {
          "model": "ollama/qwen3:8b"
        }
      }
    }
  }
}
```

การ override โมเดล memory-flush เป็นแบบตรงตัว และไม่สืบทอดห่วงโซ่สำรองของเซสชันที่ใช้งานอยู่ ดูรายละเอียดและการกำหนดค่าได้ที่ [หน่วยความจำ](/th/concepts/memory)

## ผู้ให้บริการ Compaction แบบเสียบเปลี่ยนได้

Plugins สามารถลงทะเบียนผู้ให้บริการ Compaction แบบกำหนดเองผ่าน `registerCompactionProvider()` บน API ของ Plugin เมื่อมีการลงทะเบียนและกำหนดค่าผู้ให้บริการแล้ว OpenClaw จะมอบหมายการสรุปให้ผู้ให้บริการนั้นแทนไปป์ไลน์ LLM ในตัว

หากต้องการใช้ผู้ให้บริการที่ลงทะเบียนแล้ว ให้ตั้งค่า id ของผู้ให้บริการนั้นในคอนฟิกของคุณ:

```json
{
  "agents": {
    "defaults": {
      "compaction": {
        "provider": "my-provider"
      }
    }
  }
}
```

การตั้งค่า `provider` จะบังคับ `mode: "safeguard"` โดยอัตโนมัติ ผู้ให้บริการจะได้รับคำสั่ง Compaction และนโยบายการรักษาตัวระบุเดียวกับเส้นทางในตัว และ OpenClaw ยังคงรักษาบริบทส่วนต่อท้ายของรอบล่าสุดและรอบที่ถูกแบ่งหลังผลลัพธ์จากผู้ให้บริการ

<Note>
หากผู้ให้บริการล้มเหลวหรือส่งผลลัพธ์ว่างกลับมา OpenClaw จะถอยกลับไปใช้การสรุปด้วย LLM ในตัว
</Note>

## Compaction เทียบกับการตัดทอน

|                  | Compaction                    | การตัดทอน                       |
| ---------------- | ----------------------------- | -------------------------------- |
| **ทำอะไร**       | สรุปบทสนทนาเก่า              | ตัดผลลัพธ์เครื่องมือเก่า         |
| **ถูกบันทึกไหม?** | ใช่ (ในทรานสคริปต์เซสชัน)    | ไม่ (เฉพาะในหน่วยความจำ ต่อคำขอ) |
| **ขอบเขต**       | บทสนทนาทั้งหมด               | เฉพาะผลลัพธ์เครื่องมือ           |

[การตัดทอนเซสชัน](/th/concepts/session-pruning) เป็นส่วนเสริมที่เบากว่า ซึ่งตัดเอาต์พุตเครื่องมือโดยไม่ต้องสรุป

## การแก้ไขปัญหา

**compact บ่อยเกินไปหรือไม่?** หน้าต่างบริบทของโมเดลอาจเล็ก หรือเอาต์พุตเครื่องมืออาจมีขนาดใหญ่ ลองเปิดใช้ [การตัดทอนเซสชัน](/th/concepts/session-pruning)

**บริบทดูเก่าหลัง Compaction หรือไม่?** ใช้ `/compact Focus on <topic>` เพื่อชี้นำสรุป หรือเปิดใช้ [memory flush](/th/concepts/memory) เพื่อให้โน้ตยังคงอยู่

**ต้องการเริ่มใหม่ทั้งหมดหรือไม่?** `/new` เริ่มเซสชันใหม่โดยไม่ทำ Compaction

สำหรับการกำหนดค่าขั้นสูง (โทเค็นสำรอง การรักษาตัวระบุ เครื่องมือบริบทแบบกำหนดเอง Compaction ฝั่งเซิร์ฟเวอร์ OpenAI) ดู [เจาะลึกการจัดการเซสชัน](/th/reference/session-management-compaction)

## ที่เกี่ยวข้อง

- [เซสชัน](/th/concepts/session): การจัดการเซสชันและวงจรชีวิต
- [การตัดทอนเซสชัน](/th/concepts/session-pruning): การตัดผลลัพธ์เครื่องมือ
- [บริบท](/th/concepts/context): วิธีสร้างบริบทสำหรับรอบของเอเจนต์
- [Hooks](/th/automation/hooks): hook วงจรชีวิตของ Compaction (`before_compaction`, `after_compaction`)
