นี่คือลูปของ Agent คือความแตกต่างระหว่างการขอความช่วยเหลือจาก AI กับการตื่นมาเจองานที่เสร็จเรียบร้อย คนส่วนใหญ่ไม่เคยสร้างลูปขึ้นมา เพราะการวนซ้ำหลายร้อยครั้งบนโมเดลระดับแนวหน้านั้นต้องใช้เงินจริง
ภายใน: รูปแบบของลูปอธิบายด้วยแผนภาพเดียว, ตั้งค่าให้พร้อมใช้งานสองแบบ (Claude Code และ API ดิบ), และคณิตศาสตร์ของแคชที่ทำให้ K3 กลายเป็นเครื่องจักรแห่งลูป
ลูปแรกของคุณจะทำงานคืนนี้ในราคาประมาณ $0.39 ต่อรอบ
นี่คือการตั้งค่าฉบับเต็ม 👇
ก่อนที่เราจะลงรายละเอียด ผมแชร์โน้ตรายวันเกี่ยวกับ AI และการเขียนโค้ดแบบ Vibe Coding ในช่อง Telegram ของผม: https://t.me/zodchixquant 🧠

ลูปจริง ๆ แล้วคืออะไร
ตัด hype ออกไป ลูปก็คือสี่ขั้นตอนที่วนซ้ำ:
1เป้าหมาย → พยายาม → ตรวจสอบ → (ดีกว่า? เก็บ : ลองใหม่)2 ↑__________________________|
- เป้าหมาย: เส้นชัยที่วัดผลได้ ไม่ใช่แค่ความรู้สึก เช่น "การทดสอบทั้งหมดผ่าน", "หน้าโหลดต่ำกว่า 1 วินาที", "คะแนนมากกว่า 90"
- พยายาม: โมเดลทำงานหนึ่งหน่วยเพื่อไปสู่เป้าหมาย
- ตรวจสอบ: มีอะไรบางอย่างตรวจสอบผลลัพธ์เทียบกับเป้าหมาย เช่น ชุดทดสอบ, linter, หรือโมเดลที่สอง
- วนซ้ำ: นำผลการตรวจสอบกลับเข้าไป ทำอีกครั้ง หยุดเมื่อถึงเป้าหมายหรืองบประมาณหมด
เท่านั้นแหละ ที่เหลือ (หน่วยความจำ, เอเจนต์ย่อย, การรันข้ามคืน) เป็นเพียงของตกแต่งบนวงจรนี้
ทำไมต้อง K3 โดยเฉพาะ: เศรษฐศาสตร์ของลูป
ลูปจะอ่าน context เดิมซ้ำทุกครั้ง: ฐานโค้ด, เป้าหมาย, ประวัติการทำงาน ในโมเดลส่วนใหญ่ คุณต้องจ่ายเต็มราคาสำหรับการอ่านซ้ำนั้น แต่บน K3 คุณไม่ต้อง:
1ต้นทุนต่อรอบ = fresh_tokens × $3/ล้าน + cached_tokens × $0.30/ล้าน23รูปแบบจริง (800K context คงที่ + 50K fresh ต่อรอบ):4K3: $0.24 + $0.15 = $0.39/รอบ5Fable 5: 850K × $10/ล้าน = $8.50/รอบ
ลูปข้ามคืน 50 รอบ: ประมาณ $20 บน K3, ประมาณ $425 บน Fable 5 นั่นไม่ใช่แค่ส่วนลด แต่เป็นความแตกต่างระหว่าง "ปล่อยให้มันทำงาน" กับ "ต้องจับตาดูตลอดเวลา"
กฎ唯一ข้อ: ต้องทำให้ stable context ของคุณเป็น prefix ที่เหมือนกันทุกประการในทุก ๆ รอบ โดยมีงานต่อท้าย เพื่อให้ cache ทำงานจริง

การตั้งค่า A: Claude Code (เส้นทาง 5 นาที)
ถ้าคุณใช้ Claude Code อยู่แล้ว ลูปมีในตัว และ K3 สามารถเสียบใต้มันได้ผ่านการตั้งค่าอย่างเป็นทางการของ Moonshot:
1export ANTHROPIC_BASE_URL=https://api.moonshot.ai/anthropic2export ANTHROPIC_AUTH_TOKEN=${YOUR_MOONSHOT_API_KEY}3export ANTHROPIC_MODEL=kimi-k34export ANTHROPIC_DEFAULT_OPUS_MODEL=kimi-k35export ANTHROPIC_DEFAULT_SONNET_MODEL=kimi-k36export ANTHROPIC_DEFAULT_HAIKU_MODEL=kimi-k37export CLAUDE_CODE_SUBAGENT_MODEL=kimi-k38export ENABLE_TOOL_SEARCH=false9export CLAUDE_CODE_AUTO_COMPACT_WINDOW=104857610claude
จากนั้นลูปก็ใช้แค่สองคำสั่ง:
- /goal ตั้งเส้นชัย: "การทดสอบทั้งหมดใน tests/ ผ่าน และ coverage ยังคงสูงกว่า 80%" Claude Code จะทำงานเพื่อไปให้ถึงเป้าหมายนั้นแทนที่จะหยุดที่คำตอบแรก
- /loop ทำให้มันเกิดขึ้นซ้ำ: เซสชันจะทำงานซ้ำตามตารางเวลาหรือจนกว่าเป้าหมายจะคงอยู่
ยืนยันว่าคุณใช้ K3 ผ่าน /status (เมนู /model จะไม่แสดง) หน้าต่าง auto-compact ขนาด 1M ในการตั้งค่าหมายความว่าลูปยาว ๆ จะ compact น้อยครั้ง ซึ่งช่วยให้ประวัติการวนซ้ำยังคงอยู่
การตั้งค่า B: ลูป API ดิบ (ควบคุมเต็มที่)
สำหรับลูปภายนอก Claude Code นี่คือลูปขั้นต่ำที่สมบูรณ์แบบ รองรับ OpenAI:
1from openai import OpenAI23client = OpenAI(4 api_key=MOONSHOT_API_KEY,5 base_url="https://api.moonshot.ai/v1",6)78# คำนำหน้าคงที่: เหมือนกันทุกรอบ = cache hits ที่ $0.30/ล้าน9STABLE = f"""คุณคือเอเจนต์การเขียนโค้ดในลูป10เป้าหมาย: ทำให้การทดสอบทั้งหมดผ่านในโปรเจกต์ด้านล่าง11โปรเจกต์:12{project_dump}13กฎ:14- เปลี่ยนแปลงทีละจุดต่อรอบ15- อธิบายสิ่งที่คุณเปลี่ยนและเหตุผลใน 2 บรรทัด16- ถ้าการทดสอบผ่าน ให้ตอบว่า: GOAL_REACHED17"""1819history = []20MAX_TURNS = 302122for turn in range(MAX_TURNS):23 result = run_tests() # การตรวจสอบของคุณ: pytest, npm test, ฯลฯ24 if result.passed:25 print(f"เสร็จใน {turn} รอบ")26 break2728 response = client.chat.completions.create(29 model="kimi-k3",30 messages=[31 {"role": "system", "content": STABLE},32 *history[-6:], # 3 การแลกเปลี่ยนล่าสุด, จำกัดไว้33 {"role": "user", "content":34 f"รอบที่ {turn}. ผลลัพธ์การทดสอบ:\n{result.output}\n"35 f"แก้ไขความล้มเหลวถัดไป"},36 ],37 )38 change = response.choices[0].message.content39 apply_change(change) # เขียนการแก้ไข, commit ไปยัง branch40 history += [41 {"role": "user", "content": f"รอบที่ {turn} ให้ผลลัพธ์การทดสอบแล้ว"},42 {"role": "assistant", "content": change},43 ]
รายละเอียดสำคัญสามอย่าง:
- การตรวจสอบคือโค้ด ไม่ใช่ความรู้สึก run_tests() เป็นตัวตัดสินความคืบหน้า โมเดลไม่เคยให้คะแนนตัวเอง
- ประวัติถูกจำกัด แค่ 3 การแลกเปลี่ยนล่าสุดเท่านั้น prefix คงที่ carry ข้อมูลที่คงทนและเป็นมิตรกับ cache
- ทุกการเปลี่ยนแปลงไปที่ branch ลูปอาจผิด 10 ครั้งก็ได้ ตราบใดที่ main ไม่เห็นมัน
อุปสรรคก่อนที่คุณจะเดินออกไป
- ตัวหยุดงบประมาณ: นับ tokens ต่อรอบ, ฆ่าลูปเมื่อถึงขีดจำกัดราคา MAX_TURNS ยังไม่พอ เพราะรอบที่บวมหนึ่งรอบกินเงินเท่ากับสิบรอบปกติได้
- ตัวหยุดความคืบหน้า: ถ้าการทดสอบเดียวกันล้มเหลว 3 รอบติดต่อกัน ให้หยุดและแจ้งเตือน ลูปที่ไม่สามารถลู่เข้าได้จะเผาเงินอย่างสุภาพ
- ข้อจำกัดหนึ่งของ K3: การคิด (reasoning) ทำงานที่ max-only ในตอนนี้ ดังนั้นทุกรอบจะมี output การคิดเต็มที่ในราคา $15/ล้าน ให้แต่ละรอบโฟกัส, หนึ่งความล้มเหลวต่อรอบ, และฝั่ง output จะยังคงอยู่ในระดับที่จัดการได้
ข้อผิดพลาดทั่วไป
- เป้าหมายคลุมเครือ "ปรับปรุงโค้ด" จะลูปตลอดกาล ลูปจะดีได้เท่ากับเส้นชัยที่ตรวจสอบได้เท่านั้น
- ปล่อยให้โมเดลประเมินตัวเอง "ดูเหมือนถูกต้องนะ" คือวิธีที่ลูปส่งขยะออกมา ผู้ตรวจสอบต้องเป็นภายนอก: การทดสอบ, linter, หรือโมเดลที่สองพร้อมเกณฑ์
- ทำลาย cache timestamp, ID สุ่ม, หรือไฟล์ที่เรียงลำดับใหม่ใน prefix ของคุณหมายถึงทุกรอบจะคิดเงิน $3/ล้านแทนที่จะเป็น $0.30/ล้าน เหมือนกันทุกประการหมายถึงเหมือนกันทุกประการ
- ไม่มีวินัยเรื่อง branch ลูปที่ไม่มีการควบคุมและมีสิทธิ์เขียนไปยัง main คือเรื่องสยองขวัญที่มีขั้นตอนเพิ่มเติม
- เริ่มต้นด้วยการรันข้ามคืน ให้รันลูปแรกของคุณในขณะที่ดูอยู่ 10-15 รอบ สร้างความเชื่อใจก่อนที่จะนอนทิ้งไว้
การตั้งค่าใน 15 นาที
- รับ Moonshot API key, เติมเงินในช่วงโบนัส 10-30%, ใช้งานได้ถึง 11 สิงหาคม (3 นาที)
- เลือกการตั้งค่า A หรือ B และเชื่อมต่อ (5 นาที)
- เขียนเป้าหมายที่ตรวจสอบได้หนึ่งข้อสำหรับงานเล็กจริง ๆ: การทดสอบที่ล้มเหลว, การผ่าน lint (2 นาที)
- รัน 10 รอบโดยมีคนดู, ดูว่าการตรวจสอบขับเคลื่อนงานอย่างไร (4 นาที)
- จดต้นทุน จากนั้นตัดสินใจว่าลูปถัดไปจะใหญ่แค่ไหน (1 นาที)
ลูปคือแนวคิดที่เก่าแก่ที่สุดในการเขียนโปรแกรมที่นำมาประยุกต์ใช้กับเครื่องมือล่าสุด K3 แค่ทำให้มันถูกลงพอที่จะใช้งานได้จริง
ขอบคุณที่อ่านนะครับ!
ผมแชร์โน้ตรายวันเกี่ยวกับ AI และการเขียนโค้ดแบบ Vibe Coding ในช่อง Telegram ของผม: https://t.me/zodchixquant 🧠






