ข้ามไปยังเนื้อหา

รันเอเจนต์แบบขนาน

คู่มือนี้แสดงวิธีรันเอเจนต์หลายตัวพร้อมกันโดยที่มันไม่เขียนทับกันเอง

เมื่องานเริ่มในสเปซ Control Center จะจัดเตรียมเช็กเอาต์แบบคัดลอกเมื่อเขียนหนึ่งชุดต่อรีโปที่ลงทะเบียนไว้หนึ่งตัว ไว้ใต้รากของสเปซนั้นเอง บนสาขาที่มาจากเทมเพลตสาขาของเวิร์กสเปซ จากนั้นเอเจนต์แต่ละตัวในสเปซจะได้ไดเรกทอรีทำงานแบบโอเวอร์เลย์ของตัวเอง — แต่โอเวอร์เลย์เหล่านั้นใช้ร่วมกันไดเรกทอรี repos/ ของสเปซนั้น

ดังนั้น:

  • เอเจนต์สองตัวในสเปซต่างกันทำงานในเช็กเอาต์คนละชุด บนสาขาคนละสาขา นั่นคือการแยกที่แท้จริง
  • เอเจนต์สองตัวในสเปซเดียวกันทำงานในเช็กเอาต์ชุดเดียวกัน บนสาขาเดียวกัน พาธโอเวอร์เลย์ของพวกมันต่างกัน ล็อกพาธการสั่งงาน (ซึ่งบังคับให้การรันเรียงกันเป็นคิวเฉพาะเมื่อพวกมันขอไดเรกทอรีทำงานเดียวกันเป๊ะ) จึงไม่บังคับให้พวกมันเรียงคิวกันเช่นกัน พวกมันเขียนไฟล์เดียวกันพร้อมกันได้

กฎที่ตามมาคือ: หนึ่งสเปซต่อหนึ่งงานที่รันขนานกัน

  1. เปิดสเปซกับเอเจนต์ A แล้วส่งงานหนึ่งอย่างให้มัน
  2. เปิดสเปซที่สองกับเอเจนต์ B แล้วส่งงานอีกอย่างที่ต่างกันให้มัน
  3. ทั้งคู่ถูกสั่งงานทันที แต่ละตัวอยู่ในเช็กเอาต์ของสเปซตัวเองบนสาขาของตัวเอง

นี่คือสูตรที่ควรใช้ทุกครั้งที่เอเจนต์จะแก้ไขไฟล์

ในสเปซเดียว ให้ @-mention เอเจนต์มากกว่าหนึ่งตัว:

@alice refactor the auth module. @bob review what alice lands.

เอเจนต์ทั้งสองถูกสั่งงานแบบขนานและสตรีมเข้าสเปซเดียวกัน โดยติดแท็กผู้ส่ง เพราะพวกมันใช้เช็กเอาต์ของสเปซร่วมกัน ให้ใช้วิธีนี้เพื่อการทำงานร่วมกัน — ตัวหนึ่งเขียน อีกตัวอ่าน หรือเอเจนต์สองตัววิเคราะห์ทรีเดียวกัน — ไม่ใช่สำหรับการแก้ไขอิสระสองชุด

เทมเพลต pr_review ที่มีมาในตัวคือตัวอย่างที่ส่งมอบจริงของการกระจายงาน: โหนดรีวิวเวอร์หลายโหนดรันพร้อมกันจากทริกเกอร์เดียว และโหนด Consolidate (join) รวมข้อค้นพบของพวกมันเข้าเป็นรายงานเดียว รันมันจากหน้าจอไปป์ไลน์แล้วรีวิวเวอร์ทุกตัวจะถูกสั่งงานแบบขนาน

ตัวแก้ไขไปป์ไลน์ซ่อนเครื่องหมายเฉพาะปลายทางไว้ และต่อสายใหม่ให้มันรอทุกปลายทางที่ยังใช้งานอยู่เมื่อคุณเพิ่มหรือเชื่อมขั้นตอน สาขาที่คุณวาดเองจึงรันจริง

การสังเกตการณ์ → สด (ส่วนท้ายของแถบข้าง → การสังเกตการณ์ แล้วเลือกแท็บสด) แสดงรายชื่อเอเจนต์ของเวิร์กสเปซนี้ โดยอัปเดตใหม่ทุกวินาที: สถานะ (กำลังรัน / ว่าง / จอดไว้ / ยกเลิกแล้ว) สิ่งที่แต่ละตัวกำลังทำ โทเค็นและค่าใช้จ่ายของการรันล่าสุด และตัวควบคุมการฆ่าสำหรับโปรเซสที่กำลังรัน การเลือกรายการหนึ่งจะเปิดลิ้นชักทรานสคริปต์สด

การตั้งค่า → เวิร์กสเปซ → เอเจนต์ แสดงรายชื่อเดียวกันด้วยชุดคำศัพท์สถานะที่ต่างออกไปและเน้นสิ่งที่ต้องให้ความสนใจก่อน ซึ่งอนุมานจากประวัติการรันของเอเจนต์แต่ละตัว — กำลังรัน, ถูกบล็อก, ล้มเหลว, ว่าง, ยังไม่เคยรัน — เรียงลำดับให้สิ่งที่ต้องให้ความสนใจลอยขึ้นมาอยู่บนสุด แท็บ บันทึก ของเอเจนต์แต่ละตัวเก็บบันทึกการรันของมันเอง

พื้นผิวทั้งสองถูกจำกัดขอบเขตไว้ที่เวิร์กสเปซที่ใช้งานอยู่

ระหว่างสเปซ แต่ละสเปซอยู่บนสาขาของตัวเอง การชนกันจึงปรากฏเป็นความขัดแย้งในการรวมของ Git ธรรมดา ๆ เมื่อคุณรวม pull request ตัวที่สอง จงแก้มันด้วยวิธีเดียวกับที่คุณแก้ความขัดแย้งในการรวมใด ๆ

ภายในสเปซเดียวไม่มีเส้นแบ่งสาขาและไม่มีล็อก: เอเจนต์กำลังเขียนไฟล์เดียวกันแบบสด ๆ และตัวที่แพ้ก็แค่ถูกเขียนทับไปเลย หากคุณพบว่าตัวเองอยากให้เอเจนต์สองตัวแก้ไขในสเปซเดียว ให้แยกงานออกเป็นสองสเปซแทน

วิธีลดการชนกันทั้งสองกรณี:

  • ให้ขอบเขตที่ต่างกันชัดเจนแก่เอเจนต์แต่ละตัว — ไฟล์ต่างกัน โมดูลต่างกัน
  • ใช้กราฟโค้ดตรวจว่าการเปลี่ยนแปลงหนึ่ง ๆ แตะอะไรบ้างก่อนสั่งงาน ดู ค้นหาโค้ดด้วยกราฟโค้ด
  • รีวิวและรวม pull request ของเอเจนต์แต่ละตัวอย่างทันท่วงที

เอเจนต์ที่รันอยู่แต่ละตัวกินทรัพยากรดังนี้:

  • เช็กเอาต์ของสเปซ — แทบไม่มีต้นทุนบนดิสก์ตราบใดที่การคัดลอกเมื่อเขียนยังใช้ได้ บน Windows จะเป็น git worktree ระบบไฟล์ที่ไม่สามารถ reflink ได้จะทำให้การจัดเตรียมล้มเหลว แทนที่จะคัดลอก
  • โปรเซสหนึ่งตัวบนโฮสต์ของเซิร์ฟเวอร์
  • โทเค็นของโมเดล ซึ่งสะสมเพิ่มขึ้นตามจำนวนเอเจนต์

ค่าใช้จ่ายไปลงที่ การสังเกตการณ์ → ข้อมูลเชิงลึก โปรดทราบว่าเทิร์นแบบโต้ตอบปกติไม่มีเพดานค่าใช้จ่าย ดู จัดการต้นทุน สำหรับสองคำสั่งที่มีเพดาน