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

สร้างเทมเพลตไปป์ไลน์

เทมเพลตไปป์ไลน์เขียนขึ้นใน การตั้งค่าของเวิร์กสเปซ รายการ ไปป์ไลน์ ใน แถบข้างของเวิร์กสเปซคือ คิวการรัน ไม่ใช่รายการเทมเพลต — มันไม่มีคำสั่ง “สร้างเทมเพลต”

สำหรับความหมายของชนิดขั้นตอน คีย์บอดี และฟิลด์คอนฟิกแต่ละอย่าง ดู ขั้นตอนไปป์ไลน์

  1. ไปที่ การตั้งค่า → เวิร์กสเปซ → เทมเพลตไปป์ไลน์ (/workspaces/<workspace-id>/settings/pipelines)
  2. กด เทมเพลตใหม่

ไม่มีกล่องโต้ตอบให้กรอก id ตัวแก้ไขเปิดขึ้นทันทีบนโครงเริ่มต้นที่ให้มาซึ่งชื่อ ไปป์ไลน์ใหม่ พร้อม id ที่จัดสรรให้อัตโนมัติ (pipeline_1 แล้วก็ pipeline_2, …) คลิกชื่อเรื่องในส่วนหัวเพื่อเปลี่ยนชื่อ

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

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

โหนดในพาเลต ชนิดขั้นตอน มันทำอะไร
Bash script listen รันสคริปต์เชลล์โดยแทนค่า {{state}}; ไม่มีการสั่งงานเอเจนต์
Open conversation listen เปิดสเปซที่มองเห็นได้หนึ่งเดียวของการรันและเช็กเอาต์ของมัน; โหนดเอเจนต์เข้าร่วมห้องนี้
Clone PR branch listen ค้นหาสาขาเฮดของ PR ผ่าน gh pr view แล้วโคลนลงไดเรกทอรีของการรัน
Post PR comment listen โพสต์ข้อค้นพบที่รวบรวมไว้ไปยัง PR เป็นคอมเมนต์รีวิวของ GitHub
Reviewer (prompt) listen สั่งงานเอเจนต์รีวิวเวอร์เฉพาะทาง; ระงับไว้จนกว่าเอเจนต์จะส่งผลลัพธ์
Consolidate (join) join รอหลายสาขาต้นทาง แล้วขอให้เอเจนต์รวบรวมเอาต์พุตของสาขาเหล่านั้น
Custom prompt listen โหนดทั่วไปที่ขับด้วยพรอมต์ เส้นทางผ่านบอดี promptAgent
Post to space listen ส่งข้อความไปยังสเปซข้อความ
Condition / switch (router) router แยกสาขาของโฟลว์ตามค่าสถานะ
If file exists (router) router ส่งเส้นทาง "true" เมื่อมีพาธอยู่ใต้เช็กเอาต์ มิฉะนั้น "false"
Any file exists (OR router) router ส่งเส้นทาง "true" เมื่อมีพาธใดพาธหนึ่งในรายการอยู่
All conditions (AND router) router ส่งเส้นทาง "true" เฉพาะเมื่อมีพาธทุกรายการอยู่
Team dispatch listen สั่งงานทั้งทีมและระงับไว้จนกว่าจะเสร็จ
Approval gate listen หยุดรอการตัดสินใจอนุมัติ
For each (map) forEach เรนเดอร์พรอมต์ต่อหนึ่งรายการ แล้วสั่งงานเอเจนต์ครั้งเดียวด้วยพรอมต์เหล่านั้นที่ต่อกัน
Call sub-pipeline listen รันเทมเพลตอื่นเป็นขั้นตอนซ้อน
Clean up worktrees listen ลบ worktree ที่แยกไว้และค้างเก่า; ทำงานแน่นอน ไม่มีการสั่งงานเอเจนต์

คลังจัดกลุ่มเหล่านี้ไว้ใต้ โฟลว์และตรรกะ, รีวิว PR, เอเจนต์, ข้อความ และ โค้ด ไม่มีกลุ่ม Demo

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

การเชื่อมต่อยังแก้ไขได้จากโหนดที่ รับ มัน:

  1. เลือกโหนดปลายน้ำ แผงคอนฟิกของมันจะเปิดทางด้านขวา
  2. เลื่อนไปที่ Triggers from แล้วแตะชิปของแต่ละโหนดต้นทางที่โหนดนี้ควรฟัง การแตะชิปที่เลือกไว้จะลบการเชื่อมต่อ
  3. ถ้าโหนดต้นทางเป็นเราเตอร์ บล็อก คีย์เส้นทาง จะปรากฏใต้ชิป พร้อมฟิลด์ คีย์เส้นทางจาก <node> หนึ่งฟิลด์ต่อหนึ่งเส้นเชื่อมของเราเตอร์ ป้อนคีย์ที่เส้นเชื่อมนั้นยิง — true หรือ false สำหรับเราเตอร์แบบมีไฟล์อยู่ หรือชื่อกรณีสำหรับสวิตช์

โหนดทริกเกอร์แต่ละตัวเป็นจุดเริ่มต้น โหนดหนึ่งอาจฟังหลายต้นทาง (fan-in) และ ส่งต่อหลายปลายทาง (fan-out) และกราฟต้องไม่เป็นวงจร — ไม่มีอะไรในตัวแก้ไข หยุดคุณจากการต่อเป็นวงจร โปรดตรวจงานของคุณ

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

เลือกโหนดเพื่อเปิดแผงคอนฟิกของมัน ฟิลด์ใดจะปรากฏขึ้นอยู่กับบอดีของโหนด

ทุกโหนดมี ป้าย, คีย์อินพุต (คีย์สถานะคั่นด้วยจุลภาค อ่านตอนรัน) และใต้ ขั้นสูง มี ตัวลดทอน, หมดเวลา (ms), ครั้งที่ลองใหม่, ทำต่อหากขั้นตอนนี้ล้มเหลว และ สคีมาเอาต์พุต โหนด listen และ join ยังสลับ ชนิด ระหว่างสองแบบได้ด้วย

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

เพิ่ม เอเจนต์ (เอเจนต์ตัวไหนที่จะสั่งงาน) พรอมต์ (ใช้ {{key}} เพื่อ อ้างอิงอินพุตหรือเอาต์พุตต้นทาง) และ คีย์เอาต์พุต

หมดเวลา (ms) มีหน่วยเป็น มิลลิวินาที ไม่ใช่วินาที — 900000 คือ 15 นาที การป้อน 900 ให้เวลา 0.9 วินาทีกับขั้นตอน

โหมดการสนทนาที่โหนดเอเจนต์พรอมต์รันภายใต้นั้นไม่มีฟิลด์ในตัวแก้ไขบนโหนด เอเจนต์ มันเดินทางไปกับ extras['mode'] (chat, plan หรือ review) บนโหนด Open conversation ที่สร้างห้อง (ค่าเริ่มต้น review) การตั้งค่าบนขั้นตอน เอเจนต์จะถูกละเลย คีย์นี้ต้องตรงกันเป๊ะ: การสะกดแบบอื่นใดจะถูกละเลยโดยไม่แจ้ง

เพิ่ม สคริปต์ Bash ไม่มีฟิลด์ไดเรกทอรีทำงานหรือฟิลด์สภาพแวดล้อม เพราะ ทั้งสองอย่างกำหนดค่าไม่ได้:

  • ทุกขั้นตอน bash ในการรันหนึ่งใช้ cwd ร่วมกันที่ <cc_root>/pipelines/<runId>/
  • GITHUB_TOKEN ถูกฉีดมาจากที่เก็บข้อมูลรับรอง ดังนั้น gh และ git clone https://x-access-token:$GITHUB_TOKEN@… จึงใช้ได้โดยไม่ต้องตั้งค่า
  • สคริปต์ถูกสปอว์นเป็นไฟล์รัน bash ตามตัวอักษร ดังนั้น bash ต้องอยู่ใน PATH ของโฮสต์เซิร์ฟเวอร์ นี่เป็นข้อควรพิจารณาบน Windows

เราเตอร์ประเมินเงื่อนไขและคืนคีย์เส้นทาง; เอนจินยิงเฉพาะเส้นเชื่อมปลายน้ำที่ คีย์เส้นทางตรงกัน และทำเครื่องหมายสาขาอื่นว่าถูกข้าม

การเลือกเราเตอร์จะแทนที่ฟิลด์ คีย์เอาต์พุต ด้วยตัวแก้ไขเงื่อนไข เลือกหนึ่ง ในสี่โหมดของมัน:

  • มีไฟล์อยู่ — อย่างใดอย่างหนึ่ง — ส่งเส้นทาง "true" เมื่อมีพาธใด พาธหนึ่งในรายการอยู่
  • มีไฟล์อยู่ — ทั้งหมด — ส่งเส้นทาง "true" เฉพาะเมื่อพาธทุกรายการอยู่
  • การเปรียบเทียบ — เปรียบเทียบค่าสถานะกับค่าคงที่
  • สวิตช์ — ส่งเส้นทางตามค่าของคีย์สถานะ พร้อมกรณีเริ่มต้น

จากนั้นตั้งคีย์เส้นทางที่ตรงกันบนเส้นเชื่อมขาออก (ดู เชื่อมต่อโหนดเข้าด้วยกัน)

กลุ่ม and / or / not แบบบูลีนนั้นบอดีรองรับ แต่สร้างจากฟอร์มนี้ไม่ได้ — ต้องเขียนทรีเพรดิเคตด้วยมือใต้ extras.predicate คำศัพท์เพรดิเคตและตัวดำเนินการ ฉบับเต็มอยู่ในขั้นตอนไปป์ไลน์

ไม่มีคอนฟิกของตัวเอง: มันรอทุกขั้นตอนต้นทางของมัน

เกตสั่งงานเอเจนต์ผู้อนุมัติเข้าสู่การสนทนาที่ซ่อนอยู่พร้อมพรอมต์ของเกต แล้ว ระงับไว้ ผู้อนุมัติจะหาการตัดสินใจของคุณในการสนทนาและส่งมันด้วย submit_output เป็น { "decision": "approved" | "rejected", "reason": "..." } การตัดสินใจ จะไปอยู่ใต้คีย์เอาต์พุต (ค่าเริ่มต้น approval_decision) เราเตอร์สวิตช์ปลายน้ำ จึงแยกสาขาตามมันได้

ตั้ง เอเจนต์ เป็นผู้อนุมัติ และ พรอมต์ เป็นคำถามของเกต เกตจะคลี่คลาย ผ่าน submit_output เป็น { "decision": "approved" | "rejected", "reason": "..." } โหนด Reviewer (prompt) ส่งในแบบเดียวกัน

เพิ่ม ID ทีม และ โหมดจัดส่ง ตัวเลือกมีให้สองโหมดเท่านั้น:

  • allParallel — หนึ่งงานต่อหนึ่งสมาชิก ระงับไว้จนกว่าจะเสร็จทั้งหมด
  • manager — สั่งงานหัวหน้าทีม ซึ่งมอบหมายต่อ

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

For each แมปเหนือคีย์สถานะ items โดยค่าเริ่มต้น (extras.iterableKey / extras.itemKey บนโหนด) มันเรนเดอร์พรอมต์หนึ่งครั้งต่อหนึ่งรายการ ({{item}} โดยค่าเริ่มต้น) และสั่งงานเอเจนต์ ครั้งเดียว ด้วยพรอมต์เหล่านั้นที่ต่อกัน คอลเลกชันว่างเปล่าจะเสร็จสิ้นทันทีด้วยรายการว่าง มันไม่ใช่การสั่งงานขนาน หนึ่งครั้งต่อหนึ่งรายการ

Call sub-pipeline ระงับไว้จนกว่าการรันลูกจะถึงสถานะสิ้นสุด แล้วรวมสถานะ สุดท้ายของลูกไว้ใต้คีย์เอาต์พุต (ค่าเริ่มต้น subflow_result) ชี้มันไปยังลูก ด้วย extras.templateId เทมเพลตหนึ่งเรียกตัวเองไม่ได้; ลูกที่ล้มเหลวหรือถูก ยกเลิกจะทำให้ขั้นตอนแม่ล้มเหลว ซึ่งจากนั้นจะป้อนนโยบายลองใหม่และ ทำต่อเมื่อล้มเหลวของขั้นตอนนั้น

ทั้งสองอย่างอยู่เบื้องหลัง รันด้วยตนเอง ในส่วนหัวของตัวแก้ไข

  1. กด รันด้วยตนเอง
  2. เปิด อนุญาตการรันด้วยตนเอง สวิตช์นี้บันทึกทันที — มันสร้าง (หรือลบ) แถวทริกเกอร์ manual ที่ทำให้เทมเพลตปรากฏในตัวเลือกการรัน
  3. ตั้ง รันขนานสูงสุด หากต้องการเพดาน (เว้นว่างไว้เพื่อไม่จำกัด) การเริ่ม เพิ่มเติมจะรอในสถานะ queued จนกว่าจะมีช่องว่าง
  4. กด เพิ่มอินพุต สำหรับแต่ละฟิลด์ฟอร์มที่การรันด้วยตนเองควรเก็บ:
ฟิลด์ คำอธิบาย
คีย์ คีย์สถานะที่เก็บค่าไว้; อ้างอิงเป็น {{key}}
ป้าย ป้ายที่แสดง (ค่าเริ่มต้นคือคีย์)
ชนิด ข้อความ, ข้อความหลายบรรทัด, ตัวเลข, สวิตช์, เลือก, รีโพสิทอรี
ตัวเลือก รายการคั่นด้วยจุลภาค ใช้กับชนิด เลือก เท่านั้น
ค่าเริ่มต้น ค่าที่เติมไว้ล่วงหน้า
ข้อความตัวอย่าง ข้อความบอกใบ้ภายในฟิลด์ว่าง
ข้อความช่วยเหลือ ข้อความช่วยเหลือใต้ฟิลด์
จำเป็น ว่าฟอร์มการรันปิดกั้นเมื่อค่าว่างหรือไม่

อินพุตชนิด รีโพสิทอรี จะแสดงตัวเลือกเหนือรีโพของเวิร์กสเปซ และเติม repo_id, repo_local_path, repo_full_name และ — เมื่อรีโพมีรีโมต GitHub — repo_owner และ repo_name ลงในเพย์โหลดการรัน

  1. กด บันทึก ในกล่องโต้ตอบ การแก้ไขอินพุตจะถูกพับเข้าไปในฉบับร่าง; มันจะ คงอยู่เมื่อคุณบันทึกเทมเพลต
  1. กด บันทึก ในส่วนหัวของตัวแก้ไข ส่วนหัวจะแสดง “มีการเปลี่ยนแปลงที่ยังไม่ บันทึก” จนกว่าคุณจะทำ
  2. กลับไปที่ การตั้งค่า → เวิร์กสเปซ → เทมเพลตไปป์ไลน์ แล้วตรวจว่าสวิตช์ของ แถวเทมเพลตเปิดอยู่ เอนจินปฏิเสธไม่เริ่มเทมเพลตที่ปิดใช้งาน และเทมเพลตที่ ปิดใช้งานไม่เคยปรากฏในตัวเลือกการรัน
  3. หากต้องการเริ่มมันโดยอัตโนมัติ ลากทริกเกอร์จากคลังโหนดลงบนแคนวาส — ดู ตั้งทริกเกอร์ไปป์ไลน์