รันเอเจนต์แบบขนาน
คู่มือนี้แสดงวิธีรันเอเจนต์หลายตัวพร้อมกันโดยที่มันไม่เขียนทับกันเอง
หน่วยของการแยกคือสเปซ ไม่ใช่เอเจนต์
หัวข้อที่มีชื่อว่า “หน่วยของการแยกคือสเปซ ไม่ใช่เอเจนต์”เมื่องานเริ่มในสเปซ Control Center จะจัดเตรียมเช็กเอาต์แบบคัดลอกเมื่อเขียนหนึ่งชุดต่อรีโปที่ลงทะเบียนไว้หนึ่งตัว ไว้ใต้รากของสเปซนั้นเอง บนสาขาที่มาจากเทมเพลตสาขาของเวิร์กสเปซ จากนั้นเอเจนต์แต่ละตัวในสเปซจะได้ไดเรกทอรีทำงานแบบโอเวอร์เลย์ของตัวเอง — แต่โอเวอร์เลย์เหล่านั้นใช้ร่วมกันไดเรกทอรี repos/ ของสเปซนั้น
ดังนั้น:
- เอเจนต์สองตัวในสเปซต่างกันทำงานในเช็กเอาต์คนละชุด บนสาขาคนละสาขา นั่นคือการแยกที่แท้จริง
- เอเจนต์สองตัวในสเปซเดียวกันทำงานในเช็กเอาต์ชุดเดียวกัน บนสาขาเดียวกัน พาธโอเวอร์เลย์ของพวกมันต่างกัน ล็อกพาธการสั่งงาน (ซึ่งบังคับให้การรันเรียงกันเป็นคิวเฉพาะเมื่อพวกมันขอไดเรกทอรีทำงานเดียวกันเป๊ะ) จึงไม่บังคับให้พวกมันเรียงคิวกันเช่นกัน พวกมันเขียนไฟล์เดียวกันพร้อมกันได้
กฎที่ตามมาคือ: หนึ่งสเปซต่อหนึ่งงานที่รันขนานกัน
รันงานแบบขนาน — แยกสเปซ
หัวข้อที่มีชื่อว่า “รันงานแบบขนาน — แยกสเปซ”- เปิดสเปซกับเอเจนต์ A แล้วส่งงานหนึ่งอย่างให้มัน
- เปิดสเปซที่สองกับเอเจนต์ B แล้วส่งงานอีกอย่างที่ต่างกันให้มัน
- ทั้งคู่ถูกสั่งงานทันที แต่ละตัวอยู่ในเช็กเอาต์ของสเปซตัวเองบนสาขาของตัวเอง
นี่คือสูตรที่ควรใช้ทุกครั้งที่เอเจนต์จะแก้ไขไฟล์
ทำงานร่วมกันในสเปซเดียว — กล่าวถึงหลายตัว
หัวข้อที่มีชื่อว่า “ทำงานร่วมกันในสเปซเดียว — กล่าวถึงหลายตัว”ในสเปซเดียว ให้ @-mention เอเจนต์มากกว่าหนึ่งตัว:
@alice refactor the auth module. @bob review what alice lands.เอเจนต์ทั้งสองถูกสั่งงานแบบขนานและสตรีมเข้าสเปซเดียวกัน โดยติดแท็กผู้ส่ง เพราะพวกมันใช้เช็กเอาต์ของสเปซร่วมกัน ให้ใช้วิธีนี้เพื่อการทำงานร่วมกัน — ตัวหนึ่งเขียน อีกตัวอ่าน หรือเอเจนต์สองตัววิเคราะห์ทรีเดียวกัน — ไม่ใช่สำหรับการแก้ไขอิสระสองชุด
กระจายงานออกจากไปป์ไลน์
หัวข้อที่มีชื่อว่า “กระจายงานออกจากไปป์ไลน์”เทมเพลต pr_review ที่มีมาในตัวคือตัวอย่างที่ส่งมอบจริงของการกระจายงาน: โหนดรีวิวเวอร์หลายโหนดรันพร้อมกันจากทริกเกอร์เดียว และโหนด Consolidate (join) รวมข้อค้นพบของพวกมันเข้าเป็นรายงานเดียว รันมันจากหน้าจอไปป์ไลน์แล้วรีวิวเวอร์ทุกตัวจะถูกสั่งงานแบบขนาน
ตัวแก้ไขไปป์ไลน์ซ่อนเครื่องหมายเฉพาะปลายทางไว้ และต่อสายใหม่ให้มันรอทุกปลายทางที่ยังใช้งานอยู่เมื่อคุณเพิ่มหรือเชื่อมขั้นตอน สาขาที่คุณวาดเองจึงรันจริง
เฝ้าดูการทำงานของพวกมัน
หัวข้อที่มีชื่อว่า “เฝ้าดูการทำงานของพวกมัน”การสังเกตการณ์ → สด (ส่วนท้ายของแถบข้าง → การสังเกตการณ์ แล้วเลือกแท็บสด) แสดงรายชื่อเอเจนต์ของเวิร์กสเปซนี้ โดยอัปเดตใหม่ทุกวินาที: สถานะ (กำลังรัน / ว่าง / จอดไว้ / ยกเลิกแล้ว) สิ่งที่แต่ละตัวกำลังทำ โทเค็นและค่าใช้จ่ายของการรันล่าสุด และตัวควบคุมการฆ่าสำหรับโปรเซสที่กำลังรัน การเลือกรายการหนึ่งจะเปิดลิ้นชักทรานสคริปต์สด
การตั้งค่า → เวิร์กสเปซ → เอเจนต์ แสดงรายชื่อเดียวกันด้วยชุดคำศัพท์สถานะที่ต่างออกไปและเน้นสิ่งที่ต้องให้ความสนใจก่อน ซึ่งอนุมานจากประวัติการรันของเอเจนต์แต่ละตัว — กำลังรัน, ถูกบล็อก, ล้มเหลว, ว่าง, ยังไม่เคยรัน — เรียงลำดับให้สิ่งที่ต้องให้ความสนใจลอยขึ้นมาอยู่บนสุด แท็บ บันทึก ของเอเจนต์แต่ละตัวเก็บบันทึกการรันของมันเอง
พื้นผิวทั้งสองถูกจำกัดขอบเขตไว้ที่เวิร์กสเปซที่ใช้งานอยู่
จัดการความขัดแย้ง
หัวข้อที่มีชื่อว่า “จัดการความขัดแย้ง”ระหว่างสเปซ แต่ละสเปซอยู่บนสาขาของตัวเอง การชนกันจึงปรากฏเป็นความขัดแย้งในการรวมของ Git ธรรมดา ๆ เมื่อคุณรวม pull request ตัวที่สอง จงแก้มันด้วยวิธีเดียวกับที่คุณแก้ความขัดแย้งในการรวมใด ๆ
ภายในสเปซเดียวไม่มีเส้นแบ่งสาขาและไม่มีล็อก: เอเจนต์กำลังเขียนไฟล์เดียวกันแบบสด ๆ และตัวที่แพ้ก็แค่ถูกเขียนทับไปเลย หากคุณพบว่าตัวเองอยากให้เอเจนต์สองตัวแก้ไขในสเปซเดียว ให้แยกงานออกเป็นสองสเปซแทน
วิธีลดการชนกันทั้งสองกรณี:
- ให้ขอบเขตที่ต่างกันชัดเจนแก่เอเจนต์แต่ละตัว — ไฟล์ต่างกัน โมดูลต่างกัน
- ใช้กราฟโค้ดตรวจว่าการเปลี่ยนแปลงหนึ่ง ๆ แตะอะไรบ้างก่อนสั่งงาน ดู ค้นหาโค้ดด้วยกราฟโค้ด
- รีวิวและรวม pull request ของเอเจนต์แต่ละตัวอย่างทันท่วงที
ข้อควรพิจารณาด้านทรัพยากร
หัวข้อที่มีชื่อว่า “ข้อควรพิจารณาด้านทรัพยากร”เอเจนต์ที่รันอยู่แต่ละตัวกินทรัพยากรดังนี้:
- เช็กเอาต์ของสเปซ — แทบไม่มีต้นทุนบนดิสก์ตราบใดที่การคัดลอกเมื่อเขียนยังใช้ได้ บน Windows จะเป็น
git worktreeระบบไฟล์ที่ไม่สามารถ reflink ได้จะทำให้การจัดเตรียมล้มเหลว แทนที่จะคัดลอก - โปรเซสหนึ่งตัวบนโฮสต์ของเซิร์ฟเวอร์
- โทเค็นของโมเดล ซึ่งสะสมเพิ่มขึ้นตามจำนวนเอเจนต์
ค่าใช้จ่ายไปลงที่ การสังเกตการณ์ → ข้อมูลเชิงลึก โปรดทราบว่าเทิร์นแบบโต้ตอบปกติไม่มีเพดานค่าใช้จ่าย ดู จัดการต้นทุน สำหรับสองคำสั่งที่มีเพดาน