---
read_when:
    - คุณกำลังดีบักการปฏิเสธคำขอของผู้ให้บริการที่เกี่ยวข้องกับรูปแบบของทรานสคริปต์
    - คุณกำลังเปลี่ยนตรรกะการทำความสะอาดบันทึกการสนทนาหรือการซ่อมแซมการเรียกเครื่องมือ
    - คุณกำลังตรวจสอบความไม่ตรงกันของ ID การเรียกใช้เครื่องมือระหว่างผู้ให้บริการ
summary: 'ข้อมูลอ้างอิง: กฎการล้างข้อมูลและการซ่อมแซมบันทึกบทสนทนาเฉพาะผู้ให้บริการ'
title: การดูแลความสะอาดของบันทึกการสนทนา
x-i18n:
    generated_at: "2026-05-10T19:57:19Z"
    model: gpt-5.5
    provider: openai
    source_hash: 197081fe829cf6463e84c5ead9b4c631a8088e771e68163a35ed39d9efbdbf6a
    source_path: reference/transcript-hygiene.md
    workflow: 16
---

OpenClaw ใช้ **การแก้ไขเฉพาะผู้ให้บริการ** กับบันทึกบทสนทนาก่อนการรัน (การสร้างบริบทของโมเดล) ส่วนใหญ่เป็นการปรับแต่ง **ในหน่วยความจำ** เพื่อให้ตรงตามข้อกำหนดที่เข้มงวดของผู้ให้บริการ นอกจากนี้ยังอาจมีรอบการซ่อมแซมไฟล์เซสชันแยกต่างหากที่เขียน JSONL ที่จัดเก็บไว้ใหม่ก่อนโหลดเซสชัน แต่จะทำเฉพาะกับบรรทัดที่มีรูปแบบผิดพลาดหรือเทิร์นที่บันทึกถาวรไว้ซึ่งไม่ใช่ระเบียนถาวรที่ถูกต้อง คำตอบของผู้ช่วยที่ส่งแล้วจะถูกเก็บรักษาไว้บนดิสก์ การลบ assistant-prefill เฉพาะผู้ให้บริการจะเกิดขึ้นเฉพาะขณะสร้างเพย์โหลดขาออกเท่านั้น เมื่อเกิดการซ่อมแซม ไฟล์เดิมจะถูกสำรองไว้ข้างไฟล์เซสชัน

ขอบเขตรวมถึง:

- บริบทพรอมป์ต์เฉพาะรันไทม์ไม่เข้าไปอยู่ในเทิร์นบันทึกบทสนทนาที่ผู้ใช้เห็น
- การทำให้ id ของการเรียกเครื่องมือปลอดภัย
- การตรวจสอบอินพุตของการเรียกเครื่องมือ
- การซ่อมแซมการจับคู่ผลลัพธ์เครื่องมือ
- การตรวจสอบความถูกต้อง / การจัดลำดับเทิร์น
- การล้างลายเซ็นความคิด
- การล้างลายเซ็นการคิด
- การทำให้เพย์โหลดรูปภาพปลอดภัย
- การล้างบล็อกข้อความว่างก่อนเล่นซ้ำกับผู้ให้บริการ
- การติดแท็กแหล่งที่มาของอินพุตผู้ใช้ (สำหรับพรอมป์ต์ที่กำหนดเส้นทางข้ามเซสชัน)
- การซ่อมแซมเทิร์นข้อผิดพลาดผู้ช่วยว่างสำหรับการเล่นซ้ำ Bedrock Converse

หากคุณต้องการรายละเอียดพื้นที่จัดเก็บบันทึกบทสนทนา โปรดดู:

- [เจาะลึกการจัดการเซสชัน](/th/reference/session-management-compaction)

---

## กฎสากล: บริบทรันไทม์ไม่ใช่บันทึกบทสนทนาของผู้ใช้

บริบทรันไทม์/ระบบสามารถเพิ่มเข้าไปในพรอมป์ต์ของโมเดลสำหรับเทิร์นหนึ่งได้ แต่ไม่ใช่เนื้อหาที่ผู้ใช้ปลายทางเขียน OpenClaw เก็บเนื้อหาพรอมป์ต์สำหรับมุมมองบันทึกบทสนทนาแยกต่างหากสำหรับการตอบกลับของ Gateway, followup ที่อยู่ในคิว, ACP, CLI และการรัน Pi แบบฝัง เทิร์นผู้ใช้ที่มองเห็นได้ซึ่งถูกจัดเก็บจะใช้เนื้อหาบันทึกบทสนทนานั้นแทนพรอมป์ต์ที่เติมบริบทรันไทม์แล้ว

สำหรับเซสชันดั้งเดิมที่เคยบันทึก wrapper รันไทม์ไว้แล้ว พื้นผิวประวัติ Gateway จะใช้การฉายภาพเพื่อแสดงผลก่อนคืนข้อความให้กับไคลเอนต์ WebChat, TUI, REST หรือ SSE

---

## ตำแหน่งที่ทำงาน

สุขอนามัยบันทึกบทสนทนาทั้งหมดถูกรวมศูนย์ไว้ในรันเนอร์แบบฝัง:

- การเลือกนโยบาย: `src/agents/transcript-policy.ts`
- การใช้งานการทำให้ปลอดภัย/การซ่อมแซม: `sanitizeSessionHistory` ใน `src/agents/pi-embedded-runner/replay-history.ts`

นโยบายใช้ `provider`, `modelApi` และ `modelId` เพื่อเลือกว่าจะใช้อะไร

แยกจากสุขอนามัยบันทึกบทสนทนา ไฟล์เซสชันจะถูกซ่อมแซม (ถ้าจำเป็น) ก่อนโหลด:

- `repairSessionFileIfNeeded` ใน `src/agents/session-file-repair.ts`
- เรียกจาก `run/attempt.ts` และ `compact.ts` (รันเนอร์แบบฝัง)

---

## กฎสากล: การทำให้รูปภาพปลอดภัย

เพย์โหลดรูปภาพจะถูกทำให้ปลอดภัยเสมอเพื่อป้องกันการถูกปฏิเสธฝั่งผู้ให้บริการเนื่องจากขีดจำกัดขนาด (ย่อขนาด/บีบอัดรูปภาพ base64 ที่ใหญ่เกินไปใหม่)

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

การใช้งาน:

- `sanitizeSessionMessagesImages` ใน `src/agents/pi-embedded-helpers/images.ts`
- `sanitizeContentBlocksImages` ใน `src/agents/tool-images.ts`
- ด้านสูงสุดของรูปภาพกำหนดค่าได้ผ่าน `agents.defaults.imageMaxDimensionPx` (ค่าเริ่มต้น: `1200`)
- บล็อกข้อความว่างจะถูกลบขณะที่รอบนี้เดินผ่านเนื้อหาสำหรับเล่นซ้ำ เทิร์นผู้ช่วยที่กลายเป็นว่างจะถูกตัดออกจากสำเนาสำหรับเล่นซ้ำ ส่วนเทิร์นผู้ใช้และผลลัพธ์เครื่องมือที่กลายเป็นว่างจะได้รับ placeholder เนื้อหาที่ถูกละไว้ซึ่งไม่ว่าง

---

## กฎสากล: การเรียกเครื่องมือที่มีรูปแบบผิดพลาด

บล็อกการเรียกเครื่องมือของผู้ช่วยที่ขาดทั้ง `input` และ `arguments` จะถูกตัดออกก่อนสร้างบริบทโมเดล วิธีนี้ป้องกันการถูกปฏิเสธจากผู้ให้บริการจากการเรียกเครื่องมือที่ถูกบันทึกถาวรไว้บางส่วน (ตัวอย่างเช่น หลังความล้มเหลวจาก rate limit)

การใช้งาน:

- `sanitizeToolCallInputs` ใน `src/agents/session-transcript-repair.ts`
- ใช้ใน `sanitizeSessionHistory` ใน `src/agents/pi-embedded-runner/replay-history.ts`

---

## กฎสากล: แหล่งที่มาของอินพุตข้ามเซสชัน

เมื่อ agent ส่งพรอมป์ต์เข้าไปยังอีกเซสชันผ่าน `sessions_send` (รวมถึงขั้นตอนตอบกลับ/ประกาศระหว่าง agent) OpenClaw จะบันทึกเทิร์นผู้ใช้ที่สร้างขึ้นพร้อมกับ:

- `message.provenance.kind = "inter_session"`

OpenClaw ยังเติม marker `[Inter-session message ... isUser=false]` ในเทิร์นเดียวกันไว้ก่อนข้อความพรอมป์ต์ที่ถูกกำหนดเส้นทาง เพื่อให้การเรียกโมเดลที่กำลังทำงานแยกแยะเอาต์พุตจากเซสชันอื่นออกจากคำสั่งผู้ใช้ปลายทางภายนอกได้ marker นี้รวมเซสชันต้นทาง ช่องทาง และเครื่องมือเมื่อมี บันทึกบทสนทนายังคงใช้ `role: "user"` เพื่อความเข้ากันได้กับผู้ให้บริการ แต่ทั้งข้อความที่มองเห็นได้และเมทาดาทาแหล่งที่มาจะระบุว่าเทิร์นนั้นเป็นข้อมูลข้ามเซสชัน

ระหว่างสร้างบริบทใหม่ OpenClaw จะใช้ marker เดียวกันกับเทิร์นผู้ใช้ข้ามเซสชันที่บันทึกถาวรไว้เก่ากว่าซึ่งมีเฉพาะเมทาดาทาแหล่งที่มา

---

## ตารางผู้ให้บริการ (พฤติกรรมปัจจุบัน)

**OpenAI / OpenAI Codex**

- ทำให้รูปภาพปลอดภัยเท่านั้น
- ตัดลายเซ็น reasoning กำพร้าออก (รายการ reasoning เดี่ยวที่ไม่มีบล็อกเนื้อหาตามมา) สำหรับบันทึกบทสนทนา OpenAI Responses/Codex และตัด reasoning ของ OpenAI ที่เล่นซ้ำได้หลังสลับเส้นทางโมเดล
- รักษาเพย์โหลดรายการ reasoning ของ OpenAI Responses ที่เล่นซ้ำได้ รวมถึงรายการสรุปว่างที่เข้ารหัสไว้ เพื่อให้การเล่นซ้ำแบบแมนนวล/WebSocket คงสถานะ `rs_*` ที่จำเป็นไว้คู่กับรายการเอาต์พุตผู้ช่วย
- Native ChatGPT Codex Responses ทำตามความเท่าเทียมของ wire กับ Codex โดยเล่นซ้ำเพย์โหลด reasoning/message/function ของ Responses ก่อนหน้าโดยไม่มี ID รายการก่อนหน้า ขณะคง `prompt_cache_key` ของเซสชันไว้
- ไม่มีการทำให้ id ของการเรียกเครื่องมือปลอดภัย
- การซ่อมแซมการจับคู่ผลลัพธ์เครื่องมืออาจย้ายเอาต์พุตจริงที่จับคู่ได้และสังเคราะห์เอาต์พุต `aborted` สไตล์ Codex สำหรับการเรียกเครื่องมือที่ขาดไป
- ไม่มีการตรวจสอบความถูกต้องหรือจัดลำดับเทิร์นใหม่
- เอาต์พุตเครื่องมือในตระกูล OpenAI Responses ที่ขาดหายไปจะถูกสังเคราะห์เป็น `aborted` เพื่อให้ตรงกับการปรับรูปแบบการเล่นซ้ำของ Codex
- ไม่มีการลบลายเซ็นความคิด

**OpenAI-compatible Chat Completions**

- บล็อก thinking/reasoning ของผู้ช่วยในอดีตจะถูกลบก่อนเล่นซ้ำ เพื่อให้เซิร์ฟเวอร์ที่เข้ากันได้กับ OpenAI แบบโลคัลและแบบพร็อกซีไม่ได้รับฟิลด์ reasoning ของเทิร์นก่อนหน้า เช่น `reasoning` หรือ `reasoning_content`
- การต่อเนื่องของการเรียกเครื่องมือในเทิร์นเดียวกันปัจจุบันจะคงบล็อก reasoning ของผู้ช่วยแนบกับการเรียกเครื่องมือจนกว่าผลลัพธ์เครื่องมือจะถูกเล่นซ้ำแล้ว
- ข้อยกเว้นที่ผู้ให้บริการเป็นเจ้าของสามารถเลือกไม่ใช้ได้เมื่อโปรโตคอล wire ของตนต้องการเมทาดาทา reasoning ที่เล่นซ้ำ

**Google (Generative AI / Gemini CLI / Antigravity)**

- การทำให้ id ของการเรียกเครื่องมือปลอดภัย: ตัวอักษรและตัวเลขอย่างเข้มงวด
- การซ่อมแซมการจับคู่ผลลัพธ์เครื่องมือและผลลัพธ์เครื่องมือสังเคราะห์
- การตรวจสอบความถูกต้องของเทิร์น (การสลับเทิร์นสไตล์ Gemini)
- การแก้ไขลำดับเทิร์นของ Google (เติม bootstrap ผู้ใช้ขนาดเล็กไว้ข้างหน้าหากประวัติเริ่มด้วยผู้ช่วย)
- Antigravity Claude: ปรับลายเซ็น thinking ให้เป็นมาตรฐาน; ตัดบล็อก thinking ที่ไม่มีลายเซ็นออก

**Anthropic / Minimax (เข้ากันได้กับ Anthropic)**

- การซ่อมแซมการจับคู่ผลลัพธ์เครื่องมือและผลลัพธ์เครื่องมือสังเคราะห์
- การตรวจสอบความถูกต้องของเทิร์น (รวมเทิร์นผู้ใช้ที่ต่อเนื่องกันเพื่อให้ตรงตามการสลับอย่างเข้มงวด)
- เทิร์น assistant prefill ท้ายสุดจะถูกลบออกจากเพย์โหลด Anthropic Messages ขาออกเมื่อเปิดใช้ thinking รวมถึงเส้นทาง Cloudflare AI Gateway
- บล็อก thinking ที่มีลายเซ็นสำหรับเล่นซ้ำหายไป ว่าง หรือเป็นช่องว่างจะถูกลบก่อนแปลงสำหรับผู้ให้บริการ หากทำให้เทิร์นผู้ช่วยว่าง OpenClaw จะคงรูปทรงเทิร์นไว้ด้วยข้อความ omitted-reasoning ที่ไม่ว่าง
- เทิร์นผู้ช่วย thinking-only รุ่นเก่าที่ต้องถูกลบจะถูกแทนที่ด้วยข้อความ omitted-reasoning ที่ไม่ว่าง เพื่อให้อะแดปเตอร์ผู้ให้บริการไม่ตัดเทิร์นเล่นซ้ำออก

**Amazon Bedrock (Converse API)**

- เทิร์นข้อผิดพลาดสตรีมของผู้ช่วยที่ว่างจะถูกซ่อมแซมเป็นบล็อกข้อความสำรองที่ไม่ว่างก่อนเล่นซ้ำ Bedrock Converse ปฏิเสธข้อความผู้ช่วยที่มี `content: []` ดังนั้นเทิร์นผู้ช่วยที่บันทึกถาวรไว้ซึ่งมี `stopReason: "error"` และเนื้อหาว่างจะถูกซ่อมแซมบนดิสก์ก่อนโหลดด้วย
- เทิร์นข้อผิดพลาดสตรีมของผู้ช่วยที่มีเฉพาะบล็อกข้อความว่างจะถูกตัดออกจากสำเนาเล่นซ้ำในหน่วยความจำ แทนที่จะเล่นซ้ำบล็อกว่างที่ไม่ถูกต้อง
- บล็อก thinking ของ Claude ที่มีลายเซ็นสำหรับเล่นซ้ำหายไป ว่าง หรือเป็นช่องว่างจะถูกลบก่อนเล่นซ้ำ Converse หากทำให้เทิร์นผู้ช่วยว่าง OpenClaw จะคงรูปทรงเทิร์นไว้ด้วยข้อความ omitted-reasoning ที่ไม่ว่าง
- เทิร์นผู้ช่วย thinking-only รุ่นเก่าที่ต้องถูกลบจะถูกแทนที่ด้วยข้อความ omitted-reasoning ที่ไม่ว่าง เพื่อให้การเล่นซ้ำ Converse คงรูปทรงเทิร์นอย่างเข้มงวด
- การเล่นซ้ำกรองเทิร์นผู้ช่วยที่เป็น delivery-mirror ของ OpenClaw และเทิร์นผู้ช่วยที่ Gateway แทรกเข้ามา
- การทำให้รูปภาพปลอดภัยใช้ผ่านกฎสากล

**Mistral (รวมถึงการตรวจจับตาม model-id)**

- การทำให้ id ของการเรียกเครื่องมือปลอดภัย: strict9 (ตัวอักษรและตัวเลข ความยาว 9)

**OpenRouter Gemini**

- การล้างลายเซ็นความคิด: ลบค่า `thought_signature` ที่ไม่ใช่ base64 (คง base64 ไว้)

**OpenRouter Anthropic**

- เทิร์น assistant prefill ท้ายสุดจะถูกลบออกจากเพย์โหลดโมเดล Anthropic ของ OpenRouter ที่เข้ากันได้กับ OpenAI และได้รับการยืนยันแล้วเมื่อเปิดใช้ reasoning ให้ตรงกับพฤติกรรมการเล่นซ้ำของ Anthropic โดยตรงและ Cloudflare Anthropic

**อย่างอื่นทั้งหมด**

- ทำให้รูปภาพปลอดภัยเท่านั้น

---

## พฤติกรรมในอดีต (ก่อน 2026.1.22)

ก่อนรีลีส 2026.1.22 OpenClaw ใช้สุขอนามัยบันทึกบทสนทนาหลายชั้น:

- **ส่วนขยาย transcript-sanitize** ทำงานทุกครั้งที่สร้างบริบทและสามารถ:
  - ซ่อมแซมการจับคู่การใช้เครื่องมือ/ผลลัพธ์
  - ทำให้ id ของการเรียกเครื่องมือปลอดภัย (รวมถึงโหมดไม่เข้มงวดที่คง `_`/`-` ไว้)
- รันเนอร์ยังทำการทำให้ปลอดภัยเฉพาะผู้ให้บริการด้วย ซึ่งทำงานซ้ำซ้อน
- มีการกลายพันธุ์เพิ่มเติมเกิดขึ้นนอกนโยบายผู้ให้บริการ รวมถึง:
  - ลบแท็ก `<final>` ออกจากข้อความผู้ช่วยก่อนบันทึกถาวร
  - ตัดเทิร์นข้อผิดพลาดผู้ช่วยที่ว่างออก
  - ตัดเนื้อหาผู้ช่วยหลังการเรียกเครื่องมือ

ความซับซ้อนนี้ทำให้เกิดรีเกรสชันข้ามผู้ให้บริการ (โดยเฉพาะการจับคู่ `call_id|fc_id` ของ `openai-responses`) การล้างใน 2026.1.22 ลบส่วนขยายออก รวมตรรกะไว้ในรันเนอร์ และทำให้ OpenAI **ไม่แตะต้อง** นอกเหนือจากการทำให้รูปภาพปลอดภัย

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

- [การจัดการเซสชัน](/th/concepts/session)
- [การตัดแต่งเซสชัน](/th/concepts/session-pruning)
