GEODE
Autonomous Agent Harness
จากการสังเกตสู่การกระทำถัดไป
ฮาร์เนสเอเจนต์อัตโนมัติที่รันบนเครื่อง ซึ่งรับงานวิจัย งานไฟล์ และงานตามกำหนดเวลาได้ โมเดลเลือกการกระทำถัดไป ส่วนรันไทม์ตรวจสิทธิ์การใช้เครื่องมือและตัดสินว่างานเสร็จเมื่อใด
ข้อเสนอให้หยุดของโมเดลจะกลายเป็นความเสร็จได้ก็ต่อเมื่อผ่านการตรวจยืนยัน
สำหรับการหยุดแบบส่งมอบได้ แม้โมเดลขอหยุด ก็ยังต้องผ่านการตรวจยืนยันความเสร็จ ผลลัพธ์คือ เสร็จ ทำต่อภายในงบ หรือรอรีวิว ส่วนขีดจำกัดการรัน การยกเลิก และข้อผิดพลาด จบในสถานะหยุดที่แยกต่างหาก
Verify → เสร็จสิ้น
เฉพาะการหยุดแบบส่งมอบได้เท่านั้นที่ผ่าน PreVerify → การตัดสิน → PostVerify → Stop ทั้งข้อเสนอให้หยุดของโมเดลและคำสั่งของ hook ไม่ได้เป็นความเสร็จด้วยตัวเอง
arun · เทิร์นของโมเดล
loop/agent_loop.pyข้อมูล: ข้อเสนอให้หยุดการหยุดแบบส่งมอบได้ · natural ฯลฯloop/_guards.py · models.pyเมื่อโมเดลตอบเป็นข้อความโดยไม่เรียกเครื่องมือ เทิร์นนั้นจะกลายเป็นแคนดิเดตการหยุดแบบ natural (forced_text ในรอบสุดท้ายที่อนุญาต) ข้อเสนอให้หยุดของโมเดลยังไม่ใช่ความเสร็จ
การหยุดแบบส่งมอบได้ · natural ฯลฯ
loop/_guards.py · models.pyข้อมูล: แคนดิเดตความเสร็จfinalize_and_return_asyncloop/_lifecycle.pyมีเพียง natural, forced_text และ actionable_partial ที่เป็นการหยุดแบบส่งมอบได้ และมีเพียงสามแบบนี้ที่ไปสู่การตรวจยืนยันสาธารณะ
finalize_and_return_async
loop/_lifecycle.pyรัน · ตัดสิน: PreVerifyPreVerify · STRENGTHENcore/hooks/public.pyด้วย STRENGTHEN hook PreVerify ทำได้เพียงเพิ่มข้อกำหนดและรหัสสิ่งที่ขาด ทำให้คำตัดสินเข้มงวดขึ้นได้ แต่ไม่มีวันทำให้ผ่าน
finalize_and_return_async
loop/_lifecycle.pyรัน · ตัดสิน: verify_turn_asyncการตรวจเชิงโครงสร้าง · empty_turncore/agent/verify.pyการตรวจเชิงโครงสร้างมาก่อน (เทิร์นว่าง, model_action_required) ความล้มเหลวเชิงโครงสร้างที่แก้ไม่ได้จะข้ามการตัดสินเชิงความหมาย ค่าตั้งเก่าเช่น off หรือ rule_based ถูกแปลงเป็น llm_judge และปิดคำตัดสินไม่ได้
การตัดสินเชิงความหมาย · LLM หรือ Jev
core/agent/verify.pyข้อมูล: คำขอการตัดสินโมเดลผู้ตัดสินผู้ตัดสินที่เลือก (LLM judge เป็นค่าเริ่มต้น หรือ Jev Choice เมื่อเลือก) ถูกเรียกหนึ่งครั้งโดยไม่มีเครื่องมือ ไม่เกิน 120 วินาที และไม่เกินงบเวลาที่เหลือ แคนดิเดตที่อาจมีข้อสังเกตส่วนบุคคลจะไม่ถูกส่งไปยังผู้ตัดสินเสริม
การตัดสินเชิงความหมาย · LLM หรือ Jev
core/agent/verify.pyข้อมูล: passed · rubric_missespolicy_action · การอ่านคำตัดสินloop/_lifecycle.pyคำตัดสินประกอบด้วยผ่านหรือไม่ผ่าน รหัสสิ่งที่ขาด reflection สำหรับความพยายามครั้งถัดไป และการลองใหม่มีประโยชน์หรือไม่ การผ่านเชิงความหมายไม่มีวันกลบการตรวจเชิงโครงสร้างที่ล้มเหลว
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyรัน · ตัดสิน: การตัดสินของ PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyhook PostVerify ตัดสิน ACCEPT, REVISE หรือ ESCALATE การ ACCEPT แคนดิเดตที่ไม่ผ่านการตรวจยืนยันจะกลายเป็น escalate หากไม่มีการตัดสิน จะใช้ค่าเริ่มต้นของรันไทม์ (ผ่าน → accept, ลองใหม่ได้ → revise, นอกนั้น → escalate)
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyรัน · ตัดสิน: Stop · CONTINUEStop · CONTINUEcore/hooks/public.pyเฉพาะเมื่อไม่ escalate คำสั่ง CONTINUE ของ hook Stop จึงขอให้ทำต่อเพื่อแก้ไขได้ คำสั่งของ hook เป็นอินพุตของความพยายามครั้งถัดไป ไม่ใช่อำนาจ
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyข้อมูล: completed · บันทึกแล้วcheckpoint · สถานะเซสชันmemory · observabilityเมื่อผ่านและ accept ความพยายามที่ทำต่อจะถูกรวมเข้าด้วยกัน ผลลัพธ์ถูกบันทึก และเซสชันถูกบันทึกเป็น completed
finalize_and_return_async
loop/_lifecycle.pyข้อมูล: การตอบกลับIPC · ผู้เรียก CLIคืนคำตอบสุดท้ายเมื่อ completed คืนคำตอบว่างพร้อม EXTERNAL_VERIFICATION_REQUIRED เมื่อรอรีวิว และคืนเหตุผลการหยุดสำหรับการหยุดที่ไม่ผ่านการตรวจยืนยัน
แก้ไขภายในงบ
ความล้มเหลวที่แก้ได้จะทำคำขอเดิมต่อ งบเริ่มต้นคือสองครั้ง เมื่อหมดลง แคนดิเดตจะรอรีวิว
การตัดสินเชิงความหมาย · LLM หรือ Jev
core/agent/verify.pyข้อมูล: passed · rubric_missespolicy_action · การอ่านคำตัดสินloop/_lifecycle.pyคำตัดสินประกอบด้วยผ่านหรือไม่ผ่าน รหัสสิ่งที่ขาด reflection สำหรับความพยายามครั้งถัดไป และการลองใหม่มีประโยชน์หรือไม่ การผ่านเชิงความหมายไม่มีวันกลบการตรวจเชิงโครงสร้างที่ล้มเหลว
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyรัน · ตัดสิน: การตัดสินของ PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyhook PostVerify ตัดสิน ACCEPT, REVISE หรือ ESCALATE การ ACCEPT แคนดิเดตที่ไม่ผ่านการตรวจยืนยันจะกลายเป็น escalate หากไม่มีการตัดสิน จะใช้ค่าเริ่มต้นของรันไทม์ (ผ่าน → accept, ลองใหม่ได้ → revise, นอกนั้น → escalate)
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyรัน · ตัดสิน: Stop · CONTINUEStop · CONTINUEcore/hooks/public.pyเฉพาะเมื่อไม่ escalate คำสั่ง CONTINUE ของ hook Stop จึงขอให้ทำต่อเพื่อแก้ไขได้ คำสั่งของ hook เป็นอินพุตของความพยายามครั้งถัดไป ไม่ใช่อำนาจ
งบการทำต่อ · ค่าเริ่มต้น 2
loop/_lifecycle.pyรัน · ตัดสิน: แก้ไข · ความพยายาม +1_arun_once · ทำต่อเพื่อแก้ไขloop/agent_loop.pyเมื่อมีคำสั่งให้แก้ไข และหมายเลขความพยายามยังต่ำกว่างบ (ค่าเริ่มต้นสองครั้ง) เท่านั้น คำขอเดิมจึงดำเนินต่อ เมื่อถึงงบจะกลายเป็น escalate_budget_exhausted และรอรีวิว
รอรีวิว
คำตัดสินที่ใช้ไม่ได้ ความพยายามเปลี่ยนความล้มเหลวเป็นผลผ่าน หรืองบที่หมดลง จะระงับแคนดิเดตและพักเซสชัน
verification_error · ล้มเหลวแบบปิด
core/agent/verify.pyความล้มเหลว · ไม่มีคำตัดสิน: verification_errorpolicy_action · การอ่านคำตัดสินloop/_lifecycle.pyผู้ตัดสินที่ขาดหาย การหมดเวลา หรือการตอบกลับที่ไม่ถูกต้อง จะกลายเป็น verification_error ซึ่งไม่ใช่ทั้งผลผ่านและสัญญาณให้แก้ไข คำตัดสินที่ใช้ไม่ได้ไม่มีวันแทนความสำเร็จ
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyรัน · ตัดสิน: การตัดสินของ PostVerifyPostVerify · ACCEPT · REVISE · ESCALATEcore/hooks/public.pyhook PostVerify ตัดสิน ACCEPT, REVISE หรือ ESCALATE การ ACCEPT แคนดิเดตที่ไม่ผ่านการตรวจยืนยันจะกลายเป็น escalate หากไม่มีการตัดสิน จะใช้ค่าเริ่มต้นของรันไทม์ (ผ่าน → accept, ลองใหม่ได้ → revise, นอกนั้น → escalate)
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyรัน · ตัดสิน: ESCALATE · pendingผู้รีวิวภายนอกแคนดิเดตถูกเก็บเป็น pending_text และถูกระงับจากการตอบกลับปกติ checkpoint ถูกบันทึกและเซสชันถูกพักไว้ ไม่มีการติดต่อผู้รีวิวภายนอกโดยอัตโนมัติ
policy_action · การอ่านคำตัดสิน
loop/_lifecycle.pyบันทึก · สังเกต: คำตัดสิน · แถวหลักฐานtimeline · แถวการตัดสินใน ledgermemory · observabilitytimeline ได้แถวการตัดสิน หลักฐาน และ pending ส่วน evidence ledger ได้แถว verification_policy ทั้งหมดนี้เป็นบันทึกแบบ best-effort ไม่ใช่หลักฐานของผลกระทบภายนอก
การหยุดที่ไม่ตรวจยืนยัน
การหยุดจากการยกเลิก ขีดจำกัด และโครงสร้างพื้นฐาน รวมถึงการรัน control workflow ถูกบันทึกโดยไม่ผ่านการตรวจยืนยันสาธารณะ
arun · เทิร์นของโมเดล
loop/agent_loop.pyรัน · ตัดสิน: guard · ขีดจำกัดความล้มเหลว · ขีดจำกัด · การหยุดจากการยกเลิกloop/_guards.py · models.pyguard เช่น ขีดจำกัดรอบ เวลา ค่าใช้จ่าย และบริบท การยกเลิก และการตรวจจับความล้มเหลวซ้ำ จบเทิร์นด้วยสมาชิกหนึ่งตัวของเซต TerminationReason แบบปิด ขีดจำกัดที่ปิดไว้ในการตั้งค่าไม่ได้ถูกบังคับใช้เสมอไป
ความล้มเหลว · ขีดจำกัด · การหยุดจากการยกเลิก
loop/_guards.py · models.pyความล้มเหลว · ไม่มีคำตัดสิน: ความล้มเหลว · การหยุดจากการยกเลิกfinalize_and_return_asyncloop/_lifecycle.pyการหยุดจากการยกเลิก โครงสร้างพื้นฐาน และขีดจำกัด ไม่มีแคนดิเดตให้ตรวจยืนยัน จึงถูกบันทึกโดยไม่ผ่านการตรวจยืนยันสาธารณะ
control workflow · ข้ามการตรวจยืนยันสาธารณะ
ipc_server/poller.pyรัน · ตัดสิน: ข้ามการตรวจยืนยันสาธารณะfinalize_and_return_asyncloop/_lifecycle.pyเมื่อการเรียก IPC ขอข้ามการตรวจยืนยันสาธารณะ หรือมี control workflow ทำงานอยู่ การตรวจยืนยันสาธารณะจะปิดเฉพาะการรันนั้น และคืนค่าเดิมหลังจากนั้น
finalize_and_return_async
loop/_lifecycle.pyข้อมูล: บันทึกเท่านั้น · ไม่ตรวจยืนยันcheckpoint · สถานะเซสชันmemory · observabilityการหยุดที่ไม่ผ่านการตรวจยืนยันยังคงบันทึกผลลัพธ์และ checkpoint และส่งอีเวนต์สิ้นสุดเซสชัน
finalize_and_return_async
loop/_lifecycle.pyข้อมูล: การตอบกลับIPC · ผู้เรียก CLIคืนคำตอบสุดท้ายเมื่อ completed คืนคำตอบว่างพร้อม EXTERNAL_VERIFICATION_REQUIRED เมื่อรอรีวิว และคืนเหตุผลการหยุดสำหรับการหยุดที่ไม่ผ่านการตรวจยืนยัน
ทุกการเชื่อมต่อมีน้ำหนักเท่ากัน เลือกโฟลว์เพื่อไฮไลต์เฉพาะเส้นทางของโฟลว์นั้นพร้อมขั้นตอนที่มีหมายเลข
- เส้นทึบ · ทิศทางที่คำขอ แคนดิเดต และผลลัพธ์ไหลไป
- เส้นประ · รัน ตัดสิน อนุญาต ตั้งค่า
- เส้นยาวสลับจุด · บันทึกและการสังเกต แยกจากคำตัดสิน
- เส้นประสั้น · ความล้มเหลวหรือคำตัดสินที่ใช้ไม่ได้
- เส้นดำหนา · โฟลว์ที่เลือก ตัวเลขบอกลำดับ
- กล่อง · ขอบเขตของโค้ดหรือบันทึก พร้อมพาธในส่วนหัว
- ชิปด้านใน · องค์ประกอบภายในขอบเขตนั้น
- กล่องเส้นประ · อยู่นอกขอบเขตนั้น
- ลูป · finalization
- การหยุด · hook · คำตัดสิน
- การจัดเก็บ · บันทึก
- ทางเข้า IPC
วาดเฉพาะเส้นทางการเรียกในคอมมิตที่ตรึงไว้ 9e2c041 ผลผ่านของผู้ตัดสินแยกจากความสำเร็จของ verifier ของเบนช์มาร์กภายนอก ความเสร็จในที่นี้เป็นการตัดสินภายในรันไทม์
- เอนจินผู้ตัดสิน
- ค่าเริ่มต้นคือ LLM judge ส่วน Jev Choice ตัดสินเฉพาะเมื่อตั้ง judgment_engine เป็น jev ไม่ว่ากรณีใด ผู้ตัดสินที่ใช้ไม่ได้ให้ผลเป็น verification_error ไม่ใช่ความสำเร็จ
- สิ่งที่ hook ทำได้
- PreVerify ทำได้เพียงทำให้คำตัดสินเข้มงวดขึ้น PostVerify ให้แคนดิเดตที่ล้มเหลวผ่านไม่ได้ และ Stop ขอให้ทำต่อได้เฉพาะเมื่อไม่ escalate
- รอรีวิว
- การรอรีวิวบันทึกว่าต้องมีการตัดสินจากภายนอก ไม่ได้แจ้งเตือนใคร และไม่ได้หมายความว่าผลลัพธ์ได้รับการอนุมัติ