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

คุยกับ Control Center จาก GitHub PR

คู่มือนี้แสดงวิธีทำงานกับ Control Center โดยไม่ต้องออกจาก GitHub: ขอรีวิวด้วย AI จากหน้า PR ถามคำถามกับบอตในความคิดเห็น และสนทนาต่อในเธรดรีวิวของมัน

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

  • เซิร์ฟเวอร์มี GitHub App ที่ลงทะเบียนและ ติดตั้งไว้แล้ว พร้อมสิทธิ์ Pull requests: read and write (สำหรับความคิดเห็น เธรด และปฏิกิริยา) และ Issues: read (สำหรับการค้นหา ความคิดเห็น) ทั้งสองอย่างอยู่ในรายการสิทธิ์ของคู่มือนั้นแล้ว
  • รีโพสิทอรีถูกเชื่อมกับเวิร์กสเปซใน Control Center
  • ไม่มี URL ของ webhook ไม่มีทันเนล ไม่มี callback — ไม่มีอะไรต้องตั้งค่าฝั่งเครือข่าย

ล็อกอินของบอตคือ <appslug>[bot] โดย appslug คือชื่อที่คุณตั้งให้แอปตอน ลงทะเบียน

  1. ไปที่ การตั้งค่า → เซิร์ฟเวอร์ → ลงชื่อเข้าใช้ครั้งเดียว แล้วเลื่อนไปที่ การ์ด แอปผู้ให้บริการ
  2. เปิดบล็อก GitHub แล้วคลิก ทดสอบ
  3. คัดลอก ล็อกอินบอท เมื่อมันเติมค่าให้ หากยังแสดงข้อความใบ้ช่องว่างอยู่ ล็อกอินจะเป็น <appslug>[bot] เสมอ — พิมพ์ค่านั้น หรือใช้แบบสั้น @appslug

GitHub ไม่เสนอให้บัญชีแอปปรากฏใน autocomplete ของ @ ล็อกอินจึงต้องพิมพ์เอง — นั่นคือเหตุผลที่การ์ดการตั้งค่าทำให้คัดลอกได้ในคลิกเดียว ส่วนต่อท้าย [bot] ไม่จำเป็น: ทั้ง @myapp และ @myapp[bot] ต่างก็ส่งถึงบอต

มีสองวิธี ทั้งคู่เริ่มไปป์ไลน์ pr_review ที่มาพร้อมระบบแบบเดียวกับที่ปุ่ม ถาม AI เริ่ม:

  • เพิ่มป้ายกำกับ ai-review ให้ PR นี่คือสิ่งที่ใกล้เคียงที่สุดที่ GitHub เสนอให้เทียบเท่าการมอบหมายบอตเป็นรีวิวเวอร์ — บัญชีแอปไม่อาจครองช่อง ผู้ขอรีวิวแบบเนทีฟได้ ไม่มีความคิดเห็นให้แสดงปฏิกิริยา จึงไม่มีอะไรถูกโพสต์ ขึ้น GitHub รีวิวจะเริ่มใน Control Center
  • แสดงความคิดเห็น @myapp review (หรือแค่ @myapp) ในบทสนทนาของ PR บอตจะแสดงปฏิกิริยา 👀 แล้วตอบกลับเมื่อรีวิวเริ่มทำงาน (หรือแจ้งว่ามีรีวิว กำลังรันอยู่แล้ว)

รีวิวเวอร์ทำงานในสเปซรีวิวของ PR อ่านและเผยแพร่ข้อค้นพบได้ตามใน ใช้รีวิวด้วย AI การเผยแพร่กลับไปยัง GitHub ยังเป็นการตัดสินใจที่คุณทำใน Control Center — การเริ่มรีวิวจาก GitHub ไม่ได้เผยแพร่อะไรไปยัง GitHub ด้วยตัวเอง

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

แสดงความคิดเห็นในบทสนทนาของ PR:

@myapp why does the flaky test in runner_test.dart fail on CI but not locally?

สิ่งที่เกิดขึ้น ตามลำดับ:

  1. บอตแสดงปฏิกิริยา 👀 เพื่อให้คุณรู้ว่าความคิดเห็นถูกเห็นแล้ว
  2. คำถามถูกโพสต์เข้าสเปซรีวิวของ PR ในนามของคุณ — การระบุที่มาแบบเดียวกับ ที่คุณพิมพ์เองใน Control Center
  3. เอเจนต์ตอบในสเปซ และคำตอบถูกโพสต์กลับไปบน PR เป็นความคิดเห็นที่ @mention คุณ

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

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

> @myapp the retry loop looks O(n²) to me
what would the complexity be with the bounded queue instead?

การสนทนาหลายรอบก็ทำงานแบบเดียวกัน: แต่ละการตอบกลับคือคำถามอีกข้อในบทสนทนาเดิม โดยมีสเปซรีวิวเป็นบริบท และคำตอบก็กลับมาในเธรด

การติดตามต่อบนไทม์ไลน์ของบทสนทนา PR ถือเป็นความคิดเห็นระดับบนสุดใหม่ จึงยังต้องมี @mention

ความคิดเห็นบน GitHub ส่งมาพร้อมข้อมูลเพียงล็อกอินเท่านั้น บอตจึงเทียบตัวผู้เขียน ก่อนที่จะทำสิ่งใด:

  • บัญชี GitHub ของคุณต้องถูกเชื่อมกับตัวตนของคุณใน Control Center — ลงชื่อเข้าใช้ด้วย GitHub หรือวางโทเค็น จาก การตั้งค่า → เวิร์กสเปซ → โปรไฟล์และตัวตน → โฮสต์โค้ด
  • คุณต้องเป็นสมาชิกที่มีบทบาทแบบเขียน (member, admin หรือ owner) ในเวิร์กสเปซที่เชื่อมรีโพสิทอรีนั้น

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

สิ่ง พฤติกรรม
การตอบรับ 👀 บนความคิดเห็นภายในประมาณหนึ่งนาที — ช่วงเวลาของการกวาด ป้ายกำกับ ai-review ไม่มีความคิดเห็นให้แสดงปฏิกิริยา
คำตอบ โพสต์ในนามบอต (ตัวแอป) ในช่องทางที่คำถามถูกถาม
การระบุที่มาในสเปซ คำถามเป็นของคุณ เอเจนต์รันในนามของคุณ ภายใต้การตั้งค่าความเป็นอิสระของสเปซ
รีวิว ข้อค้นพบลงในสเปซรีวิว การเผยแพร่ไปยัง GitHub ต้องทำด้วยมือ

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

ไม่เกิดอะไรขึ้นกับความคิดเห็นที่กล่าวถึงบอต

  • แอปถูกติดตั้งบนบัญชีที่เป็นเจ้าของรีโพแล้วหรือยัง และรีโพถูกเชื่อม กับเวิร์กสเปซหรือยัง รีโพที่ยังไม่ถูกเชื่อมจะถูกข้ามก่อนที่จะมีการบันทึกสิ่งใด ดังนั้นการเชื่อมมันในภายหลังยังคงได้ผล
  • บัญชี GitHub ของคุณเชื่อมไว้แล้วหรือยัง และคุณเป็นสมาชิกที่มีบทบาทแบบเขียน หรือไม่ ดูคำตอบปฏิเสธของบอตบน PR — มันจะบอกว่าเป็นกรณีใด
  • ยังไม่มีอะไรเกิดขึ้นอีกหรือ บันทึกของเซิร์ฟเวอร์จะระบุรอบกวาดและ PR เมื่อมี อะไรล้มเหลว ให้มองหา pr_conversation: (ตัวโพลล์) และ github_pr_conversation: (สะพาน)

ป้ายกำกับไม่เริ่มรีวิว

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

คำตอบของบอตไม่มาถึง GitHub เลย

ตัวคำตอบไม่เคยสูญหาย — มันอยู่ในสเปซรีวิวของ PR ใน Control Center ความล้มเหลว ในการโพสต์ (GitHub ล่ม สิทธิ์เปลี่ยนไป) จะถูกบันทึกไว้ และคำตอบจะไม่ถูกลองใหม่ หากสำคัญให้ถามอีกครั้งในเธรด