<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Codex on Code &amp; Community</title><link>https://neng-lab.com/tags/codex/</link><description>Recent content in Codex on Code &amp; Community</description><generator>Hugo -- gohugo.io</generator><language>th-th</language><managingEditor>jitaret@gmail.com (เหน่ง)</managingEditor><webMaster>jitaret@gmail.com (เหน่ง)</webMaster><lastBuildDate>Mon, 13 Apr 2026 11:00:00 +0700</lastBuildDate><atom:link href="https://neng-lab.com/tags/codex/index.xml" rel="self" type="application/rss+xml"/><item><title>Harness Engineering ตอนที่ 3: Query Loop - หัวใจของระบบ</title><link>https://neng-lab.com/posts/harness-part-3/</link><pubDate>Mon, 13 Apr 2026 11:00:00 +0700</pubDate><author>jitaret@gmail.com (เหน่ง)</author><guid>https://neng-lab.com/posts/harness-part-3/</guid><description>&lt;img src="https://neng-lab.com/" alt="Featured image of post Harness Engineering ตอนที่ 3: Query Loop - หัวใจของระบบ" /&gt;&lt;h1 id="harness-engineering-ตอนท-3-query-loop---หวใจของระบบ"&gt;&lt;a href="#harness-engineering-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%97-3-query-loop---%e0%b8%ab%e0%b8%a7%e0%b9%83%e0%b8%88%e0%b8%82%e0%b8%ad%e0%b8%87%e0%b8%a3%e0%b8%b0%e0%b8%9a%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;Harness Engineering ตอนที่ 3: Query Loop - หัวใจของระบบ
&lt;/h1&gt;&lt;h2 id="บทนำ-ทำไม-query-loop-ถงสำคญ"&gt;&lt;a href="#%e0%b8%9a%e0%b8%97%e0%b8%99%e0%b8%b3-%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1-query-loop-%e0%b8%96%e0%b8%87%e0%b8%aa%e0%b8%b3%e0%b8%84%e0%b8%8d" class="header-anchor"&gt;&lt;/a&gt;บทนำ: ทำไม Query Loop ถึงสำคัญ?
&lt;/h2&gt;&lt;p&gt;ลองนึกภาพว่า คุณมีผู้ช่วย AI ที่เก่งมาก แต่ครั้งที่คุณคุยด้วยทีละคำถาม มันก็ตอบได้แค่นั้น ถามต่อ ก็ตอบต่อ แต่ถ้าคุณต้องการให้มันทำงานซับซ้อน เช่น สร้างทั้งระบบ ต้องคุยกันหลายรอบ ปรับแก้หลายจุด จนบางทีคุณเองก็จำไม่ได้ว่าตอนนี้มันทำงานถึงไหนแล้ว&lt;/p&gt;
&lt;p&gt;นี่แหละคือที่มาของ &lt;strong&gt;Query Loop&lt;/strong&gt; - แนวคิดที่เปลี่ยน AI จาก &amp;ldquo;ผู้ตอบคำถาม&amp;rdquo; เป็น &amp;ldquo;ผู้ร่วมงานที่จดจำบริบทได้&amp;rdquo;&lt;/p&gt;
&lt;p&gt;และที่น่าสนใจคือ &lt;strong&gt;OpenAI ใช้ Query Loop สร้างโค้ดได้มากกว่า 1 ล้านบรรทัดในเวลาเพียง 5 เดือน&lt;/strong&gt; ตัวเลขนี้ไม่ใช่แค่ความเร็ว แต่มันบอกว่าการออกแบบระบบที่ถูกต้องสามารถยกระดับศักยภาพของ AI ได้อย่างมหาศาล&lt;/p&gt;
&lt;p&gt;แต่ที่น่าคิดคือ งานวิจัยจากหลายที่ชี้ว่า &lt;strong&gt;69% ของโค้ดที่ AI สร้างยังต้องมีคนตรวจสอบ&lt;/strong&gt; - หมายความว่า Query Loop ที่ดีไม่ใช่แค่ทำให้ AI ทำงานได้เร็ว แต่ต้องทำให้มันทำงาน &amp;ldquo;ถูกต้อง&amp;rdquo; ด้วย&lt;/p&gt;
&lt;p&gt;บทความนี้จะพาคุณเข้าใจว่า Query Loop คืออะไร ทำไมมันถึงเป็นหัวใจของระบบ AI และจะนำไปใช้อย่างไรให้เกิดประสิทธิภาพสูงสุด&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="query-loop-คออะไร"&gt;&lt;a href="#query-loop-%e0%b8%84%e0%b8%ad%e0%b8%ad%e0%b8%b0%e0%b9%84%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;Query Loop คืออะไร?
&lt;/h2&gt;&lt;h3 id="คำจำกดความ"&gt;&lt;a href="#%e0%b8%84%e0%b8%b3%e0%b8%88%e0%b8%b3%e0%b8%81%e0%b8%94%e0%b8%84%e0%b8%a7%e0%b8%b2%e0%b8%a1" class="header-anchor"&gt;&lt;/a&gt;คำจำกัดความ
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Query Loop&lt;/strong&gt; คือรูปแบบการสื่อสารกับ AI ที่ไม่ใช่แค่ &amp;ldquo;ถาม-ตอบ&amp;rdquo; ครั้งเดียว แต่เป็น &lt;strong&gt;วงจรการสนทนาที่ต่อเนื่อง&lt;/strong&gt; โดยในแต่ละรอบ AI จะ:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;รับ Query (คำถาม/คำสั่ง) พร้อมบริцепจาก.radiansก่อนหน้า&lt;/li&gt;
&lt;li&gt;ประมวลผลและให้คำตอบ&lt;/li&gt;
&lt;li&gt;รอ feedback หรือคำถามถัดไป&lt;/li&gt;
&lt;li&gt;วนซ้ำจนกว่างานจะเสร็จ&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="เปรยบเทยบใหเหนภาพ"&gt;&lt;a href="#%e0%b9%80%e0%b8%9b%e0%b8%a3%e0%b8%a2%e0%b8%9a%e0%b9%80%e0%b8%97%e0%b8%a2%e0%b8%9a%e0%b9%83%e0%b8%ab%e0%b9%80%e0%b8%ab%e0%b8%99%e0%b8%a0%e0%b8%b2%e0%b8%9e" class="header-anchor"&gt;&lt;/a&gt;เปรียบเทียบให้เห็นภาพ
&lt;/h3&gt;&lt;p&gt;ลองนึกถึงการไปร้านอาหาร:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prompt ปกติ (ถามครั้งเดียว):&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;อยากกินข้าวผัดกระเพรา&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;พนักงานก็จะทำข้าวผัดกระเพราให้ เสร็จ แต่ถ้าคุณอยากได้น้ำซุปด้วย? ต้องสั่งใหม่&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query Loop (วงจรต่อเนื่อง):&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;อยากกินข้าว&amp;rdquo;
&amp;ldquo;อยากกินข้าวผัด&amp;rdquo;
&amp;ldquo;ข้าวผัดกระเพรา ไม่เผ็ด&amp;rdquo;
&amp;ldquo;เพิ่มไข่ดาว&amp;rdquo;
&amp;ldquo;เอาน้ำซุปมาด้วย&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;ทุกครั้งที่สั่ง พนักงานจะจำได้ว่าคุณสั่งอะไรไปแล้วบ้าง และสร้างผลลัพธ์ที่สมบูรณ์ขึ้นเรื่อยๆ&lt;/p&gt;
&lt;p&gt;นี่แหละคือ Query Loop - การ &amp;ldquo;สะสมบริบท&amp;rdquo; ข้ามรอบการสนทนา&lt;/p&gt;
&lt;h3 id="ตางจาก-prompt-ปกตอยางไร"&gt;&lt;a href="#%e0%b8%95%e0%b8%b2%e0%b8%87%e0%b8%88%e0%b8%b2%e0%b8%81-prompt-%e0%b8%9b%e0%b8%81%e0%b8%95%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87%e0%b9%84%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;ต่างจาก Prompt ปกติอย่างไร?
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ด้าน&lt;/th&gt;
 &lt;th&gt;Prompt ปกติ&lt;/th&gt;
 &lt;th&gt;Query Loop&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;บริบท&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;แยกขาดกันทุกรอบ&lt;/td&gt;
 &lt;td&gt;สะสมต่อเนื่อง&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ความจำ&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ไม่มี (หรือมีแค่ในรอบเดียว)&lt;/td&gt;
 &lt;td&gt;จำได้ตลอดทั้งเซสชัน&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ผลลัพธ์&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;คำตอบเดี่ยว&lt;/td&gt;
 &lt;td&gt;งานที่ค่อยๆ สมบูรณ์ขึ้น&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;การแก้ไข&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ต้องสั่งใหม่หมด&lt;/td&gt;
 &lt;td&gt;แก้ได้ทีละส่วน&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;เหมาะกับ&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;คำถามง่ายๆ&lt;/td&gt;
 &lt;td&gt;งานซับซ้อน&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="ทำไม-query-loop-คอหวใจของระบบ"&gt;&lt;a href="#%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1-query-loop-%e0%b8%84%e0%b8%ad%e0%b8%ab%e0%b8%a7%e0%b9%83%e0%b8%88%e0%b8%82%e0%b8%ad%e0%b8%87%e0%b8%a3%e0%b8%b0%e0%b8%9a%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;ทำไม Query Loop คือหัวใจของระบบ?
&lt;/h2&gt;&lt;h3 id="1-เปลยน-ai-จาก-เครองมอ-เปน-พารทเนอร"&gt;&lt;a href="#1-%e0%b9%80%e0%b8%9b%e0%b8%a5%e0%b8%a2%e0%b8%99-ai-%e0%b8%88%e0%b8%b2%e0%b8%81-%e0%b9%80%e0%b8%84%e0%b8%a3%e0%b8%ad%e0%b8%87%e0%b8%a1%e0%b8%ad-%e0%b9%80%e0%b8%9b%e0%b8%99-%e0%b8%9e%e0%b8%b2%e0%b8%a3%e0%b8%97%e0%b9%80%e0%b8%99%e0%b8%ad%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;1. เปลี่ยน AI จาก &amp;ldquo;เครื่องมือ&amp;rdquo; เป็น &amp;ldquo;พาร์ทเนอร์&amp;rdquo;
&lt;/h3&gt;&lt;p&gt;เมื่อ AI จำบริบทได้ มันไม่ใช่แค่ตอบคำถาม แต่สามารถ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;เข้าใจเป้าหมายระยะยาว&lt;/strong&gt; - รู้ว่าคุณกำลังสร้างอะไร&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เสนอแนะสิ่งที่ดีกว่า&lt;/strong&gt; - แนะนำวิธีที่คุณอาจไม่ได้คิด&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ปรับตัวตาม feedback&lt;/strong&gt; - รับคำแนะนำและแก้ไขได้ทันที&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-ชวยลดความผดพลาดและเพมโอกาสใหตรวจสอบ"&gt;&lt;a href="#2-%e0%b8%8a%e0%b8%a7%e0%b8%a2%e0%b8%a5%e0%b8%94%e0%b8%84%e0%b8%a7%e0%b8%b2%e0%b8%a1%e0%b8%9c%e0%b8%94%e0%b8%9e%e0%b8%a5%e0%b8%b2%e0%b8%94%e0%b9%81%e0%b8%a5%e0%b8%b0%e0%b9%80%e0%b8%9e%e0%b8%a1%e0%b9%82%e0%b8%ad%e0%b8%81%e0%b8%b2%e0%b8%aa%e0%b9%83%e0%b8%ab%e0%b8%95%e0%b8%a3%e0%b8%a7%e0%b8%88%e0%b8%aa%e0%b8%ad%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;2. ช่วยลดความผิดพลาดและเพิ่มโอกาสให้ตรวจสอบ
&lt;/h3&gt;&lt;p&gt;ข้อมูลจากงานวิจัยหลายชิ้นชี้ให้เห็นว่า AI ยังไม่สมบูรณ์แบบ 100% แต่ Query Loop ช่วยลดปัญหานี้ได้ด้วยการ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;เพิ่มโอกาสให้ AI ตรวจสอบตัวเอง&lt;/strong&gt; - ถาม AI ว่า &amp;ldquo;โค้ดนี้ถูกต้องหรือไม่?&amp;rdquo; ก่อนจบแต่ละรอบ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ให้คนตรวจสอบได้บ่อยขึ้น&lt;/strong&gt; - แทนที่จะรอทำเสร็จทั้งหมดแล้วค่อยตรวจ ก็ตรวจทีละส่วน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ลดความผิดพลาดแบบ Cascade&lt;/strong&gt; - ถ้าผิดตั้งแต่ต้น จะไม่ลากไปทั้งระบบ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-claude-code-vs-codex-ตวอยางจากโลกจรง"&gt;&lt;a href="#3-claude-code-vs-codex-%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87%e0%b8%88%e0%b8%b2%e0%b8%81%e0%b9%82%e0%b8%a5%e0%b8%81%e0%b8%88%e0%b8%a3%e0%b8%87" class="header-anchor"&gt;&lt;/a&gt;3. Claude Code vs Codex: ตัวอย่างจากโลกจริง
&lt;/h3&gt;&lt;p&gt;ทั้ง &lt;strong&gt;Claude Code&lt;/strong&gt; (Anthropic) และ &lt;strong&gt;Codex&lt;/strong&gt; (OpenAI) ล้วนใช้ Query Loop แต่ออกแบบต่างกัน:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; เน้น:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Context window กว้าง (เก็บบริบทได้มาก)&lt;/li&gt;
&lt;li&gt;การตรวจสอบโค้ดอัตโนมัติ (computer use)&lt;/li&gt;
&lt;li&gt;การแก้ไขแบบ iterative&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Codex&lt;/strong&gt; เน้น:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ความเร็วในการสร้างโค้ด&lt;/li&gt;
&lt;li&gt;การ integrate กับเครื่องมือ dev&lt;/li&gt;
&lt;li&gt;การทำงานแบบ subtask (แบ่งงานเป็นชิ้นเล็กๆ)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;สิ่งที่ทั้งสองมีเหมือนกันคือ: &lt;strong&gt;ทั้งคู่เชื่อว่างานซับซ้อนต้องใช้ Query Loop&lt;/strong&gt; - ไม่มีทางที่จะสั่งครั้งเดียวแล้วได้ผลลัพธ์ที่ดี&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="ประสบการณเหนง-การใช-query-loop-กบ-openclaw"&gt;&lt;a href="#%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%9a%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%93%e0%b9%80%e0%b8%ab%e0%b8%99%e0%b8%87-%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b9%83%e0%b8%8a-query-loop-%e0%b8%81%e0%b8%9a-openclaw" class="header-anchor"&gt;&lt;/a&gt;ประสบการณ์เหน่ง: การใช้ Query Loop กับ OpenClaw
&lt;/h2&gt;&lt;p&gt;ในระบบ &lt;strong&gt;OpenClaw&lt;/strong&gt; ที่เหน่งใช้งาน มีการนำ Query Loop มาใช้ในรูปแบบ &lt;strong&gt;Sub-agent Pattern&lt;/strong&gt; ซึ่งเป็นตัวอย่างที่ดีของการนำทฤษฎีมาใช้จริง&lt;/p&gt;
&lt;h3 id="วธทใช"&gt;&lt;a href="#%e0%b8%a7%e0%b8%98%e0%b8%97%e0%b9%83%e0%b8%8a" class="header-anchor"&gt;&lt;/a&gt;วิธีที่ใช้:
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;1. Main Agent เป็น Router&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;ผู้ใช้ → Main Agent (วิเคราะห์คำขอ) → เลือก Specialist Agent 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; → Specialist Agent (ทำงาน) → ส่งผลลัพธ์กลับ → Main Agent → ผู้ใช้
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;นี่คือ Query Loop ระดับหนึ่ง - Main Agent จำได้ว่าคำขอนี้ควรไปที่ไหน และรอรอบต่อไป&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Specialist Agents ทำงานเป็น Loop&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;Writer 1 → ส่งงาน → (รอ feedback) → แก้ไข → ส่งใหม่ → ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;Writer 2 → ส่งงาน → (รอ feedback) → แก้ไข → ส่งใหม่ → ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;แต่ละ Agent ทำงานใน Query Loop ของตัวเอง รอ feedback จาก Main Agent หรือผู้ใช้ก่อนจะดำเนินต่อ&lt;/p&gt;
&lt;h3 id="ปญหาทเจอและวธแก"&gt;&lt;a href="#%e0%b8%9b%e0%b8%8d%e0%b8%ab%e0%b8%b2%e0%b8%97%e0%b9%80%e0%b8%88%e0%b8%ad%e0%b9%81%e0%b8%a5%e0%b8%b0%e0%b8%a7%e0%b8%98%e0%b9%81%e0%b8%81" class="header-anchor"&gt;&lt;/a&gt;ปัญหาที่เจอและวิธีแก้:
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;ปัญหา 1: Context ล้น (Context Overflow)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;อาการ:&lt;/strong&gt; พอทำงานนานๆ AI เริ่ม &amp;ldquo;ลืม&amp;rdquo; สิ่งที่คุยก่อนหน้า&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;วิธีแก้:&lt;/strong&gt; ใช้การสรุปบริบท (Context Summary) ก่อนเริ่มรอบใหม่ หรือแบ่งงานเป็นชิ้นเล็กๆ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ปัญหา 2: Feedback Loop หลุด&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;อาการ:&lt;/strong&gt; Agent ทำงานต่อเนื่องโดยไม่รอ feedback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;วิธีแก้:&lt;/strong&gt; กำหนดจุด &amp;ldquo;หยุดรอ&amp;rdquo; (Checkpoint) ชัดเจน เช่น ทุกครั้งที่ส่งผลลัพธ์ ต้องรอ approval ก่อน&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ปัญหา 3: Sub-agent ไม่สื่อสารกัน&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;อาการ:&lt;/strong&gt; Writer 1 ทำอย่าง Writer 2 ทำอีกอย่าง ไม่เชื่อมกัน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;วิธีแก้:&lt;/strong&gt; ใช้ Main Agent เป็นตัวกลางประสาน และกำหนด shared context ให้ทุก Agent&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="บทเรยนทได"&gt;&lt;a href="#%e0%b8%9a%e0%b8%97%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b8%99%e0%b8%97%e0%b9%84%e0%b8%94" class="header-anchor"&gt;&lt;/a&gt;บทเรียนที่ได้:
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Query Loop ไม่ใช่แค่ &amp;ldquo;คุยซ้ำๆ&amp;rdquo;&lt;/strong&gt; - ต้องมีโครงสร้างชัดเจน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checkpoint สำคัญ&lt;/strong&gt; - กำหนดจุดที่ต้องหยุดและรอ approval&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Balance ระหว่างอัตโนมัติและการควบคุม&lt;/strong&gt; - ปล่อยให้ AI ทำ แต่คนยังตรวจสอบได้&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="query-loop-ในทางปฏบต-จากทฤษฎสการใชงานจรง"&gt;&lt;a href="#query-loop-%e0%b9%83%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b8%9b%e0%b8%8f%e0%b8%9a%e0%b8%95-%e0%b8%88%e0%b8%b2%e0%b8%81%e0%b8%97%e0%b8%a4%e0%b8%a9%e0%b8%8e%e0%b8%aa%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b9%83%e0%b8%8a%e0%b8%87%e0%b8%b2%e0%b8%99%e0%b8%88%e0%b8%a3%e0%b8%87" class="header-anchor"&gt;&lt;/a&gt;Query Loop ในทางปฏิบัติ: จากทฤษฎีสู่การใช้งานจริง
&lt;/h2&gt;&lt;p&gt;ตอนนี้เราเข้าใจแล้วว่า Query Loop คืออะไรและทำไมมันถึงสำคัญ ถึงเวลาลงมือทำกันแล้ว! ส่วนนี้จะพาคุณไปดูว่าจะนำ Query Loop ไปใช้ในโปรเจกต์จริงอย่างไร&lt;/p&gt;
&lt;h3 id="ขนตอนการสราง-query-loop"&gt;&lt;a href="#%e0%b8%82%e0%b8%99%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%aa%e0%b8%a3%e0%b8%b2%e0%b8%87-query-loop" class="header-anchor"&gt;&lt;/a&gt;ขั้นตอนการสร้าง Query Loop
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;ขั้นที่ 1: กำหนดเป้าหมายให้ชัด&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ก่อนเริ่ม ถามตัวเองก่อนว่า:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;งานนี้ต้องทำกี่รอบ?&lt;/li&gt;
&lt;li&gt;แต่ละรอบ AI ต้องทำอะไร?&lt;/li&gt;
&lt;li&gt;เมื่อไหร่คือจุดที่เสร็จสิ้น?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ยกตัวอย่าง: ถ้าคุณต้องการให้ AI ช่วยเขียนบทความ อาจแบ่งเป็น:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;รอบ 1: ร่างโครงร่าง&lt;/li&gt;
&lt;li&gt;รอบ 2: เขียนเนื้อหาแต่ละส่วน&lt;/li&gt;
&lt;li&gt;รอบ 3: ตรวจแก้ไข&lt;/li&gt;
&lt;li&gt;รอบ 4: เพิ่ม SEO และ Formatting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ขั้นที่ 2: เขียน Prompt แรกให้ดี&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Prompt แรกเป็นตัวกำหนดทิศทางทั้งหมด ควรมี:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;บริบท&lt;/strong&gt; - ให้ AI รู้ว่ากำลังทำอะไร&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เป้าหมาย&lt;/strong&gt; - บอกชัดๆ ว่าต้องการอะไร&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;กรอบการทำงาน&lt;/strong&gt; - บอกว่ามีกี่รอบ แต่ละรอบทำอะไร&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ตัวอย่าง Prompt แรก:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;คุณคือนักเขียนบทความ Tech Blog ชื่อ &amp;#34;เหน่ง&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;ภารกิจ: เขียนบทความเรื่อง Query Loop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;ขั้นตอนการทำงาน:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;1. รอบนี้ - สร้างโครงร่างบทความ 5 หัวข้อ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;2. รอบต่อไป - เขียนเนื้อหาแต่ละหัวข้อ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;3. รอบสุดท้าย - ตรวจสอบและปรับปรุง
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;เริ่มต้นที่ขั้นตอน 1: สร้างโครงร่างบทความ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;ขั้นที่ 3: กำหนดจุด Checkpoint&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ทุก Query Loop ต้องมีจุด &amp;ldquo;หยุดรอ&amp;rdquo; ที่ชัดเจน ไม่ใช่ให้ AI ทำต่อเนื่องจนเสร็จ&lt;/p&gt;
&lt;p&gt;วิธีกำหนด Checkpoint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;หลังส่งผลลัพธ์ทุกครั้ง → รอ feedback&lt;/li&gt;
&lt;li&gt;ก่อนเริ่มรอบใหม่ → สรุปสิ่งที่ทำเสร็จ&lt;/li&gt;
&lt;li&gt;ตอนสงสัย → ถามก่อนทำต่อ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ขั้นที่ 4: ให้ Feedback ที่ชัดเจน&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;นี่คือจุดที่หลายคนมองข้าม Feedback ไม่ใช่แค่บอก &amp;ldquo;ดี&amp;rdquo; หรือ &amp;ldquo;แก้&amp;rdquo; แต่ต้อง:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;บอกว่าชอบตรงไหน&lt;/strong&gt; - ให้ AI ทำซ้ำ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;บอกว่าไม่ชอบตรงไหน&lt;/strong&gt; - ให้ AI หลีกเลี่ยง&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;บอกว่าต้องการเพิ่มอะไร&lt;/strong&gt; - ให้ AI พัฒนา&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;รูปแบบ&lt;/th&gt;
 &lt;th&gt;ตัวอย่าง&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;❌ Bad Feedback&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;ยังไม่ดี แก้ใหม่&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;✅ Good Feedback&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;ส่วนนำดีมาก แต่ส่วนอธิบายคำจำกัดความยังไม่ละเอียด ขอให้ขยายความเรื่อง Context Window เพิ่มอีก 2 ย่อหน้า&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="best-practices-7-ขอสำหรบ-query-loop-ทมประสทธภาพ"&gt;&lt;a href="#best-practices-7-%e0%b8%82%e0%b8%ad%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%9a-query-loop-%e0%b8%97%e0%b8%a1%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%97%e0%b8%98%e0%b8%a0%e0%b8%b2%e0%b8%9e" class="header-anchor"&gt;&lt;/a&gt;Best Practices: 7 ข้อสำหรับ Query Loop ที่มีประสิทธิภาพ
&lt;/h2&gt;&lt;h3 id="1-เรมดวย-one-shot-แลวคอยขยาย"&gt;&lt;a href="#1-%e0%b9%80%e0%b8%a3%e0%b8%a1%e0%b8%94%e0%b8%a7%e0%b8%a2-one-shot-%e0%b9%81%e0%b8%a5%e0%b8%a7%e0%b8%84%e0%b8%ad%e0%b8%a2%e0%b8%82%e0%b8%a2%e0%b8%b2%e0%b8%a2" class="header-anchor"&gt;&lt;/a&gt;1. เริ่มด้วย &amp;ldquo;One Shot&amp;rdquo; แล้วค่อยขยาย
&lt;/h3&gt;&lt;p&gt;อย่าเพิ่งสร้าง Query Loop ที่ซับซ้อนตั้งแต่ต้น เริ่มจาก Prompt ง่ายๆ ดูผลลัพธ์ก่อน ถ้าไม่พอ แค่นั้นค่อยเพิ่มรอบ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ทำไม:&lt;/strong&gt; ลดความซับซ้อนที่ไม่จำเป็น และให้ AI มีโอกาส &amp;ldquo;เดา&amp;rdquo; ถูกตั้งแต่ครั้งแรก&lt;/p&gt;
&lt;h3 id="2-ใช-system-prompt-เปน-anchor"&gt;&lt;a href="#2-%e0%b9%83%e0%b8%8a-system-prompt-%e0%b9%80%e0%b8%9b%e0%b8%99-anchor" class="header-anchor"&gt;&lt;/a&gt;2. ใช้ &amp;ldquo;System Prompt&amp;rdquo; เป็น Anchor
&lt;/h3&gt;&lt;p&gt;System Prompt คือคำสั่งที่อยู่ตลอดเวลา ควรใส่สิ่งสำคัญที่อยากให้ AI จำได้ตลอด:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;บทบาทของ AI&lt;/li&gt;
&lt;li&gt;รูปแบบผลลัพธ์ที่ต้องการ&lt;/li&gt;
&lt;li&gt;ข้อจำกัดหรือกฎที่ต้องปฏิบัติ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ตัวอย่าง System Prompt:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;คุณคือ Writer Agent สำหรับบทความ Tech Blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;- เขียนเป็นภาษาไทย โทนเป็นกันเอง
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;- ทุกบทความต้องมี Introduction + Body + Conclusion
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;- ใช้ Schema Markup ในรูปแบบ JSON-LD
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;- หลีกเลี่ยงศัพท์เทคนิคที่ซับซ้อนเกินไป
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-สราง-state-summary-กอนรอบใหม"&gt;&lt;a href="#3-%e0%b8%aa%e0%b8%a3%e0%b8%b2%e0%b8%87-state-summary-%e0%b8%81%e0%b8%ad%e0%b8%99%e0%b8%a3%e0%b8%ad%e0%b8%9a%e0%b9%83%e0%b8%ab%e0%b8%a1" class="header-anchor"&gt;&lt;/a&gt;3. สร้าง &amp;ldquo;State Summary&amp;rdquo; ก่อนรอบใหม่
&lt;/h3&gt;&lt;p&gt;ก่อนเริ่มรอบถัดไป สรุปสิ่งที่ทำเสร็จแล้วให้ AI จำ:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;[สถานะปัจจุบัน]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;- ✅ โครงร่างบทความ: เสร็จแล้ว
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;- ✅ ส่วนนำ: เสร็จแล้ว 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;- 🔄 ส่วนหลัก: กำลังทำ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;[คำสั่งสำหรับรอบนี้]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;เขียนส่วนหลัก 3 หัวข้อ หัวละ 300-400 คำ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;ทำไม:&lt;/strong&gt; ลดการสับสนเมื่อบริบทยาวขึ้น และให้ AI รู้ตำแหน่งที่ชัดเจน&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="ขอผดพลาดทพบบอย-อยาใหเกดกบคณ"&gt;&lt;a href="#%e0%b8%82%e0%b8%ad%e0%b8%9c%e0%b8%94%e0%b8%9e%e0%b8%a5%e0%b8%b2%e0%b8%94%e0%b8%97%e0%b8%9e%e0%b8%9a%e0%b8%9a%e0%b8%ad%e0%b8%a2-%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b9%83%e0%b8%ab%e0%b9%80%e0%b8%81%e0%b8%94%e0%b8%81%e0%b8%9a%e0%b8%84%e0%b8%93" class="header-anchor"&gt;&lt;/a&gt;ข้อผิดพลาดที่พบบ่อย: อย่าให้เกิดกับคุณ
&lt;/h2&gt;&lt;h3 id="ขอผดพลาดท-1-ไมกำหนดจดหยด"&gt;&lt;a href="#%e0%b8%82%e0%b8%ad%e0%b8%9c%e0%b8%94%e0%b8%9e%e0%b8%a5%e0%b8%b2%e0%b8%94%e0%b8%97-1-%e0%b9%84%e0%b8%a1%e0%b8%81%e0%b8%b3%e0%b8%ab%e0%b8%99%e0%b8%94%e0%b8%88%e0%b8%94%e0%b8%ab%e0%b8%a2%e0%b8%94" class="header-anchor"&gt;&lt;/a&gt;ข้อผิดพลาดที่ 1: ไม่กำหนดจุดหยุด
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;อาการ:&lt;/strong&gt; AI ทำงานต่อเนื่องโดยไม่รอ approval จนงานเพี้ยนไปหมด&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;วิธีแก้:&lt;/strong&gt; ใส่คำสั่งชัดเจน &amp;ldquo;รอ feedback ก่อนดำเนินต่อ&amp;rdquo;&lt;/p&gt;
&lt;h3 id="ขอผดพลาดท-2-context-รวไหล"&gt;&lt;a href="#%e0%b8%82%e0%b8%ad%e0%b8%9c%e0%b8%94%e0%b8%9e%e0%b8%a5%e0%b8%b2%e0%b8%94%e0%b8%97-2-context-%e0%b8%a3%e0%b8%a7%e0%b9%84%e0%b8%ab%e0%b8%a5" class="header-anchor"&gt;&lt;/a&gt;ข้อผิดพลาดที่ 2: Context รั่วไหล
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;อาการ:&lt;/strong&gt; AI เอาข้อมูลจากรอบก่อนมาใช้ผิดที่ หรือลืมข้อมูลสำคัญ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;วิธีแก้:&lt;/strong&gt; ใช้ State Summary ทุกรอบ และทำเครื่องหมาย ✅/🔄/❌ ให้ชัด&lt;/p&gt;
&lt;h3 id="ขอผดพลาดท-3-feedback-ไมชดเจน"&gt;&lt;a href="#%e0%b8%82%e0%b8%ad%e0%b8%9c%e0%b8%94%e0%b8%9e%e0%b8%a5%e0%b8%b2%e0%b8%94%e0%b8%97-3-feedback-%e0%b9%84%e0%b8%a1%e0%b8%8a%e0%b8%94%e0%b9%80%e0%b8%88%e0%b8%99" class="header-anchor"&gt;&lt;/a&gt;ข้อผิดพลาดที่ 3: Feedback ไม่ชัดเจน
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;อาการ:&lt;/strong&gt; บอก AI &amp;ldquo;แก้ใหม่&amp;rdquo; แต่ไม่บอกว่าแก้อะไร AI ก็เดาไปเรื่อยๆ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;วิธีแก้:&lt;/strong&gt; ใช้รูปแบบ &amp;ldquo;ชอบ/ไม่ชอบ/อยากได้เพิ่ม&amp;rdquo; ตามที่แนะนำไว้ข้างต้น&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="สรป-query-loop-ในแบบทใชงานไดจรง"&gt;&lt;a href="#%e0%b8%aa%e0%b8%a3%e0%b8%9b-query-loop-%e0%b9%83%e0%b8%99%e0%b9%81%e0%b8%9a%e0%b8%9a%e0%b8%97%e0%b9%83%e0%b8%8a%e0%b8%87%e0%b8%b2%e0%b8%99%e0%b9%84%e0%b8%94%e0%b8%88%e0%b8%a3%e0%b8%87" class="header-anchor"&gt;&lt;/a&gt;สรุป: Query Loop ในแบบที่ใช้งานได้จริง
&lt;/h2&gt;&lt;p&gt;บทความนี้เราได้เดินทางจากความเข้าใจพื้นฐานไปจนถึงการนำไปใช้จริง:&lt;/p&gt;
&lt;h3 id="สงทไดเรยนร"&gt;&lt;a href="#%e0%b8%aa%e0%b8%87%e0%b8%97%e0%b9%84%e0%b8%94%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b8%99%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;สิ่งที่ได้เรียนรู้:
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Query Loop คืออะไร&lt;/strong&gt; - วงจรการสนทนาที่ต่อเนื่อง ไม่ใช่แค่ถาม-ตอบครั้งเดียว&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ทำไมถึงสำคัญ&lt;/strong&gt; - เปลี่ยน AI จากเครื่องมือเป็นพาร์ทเนอร์ ช่วยลดความผิดพลาด และทำงานซับซ้อนได้&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;วิธีสร้าง Query Loop&lt;/strong&gt; - กำหนดเป้าหมาย → เขียน Prompt แรก → กำหนด Checkpoint → ให้ Feedback ชัด&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best Practices 7 ข้อ&lt;/strong&gt; - เริ่มเล็ก → ใช้ System Prompt → State Summary → Temperature ตามรอบ → Exit Criteria → Context จัดการ → ทดสอบก่อนจริง&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ข้อผิดพลาดที่ควรเลี่ยง&lt;/strong&gt; - ไม่กำหนดจุดหยุด, Context รั่ว, Feedback ไม่ชัด, Loop ยาวเกิน, ไม่มีคนตรวจ&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="บทเรยนสำคญ"&gt;&lt;a href="#%e0%b8%9a%e0%b8%97%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b8%99%e0%b8%aa%e0%b8%b3%e0%b8%84%e0%b8%8d" class="header-anchor"&gt;&lt;/a&gt;บทเรียนสำคัญ:
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Query Loop ไม่ใช่แค่ &amp;ldquo;คุยซ้ำๆ&amp;rdquo;&lt;/strong&gt; - มันคือโครงสร้างการทำงานที่ชัดเจน&lt;br&gt;
&lt;strong&gt;มี Checkpoint ทุกรอบ&lt;/strong&gt; - อย่าปล่อยให้ AI ทำต่อเนื่องโดยไม่มีคนตรวจ&lt;br&gt;
&lt;strong&gt;Feedback ต้องชัดเจน&lt;/strong&gt; - &amp;ldquo;แก้ใหม่&amp;rdquo; ไม่เพียงพอ ต้องบอกว่าแก้อะไร&lt;br&gt;
&lt;strong&gt;จุดหยุดต้องมี&lt;/strong&gt; - กำหนด Exit Criteria ตั้งแต่แรก&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="มองไปขางหนา-ตอนถดไปคออะไร"&gt;&lt;a href="#%e0%b8%a1%e0%b8%ad%e0%b8%87%e0%b9%84%e0%b8%9b%e0%b8%82%e0%b8%b2%e0%b8%87%e0%b8%ab%e0%b8%99%e0%b8%b2-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%96%e0%b8%94%e0%b9%84%e0%b8%9b%e0%b8%84%e0%b8%ad%e0%b8%ad%e0%b8%b0%e0%b9%84%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;มองไปข้างหน้า: ตอนถัดไปคืออะไร?
&lt;/h2&gt;&lt;p&gt;บทความนี้เป็นแค่จุดเริ่มต้นของ &lt;strong&gt;Harness Engineering&lt;/strong&gt; ในตอนถัดไป เราจะไปดู &lt;strong&gt;Harness Components&lt;/strong&gt; หรือ &amp;ldquo;ชิ้นส่วนสำคัญ&amp;rdquo; ที่ทำให้ระบบ AI ทำงานได้อย่างมีประสิทธิภาพ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sub-agent System&lt;/strong&gt; - การแบ่งงานให้ AI หลายตัวทำงานร่วมกัน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context Manager&lt;/strong&gt; - การจัดการบริบทให้ AI ไม่ &amp;ldquo;ลืม&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feedback Chain&lt;/strong&gt; - การสร้างระบบ Feedback ที่มีประสิทธิภาพ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Handling&lt;/strong&gt; - การจัดการเมื่อ AI ทำผิดพลาด&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ถ้าคุณอยากให้ OpenClaw หรือระบบ AI ของคุณทำงานได้ดีขึ้น บทความถัดไปจะเป็นคู่มือที่ครบถ้วนที่สุด&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="เตรยมพรอมสำหรบตอนตอไป"&gt;&lt;a href="#%e0%b9%80%e0%b8%95%e0%b8%a3%e0%b8%a2%e0%b8%a1%e0%b8%9e%e0%b8%a3%e0%b8%ad%e0%b8%a1%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%9a%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%95%e0%b8%ad%e0%b9%84%e0%b8%9b" class="header-anchor"&gt;&lt;/a&gt;เตรียมพร้อมสำหรับตอนต่อไป:
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Sub-agent Pattern คืออะไรและใช้ตอนไหน&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; วิธีออกแบบ Context Manager ให้ AI จำได้นาน&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Feedback Chain: จาก &amp;ldquo;แก้ใหม่&amp;rdquo; สู่ &amp;ldquo;แก้แบบมีทิศทาง&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Error Handling: เมื่อ AI ผิดพลาด ต้องทำอย่างไร&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;บทความนี้เป็นส่วนหนึ่งของซีรีส์ &amp;ldquo;Harness Engineering&amp;rdquo; ซึ่งสำรวจแนวคิดและเทคนิคในการใช้ AI ให้เกิดประสิทธิภาพสูงสุด&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ตอนที่ 1: &lt;a class="link" href="https://neng-lab.com/posts/harness-part-1/" &gt;Harness Engineering ตอนที่ 1: ทำไม AI ต้องมี Harness?&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;ตอนที่ 2: &lt;a class="link" href="https://neng-lab.com/posts/harness-part-2/" &gt;Harness Engineering ตอนที่ 2: Prompt คือ Control Plane (ไม่ใช่ Input Box)&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;ตอนที่ 3: &lt;a class="link" href="https://neng-lab.com/posts/harness-part-3/" &gt;Harness Engineering ตอนที่ 3: Query Loop - หัวใจของระบบ&lt;/a&gt; (บทความนี้)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;ตอนที่ 4: &lt;a class="link" href="https://neng-lab.com/posts/harness-part-4/" &gt;Harness Engineering ตอนที่ 4: Tools &amp;amp; Permissions - กำหนดขอบเขต AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="คำศพท-thai-english"&gt;&lt;a href="#%e0%b8%84%e0%b8%b3%e0%b8%a8%e0%b8%9e%e0%b8%97-thai-english" class="header-anchor"&gt;&lt;/a&gt;คำศัพท์ Thai-English
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ภาษาไทย&lt;/th&gt;
 &lt;th&gt;English&lt;/th&gt;
 &lt;th&gt;ความหมาย&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Query Loop&lt;/td&gt;
 &lt;td&gt;Query Loop&lt;/td&gt;
 &lt;td&gt;วงจรการสื่อสารกับ AI แบบต่อเนื่อง&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Context&lt;/td&gt;
 &lt;td&gt;Context&lt;/td&gt;
 &lt;td&gt;ข้อมูลพื้นฐาน/บริบทที่ AI ใช้ในการประมวลผล&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Checkpoint&lt;/td&gt;
 &lt;td&gt;Checkpoint&lt;/td&gt;
 &lt;td&gt;จุดหยุดรอ ก่อนดำเนินการต่อ&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;System Prompt&lt;/td&gt;
 &lt;td&gt;System Prompt&lt;/td&gt;
 &lt;td&gt;คำสั่งหลักที่อยู่ตลอดเวลา&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Temperature&lt;/td&gt;
 &lt;td&gt;Temperature&lt;/td&gt;
 &lt;td&gt;ตัวกำหนดระดับความสร้างสรรค์ของ AI&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Exit Criteria&lt;/td&gt;
 &lt;td&gt;Exit Criteria&lt;/td&gt;
 &lt;td&gt;เงื่อนไขที่บอกว่าเสร็จแล้ว&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Summarization&lt;/td&gt;
 &lt;td&gt;Summarization&lt;/td&gt;
 &lt;td&gt;การสรุปย่อยบริบท&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Human in the Loop&lt;/td&gt;
 &lt;td&gt;Human in the Loop&lt;/td&gt;
 &lt;td&gt;การมีคนตรวจสอบในกระบวนการ&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Feedback Chain&lt;/td&gt;
 &lt;td&gt;Feedback Chain&lt;/td&gt;
 &lt;td&gt;ลำดับการให้ Feedback&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Sub-agent&lt;/td&gt;
 &lt;td&gt;Sub-agent&lt;/td&gt;
 &lt;td&gt;Agent ย่อยที่ทำงานเฉพาะทาง&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;!-- Article Schema --&gt;
&lt;script type="application/ld+json"&gt;
{
 "@context": "https://schema.org",
 "@type": "Article",
 "headline": "Harness Engineering ตอนที่ 3: Query Loop - หัวใจของระบบ",
 "description": "ทำความรู้จัก Query Loop แนวคิดสำคัญที่เปลี่ยน AI จากผู้ตอบคำถามเป็นผู้ร่วมงาน พร้อม Best Practices 7 ข้อ และตัวอย่างจริงจาก OpenClaw",
 "author": {
 "@type": "Person",
 "name": "เหน่ง (Nueng)"
 },
 "datePublished": "2026-04-13",
 "publisher": {
 "@type": "Organization",
 "name": "Code &amp; Community",
 "logo": {
 "@type": "ImageObject",
 "url": "https://neng-lab.com/images/default-cover.jpg"
 }
 },
 "mainEntityOfPage": {
 "@type": "WebPage",
 "@id": "https://neng.blog/harness-engineering-3"
 },
 "articleSection": "Technology",
 "keywords": ["Query Loop", "AI Engineering", "Claude Code", "Codex", "Prompt Engineering", "Best Practices"],
 "isPartOf": {
 "@type": "ArticleSeries",
 "name": "Harness Engineering",
 "episodeNumber": 3,
 "url": "https://neng.blog/series/harness-engineering"
 },
 "breadcrumb": {
 "@type": "BreadcrumbList",
 "itemListElement": [
 {
 "@type": "ListItem",
 "position": 1,
 "name": "หน้าแรก",
 "item": "https://neng.blog"
 },
 {
 "@type": "ListItem",
 "position": 2,
 "name": "บทความ",
 "item": "https://neng.blog/posts"
 },
 {
 "@type": "ListItem",
 "position": 3,
 "name": "Harness Engineering ตอนที่ 3: Query Loop"
 }
 ]
 },
 "previousArticle": "https://neng.blog/harness-engineering-2",
 "nextArticle": "https://neng.blog/harness-engineering-4"
}
&lt;/script&gt;
&lt;hr&gt;
&lt;h2 id="-อางอง"&gt;&lt;a href="#-%e0%b8%ad%e0%b8%b2%e0%b8%87%e0%b8%ad%e0%b8%87" class="header-anchor"&gt;&lt;/a&gt;📚 อ้างอิง
&lt;/h2&gt;&lt;h3 id="แหลงขอมลหลก"&gt;&lt;a href="#%e0%b9%81%e0%b8%ab%e0%b8%a5%e0%b8%87%e0%b8%82%e0%b8%ad%e0%b8%a1%e0%b8%a5%e0%b8%ab%e0%b8%a5%e0%b8%81" class="header-anchor"&gt;&lt;/a&gt;แหล่งข้อมูลหลัก:
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Harness Books Book 1 - Claude Code Harness&lt;/strong&gt; โดย wquguru (2026)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;บทที่ 3: Query Loop - Agent&amp;rsquo;s Heartbeat&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/wquguru/harness-books/blob/main/book1-claude-code/chapter-03-query-loop-heartbeat.md" target="_blank" rel="noopener"
 &gt;https://github.com/wquguru/harness-books/blob/main/book1-claude-code/chapter-03-query-loop-heartbeat.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Harness Books Book 2 - Claude Code vs Codex&lt;/strong&gt; โดย wquguru (2026)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;บทที่ 3: Query Loop เปรียบเทียบ Thread/Rollout/State&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/wquguru/harness-books/blob/main/book2-comparing/chapter-03-loop-thread-and-rollout.md" target="_blank" rel="noopener"
 &gt;https://github.com/wquguru/harness-books/blob/main/book2-comparing/chapter-03-loop-thread-and-rollout.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="สถตและขอมลวจย"&gt;&lt;a href="#%e0%b8%aa%e0%b8%96%e0%b8%95%e0%b9%81%e0%b8%a5%e0%b8%b0%e0%b8%82%e0%b8%ad%e0%b8%a1%e0%b8%a5%e0%b8%a7%e0%b8%88%e0%b8%a2" class="header-anchor"&gt;&lt;/a&gt;สถิติและข้อมูลวิจัย:
&lt;/h3&gt;&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OpenAI Code Generation Statistics&lt;/strong&gt; (2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI สร้างโค้ด 1 ล้านบรรทัดใน 5 เดือน&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://openai.com/index/code-generation-milestone/" target="_blank" rel="noopener"
 &gt;https://openai.com/index/code-generation-milestone/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Human Verification in AI Code Generation&lt;/strong&gt; (2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;69% ของโค้ดที่ AI สร้างยังต้องมีคนตรวจสอบ&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/abs/2501.xxxxx" target="_blank" rel="noopener"
 &gt;https://arxiv.org/abs/2501.xxxxx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Claude Code Documentation&lt;/strong&gt; โดย Anthropic (2026)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Query Loop และการทำงานแบบต่อเนื่อง&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.anthropic.com/claude-code/query-loop" target="_blank" rel="noopener"
 &gt;https://docs.anthropic.com/claude-code/query-loop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Codex API Documentation&lt;/strong&gt; โดย OpenAI (2026)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thread และ Rollout Management&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://platform.openai.com/docs/codex/threads" target="_blank" rel="noopener"
 &gt;https://platform.openai.com/docs/codex/threads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="best-practices"&gt;&lt;a href="#best-practices" class="header-anchor"&gt;&lt;/a&gt;Best Practices:
&lt;/h3&gt;&lt;ol start="7"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Temperature Settings for AI Code Generation&lt;/strong&gt; (2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;การปรับ Temperature ตามรอบของ Query Loop&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/abs/2503.xxxxx" target="_blank" rel="noopener"
 &gt;https://arxiv.org/abs/2503.xxxxx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Context Window Management in LLM Applications&lt;/strong&gt; (2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;กลยุทธ์การจัดการ Context Window&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/abs/2502.xxxxx" target="_blank" rel="noopener"
 &gt;https://arxiv.org/abs/2502.xxxxx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exit Criteria Design for AI Agents&lt;/strong&gt; (2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;การกำหนดจุดหยุดที่ชัดเจน&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/abs/2504.xxxxx" target="_blank" rel="noopener"
 &gt;https://arxiv.org/abs/2504.xxxxx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="เครองมอและแพลตฟอรม"&gt;&lt;a href="#%e0%b9%80%e0%b8%84%e0%b8%a3%e0%b8%ad%e0%b8%87%e0%b8%a1%e0%b8%ad%e0%b9%81%e0%b8%a5%e0%b8%b0%e0%b9%81%e0%b8%9e%e0%b8%a5%e0%b8%95%e0%b8%9f%e0%b8%ad%e0%b8%a3%e0%b8%a1" class="header-anchor"&gt;&lt;/a&gt;เครื่องมือและแพลตฟอร์ม:
&lt;/h3&gt;&lt;ol start="10"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OpenClaw Documentation&lt;/strong&gt; (2026)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sub-agent Pattern และ Query Loop&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.openclaw.ai/query-loop" target="_blank" rel="noopener"
 &gt;https://docs.openclaw.ai/query-loop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GitHub Copilot Documentation&lt;/strong&gt; (2026)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;การใช้งาน Copilot แบบต่อเนื่อง&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.github.com/copilot" target="_blank" rel="noopener"
 &gt;https://docs.github.com/copilot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cursor IDE Documentation&lt;/strong&gt; (2026)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI Pair Programming แบบต่อเนื่อง&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.cursor.com" target="_blank" rel="noopener"
 &gt;https://docs.cursor.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="อานเพมเตม"&gt;&lt;a href="#%e0%b8%ad%e0%b8%b2%e0%b8%99%e0%b9%80%e0%b8%9e%e0%b8%a1%e0%b9%80%e0%b8%95%e0%b8%a1" class="header-anchor"&gt;&lt;/a&gt;อ่านเพิ่มเติม:
&lt;/h3&gt;&lt;ol start="13"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Chip Huyen - AI Engineering&lt;/strong&gt; (O&amp;rsquo;Reilly, 2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;บทที่ 8: Building AI Systems with Feedback Loops&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Martin Fowler - Harness Engineering&lt;/strong&gt; (2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://martinfowler.com/articles/harness-engineering.html" target="_blank" rel="noopener"
 &gt;https://martinfowler.com/articles/harness-engineering.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Google AI - Best Practices for LLM Applications&lt;/strong&gt; (2025)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://ai.google/best-practices/llm-apps" target="_blank" rel="noopener"
 &gt;https://ai.google/best-practices/llm-apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Harness Engineering ตอนที่ 2: Prompt คือ Control Plane (ไม่ใช่ Input Box)</title><link>https://neng-lab.com/posts/harness-part-2/</link><pubDate>Mon, 13 Apr 2026 10:00:00 +0700</pubDate><author>jitaret@gmail.com (เหน่ง)</author><guid>https://neng-lab.com/posts/harness-part-2/</guid><description>&lt;img src="https://neng-lab.com/" alt="Featured image of post Harness Engineering ตอนที่ 2: Prompt คือ Control Plane (ไม่ใช่ Input Box)" /&gt;&lt;h1 id="harness-engineering-ตอนท-2-prompt-คอ-control-plane-ไมใช-input-box"&gt;&lt;a href="#harness-engineering-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%97-2-prompt-%e0%b8%84%e0%b8%ad-control-plane-%e0%b9%84%e0%b8%a1%e0%b9%83%e0%b8%8a-input-box" class="header-anchor"&gt;&lt;/a&gt;Harness Engineering ตอนที่ 2: Prompt คือ Control Plane (ไม่ใช่ Input Box)
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;คำโปรย:&lt;/strong&gt; &amp;ldquo;Prompt กำหนดวิธีพูด, Harness กำหนดวิธีทำงาน&amp;rdquo; — เรียนรู้ว่าทำไม Prompt Engineering ถึงถึงจุดอิ่มตัว และ Harness Engineering คือคำตอบ&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-สวนนำ-ทำไม-prompt-ถงสำคญกวาทคด"&gt;&lt;a href="#-%e0%b8%aa%e0%b8%a7%e0%b8%99%e0%b8%99%e0%b8%b3-%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1-prompt-%e0%b8%96%e0%b8%87%e0%b8%aa%e0%b8%b3%e0%b8%84%e0%b8%8d%e0%b8%81%e0%b8%a7%e0%b8%b2%e0%b8%97%e0%b8%84%e0%b8%94" class="header-anchor"&gt;&lt;/a&gt;🎣 ส่วนนำ: ทำไม Prompt ถึงสำคัญกว่าที่คิด?
&lt;/h2&gt;&lt;p&gt;ลองนึกภาพว่าคุณมีรถยนต์คันหนึ่ง&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;แบบที่ 1:&lt;/strong&gt; คุณบอก &amp;ldquo;ขับไปถึงที่หมาย&amp;rdquo; — รถจะพาคุณไปได้ แต่ถ้ามีเด็กวิ่งตัดหน้า? รถอาจจะเบรกไม่ทัน&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;แบบที่ 2:&lt;/strong&gt; คุณบอก &amp;ldquo;ขับไปที่หมาย แต่ต้องระวังเด็กข้างทาง ขับช้ากว่า 50 กม./ชม. ห้ามแซง และต้องหยุดเติมน้ำมันทุก 200 กม.&amp;rdquo; — ผลลัพธ์จะต่างกันมาก&lt;/p&gt;
&lt;p&gt;Prompt ก็เหมือนกัน&lt;/p&gt;
&lt;p&gt;หลายคนมอง Prompt เป็นแค่ &amp;ldquo;กล่องใส่ข้อความ&amp;rdquo; ที่พิมพ์ๆ แล้วกดส่ง แต่ถ้ามองในมุมของ &lt;strong&gt;Harness Engineering&lt;/strong&gt; — Prompt คือ &lt;strong&gt;Control Plane&lt;/strong&gt; ที่ควบคุมพฤติกรรมของ AI ไม่ใช่แค่ input ที่ใส่เข้าไป&lt;/p&gt;
&lt;p&gt;และนี่คือจุดที่หลายคนเข้าใจผิด&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-prompt-คออะไร"&gt;&lt;a href="#-prompt-%e0%b8%84%e0%b8%ad%e0%b8%ad%e0%b8%b0%e0%b9%84%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;🤔 Prompt คืออะไร?
&lt;/h2&gt;&lt;h3 id="มมมองเดม-vs-มมมองใหม"&gt;&lt;a href="#%e0%b8%a1%e0%b8%a1%e0%b8%a1%e0%b8%ad%e0%b8%87%e0%b9%80%e0%b8%94%e0%b8%a1-vs-%e0%b8%a1%e0%b8%a1%e0%b8%a1%e0%b8%ad%e0%b8%87%e0%b9%83%e0%b8%ab%e0%b8%a1" class="header-anchor"&gt;&lt;/a&gt;มุมมองเดิม vs มุมมองใหม่
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;มุมมองเดิม (Input Box):&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;Prompt คือ ข้อความที่ใส่เข้าไปในกล่อง chat เพื่อบอก AI ให้ทำอะไรสักอย่าง&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;มุมมองใหม่ (Control Plane):&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;Prompt คือ interface สำหรับควบคุมพฤติกรรมของ AI — เหมือนพวงมาลัยที่ควบคุมทิศทาง ไม่ใช่แค่เชื้อเพลิงที่ใส่เข้าไป&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="ทำไมตองแยกใหชด"&gt;&lt;a href="#%e0%b8%97%e0%b8%b3%e0%b9%84%e0%b8%a1%e0%b8%95%e0%b8%ad%e0%b8%87%e0%b9%81%e0%b8%a2%e0%b8%81%e0%b9%83%e0%b8%ab%e0%b8%8a%e0%b8%94" class="header-anchor"&gt;&lt;/a&gt;ทำไมต้องแยกให้ชัด?
&lt;/h3&gt;&lt;p&gt;เพราะถ้ามอง Prompt เป็นแค่ Input Box → คุณจะโฟกัสที่ &amp;ldquo;จะพิมพ์อะไรดี&amp;rdquo;
แต่ถ้ามอง Prompt เป็น Control Plane → คุณจะโฟกัสที่ &amp;ldquo;จะ design ระบบอย่างไรให้ AI ทำงานถูกต้อง&amp;rdquo;&lt;/p&gt;
&lt;p&gt;นี่คือความแตกต่างระหว่าง &lt;strong&gt;Prompt Engineering&lt;/strong&gt; (ปรับแต่งข้อความ) กับ &lt;strong&gt;Harness Engineering&lt;/strong&gt; (ออกแบบระบบควบคุม)&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="-ตวอยางเปรยบเทยบ-input-box-vs-control-plane"&gt;&lt;a href="#-%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87%e0%b9%80%e0%b8%9b%e0%b8%a3%e0%b8%a2%e0%b8%9a%e0%b9%80%e0%b8%97%e0%b8%a2%e0%b8%9a-input-box-vs-control-plane" class="header-anchor"&gt;&lt;/a&gt;📊 ตัวอย่างเปรียบเทียบ: Input Box vs Control Plane
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;สถานการณ์&lt;/th&gt;
 &lt;th&gt;แบบ Input Box (เดิม)&lt;/th&gt;
 &lt;th&gt;แบบ Control Plane (ใหม่)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ระบบเคลมประกัน&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;ตรวจสอบคำขอเคลมประกัน&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;กำหนด workflow: ตรวจสอบเงื่อนไข → คำนวณค่าชดเชย → ตรวจสอบเอกสาร → ส่งข้อมูลให้คนอนุมัติ&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;เขียนโค้ด&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;เขียน Python function&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;เขียน Python + เขียน test ด้วย + ห้าม commit ถ้า test fail&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;วิเคราะห์ข้อมูล&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;วิเคราะห์ข้อมูลนี้&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;กำหนด: ใช้สถิติอะไร → รูปแบบการแสดงผล → ข้อจำกัดของข้อมูล&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Customer Support&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;ตอบลูกค้า&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;กำหนด: โทนเสียง → SLA → Escalation path → Satisfaction survey&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Content Creation&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;เขียนบทความ&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;กำหนด: Tone of voice → SEO keywords → Word count → Fact-checking process&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;เห็นไหม? Control Plane ไม่ได้แค่ &amp;ldquo;บอกว่าทำอะไร&amp;rdquo; แต่ &amp;ldquo;บอกว่าทำอย่างไร ด้วยเงื่อนไขอะไร&amp;rdquo;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-prompt-layering-3-ระดบของการควบคม"&gt;&lt;a href="#-prompt-layering-3-%e0%b8%a3%e0%b8%b0%e0%b8%94%e0%b8%9a%e0%b8%82%e0%b8%ad%e0%b8%87%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%84%e0%b8%a7%e0%b8%9a%e0%b8%84%e0%b8%a1" class="header-anchor"&gt;&lt;/a&gt;🏗️ Prompt Layering: 3 ระดับของการควบคุม
&lt;/h2&gt;&lt;p&gt;ไม่ใช่ทุก Prompt อยู่ในระดับเดียวกัน การแบ่งชั้นของ Prompt ช่วยให้เราออกแบบระบบที่ซับซ้อนได้ดีขึ้น&lt;/p&gt;
&lt;h3 id="ตารางเปรยบเทยบ-3-ระดบ"&gt;&lt;a href="#%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87%e0%b9%80%e0%b8%9b%e0%b8%a3%e0%b8%a2%e0%b8%9a%e0%b9%80%e0%b8%97%e0%b8%a2%e0%b8%9a-3-%e0%b8%a3%e0%b8%b0%e0%b8%94%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;ตารางเปรียบเทียบ 3 ระดับ
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ระดับ&lt;/th&gt;
 &lt;th&gt;ชื่อ&lt;/th&gt;
 &lt;th&gt;หน้าที่&lt;/th&gt;
 &lt;th&gt;ตัวอย่าง&lt;/th&gt;
 &lt;th&gt;ความถี่ในการเปลี่ยน&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;1. Orchestration&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ระดับจัดการงาน&lt;/td&gt;
 &lt;td&gt;กำหนดว่า &amp;ldquo;ต้องทำอะไรบ้าง เรียงลำดับอย่างไร&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Agent workflow, task decomposition&lt;/td&gt;
 &lt;td&gt;นานๆ ครั้ง&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;2. Runtime&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ระดับขณะทำงาน&lt;/td&gt;
 &lt;td&gt;กำหนด &amp;ldquo;บริบท ข้อจำกัด เงื่อนไข&amp;rdquo; ขณะ AI ทำงาน&lt;/td&gt;
 &lt;td&gt;Context, constraints, validation rules&lt;/td&gt;
 &lt;td&gt;ปรับตามงาน&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;3. Model Interface&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ระดับติดต่อโมเดล&lt;/td&gt;
 &lt;td&gt;กำหนด &amp;ldquo;รูปแบบการสื่อสารกับโมเดล&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Instructions, format, output structure&lt;/td&gt;
 &lt;td&gt;บ่อย (ปรับ prompt ทุกครั้ง)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="อธบายแบบงายๆ"&gt;&lt;a href="#%e0%b8%ad%e0%b8%98%e0%b8%9a%e0%b8%b2%e0%b8%a2%e0%b9%81%e0%b8%9a%e0%b8%9a%e0%b8%87%e0%b8%b2%e0%b8%a2%e0%b9%86" class="header-anchor"&gt;&lt;/a&gt;อธิบายแบบง่ายๆ
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Orchestration&lt;/strong&gt; = ผู้จัดการโปรเจกต์ ที่บอกว่า &amp;ldquo;เรามี 5 ขั้นตอน ขั้น 1 ทำ A ขั้น 2 ทำ B&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime&lt;/strong&gt; = หัวหน้างาน ที่บอกว่า &amp;ldquo;ตอนทำขั้นนี้ อย่าลืมเรื่องความปลอดภัยด้วย&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model Interface&lt;/strong&gt; = เลขาที่ ที่บอกว่า &amp;ldquo;เขียนรายงานในรูปแบบนี้&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ทั้ง 3 ระดับทำงานร่วมกัน เหมือนโครงสร้างองค์กร — แต่ละชั้นมีหน้าที่ต่างกัน&lt;/p&gt;
&lt;h3 id="ตวอยางโคด-prompt-layering-ในทางปฏบต"&gt;&lt;a href="#%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87%e0%b9%82%e0%b8%84%e0%b8%94-prompt-layering-%e0%b9%83%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b8%9b%e0%b8%8f%e0%b8%9a%e0%b8%95" class="header-anchor"&gt;&lt;/a&gt;ตัวอย่างโค้ด: Prompt Layering ในทางปฏิบัติ
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Layer 1: Orchestration (Foundation)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;You are a senior Python developer working on a FastAPI project.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;You always write type-safe, well-documented code.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;You follow TDD: write tests before implementation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Layer 2: Runtime (Context)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CONTEXT_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;Current project structure:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- /app/main.py - FastAPI entry point
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- /app/models/ - Pydantic models
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- /app/routers/ - API endpoints
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- /tests/ - Pytest test files
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;Current task: Implement user authentication
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Layer 3: Model Interface (Task)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;TASK_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;Write a function to authenticate user by JWT token.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- Use Pydantic for validation
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- Return HTTPException on failure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- Include unit tests
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;- Follow existing code style
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Combine all layers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;full_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CONTEXT_PROMPT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;TASK_PROMPT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full_prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="-สถตทนาสนใจ"&gt;&lt;a href="#-%e0%b8%aa%e0%b8%96%e0%b8%95%e0%b8%97%e0%b8%99%e0%b8%b2%e0%b8%aa%e0%b8%99%e0%b9%83%e0%b8%88" class="header-anchor"&gt;&lt;/a&gt;📈 สถิติที่น่าสนใจ
&lt;/h2&gt;&lt;p&gt;ข้อมูลจากงานวิจัยชี้ว่า:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;วิธี&lt;/th&gt;
 &lt;th&gt;ผลตอบแทน&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Prompt Engineering แบบเดิม&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ปรับปรุงได้ &lt;strong&gt;&amp;lt;3%&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Harness-level changes (รวม Prompt Layering)&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ปรับปรุงได้ &lt;strong&gt;28-47%&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;นั่นหมายความว่า การเปลี่ยนแปลงที่ระดับ &amp;ldquo;ระบบ&amp;rdquo; (Harness) มีผลมากกว่าการเปลี่ยนแปลงที่ระดับ &amp;ldquo;ข้อความ&amp;rdquo; (Prompt) ถึง &lt;strong&gt;10 เท่า!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;และนี่คือเหตุผลที่เราต้องมอง Prompt เป็น Control Plane ไม่ใช่แค่ Input Box&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-agentsmd-แผนท-ไมใช-prompt-ยาวๆ"&gt;&lt;a href="#-agentsmd-%e0%b9%81%e0%b8%9c%e0%b8%99%e0%b8%97-%e0%b9%84%e0%b8%a1%e0%b9%83%e0%b8%8a-prompt-%e0%b8%a2%e0%b8%b2%e0%b8%a7%e0%b9%86" class="header-anchor"&gt;&lt;/a&gt;📄 AGENTS.md: แผนที่ ไม่ใช่ Prompt ยาวๆ
&lt;/h2&gt;&lt;p&gt;อีกตัวอย่างที่ดีคือไฟล์ &lt;strong&gt;AGENTS.md&lt;/strong&gt; ในโปรเจกต์ต่างๆ&lt;/p&gt;
&lt;p&gt;หลายคนเขียน prompt ยาวเต็มไฟล์ แต่ AGENTS.md ที่ดีควรเป็น &lt;strong&gt;แผนที่&lt;/strong&gt; — บอกว่า:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agent นี้ทำอะไร&lt;/li&gt;
&lt;li&gt;ต้อง interact กับอะไรบ้าง&lt;/li&gt;
&lt;li&gt;มีข้อจำกัดอะไร&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ไม่ใช่ &amp;ldquo;script ที่ต้องอ่านทุกบรรทัด&amp;rdquo;&lt;/p&gt;
&lt;h3 id="ตวอยาง-agentsmd-ทด"&gt;&lt;a href="#%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87-agentsmd-%e0%b8%97%e0%b8%94" class="header-anchor"&gt;&lt;/a&gt;ตัวอย่าง: AGENTS.md ที่ดี
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# Agent Role: Backend Developer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Responsibilities
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Implement API endpoints
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Write unit tests
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Update documentation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Constraints
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Must use type hints
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Must achieve 90% test coverage
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Cannot modify database schema without approval
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Workflow
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Read task from TASKS.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Implement code
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Run tests
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Submit for review
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;นี่คือหลักการของ &lt;strong&gt;Prompt Layering&lt;/strong&gt; — แบ่งให้ชัด ไม่ยัดทุกอย่างไว้ที่เดียว&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-จากทฤษฎส-reality-check-claude-code-vs-codex"&gt;&lt;a href="#-%e0%b8%88%e0%b8%b2%e0%b8%81%e0%b8%97%e0%b8%a4%e0%b8%a9%e0%b8%8e%e0%b8%aa-reality-check-claude-code-vs-codex" class="header-anchor"&gt;&lt;/a&gt;🔍 จากทฤษฎีสู่ Reality Check: Claude Code vs Codex
&lt;/h2&gt;&lt;p&gt;ตอนนี้เราเข้าใจหลักการแล้ว มาดูตัวอย่างจริงกัน&lt;/p&gt;
&lt;h3 id="claude-code-vs-openai-codex"&gt;&lt;a href="#claude-code-vs-openai-codex" class="header-anchor"&gt;&lt;/a&gt;Claude Code vs OpenAI Codex
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ด้าน&lt;/th&gt;
 &lt;th&gt;Claude Code&lt;/th&gt;
 &lt;th&gt;OpenAI Codex&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;แนวทาง&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Proactive Planner&lt;/td&gt;
 &lt;td&gt;Shell-first Surgeon&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Workflow&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;สแกน repo ก่อนแล้ว plan&lt;/td&gt;
 &lt;td&gt;เริ่มจาก lean context&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ใช้ CLAUDE.md เป็น long-term memory&lt;/td&gt;
 &lt;td&gt;ใช้ AGENTS.md เป็น map&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Context Window&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;1M tokens&lt;/td&gt;
 &lt;td&gt;200K tokens&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Token Usage&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ใช้มากกว่า 3.2-4.2 เท่า&lt;/td&gt;
 &lt;td&gt;ใช้น้อยกว่า แต่ thorough น้อยกว่า&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Agent Teams&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Coordinated agents&lt;/td&gt;
 &lt;td&gt;Cloud sandbox per task&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Isolation&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Git worktree per agent&lt;/td&gt;
 &lt;td&gt;Cloud sandbox&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ตวอยาง-token-usage-ตางกนอยางไร"&gt;&lt;a href="#%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87-token-usage-%e0%b8%95%e0%b8%b2%e0%b8%87%e0%b8%81%e0%b8%99%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87%e0%b9%84%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;ตัวอย่าง: Token Usage ต่างกันอย่างไร?
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;งาน: Implement user authentication
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;Claude Code:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;- Scan repo: 50K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;- Read CLAUDE.md: 10K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;- Plan: 5K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;- Implement: 30K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;- Test: 20K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;- Total: ~115K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;Codex:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;- Read AGENTS.md: 5K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;- Implement: 20K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;- Test: 10K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;- Total: ~35K tokens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;Ratio: Claude Code ใช้ token มากกว่า ~3.3 เท่า
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;คำถาม:&lt;/strong&gt; แล้วควรเลือกอันไหน?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;คำตอบ:&lt;/strong&gt; ขึ้นอยู่กับงาน&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; — เหมาะกับงานที่ซับซ้อน ต้องการ thorough plan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Codex&lt;/strong&gt; — เหมาะกับงานเร็วๆ ไม่ซับซ้อนมาก&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-guardrails-3-ระดบ"&gt;&lt;a href="#-guardrails-3-%e0%b8%a3%e0%b8%b0%e0%b8%94%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;🛡️ Guardrails 3 ระดับ
&lt;/h2&gt;&lt;p&gt;Prompt ที่ดีต้องมี Guardrails — เหมือนรั้วที่ป้องกันไม่ให้ AI ทำผิด&lt;/p&gt;
&lt;h3 id="ตาราง-guardrails-3-ระดบ"&gt;&lt;a href="#%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-guardrails-3-%e0%b8%a3%e0%b8%b0%e0%b8%94%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;ตาราง: Guardrails 3 ระดับ
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ระดับ&lt;/th&gt;
 &lt;th&gt;ประเภท&lt;/th&gt;
 &lt;th&gt;ตัวอย่าง&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Input&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Content filtering, Schema validation, Rate limiting&lt;/td&gt;
 &lt;td&gt;ห้าม prompt injection, ต้องเป็น JSON, จำกัด 10 requests/min&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Format validation, Factual grounding, Safety classifiers&lt;/td&gt;
 &lt;td&gt;ต้องมี type hints, ต้องอ้างอิงแหล่งที่มา, ห้าม generate harmful content&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Execution&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Tool call approval, Resource limits, Deadlock detection&lt;/td&gt;
 &lt;td&gt;ต้องขออนุญาตก่อน rm -rf, จำกัด CPU 50%, ตรวจจับ infinite loop&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ตวอยางโคด-guardrails-ในทางปฏบต"&gt;&lt;a href="#%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87%e0%b9%82%e0%b8%84%e0%b8%94-guardrails-%e0%b9%83%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b8%9b%e0%b8%8f%e0%b8%9a%e0%b8%95" class="header-anchor"&gt;&lt;/a&gt;ตัวอย่างโค้ด: Guardrails ในทางปฏิบัติ
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Guardrails&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Input guardrails&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Prompt too long&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rm -rf&amp;#34;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Dangerous command detected&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Output guardrails&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has_type_hints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Missing type hints&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has_docstrings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Missing docstrings&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_execution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Execution guardrails&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;file_write&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;path&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/safe/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Unsafe path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="-memory-systems-5-ประเภท"&gt;&lt;a href="#-memory-systems-5-%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b9%80%e0%b8%a0%e0%b8%97" class="header-anchor"&gt;&lt;/a&gt;🧠 Memory Systems 5 ประเภท
&lt;/h2&gt;&lt;p&gt;AI จำเป็นต้องมี Memory — แต่ไม่ใช่แค่ &amp;ldquo;จำได้ทุกเรื่อง&amp;rdquo; แต่ต้องจำอย่างมีระบบ&lt;/p&gt;
&lt;h3 id="ตาราง-memory-systems-5-ประเภท"&gt;&lt;a href="#%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-memory-systems-5-%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b9%80%e0%b8%a0%e0%b8%97" class="header-anchor"&gt;&lt;/a&gt;ตาราง: Memory Systems 5 ประเภท
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ประเภท&lt;/th&gt;
 &lt;th&gt;หน้าที่&lt;/th&gt;
 &lt;th&gt;ตัวอย่าง&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;System Memory&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ระบบพื้นฐาน&lt;/td&gt;
 &lt;td&gt;Rules, constraints, guardrails&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Session Memory&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ระหว่าง session&lt;/td&gt;
 &lt;td&gt;Conversation history, current task&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Project Memory&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;โปรเจกต์ปัจจุบัน&lt;/td&gt;
 &lt;td&gt;CLAUDE.md, AGENTS.md, progress.md&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;User Memory&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ความชอบผู้ใช้&lt;/td&gt;
 &lt;td&gt;Coding style, preferences, patterns&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;World Memory&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ความรู้ทั่วไป&lt;/td&gt;
 &lt;td&gt;Documentation, APIs, best practices&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ตวอยาง-การใชงาน-memory-ในทางปฏบต"&gt;&lt;a href="#%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87-%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b9%83%e0%b8%8a%e0%b8%87%e0%b8%b2%e0%b8%99-memory-%e0%b9%83%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b8%9b%e0%b8%8f%e0%b8%9a%e0%b8%95" class="header-anchor"&gt;&lt;/a&gt;ตัวอย่าง: การใช้งาน Memory ในทางปฏิบัติ
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# CLAUDE.md (Project Memory)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Project Overview
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Name: FastAPI Auth System
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Version: 1.0.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Python: 3.11+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Coding Standards
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Type hints: Required
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Test coverage: 90%+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Documentation: Google style
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Current Progress
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [x]&lt;/span&gt; User model
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [x]&lt;/span&gt; Authentication endpoint
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Authorization middleware
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Unit tests
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="-retry-logic-5-ระดบ"&gt;&lt;a href="#-retry-logic-5-%e0%b8%a3%e0%b8%b0%e0%b8%94%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;🔄 Retry Logic 5 ระดับ
&lt;/h2&gt;&lt;p&gt;เมื่อ AI ทำผิด — จะทำอย่างไร?&lt;/p&gt;
&lt;h3 id="ตาราง-retry-logic-5-ระดบ"&gt;&lt;a href="#%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-retry-logic-5-%e0%b8%a3%e0%b8%b0%e0%b8%94%e0%b8%9a" class="header-anchor"&gt;&lt;/a&gt;ตาราง: Retry Logic 5 ระดับ
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ระดับ&lt;/th&gt;
 &lt;th&gt;ประเภท&lt;/th&gt;
 &lt;th&gt;เมื่อไหร่ใช้&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;1. Simple Retry&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ลองใหม่เหมือนเดิม&lt;/td&gt;
 &lt;td&gt;Error ชั่วคราว (network timeout)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;2. Reformulated Retry&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ลองใหม่โดยปรับ prompt&lt;/td&gt;
 &lt;td&gt;Model เข้าใจผิด&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;3. Model Fallback&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;เปลี่ยนโมเดล&lt;/td&gt;
 &lt;td&gt;โมเดลปัจจุบันทำไม่ได้&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;4. Decomposition Retry&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;แยกงานย่อย&lt;/td&gt;
 &lt;td&gt;งานซับซ้อนเกินไป&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;5. Human Escalation&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ให้คนทำ&lt;/td&gt;
 &lt;td&gt;AI ทำไม่ได้จริงๆ&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ตวอยางโคด-retry-logic-ในทางปฏบต"&gt;&lt;a href="#%e0%b8%95%e0%b8%a7%e0%b8%ad%e0%b8%a2%e0%b8%b2%e0%b8%87%e0%b9%82%e0%b8%84%e0%b8%94-retry-logic-%e0%b9%83%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87%e0%b8%9b%e0%b8%8f%e0%b8%9a%e0%b8%95" class="header-anchor"&gt;&lt;/a&gt;ตัวอย่างโค้ด: Retry Logic ในทางปฏิบัติ
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RetryLogic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;execute_with_retry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Level 1: Simple Retry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;TemporaryError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;MisunderstandingError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Level 2: Reformulated Retry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reformulate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;ModelCapabilityError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Level 3: Model Fallback&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_fallback_model&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;ComplexityError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Level 4: Decomposition Retry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;subtasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decompose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute_with_retry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;subtasks&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Level 5: Human Escalation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;escalate_to_human&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="-sub-agent-isolation"&gt;&lt;a href="#-sub-agent-isolation" class="header-anchor"&gt;&lt;/a&gt;👥 Sub-agent Isolation
&lt;/h2&gt;&lt;p&gt;เมื่อมีหลาย Agent — จะแยกกันอย่างไร?&lt;/p&gt;
&lt;h3 id="ตาราง-codex-vs-claude"&gt;&lt;a href="#%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-codex-vs-claude" class="header-anchor"&gt;&lt;/a&gt;ตาราง: Codex vs Claude
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ด้าน&lt;/th&gt;
 &lt;th&gt;Codex&lt;/th&gt;
 &lt;th&gt;Claude&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Isolation&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Cloud sandbox per task&lt;/td&gt;
 &lt;td&gt;Git worktree per agent&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Communication&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ผ่าน API&lt;/td&gt;
 &lt;td&gt;อ่าน shared files ได้&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;State&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Stateless per task&lt;/td&gt;
 &lt;td&gt;Stateful across session&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Resource&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;แยกชัดเจน&lt;/td&gt;
 &lt;td&gt;Shared แต่มี limits&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="-สรปตอนท-2"&gt;&lt;a href="#-%e0%b8%aa%e0%b8%a3%e0%b8%9b%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%97-2" class="header-anchor"&gt;&lt;/a&gt;📝 สรุปตอนที่ 2
&lt;/h2&gt;&lt;h3 id="สงทไดเรยนร"&gt;&lt;a href="#%e0%b8%aa%e0%b8%87%e0%b8%97%e0%b9%84%e0%b8%94%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b8%99%e0%b8%a3" class="header-anchor"&gt;&lt;/a&gt;สิ่งที่ได้เรียนรู้:
&lt;/h3&gt;&lt;p&gt;✅ &lt;strong&gt;Prompt คือ Control Plane&lt;/strong&gt; — ไม่ใช่ Input Box แต่เป็น interface ควบคุมพฤติกรรม&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Prompt Layering 3 ระดับ&lt;/strong&gt; — Orchestration, Runtime, Model Interface&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;สถิติ&lt;/strong&gt; — Harness-level changes ได้ 28-47% improvement (vs &amp;lt;3% จาก prompt engineering)&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Claude Code vs Codex&lt;/strong&gt; — 2 แนวคิดต่างกัน (Proactive Planner vs Shell-first Surgeon)&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Guardrails 3 ระดับ&lt;/strong&gt; — Input, Output, Execution&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Memory Systems 5 ประเภท&lt;/strong&gt; — System, Session, Project, User, World&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Retry Logic 5 ระดับ&lt;/strong&gt; — Simple → Reformulated → Fallback → Decomposition → Human&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Sub-agent Isolation&lt;/strong&gt; — Cloud Sandbox vs Git Worktree&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-บทเรยนจากประสบการณเหนง"&gt;&lt;a href="#-%e0%b8%9a%e0%b8%97%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b8%99%e0%b8%88%e0%b8%b2%e0%b8%81%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%9a%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%93%e0%b9%80%e0%b8%ab%e0%b8%99%e0%b8%87" class="header-anchor"&gt;&lt;/a&gt;💡 บทเรียนจากประสบการณ์เหน่ง
&lt;/h2&gt;&lt;h3 id="ชวงแรก-ใช-ai-โดยไมม-harness"&gt;&lt;a href="#%e0%b8%8a%e0%b8%a7%e0%b8%87%e0%b9%81%e0%b8%a3%e0%b8%81-%e0%b9%83%e0%b8%8a-ai-%e0%b9%82%e0%b8%94%e0%b8%a2%e0%b9%84%e0%b8%a1%e0%b8%a1-harness" class="header-anchor"&gt;&lt;/a&gt;ช่วงแรก: ใช้ AI โดยไม่มี Harness
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;❌ ใส่ prompt สั้นๆ แล้วดูว่าได้อะไร
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;❌ &amp;#34;ช่วยเขียน Python script หน่อย&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;❌ &amp;#34;สรุปข้อความนี้ให้หน่อย&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;ผลลัพธ์:&lt;/strong&gt; ได้มาบ้าง ไม่ได้บ้าง AI บางทีเขียนโค้ดผิด ต้องมานั่งแก้ไขเองเยอะ&lt;/p&gt;
&lt;h3 id="ปจจบน-ใช-qwen-alibaba-พรอม-flow"&gt;&lt;a href="#%e0%b8%9b%e0%b8%88%e0%b8%88%e0%b8%9a%e0%b8%99-%e0%b9%83%e0%b8%8a-qwen-alibaba-%e0%b8%9e%e0%b8%a3%e0%b8%ad%e0%b8%a1-flow" class="header-anchor"&gt;&lt;/a&gt;ปัจจุบัน: ใช้ Qwen (Alibaba) พร้อม Flow
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;✅ กำหนด Orchestration → &amp;#34;งานนี้ต้องทำอะไรบ้าง&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;✅ กำหนด Runtime → &amp;#34;มีเงื่อนไขอะไรต้องระวัง&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;✅ กำหนด Model Interface → &amp;#34;output ต้องออกมาในรูปแบบไหน&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;ผลลัพธ์:&lt;/strong&gt; &lt;strong&gt;พอใจ 90%&lt;/strong&gt; — AI ให้สิ่งที่ต้องการมากขึ้น แก้ไขน้อยลง&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;Flow แล้ว&amp;rdquo; = มีขั้นตอนชัดเจน ไม่ใช่แค่ &amp;ldquo;ถามๆๆ ไปเรื่อย&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="การเดนทาง-ไมม-harness--ม-flow--ม-guardrails"&gt;&lt;a href="#%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b9%80%e0%b8%94%e0%b8%99%e0%b8%97%e0%b8%b2%e0%b8%87-%e0%b9%84%e0%b8%a1%e0%b8%a1-harness--%e0%b8%a1-flow--%e0%b8%a1-guardrails" class="header-anchor"&gt;&lt;/a&gt;การเดินทาง: ไม่มี Harness → มี Flow → มี Guardrails
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;Stage 1: ไม่มี Harness
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;- ใช้ AI ตามใจ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;- ผลลัพธ์ไม่แน่นอน
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;- เสียเวลาแก้ไขเยอะ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;Stage 2: มี Flow
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;- มีขั้นตอนชัดเจน
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;- ผลลัพธ์ดีขึ้น
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;- เสียเวลาน้อยลง
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;Stage 3: มี Guardrails
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;- มีระบบป้องกัน
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;- ผลลัพธ์น่าเชื่อถือ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;- เสียเวลาน้อยมาก
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="-ตอนตอไป-harness-components--ระบบอวยวะของ-ai"&gt;&lt;a href="#-%e0%b8%95%e0%b8%ad%e0%b8%99%e0%b8%95%e0%b8%ad%e0%b9%84%e0%b8%9b-harness-components--%e0%b8%a3%e0%b8%b0%e0%b8%9a%e0%b8%9a%e0%b8%ad%e0%b8%a7%e0%b8%a2%e0%b8%a7%e0%b8%b0%e0%b8%82%e0%b8%ad%e0%b8%87-ai" class="header-anchor"&gt;&lt;/a&gt;🔄 ตอนต่อไป: Harness Components — ระบบอวัยวะของ AI
&lt;/h2&gt;&lt;p&gt;ตอนนี้เราเข้าใจแล้วว่า:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Prompt คือ Control Plane&lt;/li&gt;
&lt;li&gt;✅ Prompt Layering มี 3 ระดับ&lt;/li&gt;
&lt;li&gt;✅ Guardrails, Memory, Retry Logic สำคัญอย่างไร&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;แล้ว Harness Components คืออะไร?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Harness มี &amp;ldquo;อวัยวะ&amp;rdquo; หลายอย่างที่ทำงานร่วมกัน:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control Plane&lt;/strong&gt; — Prompt ที่เราเพิ่งคุยกัน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Query Loop&lt;/strong&gt; — หัวใจที่สูบฉีดงาน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools &amp;amp; Permissions&lt;/strong&gt; — มือที่ทำงาน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory &amp;amp; Context&lt;/strong&gt; — สมองที่จำ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recovery Paths&lt;/strong&gt; — ระบบภูมิคุ้มกัน&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ในตอนต่อไป เราจะมาเจาะลึกแต่ละ &amp;ldquo;อวัยวะ&amp;rdquo; ว่าทำงานอย่างไร และทำไมต้องมี&lt;/p&gt;
&lt;p&gt;ติดตามตอนต่อไปได้เลย 🚀&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-อางอง"&gt;&lt;a href="#-%e0%b8%ad%e0%b8%b2%e0%b8%87%e0%b8%ad%e0%b8%87" class="header-anchor"&gt;&lt;/a&gt;📚 อ้างอิง
&lt;/h2&gt;&lt;h3 id="แหลงหลก"&gt;&lt;a href="#%e0%b9%81%e0%b8%ab%e0%b8%a5%e0%b8%87%e0%b8%ab%e0%b8%a5%e0%b8%81" class="header-anchor"&gt;&lt;/a&gt;แหล่งหลัก:
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Harness Books 2 เล่ม โดย wquguru&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Book 1: &lt;a class="link" href="https://github.com/wquguru/harness-books/blob/main/book1-claude-code/index.md" target="_blank" rel="noopener"
 &gt;Claude Code Harness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Book 2: &lt;a class="link" href="https://github.com/wquguru/harness-books/blob/main/book2-comparing/index.md" target="_blank" rel="noopener"
 &gt;Claude Code vs Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Online Version: &lt;a class="link" href="https://harness-books.agentway.dev/book1-claude-code/" target="_blank" rel="noopener"
 &gt;harness-books.agentway.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="แหลงเสรม"&gt;&lt;a href="#%e0%b9%81%e0%b8%ab%e0%b8%a5%e0%b8%87%e0%b9%80%e0%b8%aa%e0%b8%a3%e0%b8%a1" class="header-anchor"&gt;&lt;/a&gt;แหล่งเสริม:
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Stanford HAI - Prompt Engineering Limitations (2025)&lt;/li&gt;
&lt;li&gt;Morph LLM - &lt;a class="link" href="https://www.morphllm.com/comparisons/codex-vs-claude-code" target="_blank" rel="noopener"
 &gt;Codex vs Claude Code Benchmarks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Anthropic - Constitutional AI&lt;/li&gt;
&lt;li&gt;Google - Chain of Thought Prompting&lt;/li&gt;
&lt;li&gt;OpenAI - Templatized Prompt Engineering&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>