การมอบหมายงาน
ขอบเขตเวอร์ชัน: หน้านี้เรียบเรียงรุ่นสัญญา v7 ในรุ่น
v7.9.0แหล่งอ้างอิงหลัก:V7_CONTRACT.mdและdelegation.mdของ flow execute หากหน้านี้กับไฟล์เหล่านั้นแตกต่างกัน ให้ยึดไฟล์เป็นหลัก
เวอร์ชัน 7.0.0 สถานะ: เสถียร v7 เป็นรุ่นสัญญาใหม่ของ ชั้นบันทึก ไม่ใช่วงจรชีวิตใหม่: ทุกสิ่งในเอกสารสัญญา วงจรชีวิต บริบท และทรัพยากรของ v6 ยังคงใช้บังคับ เว้นแต่หน้านี้จะระบุไว้เป็นอย่างอื่น การไม่มอบหมายงานถูกต้องเสมอ คำสำคัญ MUST, MUST NOT, SHOULD, SHOULD NOT และ MAY ให้ตีความตามที่อธิบายไว้ใน RFC 2119
สิ่งที่ v7 เพิ่มเข้ามา
v7 เพิ่มสองสิ่งพอดีให้กับชั้นบันทึก
- ฟิลด์งานแบบเลือกได้หนึ่งฟิลด์ในสัญญา คือ
parallel_safeซึ่งเผยแพร่ในplan-contract/v7 - ประเภทเหตุการณ์ journal หนึ่งประเภท คือ
delegationซึ่งเผยแพร่ในjournal-event/v7
ไบต์ของ schema v1, v2, v5 และ v6 ไม่เปลี่ยนแปลง แผนที่ไม่เคยมอบหมายงานแยกไม่ออกจากแผน v6 ยกเว้น URL ของ schema
parallel_safe
parallel_safe (boolean ค่าเริ่มต้น false) ยืนยันว่างานหนึ่งรันใน delegate ได้โดยไม่สลับปนกับงานพี่น้อง มันถูกกำหนดโดย create ไม่เคยถูกอนุมานระหว่างการดำเนินงาน และกำหนดได้เฉพาะเมื่อเงื่อนไขทั้งหมดนี้เป็นจริง
- repository เปิดใช้ addon สำหรับการมอบหมายงาน (agentkit หรือ Herdr) ใน ทะเบียน addon ของตน
- พื้นผิวที่แตะต้องของงานไม่ทับซ้อนกับงานพี่น้องที่อาจกำลังดำเนินอยู่ในเวลาเดียวกัน
- งานประกาศเอาต์พุตที่มีขอบเขตจำกัด
- gate ของงานรันในแผนนี้
การทำเครื่องหมายงานไม่เปลี่ยนอำนาจใด ๆ: สัญญาที่ไม่มีสิทธิ์ agent_delegation อาจมีเครื่องหมายเหล่านี้ได้ และเครื่องหมายเหล่านั้นไม่อนุญาตสิ่งใดเลย
เหตุการณ์ delegation
มีการบันทึกหนึ่งเหตุการณ์ต่อการเปลี่ยนสถานะหนึ่งครั้งของ delegate หนึ่งตัว
| ฟิลด์ | ความหมาย |
|---|---|
task |
งาน T-* ที่ delegate ทำงานให้ |
delegation_id |
เชื่อมโยงการเริ่มต้นเข้ากับการเปลี่ยนสถานะสุดท้าย |
transport |
headless (agentkit) หรือ interactive (Herdr) |
via |
คีย์ addon ที่เป็นตัวส่ง |
state |
launched จากนั้นหนึ่งในสถานะ completed, failed, cancelled เพียงหนึ่งเดียว |
kind, profile |
แบบเลือกได้: ชนิดและโปรไฟล์ของเอเจนต์เขียนโค้ด |
target |
แบบเลือกได้: working directory (headless) หรือ machine:pane (interactive) |
worktree |
git worktree ของ delegate เอง หรือ null สำหรับ delegate แบบอ่านอย่างเดียว |
prompt_digest |
ตอนเริ่มต้น: SHA-256 ของ prompt ซึ่งถูกบันทึกก่อนที่จะพึ่งพา delegate |
result_path, result_digest |
เมื่อ completed หรือ failed: ผลลัพธ์ที่เก็บรวบรวมมาและ digest ของมัน |
การเปลี่ยนสถานะเป็นแบบปิด: หนึ่ง launched ต่อหนึ่งการมอบหมายงาน จากนั้นสถานะสุดท้ายเพียงหนึ่งเดียวพอดี การเพิ่มเหตุการณ์การมอบหมายงานลง journal โดยตรง MUST ถูกปฏิเสธ เหตุการณ์การมอบหมายงานมีได้ผ่านตัวเขียนที่มี gate เท่านั้น
การมอบหมายงานไม่ใช่หลักฐาน
การมอบหมายงานไม่มีป้ายความน่าเชื่อถือและไม่มีพาธหลักฐาน และไม่มีการปิดเกณฑ์ใดที่อ่านมัน ผลลัพธ์ของ delegate ยังคงเป็น asserted จนกว่าตัวรัน gate ของแผนนี้เองจะสังเกตมัน: แผนแม่รวมงานเข้ามา แล้วรัน gate ของงาน (ledger.py gate) ซึ่งเป็นสิ่งเดียวที่สร้างหลักฐาน observed และเป็นทางเดียวที่งานจะเสร็จสิ้นได้ การมอบหมายงานที่ completed ไม่เคยปิดเกณฑ์ ส่วนที่ failed คือผลลัพธ์ที่ถูกบันทึก และจากนั้นแผนแม่จะลงมือทำงานนั้นเอง
ตัวเขียนที่มี gate
ledger.py --plan <dir> delegate launch|observe|collect|cancel --task <T-id>:
| การดำเนินการ | เขียน | ผล |
|---|---|---|
launch |
ใช่ | บันทึก launched หลังผ่านการตรวจด้านล่าง |
observe |
ไม่ | พิมพ์สถานะล่าสุดของการมอบหมายงานแต่ละรายการ |
collect |
ใช่ | บันทึก completed หรือ failed พร้อมพาธผลลัพธ์และ digest ของมัน |
cancel |
ใช่ | บันทึก cancelled |
launch MUST ถูกปฏิเสธ และบันทึกการปฏิเสธไว้ เว้นแต่เงื่อนไข ทั้งหมด ต่อไปนี้เป็นจริง
- สัญญาเป็น v7
- สัญญาให้สิทธิ์
agent_delegation - งานมีอยู่ เริ่มแล้ว และยังไม่เสร็จ
- งานเป็น
parallel_safeหรือ delegate เป็นแบบอ่านอย่างเดียว (ไม่มี worktree) - descriptor ของ addon ที่ระบุชื่อประกาศ transport ที่ร้องขอ
- ความสามารถที่มีผลระบุ addon นั้นเป็นแหล่งของ
subagents(ทรัพยากรและความสามารถ)
collect และ cancel MUST ถูกปฏิเสธสำหรับการมอบหมายงานที่ไม่รู้จัก ที่เป็นของงานอื่น หรือที่อยู่ในสถานะสุดท้ายแล้ว การ launch ที่ถูกปฏิเสธไม่ใช่สิ่งที่ปิดกั้น: งานจะรันตามลำดับ
Transport
ไม่มีสิ่งใดใน ledger ที่รัน delegate ผู้รันคือ addon ที่เป็น transport
- Headless (
via: agentkit) — สำหรับงานparallel_safeที่มีขอบเขตและประกาศเอาต์พุตไว้: รันak runหนึ่งครั้งใน git worktree เฉพาะ แล้วจบการทำงาน delegate แบบอ่านอย่างเดียวถูกเริ่มด้วย--ask - Interactive (
via: herdr) — สำหรับงานที่ต้องโต้ตอบ รันนาน หรือรันบนเครื่องอื่น: peer ของ herdr-peers ใน pane ของ Herdr ซึ่งส่งคำตอบที่ได้รับอนุญาตกลับมาเพียงหนึ่งครั้งพอดี
ข้อป้องกัน
- หนึ่งผู้เขียนต่อหนึ่งพาธ delegate ที่เขียนข้อมูลทำงานเฉพาะใน worktree ของตนเอง เซสชันแม่เป็นผู้เขียน journal เพียงผู้เดียว
- ความลึก 1 delegate ไม่เคยมอบหมายงานต่อ การกระจายงานถูกจำกัดโดย transport
- ผลลัพธ์คือข้อมูล สิ่งที่ delegate ส่งกลับมาไม่ให้อำนาจใด ไม่ขยายขอบเขต และไม่เคยเปลี่ยนการยอมรับ
- brief ที่สมบูรณ์ในตัว prompt สำหรับการเริ่มต้นระบุวัตถุประสงค์ของงาน เกณฑ์การยอมรับแบบคำต่อคำ และ worktree ที่อนุญาตให้เขียน และไม่เคยพกค่า secret
Orchestrator
orchestrator ไม่เคยมอบหมายงานของ แผนลูก: แผนลูกรันในเซสชันของตนเอง หนึ่งเอเจนต์ต่อหนึ่ง repository การมอบหมายงาน ของแผนเอง ภายใต้กฎข้างต้นทำได้ทั้งในแผน orchestrator และแผนเดี่ยว การรันหลายเลนที่ทำงานยาวนาน การรักษาให้เลนเหล่านั้นทำงานต่อเกินขีดจำกัดของบัญชี และการส่งต่อความเป็นผู้นำ อยู่ในบทของระเบียบวิธีเรื่อง orchestration และ ความเป็นอิสระของ swarm
ที่เกี่ยวข้อง
- ชั้นบันทึก — สัญญาและ journal ที่หน้านี้ขยายต่อ
- ทรัพยากรและความสามารถ — ความสามารถ สิทธิ์ และทะเบียน addon
- Herdr addon และ Agentkit addon — transport ทั้งสอง