Active Memory คือ sub-agent หน่วยความจำแบบ blocking ที่เป็นตัวเลือกเสริมและอยู่ภายใต้การดูแลของ Plugin ซึ่งทำงาน ก่อนการตอบกลับหลักสำหรับเซสชันสนทนาที่เข้าเกณฑ์ สิ่งนี้มีอยู่เพราะระบบหน่วยความจำส่วนใหญ่มีความสามารถสูงแต่เป็นแบบตอบสนองหลังเหตุการณ์ ระบบเหล่านั้นพึ่งพา agent หลักให้ตัดสินใจว่าจะค้นหาหน่วยความจำเมื่อใด หรือพึ่งพาผู้ใช้ให้พูดอย่าง เช่น “remember this” หรือ “search memory” เมื่อถึงจุดนั้น ช่วงเวลาที่หน่วยความจำจะ ทำให้คำตอบรู้สึกเป็นธรรมชาติก็ผ่านไปแล้ว Active Memory ให้ระบบมีโอกาสหนึ่งครั้งที่มีขอบเขตชัดเจนในการดึงหน่วยความจำที่เกี่ยวข้องขึ้นมา ก่อนสร้างคำตอบหลักDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
เริ่มต้นอย่างรวดเร็ว
วางสิ่งนี้ลงในopenclaw.json สำหรับการตั้งค่าเริ่มต้นที่ปลอดภัย — เปิด Plugin, จำกัดขอบเขตที่
agent main, เฉพาะเซสชันข้อความโดยตรง, สืบทอดโมเดลของเซสชัน
เมื่อมีให้ใช้:
plugins.entries.active-memory.enabled: trueเปิดใช้งาน Pluginconfig.agents: ["main"]เลือกให้เฉพาะ agentmainใช้ Active Memoryconfig.allowedChatTypes: ["direct"]จำกัดขอบเขตไปที่เซสชันข้อความโดยตรง (ต้องเลือกเข้ากลุ่ม/ช่องอย่างชัดเจน)config.model(ไม่บังคับ) ตรึงโมเดล recall เฉพาะไว้; หากไม่ตั้งค่าจะสืบทอดโมเดลของเซสชันปัจจุบันconfig.modelFallbackใช้เฉพาะเมื่อไม่สามารถ resolve โมเดลที่ระบุชัดเจนหรือสืบทอดมาได้config.promptStyle: "balanced"คือค่าเริ่มต้นสำหรับโหมดrecent- Active Memory ยังทำงานเฉพาะกับเซสชันแชตถาวรแบบโต้ตอบที่เข้าเกณฑ์เท่านั้น
คำแนะนำด้านความเร็ว
การตั้งค่าที่ง่ายที่สุดคือปล่อยconfig.model ให้ไม่ได้ตั้งค่า แล้วให้ Active Memory ใช้
โมเดลเดียวกับที่คุณใช้อยู่แล้วสำหรับการตอบกลับปกติ นี่คือค่าเริ่มต้นที่ปลอดภัยที่สุด
เพราะทำตามผู้ให้บริการ, การยืนยันตัวตน, และค่ากำหนดโมเดลที่มีอยู่ของคุณ
หากต้องการให้ Active Memory รู้สึกเร็วขึ้น ให้ใช้โมเดล inference เฉพาะ
แทนการยืมโมเดลแชตหลัก คุณภาพของ recall สำคัญ แต่ latency
สำคัญกว่าสำหรับเส้นทางคำตอบหลัก และพื้นที่เครื่องมือของ Active Memory
แคบ (เรียกใช้เฉพาะเครื่องมือ memory recall ที่มีอยู่)
ตัวเลือกโมเดลเร็วที่เหมาะสม:
cerebras/gpt-oss-120bสำหรับโมเดล recall เฉพาะที่มี latency ต่ำgoogle/gemini-3-flashเป็น fallback latency ต่ำโดยไม่เปลี่ยนโมเดลแชตหลักของคุณ- โมเดลเซสชันปกติของคุณ โดยปล่อย
config.modelให้ไม่ได้ตั้งค่า
การตั้งค่า Cerebras
เพิ่มผู้ให้บริการ Cerebras แล้วชี้ Active Memory ไปที่ผู้ให้บริการนั้น:chat/completions สำหรับ
โมเดลที่เลือกจริง — การมองเห็นใน /v1/models เพียงอย่างเดียวไม่ได้รับประกันสิ่งนี้
วิธีดูการทำงาน
Active Memory แทรก prefix ของ prompt ที่ไม่น่าเชื่อถือแบบซ่อนไว้สำหรับโมเดล โดย ไม่เปิดเผยแท็กดิบ<active_memory_plugin>...</active_memory_plugin> ใน
คำตอบปกติที่ลูกค้ามองเห็น
สวิตช์ของเซสชัน
ใช้คำสั่งของ Plugin เมื่อต้องการหยุดชั่วคราวหรือกลับมาทำงานต่อของ Active Memory สำหรับ เซสชันแชตปัจจุบันโดยไม่ต้องแก้ config:plugins.entries.active-memory.enabled, การกำหนดเป้าหมาย agent, หรือการกำหนดค่า global
อื่นๆ
หากต้องการให้คำสั่งเขียน config และหยุดชั่วคราวหรือกลับมาทำงานต่อของ Active Memory สำหรับ
ทุกเซสชัน ให้ใช้รูปแบบ global ที่ระบุชัดเจน:
plugins.entries.active-memory.config.enabled โดยปล่อย
plugins.entries.active-memory.enabled ให้เปิดอยู่ เพื่อให้คำสั่งยังพร้อมใช้งานสำหรับ
เปิด Active Memory กลับมาอีกครั้งในภายหลัง
หากต้องการดูว่า Active Memory กำลังทำอะไรในเซสชันสด ให้เปิด
สวิตช์ของเซสชันที่ตรงกับเอาต์พุตที่คุณต้องการ:
- บรรทัดสถานะ Active Memory เช่น
Active Memory: status=ok elapsed=842ms query=recent summary=34 charsเมื่อเปิด/verbose on - สรุปดีบักที่อ่านได้ เช่น
Active Memory Debug: Lemon pepper wings with blue cheese.เมื่อเปิด/trace on
/trace raw ด้วย บล็อก trace Model Input (User Role) จะ
แสดง prefix ของ Active Memory ที่ซ่อนอยู่เป็น:
เมื่อใดที่ทำงาน
Active Memory ใช้ gate สองชั้น:- เลือกเข้าด้วย config
ต้องเปิดใช้งาน Plugin และ id ของ agent ปัจจุบันต้องปรากฏใน
plugins.entries.active-memory.config.agents - คุณสมบัติ runtime ที่เข้มงวด แม้เปิดใช้งานและกำหนดเป้าหมายแล้ว Active Memory จะทำงานเฉพาะกับ เซสชันแชตถาวรแบบโต้ตอบที่เข้าเกณฑ์เท่านั้น
ประเภทเซสชัน
config.allowedChatTypes ควบคุมว่าการสนทนาประเภทใดอาจรัน Active
Memory ได้
ค่าเริ่มต้นคือ:
config.allowedChatIds และ
config.deniedChatIds หลังจากเลือกประเภทเซสชันที่อนุญาตแล้ว
allowedChatIds คือ allowlist แบบชัดเจนของ id การสนทนาที่ resolve แล้ว เมื่อไม่
ว่าง Active Memory จะทำงานเฉพาะเมื่อ id การสนทนาของเซสชันอยู่ใน
รายการนั้น สิ่งนี้ทำให้ประเภทแชตที่อนุญาตทั้งหมดแคบลงพร้อมกัน รวมถึงข้อความโดยตรง
หากคุณต้องการข้อความโดยตรงทั้งหมดบวกกับเฉพาะบางกลุ่ม ให้รวม
id ของ peer โดยตรงไว้ใน allowedChatIds หรือคง allowedChatTypes ให้โฟกัสที่
การ rollout กลุ่ม/ช่องที่คุณกำลังทดสอบ
deniedChatIds คือ denylist แบบชัดเจน โดยจะมีผลเหนือ
allowedChatTypes และ allowedChatIds เสมอ ดังนั้นการสนทนาที่ตรงกันจะถูกข้าม
แม้ประเภทเซสชันของการสนทนานั้นจะได้รับอนุญาตก็ตาม
id มาจากคีย์เซสชันช่องทางถาวร: ตัวอย่างเช่น Feishu
chat_id / open_id, id แชต Telegram, หรือ id ช่อง Slack การจับคู่
ไม่สนตัวพิมพ์เล็กใหญ่ หาก allowedChatIds ไม่ว่างและ OpenClaw ไม่สามารถ resolve
id การสนทนาสำหรับเซสชันได้ Active Memory จะข้าม turn นั้นแทนการ
คาดเดา
ตัวอย่าง:
ทำงานที่ใด
Active Memory เป็นฟีเจอร์เสริมบริบทการสนทนา ไม่ใช่ฟีเจอร์ inference ทั่วทั้งแพลตฟอร์ม| Surface | รัน Active Memory หรือไม่? |
|---|---|
| เซสชันถาวรใน UI ควบคุม / เว็บแชต | ใช่ หากเปิดใช้งาน Plugin และกำหนดเป้าหมาย agent แล้ว |
| เซสชันช่องทางแบบโต้ตอบอื่นบนเส้นทางแชตถาวรเดียวกัน | ใช่ หากเปิดใช้งาน Plugin และกำหนดเป้าหมาย agent แล้ว |
| การรันแบบ one-shot ที่ไม่มีส่วนติดต่อ | ไม่ |
| การรัน Heartbeat/เบื้องหลัง | ไม่ |
เส้นทาง agent-command ภายในทั่วไป | ไม่ |
| การทำงานของ sub-agent/ตัวช่วยภายใน | ไม่ |
เหตุผลที่ใช้
ใช้ Active Memory เมื่อ:- เซสชันเป็นแบบถาวรและผู้ใช้มองเห็น
- agent มีหน่วยความจำระยะยาวที่มีความหมายให้ค้นหา
- ความต่อเนื่องและการปรับให้เหมาะกับบุคคลสำคัญกว่าความเป็น deterministic ของ prompt แบบดิบ
- ค่ากำหนดที่คงที่
- พฤติกรรมที่เกิดซ้ำ
- บริบทระยะยาวของผู้ใช้ที่ควรถูกดึงขึ้นมาอย่างเป็นธรรมชาติ
- automation
- worker ภายใน
- งาน API แบบ one-shot
- ตำแหน่งที่การปรับให้เหมาะกับบุคคลแบบซ่อนอยู่จะสร้างความประหลาดใจ
วิธีทำงาน
รูปแบบ runtime คือ: sub-agent หน่วยความจำแบบ blocking สามารถใช้ได้เฉพาะเครื่องมือ memory recall ที่กำหนดค่าไว้ ตามค่าเริ่มต้นคือ:memory_searchmemory_get
plugins.slots.memory เป็น memory-lancedb ค่าเริ่มต้นจะเป็น memory_recall
แทน ให้ตั้งค่า config.toolsAllow เมื่อผู้ให้บริการหน่วยความจำอื่นเปิดเผย
contract ของเครื่องมือ recall ที่ต่างออกไป
หากการเชื่อมต่ออ่อน ควรส่งคืน NONE
โหมดการค้นหา
config.queryMode ควบคุมว่า sub-agent หน่วยความจำแบบ blocking
เห็นบทสนทนามากเพียงใด เลือกโหมดที่เล็กที่สุดที่ยังตอบคำถามต่อเนื่องได้ดี;
งบ timeout ควรเพิ่มตามขนาดบริบท (message < recent < full)
- message
- recent
- full
ส่งเฉพาะข้อความผู้ใช้ล่าสุดใช้สิ่งนี้เมื่อ:
- คุณต้องการพฤติกรรมที่เร็วที่สุด
- คุณต้องการ bias ที่แข็งแรงที่สุดไปยังการ recall ค่ากำหนดที่คงที่
- turn ต่อเนื่องไม่ต้องใช้บริบทการสนทนา
3000 ถึง 5000 ms สำหรับ config.timeoutMsสไตล์ prompt
config.promptStyle ควบคุมว่าเอเจนต์ย่อยหน่วยความจำแบบบล็อกจะกระตือรือร้นหรือเข้มงวดเพียงใด
เมื่อตัดสินใจว่าจะส่งคืนหน่วยความจำหรือไม่
สไตล์ที่ใช้ได้:
balanced: ค่าเริ่มต้นเอนกประสงค์สำหรับโหมดrecentstrict: กระตือรือร้นน้อยที่สุด; เหมาะที่สุดเมื่อคุณต้องการให้บริบทใกล้เคียงปะปนเข้ามาน้อยมากcontextual: เป็นมิตรต่อความต่อเนื่องมากที่สุด; เหมาะที่สุดเมื่อประวัติการสนทนาควรมีความสำคัญมากกว่าrecall-heavy: ยอมแสดงหน่วยความจำมากขึ้นสำหรับการจับคู่ที่อ่อนกว่าแต่ยังสมเหตุสมผลprecision-heavy: เลือกNONEอย่างเข้มงวด เว้นแต่การจับคู่จะชัดเจนpreference-only: ปรับให้เหมาะกับรายการโปรด นิสัย กิจวัตร รสนิยม และข้อเท็จจริงส่วนบุคคลที่เกิดซ้ำ
config.promptStyle:
config.promptStyle อย่างชัดเจน ค่านั้นจะมีผลเหนือกว่า
ตัวอย่าง:
นโยบายสำรองของโมเดล
หากไม่ได้ตั้งค่าconfig.model Active Memory จะพยายาม resolve โมเดลตามลำดับนี้:
config.modelFallback ควบคุมขั้นตอนสำรองที่กำหนดค่าไว้
ตัวเลือกสำรองแบบกำหนดเอง:
config.modelFallbackPolicy ถูกคงไว้เป็นฟิลด์ความเข้ากันได้ที่เลิกใช้แล้ว
สำหรับคอนฟิกเก่าเท่านั้น ฟิลด์นี้ไม่เปลี่ยนพฤติกรรมรันไทม์อีกต่อไป
เครื่องมือหน่วยความจำ
โดยค่าเริ่มต้น Active Memory อนุญาตให้เอเจนต์ย่อย recall แบบบล็อกเรียกmemory_search และ memory_get ได้ ซึ่งตรงกับสัญญา memory-core
ในตัว เมื่อ plugins.slots.memory เลือก memory-lancedb และ
ไม่ได้ตั้งค่า config.toolsAllow Active Memory จะคงพฤติกรรม LanceDB เดิม
และใช้ memory_recall แทน
หากคุณใช้ Plugin หน่วยความจำอื่น ให้ตั้งค่า config.toolsAllow เป็นชื่อเครื่องมือที่แน่นอน
ซึ่ง Plugin นั้นลงทะเบียนไว้ Active Memory จะแสดงรายการเครื่องมือเหล่านั้นในพรอมต์ recall
และส่งรายการเดียวกันไปยังเอเจนต์ย่อยที่ฝังอยู่ หากเครื่องมือที่กำหนดค่าไว้ไม่มีรายการใด
พร้อมใช้งาน หรือเอเจนต์ย่อยหน่วยความจำล้มเหลว Active Memory
จะข้ามการ recall สำหรับเทิร์นนั้น และการตอบกลับหลักจะดำเนินต่อโดยไม่มีบริบทหน่วยความจำ
toolsAllow รับเฉพาะชื่อเครื่องมือหน่วยความจำที่เป็นรูปธรรมเท่านั้น ไวลด์การ์ด รายการ
group:* และเครื่องมือเอเจนต์หลัก เช่น read, exec, message และ
web_search จะถูกละเว้นก่อนที่เอเจนต์ย่อยหน่วยความจำแบบซ่อนจะเริ่มทำงาน
หมายเหตุพฤติกรรมเริ่มต้น: Active Memory จะไม่รวม memory_recall ไว้ใน
allowlist เริ่มต้นของ memory-core อีกต่อไป การตั้งค่า memory-lancedb ที่มีอยู่จะยังทำงานต่อ
เมื่อ plugins.slots.memory ถูกตั้งค่าเป็น memory-lancedb ส่วน toolsAllow
ที่ระบุอย่างชัดเจนจะมีผลเหนือค่าปริยายอัตโนมัติเสมอ
memory-core ในตัว
การตั้งค่าเริ่มต้นไม่จำเป็นต้องมีtoolsAllow ที่ระบุอย่างชัดเจน:
หน่วยความจำ LanceDB
Pluginmemory-lancedb ที่รวมมาให้เปิดเผย memory_recall การเลือก
สล็อตหน่วยความจำก็เพียงพอให้ Active Memory ใช้เครื่องมือ recall นั้น:
Lossless Claw
Lossless Claw เป็น Plugin เอนจินบริบทที่มีเครื่องมือ recall ของตัวเอง ติดตั้งและ กำหนดค่าเป็นเอนจินบริบทก่อน; ดู เอนจินบริบท จากนั้นให้ Active Memory ใช้เครื่องมือ recall ของ Lossless Claw:lcm_expand ใน toolsAllow สำหรับเอเจนต์ย่อย Active Memory หลัก
Lossless Claw ใช้เครื่องมือนั้นเป็นเครื่องมือขยายผลที่มอบหมายต่อในระดับล่างกว่า
ทางออกขั้นสูง
ตัวเลือกเหล่านี้ตั้งใจให้ไม่เป็นส่วนหนึ่งของการตั้งค่าที่แนะนำconfig.thinking สามารถแทนที่ระดับการคิดของเอเจนต์ย่อยหน่วยความจำแบบบล็อกได้:
config.promptAppend เพิ่มคำสั่งผู้ปฏิบัติงานเพิ่มเติมหลังพรอมต์ Active
Memory เริ่มต้น และก่อนบริบทการสนทนา:
promptAppend กับ toolsAllow แบบกำหนดเองเมื่อ Plugin หน่วยความจำที่ไม่ใช่ core ต้องการ
ลำดับเครื่องมือเฉพาะของ provider หรือคำสั่งการปรับรูปแบบคิวรี
config.promptOverride แทนที่พรอมต์ Active Memory เริ่มต้น OpenClaw
จะยังคงต่อท้ายบริบทการสนทนาหลังจากนั้น:
NONE
หรือบริบทข้อเท็จจริงผู้ใช้แบบกระชับสำหรับโมเดลหลัก
การคงอยู่ของ transcript
การรันเอเจนต์ย่อยหน่วยความจำแบบบล็อกของ Active memory จะสร้าง transcriptsession.jsonl จริงระหว่างการเรียกเอเจนต์ย่อยหน่วยความจำแบบบล็อก
โดยค่าเริ่มต้น transcript นั้นเป็นแบบชั่วคราว:
- ถูกเขียนไปยังไดเรกทอรีชั่วคราว
- ใช้เฉพาะสำหรับการรันเอเจนต์ย่อยหน่วยความจำแบบบล็อก
- ถูกลบทันทีหลังการรันเสร็จสิ้น
config.transcriptDir
ใช้อย่างระมัดระวัง:
- transcript ของเอเจนต์ย่อยหน่วยความจำแบบบล็อกสามารถสะสมได้อย่างรวดเร็วในเซสชันที่ใช้งานหนัก
- โหมดคิวรี
fullสามารถทำซ้ำบริบทการสนทนาได้จำนวนมาก - transcript เหล่านี้มีบริบทพรอมต์ที่ซ่อนอยู่และหน่วยความจำที่ recall มา
การกำหนดค่า
การกำหนดค่า active memory ทั้งหมดอยู่ภายใต้:| Key | Type | ความหมาย |
|---|---|---|
enabled | boolean | เปิดใช้งาน Plugin เอง |
config.agents | string[] | รหัส Agent ที่อาจใช้ Active Memory ได้ |
config.model | string | ค่าอ้างอิงโมเดลของเอเจนต์ย่อยหน่วยความจำแบบบล็อกที่เป็นทางเลือก; เมื่อไม่ได้ตั้งค่า Active Memory จะใช้โมเดลของเซสชันปัจจุบัน |
config.allowedChatTypes | ("direct" | "group" | "channel")[] | ประเภทเซสชันที่อาจเรียกใช้ Active Memory ได้; ค่าเริ่มต้นเป็นเซสชันรูปแบบข้อความโดยตรง |
config.allowedChatIds | string[] | รายการอนุญาตต่อบทสนทนาที่เป็นทางเลือก ซึ่งจะใช้หลัง allowedChatTypes; รายการที่ไม่ว่างจะปฏิเสธโดยค่าเริ่มต้น |
config.deniedChatIds | string[] | รายการปฏิเสธต่อบทสนทนาที่เป็นทางเลือก ซึ่งจะแทนที่ประเภทเซสชันที่อนุญาตและรหัสที่อนุญาต |
config.queryMode | "message" | "recent" | "full" | ควบคุมปริมาณบทสนทนาที่เอเจนต์ย่อยหน่วยความจำแบบบล็อกเห็น |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | ควบคุมว่าเอเจนต์ย่อยหน่วยความจำแบบบล็อกจะกระตือรือร้นหรือเข้มงวดเพียงใดเมื่อตัดสินใจว่าจะคืนค่าหน่วยความจำหรือไม่ |
config.toolsAllow | string[] | ชื่อเครื่องมือหน่วยความจำแบบเจาะจงที่เอเจนต์ย่อยหน่วยความจำแบบบล็อกอาจเรียกใช้ได้; ค่าเริ่มต้นคือ ["memory_search", "memory_get"] หรือ ["memory_recall"] เมื่อ plugins.slots.memory เป็น memory-lancedb; ระบบจะละเว้นไวลด์การ์ด รายการ group:* และเครื่องมือ Agent หลัก |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | การแทนที่ thinking ขั้นสูงสำหรับเอเจนต์ย่อยหน่วยความจำแบบบล็อก; ค่าเริ่มต้น off เพื่อความเร็ว |
config.promptOverride | string | การแทนที่พรอมป์เต็มรูปแบบขั้นสูง; ไม่แนะนำสำหรับการใช้งานปกติ |
config.promptAppend | string | คำสั่งเพิ่มเติมขั้นสูงที่ต่อท้ายพรอมป์เริ่มต้นหรือพรอมป์ที่ถูกแทนที่ |
config.timeoutMs | number | หมดเวลาแบบบังคับสำหรับเอเจนต์ย่อยหน่วยความจำแบบบล็อก จำกัดสูงสุดที่ 120000 ms |
config.setupGraceTimeoutMs | number | งบเวลาตั้งค่าเพิ่มเติมขั้นสูงก่อนที่เวลาหมดอายุของการ recall จะสิ้นสุด; ค่าเริ่มต้นคือ 0 และจำกัดสูงสุดที่ 30000 ms ดู ช่วงผ่อนผันการเริ่มแบบเย็น สำหรับคำแนะนำการอัปเกรด v2026.4.x |
config.maxSummaryChars | number | จำนวนอักขระรวมสูงสุดที่อนุญาตในสรุป Active Memory |
config.logging | boolean | ส่งออกบันทึก Active Memory ระหว่างการปรับแต่ง |
config.persistTranscripts | boolean | เก็บทรานสคริปต์ของเอเจนต์ย่อยหน่วยความจำแบบบล็อกไว้บนดิสก์แทนการลบไฟล์ชั่วคราว |
config.transcriptDir | string | ไดเรกทอรีทรานสคริปต์แบบสัมพัทธ์ของเอเจนต์ย่อยหน่วยความจำแบบบล็อกภายใต้โฟลเดอร์เซสชันของ Agent |
| Key | Type | ความหมาย |
|---|---|---|
config.maxSummaryChars | number | จำนวนอักขระรวมสูงสุดที่อนุญาตในสรุป Active Memory |
config.recentUserTurns | number | เทิร์นของผู้ใช้ก่อนหน้าที่จะรวมไว้เมื่อ queryMode เป็น recent |
config.recentAssistantTurns | number | เทิร์นของผู้ช่วยก่อนหน้าที่จะรวมไว้เมื่อ queryMode เป็น recent |
config.recentUserChars | number | จำนวนอักขระสูงสุดต่อเทิร์นผู้ใช้ล่าสุด |
config.recentAssistantChars | number | จำนวนอักขระสูงสุดต่อเทิร์นผู้ช่วยล่าสุด |
config.cacheTtlMs | number | การใช้แคชซ้ำสำหรับคำค้นหาที่เหมือนกันซ้ำๆ (ช่วง: 1000-120000 ms; ค่าเริ่มต้น: 15000) |
config.circuitBreakerMaxTimeouts | number | ข้ามการ recall หลังจากหมดเวลาติดต่อกันจำนวนนี้สำหรับ Agent/โมเดลเดียวกัน รีเซ็ตเมื่อ recall สำเร็จหรือหลังจากช่วงพักสิ้นสุด (ช่วง: 1-20; ค่าเริ่มต้น: 3). |
config.circuitBreakerCooldownMs | number | ระยะเวลาที่จะข้ามการ recall หลังจาก circuit breaker ทำงาน หน่วยเป็น ms (ช่วง: 5000-600000; ค่าเริ่มต้น: 60000). |
การตั้งค่าที่แนะนำ
เริ่มด้วยrecent.
/verbose on สำหรับ
บรรทัดสถานะปกติ และ /trace on สำหรับสรุปดีบักของ Active Memory แทน
การมองหาคำสั่งดีบัก Active Memory แยกต่างหาก ในช่องแชต บรรทัด
วินิจฉัยเหล่านี้จะถูกส่งหลังคำตอบหลักของผู้ช่วย ไม่ใช่ก่อนหน้า
จากนั้นเปลี่ยนเป็น:
messageหากคุณต้องการ latency ต่ำกว่าfullหากคุณตัดสินใจว่าบริบทเพิ่มเติมคุ้มกับเอเจนต์ย่อยหน่วยความจำแบบบล็อกที่ช้าลง
ช่วงผ่อนผันการเริ่มแบบเย็น
ก่อน v2026.5.2 Plugin จะขยายtimeoutMs ที่คุณกำหนดไว้โดยเงียบๆ ด้วย
เวลาเพิ่มอีก 30000 ms ระหว่างการเริ่มแบบเย็น เพื่อให้การอุ่นโมเดล การโหลดดัชนี embedding และ
การ recall ครั้งแรกใช้ budget ที่ใหญ่ขึ้นร่วมกันได้ v2026.5.2 ย้ายช่วงผ่อนผันนั้น
ไปอยู่หลังการกำหนดค่า setupGraceTimeoutMs แบบชัดเจน — ตอนนี้ timeoutMs ที่คุณกำหนดไว้
คือ budget ตามค่าเริ่มต้น เว้นแต่คุณจะเลือกเปิดใช้
หากคุณอัปเกรดจาก v2026.4.x และตั้ง timeoutMs เป็นค่าที่ปรับไว้สำหรับ
โลกแบบช่วงผ่อนผันโดยนัยเดิม (timeoutMs: 15000 เริ่มต้นที่แนะนำเป็น
ตัวอย่างหนึ่ง) ให้ตั้ง setupGraceTimeoutMs: 30000 เพื่อขยาย hook สร้างพรอมป์และ
budget watchdog ภายนอกกลับไปเป็นค่าที่มีผลก่อน v5.2:
setupGraceTimeoutMs แบบชัดเจน เพื่อให้ Plugin ไม่ขยาย
การกำหนดค่า 15000 ms เป็น 45000 ms บน lane หลักโดยเงียบๆ อีกต่อไป.”
ตัวเรียก recall แบบฝังตัวใช้ขอบเขตเวลาหมดอายุที่มีผลเดียวกัน ดังนั้น
setupGraceTimeoutMs จึงครอบคลุมทั้ง watchdog การสร้างพรอมป์ภายนอกและการรัน
recall แบบบล็อกภายใน
สำหรับ Gateway ที่มีทรัพยากรจำกัด ซึ่ง latency ตอน cold-start เป็น trade-off ที่ทราบอยู่แล้ว
ค่าที่ต่ำกว่า (5000–15000 ms) ก็ใช้ได้เช่นกัน — trade-off คือมีโอกาสสูงขึ้นที่
recall ครั้งแรกสุดหลังจากรีสตาร์ต Gateway จะคืนค่าว่างในขณะที่ warm-up
ยังเสร็จไม่สมบูรณ์
การดีบัก
หาก Active Memory ไม่แสดงในจุดที่คุณคาดไว้:- ยืนยันว่า Plugin เปิดใช้งานอยู่ภายใต้
plugins.entries.active-memory.enabled - ยืนยันว่า agent id ปัจจุบันอยู่ในรายการ
config.agents - ยืนยันว่าคุณกำลังทดสอบผ่านเซสชันแชตแบบ interactive persistent
- เปิด
config.logging: trueแล้วดูบันทึกของ Gateway - ตรวจสอบว่าการค้นหาหน่วยความจำเองทำงานได้ด้วย
openclaw memory status --deep
maxSummaryChars
- ลด
queryMode - ลด
timeoutMs - ลดจำนวน turn ล่าสุด
- ลดขีดจำกัดอักขระต่อ turn
ปัญหาที่พบบ่อย
Active Memory ทำงานบน recall pipeline ของ Plugin หน่วยความจำที่กำหนดค่าไว้ ดังนั้น ความผิดปกติส่วนใหญ่ของ recall จึงเป็นปัญหาของ embedding-provider ไม่ใช่บั๊กของ Active Memory เส้นทางmemory-core ค่าเริ่มต้นใช้ memory_search และ memory_get; ช่อง
memory-lancedb ใช้ memory_recall หากคุณใช้ Plugin หน่วยความจำอื่น
ให้ยืนยันว่า config.toolsAllow ระบุชื่อเครื่องมือที่ Plugin นั้นลงทะเบียนจริง
Embedding provider switched or stopped working
Embedding provider switched or stopped working
หากไม่ได้ตั้งค่า
memorySearch.provider ไว้ OpenClaw จะตรวจหา embedding provider
ตัวแรกที่พร้อมใช้งานโดยอัตโนมัติ API key ใหม่, quota ที่หมด, หรือ hosted provider
ที่ถูกจำกัดอัตรา อาจทำให้ provider ที่ resolve ได้เปลี่ยนไประหว่างการรัน
หากไม่มี provider ใด resolve ได้ memory_search อาจลดระดับเป็นการดึงข้อมูลแบบ lexical-only
ความล้มเหลวระหว่าง runtime หลังจากเลือก provider แล้วจะไม่ fallback โดยอัตโนมัติปักหมุด provider (และ fallback ที่เลือกได้) อย่างชัดเจนเพื่อให้การเลือก
เป็นแบบ deterministic ดู การค้นหาหน่วยความจำ สำหรับรายการ
provider ทั้งหมดและตัวอย่างการปักหมุดRecall feels slow, empty, or inconsistent
Recall feels slow, empty, or inconsistent
- เปิด
/trace onเพื่อแสดงสรุป debug ของ Active Memory ที่ Plugin เป็นเจ้าของ ในเซสชัน - เปิด
/verbose onเพื่อให้เห็นบรรทัดสถานะ🧩 Active Memory: ...หลังการตอบกลับแต่ละครั้งด้วย - ดูบันทึก Gateway สำหรับ
active-memory: ... start|done,memory sync failed (search-bootstrap), หรือข้อผิดพลาด embedding ของ provider - รัน
openclaw memory status --deepเพื่อตรวจสอบ backend การค้นหาหน่วยความจำ และสุขภาพของ index - หากคุณใช้
ollamaให้ยืนยันว่าติดตั้ง embedding model แล้ว (ollama list)
First recall after gateway restart returns `status=timeout`
First recall after gateway restart returns `status=timeout`
ใน v2026.5.2 และใหม่กว่า หากการตั้งค่าตอน cold-start (model warm-up + การโหลด
embedding index) ยังไม่เสร็จเมื่อ recall ครั้งแรกเริ่มทำงาน การรัน
อาจชนขอบเขต
timeoutMs ที่กำหนดค่าไว้และคืนค่า status=timeout
พร้อมเอาต์พุตว่าง บันทึก Gateway จะแสดง active-memory timeout after Nms
แถว ๆ การตอบกลับแรกที่เข้าเงื่อนไขหลังจากรีสตาร์ตดู grace ตอน cold-start ใต้การตั้งค่าที่แนะนำสำหรับค่า
setupGraceTimeoutMs ที่แนะนำ