โหมดไร้ส่วนติดต่อ
แฟล็ก -p / --print สำหรับการทำงานแบบไร้ส่วนติดต่อใน CI
โหมดไร้ส่วนติดต่อ เป็นบทเรียน Claude Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Claude Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Claude Architect มีบทเรียนทั้งหมด 4 บทเรียน
เหตุผลที่มีโหมดไร้หน้าจอ
Claude Code ตั้งต้นเป็นเซสชันเทอร์มินัลแบบ โต้ตอบ: โปรแกรมจะแจ้งถามคุณ รอข้อมูลนำเข้า และสตรีมบทสนทนา รูปแบบนี้เหมาะอย่างยิ่งเมื่อคุณนั่งทำงานอยู่หน้าเครื่อง แต่ใช้การไม่ได้ภายใน pipeline
ตัวเรียกใช้ CI/CD ไม่มี มนุษย์คอยยืนยันแผน อนุมัติการแก้ไข หรือตอบคำถามเพิ่มเติม จึงต้องใช้คำสั่งเดียวที่ทำงาน สร้างผลลัพธ์ และจบการทำงานด้วยรหัสสถานะ
นั่นคือสิ่งที่ -p / --print มอบให้: การทำงานแบบไม่โต้ตอบ (ไร้หน้าจอ) นี่คือแฟล็กพื้นฐานสำหรับเรียกใช้ Claude Code ใน CI
แฟล็ก --print
คุณเรียกใช้โหมดไร้หน้าจอได้โดยส่งพรอมต์ไปยัง -p (รูปแบบย่อของ --print) Claude จะทำวงจรการทำงานของเอเจนต์จนเสร็จสมบูรณ์และพิมพ์ผลลัพธ์สุดท้ายไปยัง stdout จากนั้นกระบวนการจะจบการทำงาน
ไม่มี REPL ไม่มีการรอข้อมูลนำเข้า และไม่มีคำถามขอการยืนยัน มีเพียงคำสั่งหนึ่งคำสั่งเข้าและผลลัพธ์หนึ่งรายการออก — ซึ่งเป็น contract ที่ขั้นตอนของ pipeline ต้องการ
# Interactive (default) — opens a session, waits for you
claude
# Non-interactive (headless) — runs and exits, prints to stdout
claude -p "Review the staged diff and list any blocking issues"ขั้นตอน CI จริง
ในทางปฏิบัติ -p จะกลายเป็นหนึ่งขั้นตอนในงาน ตัวเรียกใช้จะดึงโค้ดออกมา จากนั้นเรียก Claude พร้อมคำสั่งที่แม่นยำ เมื่อกระบวนการจบลงหลังจากวงจรไปถึง end_turn pipeline จึงดำเนินต่อได้ตามธรรมชาติ
กำหนดขอบเขตพรอมต์ให้ ชัดเจนและระบุรายละเอียดครบถ้วน — ไม่มีมนุษย์คอยช่วยชี้แจงความกำกวมระหว่างการทำงาน ดังนั้นคำสั่งต้องเข้าใจได้ด้วยตัวเอง
# .github/workflows/review.yml (excerpt)
- name: Claude review
run: |
claude -p "Review the diff in this PR. Flag only changes that
introduce a bug, a security issue, or break a public API."
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}ผลลัพธ์ที่แยกวิเคราะห์ได้: --output-format json
ข้อความธรรมดาเหมาะสำหรับมนุษย์ที่อ่านบันทึกการทำงาน แต่ pipeline มักต้อง ดำเนินการกับผลลัพธ์ — โพสต์ข้อคิดเห็น ตั้งสถานะการตรวจสอบ หรือควบคุมการรวมโค้ด
เพิ่ม --output-format json เพื่อให้ Claude ส่งผลลัพธ์แบบมีโครงสร้างที่เครื่องอ่านได้ แทนข้อความบรรยายอิสระ จากนั้นขั้นตอนถัดไปจะสามารถแยกวิเคราะห์ฟิลด์อย่างเป็นแน่นอนด้วย jq หรือสคริปต์
claude -p "List blocking issues in the staged diff" \
--output-format json | jq '.result'บังคับใช้โครงสร้างข้อมูล
การใช้ JSON เพียงอย่างเดียวยังเปิดให้โมเดลเลือกรูปแบบได้ สำหรับการทำงานอัตโนมัติที่เชื่อถือได้ ให้ใช้ --output-format json คู่กับ schema เพื่อให้ทุกครั้งส่งคืนฟิลด์ชุดเดียวกัน วิธีนี้กำจัดความประหลาดใจด้านไวยากรณ์และทำให้คุณกำหนดคีย์ที่ pipeline ใช้งานได้อย่างตรงจุด
ใช้วินัยเดียวกับผลลัพธ์แบบมีโครงสร้างของ API: กำหนดฟิลด์เป็น required เฉพาะเมื่อฟิลด์นั้นมีอยู่เสมอ — อย่าบังคับฟิลด์ที่อาจไม่มีอยู่ตามปกติ มิฉะนั้นโมเดลจะกุค่าขึ้นมา
{
"type": "object",
"properties": {
"verdict": { "type": "string", "enum": ["pass", "fail"] },
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"file": { "type": "string" },
"severity": { "type": "string", "enum": ["blocking", "warning"] },
"detail": { "type": "string" }
},
"required": ["file", "severity", "detail"]
}
}
},
"required": ["verdict", "issues"]
}ตรวจสอบในเซสชันที่แยกออกมา
ประเด็นละเอียดที่สำคัญต่อการสอบคือ เมื่อ Claude ทั้ง สร้างโค้ดและ ตรวจสอบโค้ดนั้นในเซสชันเดียวกัน การตรวจสอบจะมีอคติ — ผู้เขียนยังคงยึดเหตุผลของตนเองและไม่ท้าทายความคิดของตัวเอง
ใน CI ให้เรียกใช้การตรวจสอบใน เซสชันใหม่ที่แยกเป็นอิสระจากบริบทการสร้างใด ๆ อินสแตนซ์ที่เป็นอิสระมีแนวโน้มจะตรวจพบข้อบกพร่องจริงได้มากกว่ามาก ซึ่งสอดคล้องกับกฎทั่วไปว่า การตรวจสอบอย่างเป็นอิสระดีกว่าการตรวจสอบตนเองในเซสชันเดิม
# Generation and review are SEPARATE invocations / sessions
claude -p "Implement the change described in TASK.md"
# Fresh, unbiased reviewer — no generation history
claude -p "Review the resulting diff for correctness and security only" \
--output-format jsonลดผลบวกเท็จ
ผู้ตรวจสอบ CI ที่ส่งสัญญาณเตือนเกินจริงจะถูกเพิกเฉย เป้าหมายคือ ความแม่นยำ: แสดงเฉพาะสิ่งกีดขวางที่เกิดขึ้นจริง และไม่ส่งสัญญาณเมื่อไม่มีปัญหา
เครื่องมือสำคัญคือพรอมต์ ไม่ใช่การวิงวอนแบบคลุมเครือ เกณฑ์ที่ชัดเจนดีกว่าคำขอที่กำกวม: "ทำเครื่องหมายข้อคิดเห็นเฉพาะเมื่อข้อคิดเห็นนั้นขัดแย้งกับโค้ด" ให้ผลดีกว่า "โปรดแม่นยำขึ้น" ตัวอย่าง Few-shot ที่เจาะจงจำนวนเล็กน้อย (2-4 ตัวอย่าง) ซึ่งแสดงผลบวกจริงเทียบกับผลบวกเท็จ จะช่วยปรับเทียบโมเดลกับกรณีขอบเขตของคุณได้เพิ่มเติม
claude -p "Review the diff. Report an issue ONLY if it (a) causes
incorrect behavior, (b) is a security risk, or (c) breaks a public
contract. Do NOT comment on style, naming, or formatting.
Example (flag): off-by-one in loop bound -> array overrun
Example (ignore): a variable could be renamed for clarity" \
--output-format jsonจำกัดขอบเขตเครื่องมือด้วยสิทธิ์เท่าที่จำเป็น
การทำงานแบบไร้หน้าจอจะทำงาน โดยไม่มีการอนุมัติจากมนุษย์ ดังนั้นการเข้าถึงเครื่องมือโดยไม่จำกัดจึงมีความเสี่ยง ให้สิทธิ์เฉพาะสิ่งที่งานต้องใช้
สำหรับการตรวจสอบแบบอ่านอย่างเดียว โดยทั่วไปคุณต้องการ Read, Grep และ Glob — ไม่ใช่ Write, Edit หรือ Bash แบบทำงานได้ตามอำเภอใจ นี่คือหลักสิทธิ์เท่าที่จำเป็นแบบเดียวกับที่ใช้กับชุดเครื่องมือของเอเจนต์: จำกัดขอบเขตเครื่องมือตามบทบาท และทำให้ชุดเครื่องมือมีขนาดเล็กเพื่อให้เลือกใช้ได้อย่างน่าเชื่อถือ
claude -p "Review the diff and report blocking issues" \
--output-format json \
--allowedTools "Read,Grep,Glob"หยุดที่วงจร ไม่ใช่บรรทัดสถานะ
แม้ทำงานแบบไร้หน้าจอ วงจรการทำงานของเอเจนต์ก็ยังไม่เปลี่ยนแปลง: ขอข้อมูล -> ตรวจสอบ stop_reason -> หากเป็น tool_use ให้เรียกใช้เครื่องมือและทำต่อ -> ทำซ้ำจนถึง end_turn กระบวนการจะจบลงเมื่อโมเดลไปถึง end_turn
อย่าครอบ Claude ด้วยสคริปต์ที่ใช้ grep ผลลัพธ์เพื่อค้นหาคำอย่าง "done" หรือ "finished" แล้วใช้ตัดสินว่าการทำงานเสร็จหรือไม่ การยุติการทำงานขับเคลื่อนด้วยเหตุผลการหยุด การกำหนดขีดจำกัดจำนวนรอบเป็นเพียง กลไกความปลอดภัย ไม่ใช่กลไกหยุดหลัก
การเรียกใช้ซ้ำ: รายงานเฉพาะสิ่งใหม่
CI ถูกเรียกใช้ซ้ำอยู่เสมอ — ทุกครั้งที่พุชจะเรียกงานอีกครั้ง หากผู้ตรวจสอบรายงานปัญหาเดิมทั้งห้าข้อซ้ำทุกครั้ง สัญญาณสำคัญก็จะจมหายไปท่ามกลางเสียงรบกวน
เมื่อเรียกใช้อีกครั้ง ให้ส่ง ผลลัพธ์ก่อนหน้ากลับเข้าไป และสั่ง Claude ให้รายงานเฉพาะปัญหา ใหม่หรือที่ยังไม่ได้แก้ไขเท่านั้น วิธีนี้ทำให้ข้อคิดเห็นแต่ละรายการนำไปดำเนินการได้ และเคารพข้อเท็จจริงที่ว่านักพัฒนาเคยเห็นผลการค้นพบก่อนหน้านี้แล้ว
claude -p "Here are the issues from the previous run:
$(cat prev_review.json)
Review the current diff. Report ONLY issues that are new or remain
unfixed. Omit anything already resolved." \
--output-format json > review.jsonโหมดไร้หน้าจอเทียบกับ Batch API
อย่าสับสนการเรียกใช้ CLI แบบไม่โต้ตอบกับ Message Batches API เนื่องจากทั้งสองอย่างแก้ปัญหาคนละแบบ
- -p / --print: ทำงานแบบพร้อมกันและหยุดรอผลลัพธ์ โดยส่งผลกลับทันที — เหมาะสำหรับ ด่านตรวจสอบก่อนรวมโค้ด ที่ไปป์ไลน์ต้องรอผลตัดสิน
- Batch API: มีค่าใช้จ่ายถูกลง 50% มีกรอบเวลาสูงสุด 24 ชั่วโมง ไม่มี SLA ด้านเวลาแฝง และไม่รองรับการเรียกใช้เครื่องมือหลายรอบ — เหมาะสำหรับการตรวจสอบข้ามคืนที่ไม่ต้องหยุดรอผลลัพธ์เท่านั้น ไม่ควรใช้กับการตรวจสอบที่ต้องการผลทันเวลาและต้องหยุดรอ
การตรวจทานก่อนรวมโค้ดต้องหยุดรอผลลัพธ์ ดังนั้นให้ใช้ -p และเลือกใช้ Batch เฉพาะกับงานออฟไลน์ที่ไม่เร่งด่วน
ตรวจสอบอย่างรวดเร็ว: เชื่อมต่อผู้ตรวจทาน CI
คุณกำลังเพิ่ม Claude Code เป็นขั้นตอนการตรวจทาน ก่อนรวมโค้ด ในไปป์ไลน์ งานนี้ต้องทำงานได้โดยไม่มีมนุษย์อยู่ด้วย ส่งผลลัพธ์ที่ขั้นตอนถัดไปสามารถแยกวิเคราะห์เพื่อกำหนดสถานะการตรวจสอบได้ และหลีกเลี่ยงการตรวจทานโค้ดที่สร้างขึ้นเองแบบมีอคติ วิธีใดถูกต้อง
สรุป: Claude Code แบบไม่มีส่วนติดต่อผู้ใช้
ประเด็นสำคัญของโหมดไม่โต้ตอบ:
- -p / --print เป็นแฟล็กที่จำเป็นสำหรับการทำงานของ CI แบบไม่มีส่วนติดต่อผู้ใช้ — ทำงานวนรอบจนเสร็จ พิมพ์ผลไปยัง stdout แล้วจบการทำงาน
- --output-format json (ควรใช้ร่วมกับสคีมา) ทำให้แยกวิเคราะห์ผลลัพธ์ได้ เพื่อให้ไปป์ไลน์นำไปดำเนินการต่อได้ โดยกำหนดให้บังคับเฉพาะฟิลด์ที่มีอยู่เสมอ
- เรียกใช้การตรวจทานใน เซสชันใหม่ที่แยกเป็นอิสระ — การตรวจทานอย่างอิสระมีประสิทธิภาพกว่าการตรวจทานงานของตนเองในเซสชันเดิมซึ่งมีอคติ
- เพิ่มความแม่นยำด้วย เกณฑ์ที่ระบุชัดเจนและตัวอย่างแบบไม่กี่ตัวอย่าง เพื่อลดผลบวกลวง
- ใช้ เครื่องมือที่มีสิทธิ์น้อยที่สุด สำหรับการทำงานที่ไม่มีผู้ดูแล และเมื่อทำงานซ้ำให้รายงานเฉพาะปัญหาใหม่หรือปัญหาที่ยังไม่ได้แก้
- การสิ้นสุดให้ยึดตาม เหตุผลการหยุด ไม่ใช่การแยกวิเคราะห์ข้อความ และให้จำกัดจำนวนรอบเป็นเพียงตาข่ายนิรภัย
- ใช้
-pสำหรับด่านตรวจสอบก่อนรวมโค้ดที่ต้องหยุดรอผลลัพธ์ และสงวน Batch API ไว้สำหรับงานที่ไม่ต้องหยุดรอและไม่เร่งด่วน
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 26
- บทเรียน
- 104
คำถามที่พบบ่อย
บทเรียน “โหมดไร้ส่วนติดต่อ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โหมดไร้ส่วนติดต่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Claude Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Claude Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โหมดไร้ส่วนติดต่อ”
แฟล็ก -p / --print สำหรับการทำงานแบบไร้ส่วนติดต่อใน CI คุณปฏิบัติ Claude Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Claude Architect หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Claude Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “โหมดไร้ส่วนติดต่อ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Claude Architect นี้ได้ไหม
ได้ บทเรียน Claude Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ