07 · คัดลอกไปเริ่มได้เทมเพลต พร้อมปรับใช้งาน
ชื่อไฟล์ โครงสร้าง และค่าจำกัดเป็นข้อเสนอเพื่อออกแบบระบบ ไม่ใช่ config มาตรฐานที่ SDK ทุกตัวอ่านได้ทันที
Task Contract: ข้อเสนออบรม
งาน: สร้าง Draft ข้อเสนอ Inhouse Training
ผู้ใช้: ผู้รับผิดชอบบริการอบรม
Input:
- brief.md: ความต้องการลูกค้าและสิ่งที่ยังไม่ทราบ
- catalog.md: โมดูลหลักสูตรที่ให้บริการจริง
- rate_card.json: ราคาที่อนุมัติพร้อมเวอร์ชัน
- brand_guide.md: ภาษา รูปแบบ และ CI
Output:
- proposal.docx
- validation.json
- state.json
Done:
- Agenda รวมตรงเวลาใน Brief
- ราคาและเงื่อนไขอ้าง rate card ที่อนุมัติ
- แยกข้อมูลที่ทราบ ข้อสมมติ และคำถามค้าง
- ตัวตรวจโครงสร้างผ่าน และคนตรวจความเหมาะสมแล้ว
สิทธิ์:
- อ่าน input ของ job นี้
- เขียนเฉพาะ output ของ job นี้
- ไม่ส่งอีเมล ไม่เปลี่ยนข้อมูลลูกค้าต้นทาง
Stop:
- ไม่มี rate card ที่ยืนยันได้ หรือข้อมูลสำคัญขัดกัน
- เกิน budget/timeout ที่ runtime กำหนด
- เครื่องมือผิดพลาดเกิน retry limit
Workspace Map: หน้าที่ของไฟล์
README.md # จุดเริ่มและวิธีรัน
instructions.md # กฎสั้นและแผนที่ไปคู่มือ
knowledge/index.md # แผนที่ฐานความรู้
knowledge/catalog.md # เนื้อหาหลักสูตร
knowledge/rate_card.json # ราคาและเวอร์ชัน
contracts/proposal.json # สิ่งที่ต้องส่งและเกณฑ์ตรวจ
jobs/JOB-001/input/ # ข้อมูลของงานนี้
jobs/JOB-001/output/ # ผลลัพธ์ของงานนี้
jobs/JOB-001/state.json # สถานะและ next_action
jobs/JOB-001/events.jsonl # เหตุการณ์ที่ตัดข้อมูลลับแล้ว
checks/ # ตรวจเวลา ราคา และโครงสร้าง
fixtures/ # เคสปกติและ edge cases
instructions.md เป็นชื่อเสนอในคู่มือนี้
ไฟล์เฉพาะผลิตภัณฑ์ เช่น AGENTS.md หรือ CLAUDE.md
ต้องจัดตำแหน่งและรูปแบบตามเอกสารของผลิตภัณฑ์ที่ใช้
State / Checkpoint: ส่งต่องาน
{
"job_id": "JOB-001",
"status": "needs_input",
"input_version": "brief-v2",
"completed_steps": ["read_brief", "select_modules"],
"pending_steps": ["price", "create_docx", "validate"],
"missing_inputs": ["confirmed_rate_card_version"],
"artifacts": [],
"validation": {"passed": false, "errors": ["price_not_verified"]},
"attempts": {"read_rate_card": 1},
"external_action": {"requested": false, "approved": false},
"next_action": "request_confirmed_rate_card",
"updated_at": "2026-10-13T16:00:00+07:00"
}
ข้อมูลและเวลาในตัวอย่างนี้เป็นข้อมูลสมมติ
ระบบจริงต้องบันทึกจาก runtime และผลเครื่องมือจริงTool Contract: แยกร่างจากส่ง
Tool: create_proposal_draft
Purpose: สร้างไฟล์ร่างสำหรับ job ที่ผู้ใช้มีสิทธิ์
Input schema:
- job_id: string
- brief_version: string
- agenda: list of {topic, minutes}
- price_reference: {document_id, version}
- output_format: enum[docx, pdf]
Output:
- artifact_id / output_path
- source_versions
- validation_status
Controls ที่ต้องเขียนในระบบ:
- ตรวจผู้ใช้และ job_id ก่อนอ่านข้อมูล
- จำกัด output_path ให้อยู่ในโฟลเดอร์ job
- ตรวจ minutes และ price_reference
- ไม่คืน secret หรือข้อมูลลูกค้ารายอื่น
Tool: send_proposal
- artifact_id + recipient ที่ยืนยันแล้ว
- approval token ผูกกับฉบับ ผู้รับ และช่องทาง
- idempotency key และการตรวจผลหลังส่ง
อนุมัติฉบับเก่าไม่ครอบคลุมฉบับที่ถูกแก้ภายหลังPrompt: ให้ออกแบบ Harness ของคุณ
ช่วยออกแบบ AI Harness สำหรับ [งานที่ทำซ้ำ]
ผู้ใช้ผลลัพธ์: [บทบาท]
เป้าหมาย: [ผลลัพธ์ที่ต้องการ]
ข้อมูลที่มี: [แหล่ง / รูปแบบ / เวอร์ชัน]
เครื่องมือที่มี: [ชื่อและสิทธิ์ที่มีจริง]
สิ่งที่ต้องส่ง: [ไฟล์หรือการกระทำ]
สิ่งที่ไม่อนุญาต: [ขอบเขต]
จัดทำ:
1. Task Contract และคำถามจำเป็นที่ยังขาด
2. Agent loop และจุดที่ใช้โค้ดกฎตายตัวแทนโมเดล
3. Tool Contract: input, output, errors, permissions
4. State/checkpoint และวิธีทำต่อหลังหยุด
5. จุดอนุมัติและเงื่อนไข stop/retry
6. เกณฑ์ตรวจงาน และเคสปกติ/ข้อมูลขาด/สิทธิ์ไม่พอ
7. Metrics ที่เทียบ Baseline ได้
8. แผนทดลอง Draft ก่อนเปิดสิทธิ์ภายนอก
แยกข้อเท็จจริง ข้อสมมติ และสิ่งที่ต้องพัฒนาเพิ่ม
ไม่สร้างสถิติหรืออ้างว่าติดตั้งระบบแล้ว
คำสั่งใน Prompt ไม่ถือเป็นการบังคับสิทธิ์ใน runtime
Agent Loop: Pseudocode สำหรับทีมพัฒนา
state = load_checkpoint(job_id)
assert authorized_for_job(user, job_id)
while not state.is_terminal():
if exceeded_runtime_limits(state):
checkpoint(state, status="paused_budget")
break
context = select_relevant_context(task, state)
response = call_model(context)
# นับ timeout, errors และ usage ใน runtime
if response.requests_tool:
args = validate_tool_schema(response)
decision = policy_check(user, job_id, tool, args)
if decision == "deny":
checkpoint(state, status="blocked_permission")
break
if decision == "approval_required":
checkpoint(state, status="needs_approval")
break
# ตรวจ budget ทุก attempt
# ห้าม retry side effect จนยืนยันผลครั้งก่อน
observation = execute_with_retry(tool, args, limits)
record_redacted_event(state, observation)
update_state(state, observation)
checkpoint(state)
else:
report = verify_artifact_and_outcome(response, state)
if report.passed:
checkpoint(state, status="completed")
elif report.needs_human:
checkpoint(state, status="needs_review")
else:
add_feedback(state, report)
checkpoint(state)
# Pseudocode อธิบายสถาปัตยกรรม ไม่ใช่โปรแกรมพร้อมรัน
# ฟังก์ชันสิทธิ์ การตรวจ และการจัดเก็บต้องพัฒนาจริงเริ่มโดยไม่พัฒนา runtime เอง
บนแพลตฟอร์ม agent ที่รองรับไฟล์ ให้เตรียม Brief คู่มือความรู้ ตัวอย่างที่อนุมัติ และ Checklist จากนั้นทดลองสร้าง Draft และให้คนตรวจ เพื่อพิสูจน์ว่าโจทย์และเกณฑ์ชัดพอโดยยังไม่ต้องทำระบบครบชุด
การบันทึก state เป็นไฟล์ไม่ทำให้เกิด scheduler หรือ resume อัตโนมัติ การมี Skill ไม่ทำให้เครื่องมือและสิทธิ์เพิ่มขึ้นเอง ต้องตรวจความสามารถจริง หากต้องใช้ trigger ตามเวลา queue หลายงาน หรือ approval gate ที่บังคับได้ ค่อยเพิ่ม integration และ runtime ที่รองรับ