- 1. Multi-agent คืออะไร
- 2. เริ่มใช้งาน Subagents ใน Codex
- 3. เตรียม Codex CLI
- 4. ตั้งค่าจำนวนตัวแทนย่อย
- 5. สร้าง Custom Agents ให้ใช้ซ้ำ
- 6. กำหนดข้อตกลงร่วมใน AGENTS.md
- 7. Workshop: ตรวจและแก้ฟังก์ชันค่าจัดส่งด้วยทีม AI
- 8. ทำไมต้องกำหนดเจ้าของไฟล์
- 9. ออกแบบ Prompt ให้ตรวจผลงานได้
- 10. แยก Native Subagents ออกจาก SDK และ API
- 11. เลือกงานที่คุ้มกับการแบ่ง
- 12. แก้ปัญหาที่พบบ่อย
- เอกสารอ้างอิง

เมื่อใช้ Codex กับโครงการที่มีหลายส่วน เราสามารถมอบหมายให้ตัวแทนย่อยหรือ Subagents รับผิดชอบงานคนละด้าน แล้วให้ตัวแทนหลักรวบรวมหลักฐาน ตัดสินใจ และตรวจสอบผลลัพธ์ร่วมกันได้
ตัวอย่างที่เหมาะกับงานวิศวกรรมซอฟต์แวร์คือ ให้ตัวแทนหนึ่งตรวจความถูกต้องของโค้ด อีกตัวแทนสร้างชุดทดสอบ และอีกตัวแทนตรวจเอกสาร ทั้งสามงานมีเป้าหมายชัดเจนและเริ่มจากข้อกำหนดชุดเดียวกัน
ตรวจสอบเอกสารทางการวันที่ 17 ตุลาคม 2026 บทความนี้เน้น Codex รุ่นปัจจุบันบนเครื่องผู้ใช้ คำสั่งและรูปแบบตั้งค่าของรุ่นเก่าอาจแตกต่างกัน ตัวอย่างเวิร์กช็อปและ Prompt เป็นตัวอย่างที่ผู้เขียนออกแบบเพื่อการเรียนรู้
#1. Multi-agent คืออะไร
Multi-agent คือการจัดงานให้ตัวแทน AI หลายตัวร่วมกันแก้ปัญหา โดยแต่ละตัวมีหน้าที่ ขอบเขต และสิ่งที่ต้องส่งกลับให้ตรวจสอบได้
ในเวิร์กช็อปนี้ใช้โครงสร้างแบบ ตัวแทนหลักประสานงาน และตัวแทนย่อยทำงานเฉพาะด้าน ดังนี้
| บทบาท | งานที่รับผิดชอบ | สิ่งที่ส่งกลับ |
|---|---|---|
| ตัวแทนหลัก | กำหนดข้อกำหนด แบ่งงาน รวมผล และแก้โค้ด | โค้ดที่แก้แล้วและรายงานผลทดสอบ |
| Code reviewer | ตรวจเงื่อนไข ขอบเขตข้อมูล และพฤติกรรมที่ผิด | ปัญหาพร้อมไฟล์และกรณีที่ทำให้เกิด |
| Test writer | แปลงข้อกำหนดเป็นชุดทดสอบ | ไฟล์ทดสอบและเหตุผลของแต่ละกรณี |
| Documentation writer | อธิบายวิธีใช้งานและสัญญาของฟังก์ชัน | README ที่ตรงกับข้อกำหนด |
การให้ Agent เดียวสวมหลายบทบาทตามลำดับ ยังไม่มีการมอบหมายไปยัง Subagent จริง การใช้ Subagents จะมีเธรดของตัวแทนย่อยแยกออกมาให้ติดตามได้ในไคลเอนต์ที่รองรับ [1]
#ลำดับงานที่ใช้ในบทความ
flowchart TD
S["ข้อกำหนดและโค้ดเริ่มต้น"] --> M["ตัวแทนหลักแบ่งงาน"]
M --> R["Reviewer: รายงานปัญหา"]
M --> T["Tester: สร้างชุดทดสอบ"]
M --> D["Docs: เขียนวิธีใช้งาน"]
R --> J["ตัวแทนหลักรอและรวมผล"]
T --> J
D --> J
J --> F["แก้โค้ดและรันทดสอบรวม"]
F --> Q{"ผ่านข้อกำหนดหรือไม่"}
Q -->|ยังไม่ผ่าน| F
Q -->|ผ่าน| O["ส่งมอบโค้ดและหลักฐาน"]
จุดที่ทำพร้อมกันคือการตรวจโค้ด สร้างชุดทดสอบ และเขียนเอกสารจากข้อกำหนด ส่วนการแก้โค้ดและตรวจผลรวมต้องรอข้อมูลที่เกี่ยวข้องก่อน
#2. เริ่มใช้งาน Subagents ใน Codex
เอกสารปัจจุบันระบุว่า Codex เปิดใช้ Subagent workflows โดยค่าเริ่มต้น ผู้ใช้สั่งให้แบ่งงานโดยตรงได้ และ Codex ยังทำตามคำแนะนำที่ร้องขอการแบ่งงานใน AGENTS.md หรือ Skill ที่เกี่ยวข้องได้ด้วย [1]
เริ่มจาก Prompt ที่ระบุบทบาทและผลลัพธ์ให้ชัดเจน เช่น
ช่วยตรวจโครงการนี้โดยใช้ Subagents 3 ตัวทำงานพร้อมกัน
1. ตัวแรกตรวจความถูกต้องของ business logic
2. ตัวที่สองตรวจช่องว่างของชุดทดสอบ
3. ตัวที่สามตรวจ README เทียบกับวิธีใช้งานจริง
รอบนี้ทุกตัวอ่านอย่างเดียว ห้ามแก้ไขไฟล์
ให้แต่ละตัวรายงานปัญหาพร้อมตำแหน่งไฟล์และหลักฐาน
รอผลครบทั้งสามตัว แล้วรวมรายการปัญหาที่ซ้ำกัน
จัดลำดับตามผลกระทบและเสนอขั้นตอนแก้ไข
#ใช้ผ่านช่องทางใดได้บ้าง
| ช่องทาง | วิธีเริ่ม | วิธีติดตาม |
|---|---|---|
| Codex CLI | เปิดโครงการด้วย codex แล้วส่ง Prompt |
ใช้ /subagents เพื่อดูหรือสลับเธรด |
| IDE extension | ส่งคำสั่งแบ่งงานในแชต Codex | ดูกิจกรรมของตัวแทนย่อยหรือแผง Background agents เมื่อมี |
| แชต Codex ในแอปที่รองรับ | ระบุงานที่ต้องการให้ Subagents ทำ | เปิดเธรดตัวแทนย่อยจากกิจกรรมที่แสดง |
รายละเอียด UI และการเข้าถึงขึ้นกับไคลเอนต์และบัญชีที่ใช้งาน [1]
#3. เตรียม Codex CLI
หากยังไม่มี Codex ให้ติดตั้งตาม คู่มือ Codex CLI สำหรับระบบปฏิบัติการของตนเอง ตัวอย่างคำสั่งติดตั้งบน macOS/Linux ที่เอกสารปัจจุบันแสดงคือ [2]
curl -fsSL https://chatgpt.com/codex/install.sh | sh
จากนั้นเปิดไดเรกทอรีโครงการ
cd /path/to/your-project
codex --version
codex
เข้าใช้ด้วยวิธีลงชื่อเข้าที่ไคลเอนต์แสดง แล้วเลือกโมเดลที่บัญชีใช้งานได้ บทความนี้ไม่กำหนดชื่อโมเดลในไฟล์ตัวอย่าง เพื่อให้ใช้ค่าที่ตั้งไว้ในเครื่องได้ [2]
เมื่อต้องการตรวจสถานะการตั้งค่าใน CLI ใช้
/status
และใช้คำสั่งต่อไปนี้ใน CLI สำหรับดูเธรดของตัวแทนย่อย
/subagents
คำสั่งที่ขึ้นต้นด้วย / ให้พิมพ์ในหน้าจอ Codex CLI ไม่ใช่ใน Bash
#4. ตั้งค่าจำนวนตัวแทนย่อย
โดยทั่วไปเริ่มสั่งงานได้เลย หากต้องการกำหนดเพดานตัวแทนย่อย ให้เพิ่มค่าต่อไปนี้ใน .codex/config.toml ของโครงการ หรือ ~/.codex/config.toml สำหรับค่าระดับผู้ใช้ [3][4]
[agents]
enabled = true
max_concurrent_threads_per_session = 3
ค่า 3 ในตัวอย่างหมายถึงเปิดเธรดตัวแทนย่อยพร้อมกันได้สูงสุดสามเธรด ไม่นับเธรดหลัก และเป็นค่าที่เลือกใช้ในเวิร์กช็อปนี้ ไม่ใช่การระบุค่าเริ่มต้นของระบบ [4]
หากไฟล์มีตาราง [agents] อยู่แล้ว ให้เพิ่มหรือปรับคีย์ในตารางเดิม ไม่สร้างตารางชื่อซ้ำ โครงการต้องได้รับความเชื่อถือก่อน Codex จึงจะโหลดการตั้งค่าระดับโครงการ [3]
หลังแก้ไฟล์ ให้เปิดเซสชันใหม่สำหรับการทดลอง เพื่อให้เริ่มงานจากการตั้งค่าและคำแนะนำชุดเดียวกัน
เอกสารปัจจุบันยังระบุ
agents.max_threadsเป็นชื่อเดิมที่ใช้แทนagents.max_concurrent_threads_per_sessionได้ ตัวอย่างใหม่นี้ใช้ชื่อปัจจุบัน [4]
#5. สร้าง Custom Agents ให้ใช้ซ้ำ
หากต้องทำงานรูปแบบเดิมบ่อย ๆ สามารถสร้างตัวแทนเฉพาะงานเป็นไฟล์ TOML ได้ โดยวางไว้ที่ [1]
| ตำแหน่ง | ขอบเขต |
|---|---|
.codex/agents/ |
ใช้กับโครงการ |
~/.codex/agents/ |
ใช้เป็นตัวแทนส่วนตัว |
ไฟล์แต่ละตัวต้องมี name, description และ developer_instructions ตัวอย่างต่อไปนี้ตั้งชื่อบทบาทสำหรับเวิร์กช็อปของเรา โดยไม่ระบุโมเดลเพื่อให้สืบทอดค่าจากตัวแทนหลัก [1]
#5.1 Reviewer: ตรวจโค้ดโดยไม่แก้ไฟล์
ไฟล์ .codex/agents/code-reviewer.toml
name = "code_reviewer"
description = "ตรวจ business logic และกรณีขอบจากข้อกำหนด โดยไม่แก้ไขไฟล์"
developer_instructions = """
อ่าน REQUIREMENTS.md และโค้ดที่ได้รับมอบหมาย
ตรวจความถูกต้องของเงื่อนไข การตรวจข้อมูล และกรณีขอบ
ห้ามแก้ไขไฟล์และห้ามสั่งคำสั่งที่เปลี่ยนแปลงโครงการ
รายงานแต่ละปัญหาพร้อมไฟล์ สัญลักษณ์ที่เกี่ยวข้อง
ตัวอย่างข้อมูลเข้า ผลที่เกิดขึ้น และผลที่ควรเป็น
แยกปัญหาที่มีหลักฐานออกจากข้อสงสัย
"""
#5.2 Tester: เขียนเฉพาะชุดทดสอบ
ไฟล์ .codex/agents/test-writer.toml
name = "test_writer"
description = "สร้างชุดทดสอบจาก REQUIREMENTS.md ใน tests/ เท่านั้น"
developer_instructions = """
อ่าน REQUIREMENTS.md ก่อนออกแบบการทดสอบ
แก้ไขหรือสร้างไฟล์ได้เฉพาะใน tests/
ใช้ node:test และ node:assert/strict
ครอบคลุมกรณีปกติ ขอบเขต และข้อมูลไม่ถูกต้อง
อย่าเปลี่ยนข้อกำหนดหรือโค้ดใน src/ เพื่อให้การทดสอบผ่าน
รายงานคำสั่งที่ใช้และผลจริง หากไม่ได้รันให้ระบุว่าไม่ได้รัน
"""
#5.3 Docs: เขียนวิธีใช้จากข้อกำหนด
ไฟล์ .codex/agents/docs-writer.toml
name = "docs_writer"
description = "เขียน README.md ให้ตรงกับข้อกำหนดและคำสั่งของโครงการ"
developer_instructions = """
อ่าน REQUIREMENTS.md และ package.json
เขียนหรือแก้ไขได้เฉพาะ README.md
อธิบายหน่วยเงิน ชนิดข้อมูล เงื่อนไขค่าจัดส่ง และวิธีรันทดสอบ
ระหว่างพัฒนาให้แยกพฤติกรรมตามข้อกำหนดจากสถานะโค้ดปัจจุบัน
ห้ามอ้างว่าชุดทดสอบผ่านหากไม่ได้เห็นผลรัน
"""
ข้อความจำกัดไฟล์ในตัวอย่างเป็นคำแนะนำการทำงาน ตัวแทนย่อยยังสืบทอดสิทธิ์และ Sandbox จากเซสชันหลัก การเขียนว่า “ห้ามแก้ไฟล์” จึงไม่ได้สร้าง Sandbox แบบอ่านอย่างเดียวแยกขึ้นมา [1]
#6. กำหนดข้อตกลงร่วมใน AGENTS.md
AGENTS.md ใช้บอกแนวทางของโครงการที่ Codex ควรอ่านก่อนทำงาน เหมาะกับคำสั่งทดสอบและข้อตกลงร่วมของทีม [5]
สร้างไฟล์ AGENTS.md ที่รากโครงการเวิร์กช็อป
# แนวทางสำหรับเวิร์กช็อป Shipping Fee
## ข้อกำหนดหลัก
- ใช้ REQUIREMENTS.md เป็นเกณฑ์ตรวจพฤติกรรม
- จำนวนเงินใช้หน่วยสตางค์ และเป็นจำนวนเต็มที่ปลอดภัยของ JavaScript
- ใช้ Node.js 22 ขึ้นไป และ ES modules
- รันทดสอบด้วย npm test
## การแบ่งงาน
- เมื่อผู้ใช้ขอให้ใช้ Multi-agent ให้ใช้ Subagents ตามบทบาทที่ระบุ
- code_reviewer อ่านและรายงานเท่านั้น
- test_writer แก้ไขได้เฉพาะ tests/
- docs_writer แก้ไขได้เฉพาะ README.md
- ตัวแทนหลักรับผิดชอบ src/ และการตรวจผลรวม
- ห้ามแก้ไขหรือย้อนงานของตัวแทนอื่นโดยไม่ประสานกับตัวแทนหลัก
- รอชุดทดสอบและรายงานตรวจโค้ดก่อนแก้ business logic
## การส่งผล
- ระบุไฟล์ที่เปลี่ยน คำสั่งที่รัน และผลจริง
- แยกข้อเท็จจริง สมมติฐาน และงานที่ยังไม่ได้ตรวจสอบ
ในโครงการจริงควรปรับคำสั่งและขอบเขตให้ตรงกับโครงสร้างของทีม ตัวอย่างนี้เป็นข้อตกลงสำหรับห้องฝึกปฏิบัติ
#7. Workshop: ตรวจและแก้ฟังก์ชันค่าจัดส่งด้วยทีม AI
เป้าหมายคือทดลองครบวงจร ตั้งแต่ข้อกำหนด โค้ดที่มีข้อผิดพลาด การแบ่งงานตรวจ และการตรวจผลหลังแก้
ใช้ Node.js 22 ขึ้นไปเพื่อรันตัวอย่าง และใช้ Git เก็บสถานะเริ่มต้นเมื่อพร้อม โค้ดฝึกปฏิบัติไม่ต้องติดตั้งแพ็กเกจทดสอบเพิ่มเติม
#ขั้นที่ 1: สร้างโครงการ
mkdir codex-multi-agent-workshop
cd codex-multi-agent-workshop
git init
mkdir -p src tests .codex/agents
สร้างไฟล์ package.json
{
"name": "codex-multi-agent-workshop",
"private": true,
"type": "module",
"scripts": {
"test": "node --test tests/shipping.test.mjs"
}
}
จากนั้นสร้างไฟล์ตั้งค่า ตัวแทนทั้งสาม และ AGENTS.md ตามหัวข้อก่อนหน้า
#ขั้นที่ 2: เขียนสัญญาของฟังก์ชัน
สร้าง REQUIREMENTS.md
# Shipping Fee Requirements
ฟังก์ชัน: shippingFee(subtotalCents, isMember = false)
ส่งออกจาก src/shipping.mjs
## ข้อมูลเข้า
- subtotalCents ต้องมีชนิด number
- subtotalCents ต้องเป็น safe integer และมีค่าตั้งแต่ 0 ขึ้นไป
- ชนิดของ subtotalCents ผิด: โยน TypeError
- subtotalCents เป็นตัวเลขแต่ผิดช่วงหรือไม่ใช่ safe integer:
โยน RangeError รวมถึง NaN และ Infinity
- isMember ต้องเป็น boolean หากส่งชนิดอื่นให้โยน TypeError
- ตรวจสอบข้อมูลเข้าทั้งหมดก่อนใช้สิทธิ์ส่งฟรี
## กติกา
- สมาชิกส่งฟรีทุกยอดซื้อที่ถูกต้อง
- ผู้ซื้อทั่วไปมียอดตั้งแต่ 100000 สตางค์ขึ้นไป: ส่งฟรี
- ผู้ซื้อทั่วไปมียอดต่ำกว่า 100000 สตางค์: ค่าส่ง 5000 สตางค์
- ผลลัพธ์เป็นจำนวนเต็มหน่วยสตางค์
- ห้ามแปลง string เป็น number หรือใช้ truthy แทน boolean
การระบุหน่วยเงินและชนิดข้อผิดพลาดช่วยให้ Reviewer กับ Tester ใช้เกณฑ์เดียวกัน เช่น 100000 สตางค์หมายถึง 1,000 บาท และ 5000 สตางค์หมายถึง 50 บาท
#ขั้นที่ 3: สร้างโค้ดเริ่มต้นที่ตั้งใจให้มีข้อผิดพลาด
ไฟล์ src/shipping.mjs
export function shippingFee(subtotalCents, isMember = false) {
if (isMember) {
return 0;
}
if (subtotalCents > 100_000) {
return 0;
}
return 5_000;
}
ให้เก็บไฟล์เริ่มต้นไว้ก่อนทดลองสั่งทีม AI เพื่อดูว่าตัวแทนย่อยระบุปัญหาและสร้างหลักฐานได้หรือไม่
#ขั้นที่ 4: เปิด Codex แล้วสั่งแบ่งงาน
codex
ส่ง Prompt ต่อไปนี้
ทำ Workshop นี้โดยใช้ Subagents 3 ตัวพร้อมกัน
ใช้ REQUIREMENTS.md เป็นข้อกำหนดร่วม
1. code_reviewer:
ตรวจ src/shipping.mjs โดยอ่านอย่างเดียว
รายงานบั๊กพร้อมข้อมูลเข้าที่ทำให้เกิดและผลที่ควรได้
2. test_writer:
สร้าง tests/shipping.test.mjs ด้วย node:test
แก้ไขได้เฉพาะ tests/
ครอบคลุมยอดต่ำกว่า เท่ากับ และสูงกว่าเกณฑ์
รวมถึงสมาชิก ชนิดข้อมูลผิด NaN Infinity และ unsafe integer
รัน npm test กับโค้ดเริ่มต้นแล้วรายงานผลตามจริง
3. docs_writer:
เขียน README.md อธิบายสัญญาของฟังก์ชันและวิธีรันทดสอบ
แก้ไขได้เฉพาะ README.md
อย่าใส่ผลทดสอบที่ยังไม่ได้เห็น
ตัวแทนหลัก:
- รอทั้งสามตัวทำเสร็จ
- ตรวจผลของทุกตัวเทียบกับข้อกำหนด
- แก้ src/shipping.mjs ตามปัญหาที่ตรวจพบ
- รัน npm test อีกครั้งหลังรวมงาน
- ตรวจ README กับพฤติกรรมสุดท้าย
- สรุปบั๊กที่แก้ ไฟล์ที่เปลี่ยน และผลทดสอบก่อนและหลัง
ระหว่างทำงานใช้ /subagents ดูเธรด และส่งข้อความเพิ่มเติมให้ตัวแทนหลักประสานงานเมื่อพบงานทับซ้อน
#ขั้นที่ 5: ตรวจชุดทดสอบที่ได้
ตัวอย่างด้านล่างเป็นชุดทดสอบอ้างอิงสำหรับเปรียบเทียบกับชุดที่ Agent สร้าง ไม่จำเป็นต้องเหมือนกันทุกบรรทัด แต่ต้องตรวจพฤติกรรมที่กำหนดได้
ไฟล์ tests/shipping.test.mjs
import test from 'node:test';
import assert from 'node:assert/strict';
import { shippingFee } from '../src/shipping.mjs';
test('ผู้ซื้อทั่วไป ยอดต่ำกว่าเกณฑ์ เสียค่าส่ง', () => {
assert.equal(shippingFee(0), 5_000);
assert.equal(shippingFee(99_999), 5_000);
});
test('ยอดเท่ากับเกณฑ์ ส่งฟรี', () => {
assert.equal(shippingFee(100_000), 0);
});
test('ยอดสูงกว่าเกณฑ์ ส่งฟรี', () => {
assert.equal(shippingFee(100_001), 0);
});
test('สมาชิกส่งฟรีเมื่อข้อมูลถูกต้อง', () => {
assert.equal(shippingFee(0, true), 0);
assert.equal(shippingFee(99_999, true), 0);
});
test('จำนวนเต็มบวกสูงสุดที่ปลอดภัยยังเป็นยอดที่รับได้', () => {
assert.equal(shippingFee(Number.MAX_SAFE_INTEGER), 0);
});
test('ยอดที่มีชนิดผิดต้องถูกปฏิเสธ', () => {
for (const value of ['100000', null, undefined]) {
assert.throws(() => shippingFee(value), TypeError);
}
});
test('ตัวเลขผิดช่วงหรือไม่เป็น safe integer ต้องถูกปฏิเสธ', () => {
for (const value of [-1, 0.5, NaN, Infinity, Number.MAX_SAFE_INTEGER + 1]) {
assert.throws(() => shippingFee(value), RangeError);
}
});
test('สถานะสมาชิกต้องเป็น boolean', () => {
for (const value of ['yes', 1, 0, null]) {
assert.throws(() => shippingFee(10_000, value), TypeError);
}
});
test('สมาชิกก็ต้องผ่านการตรวจยอดซื้อ', () => {
assert.throws(() => shippingFee(-1, true), RangeError);
assert.throws(() => shippingFee('100000', true), TypeError);
});
สิ่งที่ควรมองหาในการตรวจงานของทีมคือ ตัวทดสอบที่ล้มเหลวต้องเชื่อมโยงกับข้อกำหนดจริง และตัวแทนหลักต้องแก้สาเหตุของปัญหา
#ขั้นที่ 6: เปรียบเทียบกับแนวทางแก้ไข
ตัวอย่าง src/shipping.mjs หลังแก้
export function shippingFee(subtotalCents, isMember = false) {
if (typeof subtotalCents !== 'number') {
throw new TypeError('subtotalCents must be a number');
}
if (!Number.isSafeInteger(subtotalCents) || subtotalCents < 0) {
throw new RangeError('subtotalCents must be a non-negative safe integer');
}
if (typeof isMember !== 'boolean') {
throw new TypeError('isMember must be a boolean');
}
return isMember || subtotalCents >= 100_000 ? 0 : 5_000;
}
ตัวอย่างนี้แก้ทั้งเงื่อนไขขอบเขต > เป็น >= และเพิ่มการตรวจข้อมูลก่อนใช้เงื่อนไขส่งฟรี
#ขั้นที่ 7: รันและตรวจผลรวม
npm test
git status --short
git diff
หากไฟล์ยังไม่เคยเพิ่มเข้า Git ไฟล์ใหม่จะยังไม่อยู่ใน git diff ให้ดูจาก git status --short และเปิดไฟล์นั้นตรวจโดยตรง
ผลของ ชุดทดสอบอ้างอิงข้างต้น ที่ตรวจในสภาพแวดล้อมจัดทำบทความ:
| โค้ดที่ใช้ | จำนวนกลุ่มทดสอบ | ผ่าน | ไม่ผ่าน |
|---|---|---|---|
| โค้ดเริ่มต้น | 9 | 4 | 5 |
| โค้ดหลังแก้ | 9 | 9 | 0 |
ผลนี้เป็นการรันตัวอย่าง JavaScript กับ Node.js โดยตรง ไม่ใช่หลักฐานว่ามีการรันเซสชัน Codex CLI หรือ Custom Agents จริงในสภาพแวดล้อมของผู้อ่าน จำนวนกรณีที่ Agent สร้างอาจต่างกัน และควรตรวจคุณภาพกรณีทดสอบควบคู่กับจำนวนที่ผ่าน
#8. ทำไมต้องกำหนดเจ้าของไฟล์
การแยกเธรดสนทนาไม่ได้แปลว่าไฟล์ถูกแยกออกจากกันโดยอัตโนมัติ ในเวิร์กช็อปจึงกำหนดผู้รับผิดชอบให้ชัดเจน
| พื้นที่ | เจ้าของการแก้ไข |
|---|---|
src/ |
ตัวแทนหลัก |
tests/ |
test_writer |
README.md |
docs_writer |
| ข้อกำหนดและไฟล์ตั้งค่า | กำหนดให้พร้อมก่อนเริ่มรอบขนาน |
| รายงานตรวจโค้ด | code_reviewer ส่งกลับในเธรด |
ถ้าสองงานจำเป็นต้องเปลี่ยนฟังก์ชันเดียวกัน ให้ทำเป็นลำดับ หรือให้ผู้แก้ไขเพียงคนเดียวรับข้อเสนอจากคนอื่น
สำหรับงานพัฒนาขนาดใหญ่ อาจแยกงานเป็นคนละ Git worktree ซึ่งมีชุดไฟล์ของตนเองและใช้ข้อมูล Git ร่วมกัน เอกสาร Codex อธิบายการใช้ Worktrees เพื่อทำงานหลายแชตในโครงการเดียวกันได้ [6]
ตัวอย่างแนวทางจัดงานคือให้ทีมหนึ่งพัฒนา API ใน Worktree A และอีกทีมพัฒนา UI ใน Worktree B จากสัญญา API ที่ตกลงไว้ จากนั้นจึงรวมการเปลี่ยนแปลงและรันทดสอบการเชื่อมต่อ การสร้าง Worktree สำหรับแชตต่าง ๆ เป็นขั้นตอนจัดสภาพแวดล้อมที่ต้องเลือกใช้อย่างชัดเจน
#9. ออกแบบ Prompt ให้ตรวจผลงานได้
ใช้โครงสร้างต่อไปนี้เป็นแนวทาง โดยปรับรายละเอียดตามโครงการ
เป้าหมาย:
ผลลัพธ์ที่ต้องการให้ผู้ใช้หรือระบบทำได้
แหล่งอ้างอิงร่วม:
ข้อกำหนด โค้ดเริ่มต้น และเอกสาร API ที่เกี่ยวข้อง
แบ่งงาน:
Agent A ทำอะไร
Agent B ทำอะไร
แต่ละตัวอ่านหรือแก้ไขไฟล์ใดได้บ้าง
จุดที่ต้องรอ:
งานใดเริ่มได้ทันที
งานใดต้องรอผลจากงานก่อนหน้า
ผลที่ต้องส่งกลับ:
ไฟล์ หลักฐาน คำสั่งทดสอบ และข้อจำกัดที่พบ
การรวมงาน:
ใครตัดสินใจเมื่อข้อเสนอขัดกัน
ใครตรวจผลบนโค้ดสุดท้าย
#ตัวอย่างสำหรับวิเคราะห์ปัญหา Playwright
ใช้ Subagents 3 ตัววิเคราะห์ Playwright test ที่ล้มเหลว
A: ตรวจ locator และความเปลี่ยนแปลงของ DOM
B: ตรวจ API response และข้อมูลทดสอบ
C: ตรวจ timing, isolation และ shared state
ทุกตัวอ่านอย่างเดียวในรอบแรก
ให้รายงานหลักฐานพร้อมไฟล์และสมมติฐานที่ยังไม่ยืนยัน
รอผลครบ แล้วให้ตัวแทนหลักเลือกสมมติฐานที่จะทดลองก่อน
แก้โค้ดทีละสาเหตุ และรันกรณีที่ล้มเหลวซ้ำ
ตัวอย่างนี้แบ่งตามสาเหตุที่เป็นไปได้ ทำให้แต่ละตัวมีคำถามที่ต้องตอบชัดเจน
#ตัวอย่างสำหรับเพิ่มฟีเจอร์ API
ก่อนแบ่งงาน ให้กำหนด request/response และสถานะ HTTP ร่วมกัน
จากนั้นใช้ Subagents:
- ตัวที่หนึ่งพัฒนา endpoint ใน backend/
- ตัวที่สองสร้าง API tests ใน tests/api/
- ตัวที่สามอัปเดตคู่มือใน docs/api/
รอทุกตัวทำเสร็จ แล้วตรวจสัญญา API และรัน integration tests
ให้ตัวแทนหลักรับผิดชอบไฟล์ dependency และไฟล์ config ที่ใช้ร่วมกัน
#10. แยก Native Subagents ออกจาก SDK และ API
คำว่า Multi-agent อาจหมายถึงการใช้งานคนละระดับ จึงควรเลือกเครื่องมือจากสิ่งที่ต้องควบคุม
| ความต้องการ | จุดเริ่มต้น |
|---|---|
| ใช้ Codex ช่วยแบ่งงานในโครงการที่กำลังทำ | Native Subagents และ Prompt |
| ตั้งบทบาทเฉพาะงานให้ทีมใช้ซ้ำใน Codex | Custom Agents และ AGENTS.md |
| เรียก Codex จากโปรแกรมหรือระบบ CI | Codex SDK |
| สร้างไคลเอนต์ที่จัดการการลงชื่อเข้า ประวัติ สิทธิ์ และเหตุการณ์ | Codex app server |
| ให้บริการ Agents API จัดการ Codex harness และการมอบหมายตัวแทนย่อย | Agents API โดยตรวจสัญญาของ API แยกต่างหาก |
Codex SDK เป็นช่องทางควบคุม Codex ผ่านโปรแกรม ส่วน Native Subagents เป็นการมอบหมายงานภายในเวิร์กโฟลว์ของ Codex การเรียกหลาย Thread จากโปรแกรมไม่ได้กำหนดการแบ่งบทบาท การรวมผล หรือการแยกไฟล์ให้เราโดยอัตโนมัติ [7]
สำหรับ Agents API เอกสารมีการตั้งค่า agent.multi_agent.enabled ระหว่างสร้าง Session ซึ่งเป็นสัญญาของ API คนละส่วนกับ [agents] ในไฟล์ตั้งค่า Codex [8]
บทความนี้จึงเริ่มจาก Native Subagents ก่อน เพื่อให้เห็นเรื่องข้อกำหนด การมอบหมาย และการตรวจผลโดยไม่ต้องสร้างระบบประสานงานด้วยโค้ดเพิ่ม
หากพบตัวอย่างเก่าที่ใช้
codex mcp-serverให้ตรวจคู่มือปัจจุบันก่อน เอกสาร Codex SDK ระบุว่าคำสั่งดังกล่าวถูกนำออกแล้ว และแนะนำ SDK สำหรับงานอัตโนมัติ หรือ app server สำหรับการเชื่อมต่อที่ลึกขึ้น [7]
#11. เลือกงานที่คุ้มกับการแบ่ง
| ลักษณะงาน | แนวทาง |
|---|---|
| ตรวจโค้ดคนละโมดูลที่มีขอบเขตชัด | เหมาะกับการแบ่ง |
| วิเคราะห์ Log, Test และเอกสารคนละชุด | เหมาะกับการแบ่ง |
| Backend กับ UI มีสัญญากลางที่ตกลงแล้ว | แบ่งได้โดยกำหนดเจ้าของไฟล์ |
| แก้เงื่อนไขสั้น ๆ ในไฟล์เดียว | เริ่มจาก Agent เดียว |
| ขั้นตอนถัดไปต้องรอผลก่อนหน้าทุกครั้ง | จัดเป็นลำดับ |
| หลายตัวต้องเปลี่ยนไฟล์ตั้งค่าเดียวกัน | กำหนดผู้แก้ไขร่วมเพียงรายเดียว |
การใช้หลายตัวแทนอาจลดเวลาของงานอิสระ แต่ยังมีเวลาในการส่งมอบบริบท รอผล รวมงาน และแก้ข้อขัดแย้ง จึงควรวัดจากงานจริง
ตัวอย่างสมมติ: หากงานย่อยใช้เวลา 8, 6 และ 5 นาที การทำทีละงานใช้ 19 นาที ส่วนการทำพร้อมกันมีช่วงทำงานย่อยยาวสุดประมาณ 8 นาที และต้องบวกเวลารวมงาน ตัวเลขนี้ใช้สาธิตการคิดเวลา ไม่ใช่ผล Benchmark ของ Codex
ตัวแทนย่อยแต่ละตัวทำงานโมเดลและเครื่องมือของตนเอง เอกสารจึงระบุว่าโดยทั่วไปใช้โทเคนมากกว่างานที่เทียบเคียงกันด้วย Agent เดียว [1]
#ตัวชี้วัดสำหรับห้องเรียนหรือการทดลอง
| ตัวชี้วัด | วิธีบันทึก |
|---|---|
| เวลารวม | ตั้งแต่ส่งคำสั่งจนผ่านเกณฑ์ส่งมอบ |
| ความถูกต้อง | จำนวนข้อกำหนดที่ตรวจผ่านด้วยหลักฐาน |
| ความแม่นของรายงานบั๊ก | รายการที่ตรวจยืนยันได้เทียบกับทั้งหมดที่รายงาน |
| รอบแก้ไข | จำนวนครั้งที่ต้องแก้หลังรวมงาน |
| งานขัดแย้ง | จำนวนกรณีที่ต้องแก้ไฟล์ทับซ้อน |
| การใช้ทรัพยากร | โทเคน ค่าใช้จ่าย หรือโควตาที่ระบบแสดง |
| ความครบของรายงาน | ระบุไฟล์ คำสั่ง ผลจริง และสิ่งที่ยังไม่ตรวจหรือไม่ |
หากเปรียบเทียบ Single-agent กับ Multi-agent ให้ใช้โค้ดเริ่มต้น ข้อกำหนด เครื่องมือ และเกณฑ์ผ่านชุดเดียวกัน แล้วทำซ้ำหลายรอบ ไม่สรุปความเหนือกว่าจากการทดลองครั้งเดียว
#12. แก้ปัญหาที่พบบ่อย
| อาการ | สิ่งที่ควรตรวจ |
|---|---|
| ตอบเป็นหลายบทบาท แต่ไม่เห็นตัวแทนย่อย | สั่งให้ใช้ Subagents โดยตรงและตรวจเธรดกิจกรรม |
| ไฟล์ตั้งค่าโครงการไม่ถูกใช้ | ตรวจตำแหน่งไฟล์ ความเชื่อถือโครงการ และเริ่มเซสชันใหม่ |
| ไม่เริ่มงานขนาน | ตรวจว่าแบ่งเป็นงานอิสระจริง และตรวจเพดานตัวแทนย่อย |
| หลายตัวแก้ไฟล์เดียวกัน | ระบุผู้รับผิดชอบไฟล์ก่อนเริ่มรอบใหม่ |
| ชุดทดสอบผ่านแต่พฤติกรรมยังผิด | ตรวจ Assertion เทียบข้อกำหนด และกรณีขอบ |
| ตัวแทนรายงานว่าเสร็จแต่ไม่มีหลักฐาน | ขอไฟล์ คำสั่ง ผลรัน และสถานะที่ตรวจจริง |
| เอกสารกับโค้ดไม่ตรงกัน | ตรวจ README อีกครั้งหลังรวมโค้ด |
| ตั้งค่า Custom Agent แล้วสิทธิ์ไม่เปลี่ยน | ตรวจสิทธิ์ของเซสชันหลัก เพราะตัวแทนย่อยสืบทอดสิทธิ์ |
เริ่มใช้งานจากการตรวจโค้ดแบบอ่านอย่างเดียวก่อน แล้วค่อยเพิ่มงานเขียนที่แบ่งเจ้าของไฟล์ได้ชัดเจน สำหรับงานที่มีการแก้ไขพร้อมกัน ให้ตัวแทนหลักตรวจผลบนโค้ดสุดท้ายทุกครั้ง