หน่วยความจำและความรู้
หน่วยความจำมีไว้เพื่ออะไร
หัวข้อที่มีชื่อว่า “หน่วยความจำมีไว้เพื่ออะไร”หากไม่มีหน่วยความจำ การสนทนากับเอเจนต์ทุกครั้งจะเริ่มจากศูนย์ใหม่: ข้อตกลงเดิม ต้องอธิบายซ้ำ การตัดสินใจเดิมต้องถกเถียงกันอีกครั้ง ทางตันเดิมต้องสำรวจซ้ำ หน่วยความจำคือที่จัดเก็บระดับเวิร์กสเปซที่คงอยู่ข้ามการรัน และมันมีไว้เพื่อให้ ความรู้ที่เอเจนต์ตัวหนึ่งสร้างขึ้นนั้นถูกพบโดยเอเจนต์อีกตัวในภายหลัง
มันมีสามชั้น ซึ่งตอบคำถามที่ต่างกัน:
- ข้อเท็จจริง — สิ่งที่เป็นจริง (ข้อตกลง ผลลัพธ์ การตัดสินใจ)
- นโยบาย — สิ่งที่เอเจนต์ต้องทำเกี่ยวกับเรื่องนั้น (กฎเชิงบรรทัดฐาน)
- หน่วยความจำทำงาน — สิ่งที่เอเจนต์ตัวหนึ่งกำลังทำค้างอยู่
ความแตกต่างนี้สำคัญเพราะแต่ละชั้นไปถึงเอเจนต์ผ่านเส้นทางที่ต่างกัน ข้อเท็จจริง ถูกค้นหา นโยบายถูกผลักไป ส่วนหน่วยความจำทำงานเป็นเรื่องส่วนตัว
ข้อเท็จจริง
หัวข้อที่มีชื่อว่า “ข้อเท็จจริง”MemoryFact คือหน่วยความรู้ที่ผูกอยู่ในขอบเขตของเวิร์กสเปซและโดเมนหนึ่ง
| แอตทริบิวต์ | ความหมาย |
|---|---|
domain |
โดเมนความรู้ (“conventions”, “decisions”, “codebase”) |
topic |
ป้ายหัวข้อสั้น ๆ |
content |
ข้อความความรู้ |
confidence |
0.0–1.0 เริ่มต้นจากแหล่งที่มาและเพิ่มขึ้นเมื่อถูกกล่าวถึงซ้ำ |
memoryType |
ชนิดของข้อเท็จจริง — กำหนดเส้นโค้งการเสื่อมตามเวลา |
veracity |
ข้อเท็จจริงนี้ถูกรู้มาได้อย่างไร — ตั้งค่าความเชื่อมั่นเริ่มต้นและกำหนดขนาดของส่วนเพิ่มเมื่อถูกกล่าวถึงซ้ำแต่ละครั้ง |
sourceObservationIds |
ข้อสังเกตใดที่นำไปสู่ข้อเท็จจริงนี้ |
supersededBy |
ข้อเท็จจริงใหม่ที่มาแทนที่ ถ้ามี |
validUntil, recallCount, mentionCount |
สัญญาณการหมดอายุและการใช้งานที่ใช้ตอนเรียกคืน |
สองแถวสุดท้ายคือสิ่งที่คนมักมองข้าม และเป็นตัวตัดสินว่าข้อเท็จจริง_ใด_จะปรากฏขึ้น
memoryType มีพารามิเตอร์การเสื่อมแบบ Weibull ต่อชนิด ดังนั้นคำมั่นที่มีกรอบเวลา
จะจางหายอย่างรวดเร็ว ในขณะที่ข้อเท็จจริงเชิงโปรไฟล์ที่มั่นคงจะไม่เป็นเช่นนั้น
veracity บันทึกแหล่งที่มา — ระบุโดยมนุษย์ (น้ำหนัก 1.0) อนุมานโดยเอเจนต์ (0.7)
ผลิตโดยเครื่องมือ (0.5) นำเข้า (0.6) — และน้ำหนักนั้นจะตั้งค่าความเชื่อมั่นเริ่มต้น
ของข้อเท็จจริง
ข้อเท็จจริงจะไม่ถูกแก้ไขในที่เดิมเมื่อมีสิ่งขัดแย้งกัน การเขียนข้อเท็จจริงจะรัน การตรวจจับความขัดแย้งกับข้อเท็จจริงในโดเมนและหัวข้อเดียวกัน แล้วแทนที่ตัวที่แพ้ พร้อมบันทึกแถวความขัดแย้ง จุดประสงค์คือร่องรอยการตรวจสอบ: คุณเห็นได้เสมอว่าเดิม เชื่ออะไรและอะไรเข้ามาแทนที่
MemoryPolicy คือกฎเชิงบรรทัดฐานที่ได้มาจากข้อเท็จจริง ผูกอยู่ในขอบเขตของ
เวิร์กสเปซและโดเมน มีแฟล็ก active และ requiredRole ซึ่งเป็นทางเลือก
นโยบายที่ active ทุกตัวในเวิร์กสเปซจะถูกฉีดเข้าไปในทุกการสั่งงาน โดยไม่กรอง
— ไม่มีการกรองตามโดเมน บทบาท งาน หรือสเปซ เรื่องนี้ควรรู้ไว้ก่อนคุณเขียนนโยบาย
ตัวที่ยี่สิบ เพราะนโยบายแย่งชิงหน้าต่างบริบทเดียวกับงาน นี่ก็เป็นเหตุผลที่
requiredRole บนนโยบายเป็นเพียงคำแนะนำ: มันบอกว่ากฎนี้มุ่งเป้าไปที่ใคร แต่ไม่ได้
หยุดไม่ให้กฎไปถึงคนอื่น ๆ
MemoryDomain จัดกลุ่มข้อเท็จจริงและนโยบายภายในเวิร์กสเปซ โดเมนมอบโครงสร้าง
เชิงองค์กรให้กับความรู้ และเป็นหน่วยที่การให้สิทธิ์เข้าถึงเขียนอ้างอิงถึง — แต่โปรดดู
คำเตือนด้านล่างก่อนจะถือว่าโดเมนเป็นขอบเขตความลับ
โดเมนอาจเป็นระดับทั้งเวิร์กสเปซ (architecture) หรือผูกกับรีโปเดียว
(repo:<slug>/architecture) ชื่อเดียวกันในสองขอบเขตคือที่จัดเก็บอิสระสองแห่ง:
ข้อเท็จจริงที่เป็นจริงกับโค้ดเบสหนึ่งจะไม่เขียนทับข้อเท็จจริงระดับทั้งเวิร์กสเปซ
search_memory และคำนำหน่วยความจำตอนสั่งงานจะจัดอันดับหน่วยความจำที่ผูกกับรีโป
ไว้ก่อนเมื่อเอเจนต์ทำงานในรีโปนั้น แต่จะไม่กรองส่วนที่เหลือออก ส่ง repo ไปกับ
propose_fact / propose_policy / search_memory เพื่อเขียนหรือเพิ่มน้ำหนัก
ให้ขอบเขตนั้น
การควบคุมการเข้าถึงเป็นแบบ fail-open สำหรับการอ่าน
หัวข้อที่มีชื่อว่า “การควบคุมการเข้าถึงเป็นแบบ fail-open สำหรับการอ่าน”MemoryAccessGrant จับคู่บทบาทของเอเจนต์และโดเมนเข้ากับระดับสิทธิ์หนึ่งในสามระดับ:
| สิทธิ์ | ความหมาย |
|---|---|
none |
ไม่มีการเข้าถึง |
read |
ค้นหาและดึงข้อเท็จจริงได้ |
write |
จำเป็นสำหรับ propose_policy การเขียนข้อเท็จจริง (propose_fact, supersede_fact) ไม่ได้ถูกควบคุมด้วยการให้สิทธิ์ |
ความไม่สมมาตรนี้ — ผ่อนปรนกับการอ่าน เข้มงวดกับการเขียนนโยบาย — เป็นการแลกเปลี่ยน
ที่จงใจ หน่วยความจำมีประโยชน์ที่สุดเมื่อมันหมุนเวียน และการปฏิเสธการอ่านทำให้
เอเจนต์รู้เรื่องน้อยลงอย่างเงียบ ๆ แทนที่จะรายงานปัญหา ตรงกันข้าม การปฏิเสธ
การเขียนนโยบายนั้นดังและแก้ไขได้ จึงเป็นจุดที่การบังคับใช้อยู่ โดเมนที่สร้างใหม่
จะตั้งค่า write ให้ทุกบทบาทโดยปริยาย การทำให้เข้มงวดขึ้นในภายหลังเป็นการแก้ไข
ผ่าน RPC เท่านั้น เพราะไม่มี UI สำหรับการให้สิทธิ์
หน่วยความจำทำงาน
หัวข้อที่มีชื่อว่า “หน่วยความจำทำงาน”เอเจนต์แต่ละตัวมี AgentWorkingMemory: สมุดจดชั่วคราวแบบข้อความอิสระที่จัดคีย์
ตามเวิร์กสเปซและเอเจนต์ มันคงอยู่ข้ามการรัน เป็นส่วนตัวของเอเจนต์ตัวนั้น และ
ถูกฉีดเข้าไปในพรอมต์ของมันทุกครั้งที่สั่งงาน มันคือที่อยู่ของ “ฉันรีแฟกเตอร์ auth
ไปได้ครึ่งทาง” — สถานะที่ควรพาไปยังการรันครั้งถัดไป แต่ไม่ควรยกระดับเป็น
ข้อเท็จจริงถาวร
อะไรที่ไปถึงพรอมต์ของเอเจนต์จริง ๆ
หัวข้อที่มีชื่อว่า “อะไรที่ไปถึงพรอมต์ของเอเจนต์จริง ๆ”ตอนสั่งงาน คำนำหน่วยความจำถูกประกอบขึ้นจากสามสิ่งเท่านั้น:
- นโยบายที่ active ทุกตัวของเวิร์กสเปซ ในรูปแบบบรรทัด
- [domain] rule - หน่วยความจำทำงานของเอเจนต์เอง ตามตัวอักษร
- รายการข้อเท็จจริงสั้น ๆ ที่จับคู่ด้วยคีย์เวิร์ด สำหรับงานนี้ — ไม่เกินห้ารายการ ภายในงบประมาณประมาณ 1,200 อักขระ และเฉพาะเมื่อคำอธิบายงานยาวอย่างน้อย 20 อักขระ งานที่สั้นกว่านั้นจะไม่ได้ข้อเท็จจริงเลย
รายการสั้นนี้ใช้ FTS/คีย์เวิร์ดเท่านั้น และถูกจำกัดจำนวนอย่างจงใจ การสร้าง embedding
ของคำค้นนั้นช้า และเส้นทางการสั่งงานเป็นจุดเดียวที่ความหน่วงปรากฏให้เห็นทันที
จึงจงใจกันเส้นทางเชิงความหมายที่ช้าออกไป คำนำปิดท้ายด้วยการบอกให้เอเจนต์ตรวจสอบ
รายการที่สำคัญด้วย search_memory ซึ่งเป็นที่ที่โมเดลการเรียกคืนเต็มรูปแบบอยู่
ไม่มีการตรวจสอบการให้สิทธิ์เข้าถึงบนเส้นทางนี้ สิ่งที่รายการสั้นค้นพบคือสิ่งที่ เอเจนต์เห็น
การเรียกคืน: หนึ่งคำค้น สี่เสียง
หัวข้อที่มีชื่อว่า “การเรียกคืน: หนึ่งคำค้น สี่เสียง”เครื่องมือ search_memory ที่ใช้ฝั่งเอเจนต์มีสามโหมด และเป็นการค้นหาที่ต่างกันจริง ๆ:
keyword— FTS5 เท่านั้นsemantic— ผลลัพธ์จาก BM25 และเวกเตอร์ที่หลอมรวมด้วย reciprocal rank fusionhybrid(ค่าเริ่มต้น) — การเรียกคืนแบบหลายเสียง: เสียงที่จัดอันดับแล้ว สี่เสียงหลอมรวมกัน แล้วกระจายความหลากหลาย
เสียงทั้งสี่คือ lexical (FTS), semantic (เวกเตอร์ KNN), temporal (ข้อเท็จจริงที่ active ล่าสุด) และ graph — การเดินสองฮอปผ่านเส้นเชื่อมแบบ episodic จากจุดตั้งต้น lexical และ semantic ที่แข็งแกร่งที่สุด เสียง graph คือเหตุผลที่เส้นเชื่อมแบบ episodic มีอยู่ตั้งแต่แรก: มันเผยข้อเท็จจริงที่_เชื่อมโยงกับ_คำตอบของคุณโดยไม่ตรงกับ คำใดของคุณเลย เสียงต่าง ๆ ถูกถ่วงน้ำหนักตามเจตนาของคำค้นที่จำแนกไว้ (ค่าเริ่มต้น semantic มีน้ำหนักมากที่สุด ตามด้วย graph และ lexical แล้วจึง recency) คะแนนของ ผู้สมัครแต่ละรายถูกปรับตามการเสื่อมแบบ Weibull ของมัน และชุดผลลัพธ์ถูกกระจาย ความหลากหลายแบบ MMR เพื่อไม่ให้ข้อเท็จจริงเดียวที่พูดซ้ำห้าครั้งมาเบียดข้อเท็จจริง ที่ต่างกันสี่ข้อออกไป
การค้นหาหน่วยความจำบนเดสก์ท็อปและเว็บเป็นเส้นทางที่แยกออกไปและเรียบง่ายกว่า:
op ของ RPC memory_fact.search เป็น FTS5 เท่านั้น เพราะไคลเอนต์แบบบาง
ไม่สามารถส่ง embedding ของคำค้นไปด้วยได้ และเส้นทางแบบ hybrid ยังคงอยู่ภายใน
โฮสต์ ดังนั้นการจัดอันดับที่คุณเห็นในเบราว์เซอร์หน่วยความจำจึงไม่ใช่การจัดอันดับ
ที่เอเจนต์ได้จาก search_memory นี่เป็นสิ่งที่คาดไว้ ไม่ใช่บั๊ก แต่ก็หมายความว่า
“ฉันค้นหาแล้วไม่เจอ” บน UI ไม่ใช่หลักฐานว่าเอเจนต์จะหาไม่เจอ
หน่วยความจำอยู่ที่ไหนและใครเป็นคนเขียน
หัวข้อที่มีชื่อว่า “หน่วยความจำอยู่ที่ไหนและใครเป็นคนเขียน”เบราว์เซอร์หน่วยความจำอยู่ที่ การตั้งค่า → เวิร์กสเปซ → หน่วยความจำ
(/workspaces/<id>/settings/memory) พร้อมแท็บข้อเท็จจริง นโยบาย และกราฟความรู้
มีความไม่สมมาตรตรงนี้ที่ทำให้หลายคนประหลาดใจ: คุณแก้ไขและลบหน่วยความจำได้
แต่สร้างมันไม่ได้ ทั้งแท็บข้อเท็จจริงและแท็บนโยบายไม่มีปุ่มสำหรับเพิ่ม การสร้าง
เนื้อหาเป็นเรื่องฝั่งเอเจนต์ ผ่าน propose_fact และ propose_policy
(supersede_fact / supersede_policy เพื่อแทนที่) remember เขียนรายการ
hot-tier ที่ผูกกับเซสชัน ซึ่ง consolidate_memory อาจยกระดับเป็นข้อเท็จจริง
ในภายหลัง; record_observation และ update_my_notes เขียนสมุดจดชั่วคราวส่วนตัว
ที่ถูกฉีดตอนสั่งงาน เบราว์เซอร์นี้เป็นพื้นที่สำหรับตรวจทานและแก้ไข ไม่ใช่สำหรับ
สร้างเนื้อหา — ดังนั้นถ้าคุณอยากได้ข้อเท็จจริงในหน่วยความจำ วิธีใส่เข้าไปคือ
บอกเอเจนต์
การดำเนินการบำรุงรักษาสองอย่างก็ถูกเรียกโดยเอเจนต์เช่นกัน ไม่ได้ตั้งเวลาไว้:
consolidate_memory รวมและตัดข้อเท็จจริงที่สะสมไว้ และ harmonize_memory
ประสานความเชื่อที่แยกจากกันไปในหมู่เอเจนต์ list_memory_conflicts แสดงสิ่งที่
การตรวจจับความขัดแย้งบันทึกไว้แล้ว ไม่มีอะไรมาหารันให้คุณตามตัวจับเวลา
ข้อตัดสินใจจากการประชุมจะถูกเก็บเข้าสู่โดเมน decisions เมื่อขั้นตอนบันทึก
การประชุมบันทึกไว้; นั่นไม่ใช่ตัวจับเวลาบนการรันเอเจนต์ที่เสร็จสิ้น
แนวคิดที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “แนวคิดที่เกี่ยวข้อง”- โมเดลเอเจนต์: บทบาทคือสิ่งที่การให้สิทธิ์เขียนอ้างอิงถึง
- เวิร์กสเปซและการแยกโดเมน: หน่วยความจำถูกผูกกับเวิร์กสเปซและอยู่ในไฟล์ฐานข้อมูลของเวิร์กสเปซนั้นเอง
- จัดการหน่วยความจำของเวิร์กสเปซ: การทำงานกับหน่วยความจำในทางปฏิบัติ