<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iFew &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<atom:link href="https://myifew.com/author/ifew/feed/" rel="self" type="application/rss+xml" />
	<link>https://myifew.com</link>
	<description></description>
	<lastBuildDate>Sun, 30 Aug 2026 08:51:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://myifew.com/wp-content/uploads/2018/07/cropped-logo6-ts-32x32.png</url>
	<title>iFew &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<link>https://myifew.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>น้ำตกนี้ไม่ใช่ของผม แต่เป็นของคนไทยทุกคน..</title>
		<link>https://myifew.com/8451/pilue-huy-nam-yen/</link>
					<comments>https://myifew.com/8451/pilue-huy-nam-yen/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Sun, 30 Aug 2026 08:31:36 +0000</pubDate>
				<category><![CDATA[Travel]]></category>
		<category><![CDATA[น้ำตก]]></category>
		<category><![CDATA[น้ำตกห้วยน้ำเย็น]]></category>
		<category><![CDATA[อมก๋อย]]></category>
		<category><![CDATA[เชียงใหม่]]></category>
		<category><![CDATA[เดินป่า]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=8451</guid>

					<description><![CDATA[เรื่องที่ผมได้ฟังจากไกด์และคนในพื้นที่ หลังเดินทางสู่น้ำตกห้วยน้ำเย็น ทำให้ผมรู้ว่า ทางที่เราเดินผ่าน คือเวลาสิบปีของคุณลุงพึลึ]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ผมมีโอกาสไปน้ำตกห้วยน้ำเย็นที่อำเภออมก๋อย จังหวัดเชียงใหม่ น้ำตกสวยมากครับ สวยแบบที่พอไปยืนอยู่ตรงหน้าแล้ว ความเหนื่อยระหว่างทางหายไปเกือบหมด</p>



<p class="wp-block-paragraph">แต่พอกลับมา สิ่งที่ผมนึกถึงบ่อยกว่าน้ำตก กลับเป็นเรื่องของคุณลุงคนหนึ่งที่ผมไม่ได้รู้จักมาก่อน</p>



<p class="wp-block-paragraph">คุณลุงชื่อ <strong>พึลึ</strong> ครับ</p>



<p class="wp-block-paragraph">ระหว่างเดินทาง ไกด์เล่าให้ผมฟังว่า ทางที่พวกเรากำลังเดินอยู่นี้ คุณลุงพึลึใช้เวลาบุกเบิกเกือบ 10 ปี เพื่อให้คนข้างนอกสามารถเข้าไปเห็นน้ำตกห้วยน้ำเย็นได้</p>



<p class="wp-block-paragraph">ตอนฟังครั้งแรก ผมก็คิดแค่ว่า โห.. สิบปีเลยเหรอ เก่งและอดทนมาก แต่ยังไม่ได้เข้าใจว่า ทำไมคนคนหนึ่งถึงยอมเอาเวลาตั้งสิบปีของชีวิต ไปทำทางในป่าให้คนที่แกไม่รู้จักเดิน</p>



<span id="more-8451"></span>



<p class="wp-block-paragraph">ตอนที่ผมไป ผมมีโอกาสคุยกับไกด์และคนที่ดูแลโฮมสเตย์ จึงได้เห็นว่า การเดินทางมาน้ำตกแห่งนี้ไม่ได้ทำให้มีรายได้เฉพาะคนเก็บค่าเข้า แต่มันกระจายไปถึงคนหลายกลุ่มทั้งในหมู่บ้านแม่โขง บ้านนาเกียน และรอบข้าง</p>



<p class="wp-block-paragraph">ทางหมู่บ้านกำหนดว่า นักท่องเที่ยว 10 คนต้องมีไกด์ท้องถิ่น 1 คน ตอนที่ผมไป ค่าไกด์อยู่ที่ 350 บาทต่อวัน ใครอยากให้ทิปเพิ่มก็แล้วแต่ความพอใจ และไกด์ไม่ได้แย่งกันรับลูกค้าครับ เขาจัดคิวเรียงกัน ใครถึงคิวก็ได้พานักท่องเที่ยวเข้าไป</p>



<p class="wp-block-paragraph">ผมชอบวิธีจัดการนะ อย่างน้อยรายได้ก็ไม่ได้กระจุกอยู่กับคนที่เก่ง หรือหาลูกค้ามากที่สุด แต่คนในหมู่บ้านมีโอกาสได้งานหมุนเวียนกันไป</p>



<p class="wp-block-paragraph">ส่วนคนทำโฮมสเตย์ก็มีรายได้จากค่าที่พัก และต้องจัดรถไปรับนักท่องเที่ยวจากตัวอำเภออมก๋อยเข้ามาที่หมู่บ้านด้วย บางบ้านอาจแบ่งงานกันในครอบครัว คนหนึ่งดูแลโฮมสเตย์ อีกคนขับรถ อีกคนไปเป็นไกด์</p>



<p class="wp-block-paragraph">ร้านค้าในตัวอมก๋อยกับบ้านแม่โขง นาเกียน ก็ขายของได้มากขึ้น กลุ่มผมเองซื้อทั้งน้ำ อาหาร และขนมกันพอสมควร เงินที่นักท่องเที่ยวหนึ่งกลุ่มใช้ จึงค่อยๆ แบ่งไปถึงหลายบ้านโดยที่เราอาจไม่ได้ทันสังเกต</p>



<p class="wp-block-paragraph">ผมฟังไกด์เล่าเรื่องเหล่านี้แล้วก็รู้สึกว่า ระบบมันถูกคิดมาให้ชุมชนมีส่วนร่วมจริงๆ และทั้งหมดนี้คงเกิดขึ้นไม่ได้ ถ้าไม่มีใครสักคนเริ่มทำทางเข้าไปหาน้ำตกตั้งแต่แรก</p>



<p class="wp-block-paragraph">หลังกลับจากทริป ผมลองไปหาข้อมูลต่อ ดูคลิปรีวิวหลายๆ คลิป รวมถึงคลิปของ <a href="https://www.youtube.com/watch?v=OQN7h3L0nZY" target="_blank" rel="noreferrer noopener">Pigkaploy ที่ได้เข้าไปพูดคุยกับคุณลุงพึลึ</a> แล้วเรื่องที่ไกด์เล่าระหว่างทางก็เริ่มชัดขึ้น</p>



<p class="wp-block-paragraph">คุณลุงอยู่ในป่ามาราว 40 ปี ใช้ชีวิตอยู่คนเดียว เมื่อก่อนแกเลี้ยงแพะไว้ขาย แต่พอเลี้ยงไปนานๆ แพะกลายเป็นเพื่อน แกจึงไม่อยากขายแล้ว เปลี่ยนมาเลี้ยงไว้และเอามูลแพะไปทำปุ๋ย ปลูกต้นไม้ ทำเกษตรของแกต่อไป</p>



<p class="wp-block-paragraph">เรื่องนี้อาจฟังดูไม่เกี่ยวกับน้ำตก แต่สำหรับผม มันทำให้เห็นนิสัยของคุณลุงชัดขึ้น แกเป็นคนที่อยู่กับอะไรนานๆ แล้วเกิดความผูกพัน ไม่ได้มองทุกสิ่งรอบตัวว่าต้องเปลี่ยนเป็นเงินเสมอไป</p>



<p class="wp-block-paragraph">น้ำตกห้วยน้ำเย็นก็คงเหมือนกัน</p>



<p class="wp-block-paragraph">คุณลุงเห็นว่าน้ำตกที่อื่นสวย ที่นี่ก็สวยไม่แพ้กัน แกจึงอยากให้คนอื่นได้มีโอกาสเข้ามาเห็นในแบบที่แกเห็น อยากให้คนไทยรู้จัก และอยากให้ชาวต่างชาติได้มาเห็นว่า ในอำเภออมก๋อยมีน้ำตกแบบนี้อยู่</p>



<p class="wp-block-paragraph">แล้วมีประโยคหนึ่งที่ผมฟังแล้วรู้สึกจุกอยู่ในใจ</p>



<p class="wp-block-paragraph"><strong>&#8220;น้ำตกแห่งนี้ไม่ใช่ของผม แต่เป็นน้ำตกของคนไทยทุกคน&#8221;</strong></p>



<p class="wp-block-paragraph">ผมลองนึกดูนะครับ ถ้าเราใช้แรงตัวเองทำอะไรสักอย่างอยู่เกือบสิบปี เราอาจคิดว่านี่คือผลงานของเรา พื้นที่ของเรา และรายได้ก็ควรเป็นของเรามากที่สุด</p>



<p class="wp-block-paragraph">แต่คุณลุงกลับคิดคนละแบบ</p>



<p class="wp-block-paragraph">แกไม่ได้อยากเก็บน้ำตกไว้ดูคนเดียว ไม่ได้ทำทางเพื่อให้ตัวเองเป็นเจ้าของ และไม่ได้คิดเพียงว่าตัวเองจะมีรายได้เท่าไร แกคิดถึงคนในหมู่บ้าน และคิดไกลไปถึงคนทั้งอำเภออมก๋อยว่า ถ้ามีนักท่องเที่ยวเข้ามา ทุกคนน่าจะมีรายได้เพิ่มขึ้น</p>



<p class="wp-block-paragraph">ค่าเข้าที่นักท่องเที่ยวจ่าย มีบางส่วนส่งต่อถึงคุณลุง จากข้อมูลที่ผมได้มา แกนำเงินบางส่วนกลับไปปรับปรุงทาง ทำห้องน้ำ ทำที่นั่งและพื้นที่พักให้นักท่องเที่ยว </p>



<p class="wp-block-paragraph">ซึ่งในคลิปของพลอยคือ 11 เดือนก่อนจากวันที่ผมไป (22 สิงหาคม 2569) ตอนนี้มีห้องน้ำ ลานพักตรงบ้านลุง ลานตรงน้ำตก สะพานบนน้ำตก มากขึ้นอย่างเห็นได้ชัด</p>



<p class="wp-block-paragraph">เงินที่ได้จึงไม่ได้หยุดอยู่ที่แก แต่วนกลับไปดูแลทาง เพื่อให้คนกลุ่มต่อไปเดินเข้ามาได้สะดวกขึ้น แล้วนักท่องเที่ยวกลุ่มนั้นก็ไปจ้างไกด์ พักโฮมสเตย์ ใช้รถของคนในหมู่บ้าน และซื้อของจากร้านค้าอีกต่อหนึ่ง</p>



<p class="wp-block-paragraph">สิ่งที่ผมเห็นด้วยตาตัวเองในทริป กับสิ่งที่ได้ฟังจากไกด์และจากบทสัมภาษณ์ มันค่อยๆ ต่อกันเป็นภาพเดียว</p>



<p class="wp-block-paragraph">ทางเส้นหนึ่งที่คนคนเดียวเริ่มทำ กลายเป็นทางที่พารายได้เข้าไปหาคนอีกหลายครอบครัว</p>



<p class="wp-block-paragraph">พอคิดถึงตรงนี้ ตัวเลข 10 ปีจึงไม่ได้บอกเพียงว่าแกอึดแค่ไหน แต่มันคือเวลา 10 ปีที่คนคนหนึ่งทำบางอย่าง โดยหวังว่าคนอื่นจะได้ประโยชน์จากมันในวันที่ทางเสร็จ</p>



<p class="wp-block-paragraph">เราอาจเดินผ่านทางเส้นนั้นในเวลาไม่กี่ชั่วโมง ถ่ายรูปน้ำตก แล้วเดินกลับออกมา แต่ทุกก้าวที่เราเดิน มันอยู่บนงานที่คุณลุงทำซ้ำๆ มาหลายปี ก่อนที่พวกเราจะรู้จักชื่อน้ำตกห้วยน้ำเย็นเสียอีก</p>



<p class="wp-block-paragraph">ผมไปอมก๋อยเพราะอยากเห็นน้ำตกครับ แต่สุดท้ายแล้ว สิ่งที่ทำให้ทริปนี้อยู่ในความทรงจำกลับเป็นเรื่องของคน มากกว่าความสูงของหน้าผาหรือความสวยของสายน้ำ</p>



<p class="wp-block-paragraph">มันคือเรื่องของชายสูงวัยคนหนึ่งที่อยู่กลางป่ามาหลายสิบปี เลี้ยงแพะไว้เป็นเพื่อน ใช้มูลแพะทำปุ๋ย และใช้เวลาสิบปีเปิดทางให้คนที่ไม่เคยรู้จักกัน ได้เข้ามาเห็นสิ่งสวยงามที่แกเคยเห็นอยู่คนเดียว</p>



<p class="wp-block-paragraph">ผมไม่รู้ว่าระหว่างสิบปีนั้น คุณลุงเคยท้อกี่ครั้ง หรือเคยคิดจะเลิกทำไหม ผมรู้เพียงว่า วันนี้ทางเส้นนั้นมีคนเดินจริง ไกด์มีงาน โฮมสเตย์มีแขก รถในหมู่บ้านมีคนใช้ ร้านค้าขายของได้ และชื่อของน้ำตกห้วยน้ำเย็นเริ่มเดินทางออกจากป่าไปถึงคนข้างนอก</p>



<p class="wp-block-paragraph">ทั้งหมดเริ่มจากความคิดง่ายๆ ของคุณลุงว่า ของสวยๆ แบบนี้ ไม่ควรมีแกได้เห็นอยู่คนเดียว..</p>



<p class="wp-block-paragraph">ผมชื่นชมและนับถือหัวใจคุณลุงมากครับ</p>



<p class="wp-block-paragraph">ขอบคุณที่ทำทางเส้นนี้ขึ้นมา และขอบคุณที่ไม่ได้คิดเพียงว่าปลายทางจะมีอะไรเหลือให้ตัวเอง แต่คิดว่า ระหว่างทางจะมีอะไรเกิดขึ้นกับคนทั้งหมู่บ้านบ้าง</p>



<p class="wp-block-paragraph">น้ำตกห้วยน้ำเย็นสวยจริงครับ แต่สำหรับผม คนที่ทำให้พวกเราได้เข้าไปเห็นน้ำตก งดงามไม่แพ้กันเลย..</p>



<h3 class="wp-block-heading">ข้อมูลเพิ่มเติม</h3>



<ul class="wp-block-list">
<li><a href="https://www.youtube.com/watch?v=OQN7h3L0nZY" target="_blank" rel="noreferrer noopener">Pigkaploy: เปิดเส้นทางน้ำตกห้วยน้ำเย็น ใช้เวลาทำทางถึง 10 ปี</a></li>



<li><a href="https://www.khaosod.co.th/special-stories/news_9856965" target="_blank" rel="noreferrer noopener">ข่าวสด: ลุงใช้เวลาเกือบ 10 ปี ทำให้ทุกคนได้เห็นน้ำตกแห่งนี้</a></li>



<li><a href="https://www.klukfoontour.com/huainamyenwaterfall" target="_blank" rel="noreferrer noopener">ข้อมูลตำแหน่งและเส้นทางน้ำตกห้วยน้ำเย็น</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/8451/pilue-huy-nam-yen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>We Are All Bad in Someone’s Story เมื่อเราเป็นคนเลวในเรื่องราวของใครสักคน</title>
		<link>https://myifew.com/8423/we-are-all-bad-in-someones-story/</link>
					<comments>https://myifew.com/8423/we-are-all-bad-in-someones-story/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Thu, 13 Aug 2026 17:40:59 +0000</pubDate>
				<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[Philosophy]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=8423</guid>

					<description><![CDATA[ผมไปเจอประโยคหนึ่งว่า We are all bad in someone’s story แปลประมาณว่า เราทุกคนล้วนเป็นคนไม่ดีในเรื่องราวของใครสักคน อ่านแล้วสะกิดใจมาก เพราะเป็นประโยคสั้นๆ ที่อธิบายปรัชญาชีวิตได้หลายเรื่อง ต่อให้เราพยายามทำดีกับทุกคนแค่ไหน สุดท้ายก็ยังมีใครบางคนไม่ชอบเรา เข้าใจเราผิด หรือจดจำเราในแบบที่เราไม่อยากให้เป็น เราอาจมองว่าตัวเองกำลังรักษาขอบเขต&#8230;]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ผมไปเจอประโยคหนึ่งว่า <strong>We are all bad in someone’s story</strong> แปลประมาณว่า เราทุกคนล้วนเป็นคนไม่ดีในเรื่องราวของใครสักคน อ่านแล้วสะกิดใจมาก เพราะเป็นประโยคสั้นๆ ที่อธิบายปรัชญาชีวิตได้หลายเรื่อง</p>



<p class="wp-block-paragraph">ต่อให้เราพยายามทำดีกับทุกคนแค่ไหน สุดท้ายก็ยังมีใครบางคนไม่ชอบเรา เข้าใจเราผิด หรือจดจำเราในแบบที่เราไม่อยากให้เป็น เราอาจมองว่าตัวเองกำลังรักษาขอบเขต แต่อีกคนมองว่าเราเห็นแก่ตัว เราอาจพูดตรงเพราะหวังดี แต่อีกคนจำแค่ว่าเราเคยทำให้เขาเสียใจ</p>



<p class="wp-block-paragraph">ตอนแรกประโยคนี้ฟังดูน่าหดหู่ แต่พอคิดต่อ ผมกลับรู้สึกว่ามันช่วยให้ชีวิตเบาลง เพราะเราไม่จำเป็นต้องใช้เวลาทั้งชีวิตไปกับการแก้บทของตัวเองในหนังสือที่คนอื่นเป็นผู้เขียน ต่อให้แก้เรื่องหนึ่งได้ เดี๋ยวก็มีเรื่องใหม่อีกอยู่ดี เหนื่อยนะครับ 555</p>



<span id="more-8423"></span>



<h2 class="wp-block-heading">เราไม่มีทางเป็นคนดีในทุกเรื่องเล่า</h2>



<p class="wp-block-paragraph">ทุกเหตุการณ์ เรามักเล่าเรื่องจากจุดที่เรายืน เรารู้ว่าตัวเองคิดอะไร ผ่านอะไรมาบ้าง และตัดสินใจเพราะอะไร ในเรื่องที่เราเล่า เราจึงมักเป็นคนที่มีเหตุผล หรืออย่างน้อยก็เป็นคนที่พยายามทำดีที่สุดแล้ว</p>



<p class="wp-block-paragraph">แต่อีกฝ่ายก็ทำแบบเดียวกัน เขามีข้อมูล ความรู้สึกนึกคิด ความกลัว หรือเรื่องราวสะสมในอดีตของเขา สิ่งที่เรามองว่าเป็นการปกป้องตัวเอง เขาอาจมองว่าเป็นความเย็นชา สิ่งที่เราคิดว่าเป็นการพูดตรง เขาอาจรู้สึกว่าเราไม่ให้เกียรติ หรือวันที่เราต้องเลือกตัวเอง อาจเป็นวันที่เขาจำว่าเราเห็นแก่ตัวก็ได้</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ความตั้งใจใดๆ ของเรา อาจไม่ได้สื่อความหมายที่เกิดขึ้นในใจของผู้อื่น</p>
</blockquote>



<p class="wp-block-paragraph">แต่นั่นไม่ได้แปลว่าความตั้งใจเราจะไม่มีความหมายนะครับ เพียงแต่มันไม่ใช่ความหมายเดียวที่จะทำให้คนสองคนยืนอยู่ในเหตุการณ์เดียวกัน แล้วจะมีความทรงจำชุดเดีนสกันเสมอ เหมือนดูหนังเรื่องเดียวกัน แต่เลือกจำคนละฉาก หรือตีความหมายกันคนละแบบ</p>



<h2 class="wp-block-heading">ทุกคนล้วนเป็นตัวเอกในชีวิตตนเอง</h2>



<p class="wp-block-paragraph">เราอาจอยากให้คนอื่นเข้าใจว่าแท้จริงแล้วเราเป็นคนดี มีเหตุผล และไม่ได้ตั้งใจทำร้ายใคร แต่ในชีวิตจริง ไม่มีใครยอมยกบทตัวเอกในหนังสือของตัวเองให้เราง่ายๆ หรอกครับ เขาล้วนต้องปกป้องมุมมองของเขา เหมือนที่เราก็ต้องปกป้องมุมมองของเรา</p>



<p class="wp-block-paragraph">บางครั้งการที่เราถูกเขียนเป็นตัวร้ายในเรื่องของเขา ไม่ใช่สิ่งที่เราควรยอมรับว่าเราเป็นคนเลว แต่ให้มองและเข้าใจว่าเราเองไม่มีสิทธิ์ควบคุมวิธีที่คนเขียนถึงเรา ก็เท่านั้น</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">เราเป็นตัวเอกในเรื่องของเราได้ แต่ไม่มีทางเป็นตัวเอกในเรื่องของทุกคน</p>
</blockquote>



<p class="wp-block-paragraph">ถ้าเราเอาแต่พยายามแย่งปากกาจากมือคนอื่น เพื่อแก้ทุกประโยคที่เขาเขียนถึงเรา ชีวิตคงหมดไปกับการชี้แจงไม่รู้จบ และถึงชี้แจงครบ เขาก็อาจไม่เลือกเชื่อเราอยู่ดี เพราะเรื่องเล่าบางเรื่องไม่ได้สร้างจากข้อเท็จจริงอย่างเดียว แต่มันสร้างจากความรู้สึกด้วย</p>



<h2 class="wp-block-heading">แต่คำว่า ช่างมัน ไม่ได้แปลว่าเราจะไม่รับผิดชอบ</h2>



<p class="wp-block-paragraph">แต่ๆ คำว่าใครจะมองเรายังไงก็ช่าง อาจฟังเหมือนการไม่สนใจใคร แต่ผมคิดว่าต้องแยกให้ออกระหว่าง <strong>การไม่ยอมให้คำตัดสินของคนอื่นกำหนดคุณค่าของเรา</strong> กับ <strong>การไม่รับผิดชอบต่อผลของการกระทำ</strong></p>



<p class="wp-block-paragraph">ถ้าเราทำร้ายใคร โกหก เอาเปรียบ หรือทำผิดจริงๆ การบอกว่าเป็นแค่เรื่องราวที่เขาเขียนถึงเรา ไม่ควรเป็นข้ออ้างให้เราหนีความรับผิดชอบ แต่เราต้องรับฟัง ต้องขอโทษ แก้ไข และเรียนรู้เท่าที่ทำได้ ไม่ใช่ประกาศว่าใครไม่เข้าใจก็เรื่องของเขา แล้วก็เดินจากไปแบบเท่ๆ อันนั้นอาจไม่ใช่ปรัชญาชีวิต แต่เป็นแค่การเข้าข้างตัวเอง(แบบผิดๆ)ครับ</p>



<p class="wp-block-paragraph">แต่หลังจากรับผิดชอบในส่วนของเราแล้ว อีกฝ่ายจะให้อภัยหรือไม่ จะเชื่อหรือไม่ หรือยังเลือกมองเราแบบเดิม นั่นเป็นพื้นที่ที่เราเข้าไปบังคับไม่ได้</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">รับผิดชอบต่อสิ่งที่เราทำ แต่ไม่ต้องรับภาระในการควบคุมความคิดของทุกคน</p>
</blockquote>



<p class="wp-block-paragraph">เราอาจสับสนระหว่าง พยายามเอาใจทุกคนจนไม่เหลือตัวเอง หรือไม่สนใจความรู้สึกใครเลยแล้วเรียกมันว่าการรักตัวเอง ทั้งสองแบบในความคิดผมคือไม่ดีทั้งคู่ และไม่ใช่สิ่งที่ผมอยากจะเป็น</p>



<h2 class="wp-block-heading">คุณค่าของเราไม่ควรขึ้นกับความคิดใคร</h2>



<p class="wp-block-paragraph">ถ้าคุณค่าของเราขึ้นอยู่กับความคิดของคนรอบข้าง ชีวิตเราแบบนี้เองที่จะไร้ความหมายและไม่เป็นตัวเองอยู่ตลอดเวลา วันนี้มีคนชม เราก็รู้สึกดี พรุ่งนี้มีคนไม่พอใจ เราก็เริ่มสงสัยตัวเอง ทั้งที่เราอาจยังเป็นคนเดิม</p>



<p class="wp-block-paragraph">คนอื่นมีสิทธิ์มองเรา แต่เราเองก็ต้องรู้ว่าเรามองตัวเองอย่างไร เราให้คุณค่ากับความซื่อสัตย์ ความรับผิดชอบ ความเมตตา หรือความกล้าที่จะรักษาขอบเขตของตัวเองแค่ไหน สิ่งเหล่านี้ควรเป็นเข็มทิศ มากกว่าเสียงวิจารณ์ที่เปลี่ยนไปตามอารมณ์และความสัมพันธ์</p>



<p class="wp-block-paragraph">คำถามที่น่าถามจึงไม่ใช่ว่า วันนี้ทุกคนมองว่าเราเป็นคนดีหรือยัง แต่เป็นคำถามที่ตรงกว่า</p>



<ul class="wp-block-list">
<li>วันนี้เราทำในสิ่งที่เราเชื่อว่าดีแล้วหรือยัง</li>



<li>เราซื่อสัตย์กับตัวเองและคนอื่นมากพอหรือยัง</li>



<li>เมื่อทำผิด เรายอมรับและแก้ไขหรือมันเปล่า</li>



<li>เรากำลังรักษาขอบเขต หรือแค่ทำร้ายคนอื่นแล้วหาคำอธิบายให้ตัวเอง</li>
</ul>



<h2 class="wp-block-heading">ยิ่งรู้จักตัวเอง ยิ่งไม่ต้องอธิบายตัวเองตลอดเวลา</h2>



<p class="wp-block-paragraph">การรู้จักตัวเองไม่ได้หมายความว่าจะทำให้เรามั่นใจทุกวัน หรือไม่รู้สึกอะไรเวลาโดนเข้าใจผิด ผมคิดว่ามันก็ยังเจ็บๆ อยู่ โดยเฉพาะเมื่อคนนั้นเป็นคนที่เราให้ความสำคัญ</p>



<p class="wp-block-paragraph">แต่ความเจ็บกับการสูญเสียตัวตนมันเป็นคนละเรื่องครับ เราเสียใจได้ เราชี้แจงได้ และเราพยายามปรับความเข้าใจกันได้ โดยไม่จำเป็นต้องพยายามอธิบายว่าฉันมีคุณค่าอย่างไรเพียงเพราะใครคนหนึ่งมองไม่เห็น</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">สิ่งที่มีค่าที่สุด ไม่ใช่การทำให้ทุกคนเชื่อว่าเราเป็นคนดี แต่คือการที่เรารู้ว่าเรากำลังพยายามเป็นคนแบบไหน</p>
</blockquote>



<p class="wp-block-paragraph">แน่นอนว่าเราต้องเปิดพื้นที่ให้ตัวเองเปลี่ยนแปลงด้วย เพราะการรู้จักตัวเองไม่ใช่การตั้งป้ายว่า ผมเป็นแบบนี้ ใครรับไม่ได้ก็ช่างมัน แต่มันคือการกล้ามองทั้งส่วนที่ดีและส่วนที่ยังต้องแก้ โดยไม่ใช้การตัดสินทั้งหมดไว้กับผู้อื่น</p>



<h2 class="wp-block-heading">มาถึงท้ายบทความ</h2>



<p class="wp-block-paragraph">ประโยค <strong>We are all bad in someone’s story</strong> ไม่ได้ทำให้ผมอยากเป็นคนที่ไม่แคร์ใคร ตรงกันข้าม มันเตือนให้ผมทำดีกับคนอื่นโดยไม่ต้องคาดหวังว่าจะได้รับบทคนดีเสมอในหนังสือเขาก็ได้ และฝึกรับผิดชอบเมื่อทำผิดจริงๆ โดยไม่พยายามไปควบคุมความคิดของทุกคน</p>



<p class="wp-block-paragraph">เราอาจเป็นคนใจดีในเรื่องหนึ่ง เป็นคนเห็นแก่ตัวในอีกเรื่อง เป็นเพื่อนที่ดีของคนหนึ่ง และเป็นความผิดหวังของอีกคน ทั้งหมดนี้อาจเกิดขึ้นพร้อมกันได้ เพราะมนุษย์ไม่ได้มีตัวตนเพียงเวอร์ชันเดียวในสายตาคนทั้งโลก</p>



<p class="wp-block-paragraph">สิ่งที่ผมชอบในประโยคนี้ คือมันดึงเราออกจากการวิ่งตามความคิดของคนอื่น แล้วพากลับมาถามตัวเองว่า วันนี้เราใช้ชีวิตตรงกับสิ่งที่เราเชื่อไหม เราทำดีที่สุดในข้อจำกัดที่มีหรือยัง และเมื่อรู้ว่าทำพลาด เรากล้าแก้ไขหรือเปล่า</p>



<p class="wp-block-paragraph">ถ้าตอบคำถามเหล่านี้ได้ ต่อให้เราเป็นคนเลวในเรื่องราวของใครบางคน อย่างน้อยเราก็ยังไม่หลงออกจากเรื่องราวของตัวเอง..</p>



<p class="wp-block-paragraph">ใครอ่านมาถึงตรงนี้ (หรือจะเลื่อนลงมาเจอเลยก็แล้วแต่ 55) ผมต้องขอบคุณมากครับ ไม่ค่อยได้มีโอกาสเขียนเรื่องปรัชญา ความคิด ของตัวเองมานาน เลยขอรื้อฟื้นหน่อย และผมไม่ได้มีประเด็นอะไรกับใครนะ แค่ชอบประโยคและอยากขีดเขียนขึ้นมาเท่านั้น หากใครมีความเห็นอะไร สามารถมาแลกเปลี่ยนพูดคุยกันได้เสมอครับ</p>



<p class="wp-block-paragraph">14 สิงหาคม 2569 &#8211; ในห้องที่มีแมวส้มย่านอารีย์</p>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/8423/we-are-all-bad-in-someones-story/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>แกะรูปแบบการเขียน Requirement ระบบ LLM Wiki ของ Karpathy</title>
		<link>https://myifew.com/7879/karpathy-llm-wiki-requirement-context-engineering/</link>
					<comments>https://myifew.com/7879/karpathy-llm-wiki-requirement-context-engineering/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Mon, 27 Jul 2026 15:02:01 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7879</guid>

					<description><![CDATA[วิเคราะห์รูปแบบการเขียน LLM Wiki gist ของ Andrej Karpathy ว่าทำไมอ่านง่ายสำหรับมนุษย์ แต่ยังให้ AI agent เอาไป implement ต่อได้ในฐานะ requirement และ context engineering]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ผมชอบเอกสารชิ้นหนึ่งของ Andrej Karpathy เรื่อง <a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" target="_blank" rel="noreferrer noopener">LLM Wiki</a> มากครับ (อยากรู้ว่าคืออะไร ผมเคยเขียนไว้ที่ <a href="https://myifew.com/7636/llm-wiki-karpathy/" data-type="link" data-id="https://myifew.com/7636/llm-wiki-karpathy/">LLM Wiki : คลังความรู้ส่วนตัว ตามแบบฉบับของ Karpathy</a>) ไม่ใช่แค่เพราะไอเดียเรื่อง LLM Wiki น่าสนใจ แต่เพราะวิธีเขียนของมันดีมาก คือมันอ่านเหมือนบทความให้มนุษย์เข้าใจ แต่ขณะเดียวกันก็เป็นเอกสารที่ส่งให้ AI agent เอาไป implement ต่อได้เลย</p>



<p class="wp-block-paragraph">นี่เป็นรูปแบบที่ผมคิดว่าน่าสนใจมากสำหรับคนที่ต้องเขียน requirement, product spec, technical spec หรือแม้แต่ working agreement ให้ AI ทำงานด้วย เพราะมันไม่ได้เขียนเป็น requirement แข็งๆ แบบที่เคยทำกันมา หรือแบบเอกสารราชการ แต่ก็ไม่ได้หลวมจน AI หรือคนต้องเดาเองทั้งหมด</p>



<p class="wp-block-paragraph">บทความนี้เลยอยากลองแกะรูปแบบการเขียนของเอกสารชิ้นนี้ว่า ทำไมมันถึงอ่านง่ายสำหรับคน และยังทำหน้าที่เป็น context engineering สำหรับ AI ได้ดีในเวลาเดียวกัน</p>



<span id="more-7879"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้เป็นงานเขียนร่วมกันระหว่างผมกับ AI agent โดยอิงจากมุมมองและโจทย์ที่ผมสนใจจริง ส่วนข้อมูลเชิงอ้างอิงนำมาประกอบจากเอกสาร LLM Wiki gist ของ Andrej Karpathy และแหล่งที่มาที่ลิงก์ไว้ท้ายบทความ</em></p>



<h2 class="wp-block-heading">เอกสารนี้ไม่ได้บอกแค่ “ต้องทำอะไร” แต่บอกว่า “ทำไมต้องทำ”</h2>



<p class="wp-block-paragraph">จุดแรกที่ผมชอบคือเอกสารไม่ได้เปิดด้วย technical อย่างการบอกโครงสร้าง directory structure, schema, command หรือ implementation detail ทันที แต่เปิดด้วยปัญหาของวิธีเดิมก่อน</p>



<p class="wp-block-paragraph">Karpathy เริ่มจากภาพที่คนส่วนใหญ่คุ้นเคย คือการใช้ LLM กับเอกสารแบบ RAG หรือการ upload file แล้วให้โมเดลดึง chunk มาตอบคำถาม จากนั้นค่อยชี้ให้เห็นข้อจำกัดว่า วิธีนี้ทำให้ LLM ต้อง rediscover knowledge ใหม่ทุกครั้ง ไม่มีการสะสม ไม่มีการ build up ของความรู้</p>



<p class="wp-block-paragraph">พอวาง problem แบบนี้แล้ว เขาค่อยเสนอ idea ใหม่ว่า แทนที่จะ retrieve raw document ทุกครั้ง ให้ LLM ค่อยๆ สร้างและ maintain wiki ที่เป็น markdown files อยู่ระหว่างผู้ใช้กับ raw sources</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">นี่คือ pattern การเขียน requirement ที่ดีมาก คือเริ่มจาก pain ของโลกเดิม แล้วค่อยพาไปสู่ architecture ของโลกใหม่</p>
</blockquote>



<p class="wp-block-paragraph">สำหรับมนุษย์ วิธีนี้ทำให้อ่านแล้วเข้าใจเหตุผล ไม่ใช่แค่รับคำสั่ง ส่วนสำหรับ AI มันทำให้โมเดลเข้าใจ intent ของระบบ ไม่ใช่ทำตาม checklist แบบไม่รู้บริบท</p>



<h2 class="wp-block-heading">โครงสร้างหลักของเอกสาร</h2>



<p class="wp-block-paragraph">ถ้าแกะเป็นโครง เอกสารนี้มีลำดับที่ค่อนข้างชัดครับ</p>



<figure class="wp-block-table"><table><thead><tr><th>ลำดับ</th><th>Section</th><th>หน้าที่ของ section</th></tr></thead><tbody><tr><td>1</td><td>Title + one-line description</td><td>บอกชื่อ pattern และคำอธิบายสั้นมาก</td></tr><tr><td>2</td><td>Meta intent</td><td>บอกว่าเอกสารนี้ออกแบบมาให้ copy ไปให้ LLM agent อ่าน</td></tr><tr><td>3</td><td>The core idea</td><td>อธิบาย problem, contrast กับวิธีเดิม, แล้วเสนอ idea ใหม่</td></tr><tr><td>4</td><td>Examples</td><td>ยก use case หลาย domain เพื่อให้คนเห็น applicability</td></tr><tr><td>5</td><td>Architecture</td><td>แตกเป็น 3 layer: raw sources, wiki, schema</td></tr><tr><td>6</td><td>Operations</td><td>อธิบาย workflow: ingest, query, lint</td></tr><tr><td>7</td><td>Indexing and logging</td><td>ระบุ artifact สำคัญที่ช่วยให้ระบบทำงานต่อเนื่อง</td></tr><tr><td>8</td><td>Optional tools</td><td>เสนอเครื่องมือเสริมโดยไม่บังคับ</td></tr><tr><td>9</td><td>Tips and tricks</td><td>เก็บ practical notes จากประสบการณ์ใช้งานจริง</td></tr><tr><td>10</td><td>Why this works</td><td>อธิบายเหตุผลเชิงระบบว่าทำไม LLM เหมาะกับงานนี้</td></tr><tr><td>11</td><td>Note</td><td>ปิดท้ายด้วยขอบเขตและวิธีนำไป adapt</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">สิ่งที่น่าสนใจคือมันไม่ได้เป็น spec แบบ sequence เดียวจาก requirement ไป design ไป implementation แต่เป็น “idea file” ที่ค่อยๆ เพิ่มระดับความชัดจาก concept ไปสู่ architecture และ operation</p>



<h2 class="wp-block-heading">Pattern ใหญ่: Context ก่อน Requirement</h2>



<p class="wp-block-paragraph">ถ้าเขียน requirement แบบเดิม เราอาจเริ่มด้วยประโยคประมาณนี้</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ระบบต้องสามารถ ingest เอกสาร, สร้าง wiki page, update index และตอบคำถามจาก wiki ได้</p>
</blockquote>



<p class="wp-block-paragraph">ประโยคนี้ไม่ได้ผิด แต่สำหรับ AI มันยังเปิดช่องให้เดาเยอะมาก เพราะยังไม่รู้ว่า ingest เพื่ออะไร, wiki ต่างจาก raw source อย่างไร, index สำคัญแค่ไหน, และใครเป็นเจ้าของ layer ไหน</p>



<p class="wp-block-paragraph">เอกสารของ Karpathy ทำอีกแบบ คือให้ context ก่อน แล้ว requirement ค่อยโผล่ออกมาจาก context นั้น เช่นเมื่อเขาบอกว่า raw sources เป็น immutable และเป็น source of truth ส่วน wiki เป็น LLM-generated markdown ที่ LLM owns entirely เราจะเริ่มเข้าใจ rule ตามมาทันทีว่า AI อ่าน raw ได้แต่ไม่ควรแก้ raw, AI แก้ wiki ได้, schema เป็นตัวกำกับ behavior</p>



<p class="wp-block-paragraph">นี่คือหัวใจของ context engineering ครับ ไม่ใช่ยัด requirement เยอะๆ แต่จัดบริบทให้ AI เห็น mental model ที่ถูกก่อน</p>



<h2 class="wp-block-heading">โครงภาษาที่ทำให้มนุษย์อ่านง่าย</h2>



<p class="wp-block-paragraph">ในเชิงภาษาศาสตร์ เอกสารนี้มีหลายอย่างที่ทำให้อ่านง่ายมาก แม้จะเป็นเรื่องค่อนข้าง technical</p>



<h3 class="wp-block-heading">1. ใช้ contrast ชัดเจน</h3>



<p class="wp-block-paragraph">เขาใช้คู่ตรงข้ามซ้ำๆ เช่น RAG แบบเดิมกับ wiki แบบใหม่, raw sources กับ wiki, human กับ LLM, index กับ log, required core กับ optional tools วิธีนี้ช่วยให้ผู้อ่านสร้างแผนที่ในหัวได้เร็ว</p>



<h3 class="wp-block-heading">2. ใช้ sentence ที่มี thesis ชัด</h3>



<p class="wp-block-paragraph">หลายย่อหน้ามีประโยคแกนกลางที่จับใจความได้ทันที เช่น “the wiki is a persistent, compounding artifact” หรือ “Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase.” ประโยคแบบนี้ทำให้ idea จำง่ายและ quote ได้</p>



<h3 class="wp-block-heading">3. ใช้ metaphor ที่แม่น</h3>



<p class="wp-block-paragraph">การเปรียบ Obsidian เป็น IDE, LLM เป็น programmer และ wiki เป็น codebase ช่วยย้ายเรื่อง knowledge management ที่อาจ abstract ให้กลายเป็นภาพที่ developer เข้าใจทันที</p>



<h3 class="wp-block-heading">4. ใช้ bullet เพื่อเปิดพื้นที่ของ domain</h3>



<p class="wp-block-paragraph">แทนที่จะอธิบาย use case ยาวๆ เขาใช้ bullet list เช่น personal, research, reading a book, business/team, competitive analysis วิธีนี้ทำให้คนอ่าน map เข้ากับชีวิตตัวเองได้เร็ว</p>



<h3 class="wp-block-heading">5. ใช้คำกริยาเชิง operation</h3>



<p class="wp-block-paragraph">คำอย่าง ingest, query, lint, update, maintain, file back, append, cross-reference เป็นภาษาที่มนุษย์อ่านแล้วเห็น workflow และ AI อ่านแล้วแปลงเป็น action ได้ง่าย</p>



<h2 class="wp-block-heading">โครงสร้างแบบ Requirement + Context Engineering</h2>



<p class="wp-block-paragraph">ถ้ามองในมุม requirement engineering เอกสารนี้มีองค์ประกอบที่ครบกว่าที่เห็นตอนอ่านผ่านๆ ครับ</p>



<figure class="wp-block-table"><table><thead><tr><th>องค์ประกอบ</th><th>มีในเอกสารอย่างไร</th><th>ประโยชน์กับ AI</th></tr></thead><tbody><tr><td>Purpose</td><td>สร้าง personal knowledge base ด้วย LLM</td><td>รู้ goal ใหญ่</td></tr><tr><td>Problem statement</td><td>RAG ต้อง rediscover knowledge ทุกครั้ง</td><td>รู้ว่าต้อง optimize อะไร</td></tr><tr><td>Core concept</td><td>Persistent, compounding wiki</td><td>รู้ object ที่ต้องรักษา</td></tr><tr><td>Domain examples</td><td>personal, research, business, trip planning</td><td>รู้ว่า pattern ใช้ได้กว้าง</td></tr><tr><td>Architecture</td><td>raw sources, wiki, schema</td><td>รู้ boundaries และ ownership</td></tr><tr><td>Operations</td><td>ingest, query, lint</td><td>รู้ workflow หลัก</td></tr><tr><td>Artifacts</td><td>index.md, log.md</td><td>รู้ไฟล์ที่ต้อง maintain</td></tr><tr><td>Optionality</td><td>tools, Obsidian, Marp, Dataview เป็น optional</td><td>รู้ว่าอะไร core อะไรปรับได้</td></tr><tr><td>Rationale</td><td>LLM ไม่เบื่อ bookkeeping</td><td>เข้าใจว่าทำไม solution นี้เหมาะ</td></tr><tr><td>Adaptation note</td><td>รายละเอียดขึ้นกับ domain และ preference</td><td>ไม่ overfit กับ implementation เดียว</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">สำหรับ AI นี่คือ context ที่ดีมาก เพราะไม่ได้บอกแค่ output ที่ต้องการ แต่บอก ontology ของระบบด้วยว่ามี object อะไรบ้าง, object แต่ละตัวสัมพันธ์กันอย่างไร, operation หลักคืออะไร, และอะไรเป็น optional</p>



<h2 class="wp-block-heading">สิ่งที่ทำให้ AI เอาไป implement ได้</h2>



<p class="wp-block-paragraph">เอกสารนี้ไม่ได้ให้ code แต่ AI เอาไป implement ต่อได้ เพราะมันให้ constraint ที่สำคัญครบครับ</p>



<ul class="wp-block-list">
<li><strong>มี layer ชัด</strong> raw sources, wiki, schema ทำให้ AI รู้ว่าจะสร้าง folder และไฟล์ประเภทไหน</li>



<li><strong>มี ownership ชัด</strong> raw immutable, wiki LLM-generated, schema co-evolved</li>



<li><strong>มี workflow verbs</strong> ingest, query, lint เอาไปแตกเป็น command หรือ task ได้</li>



<li><strong>มี artifact names</strong> index.md และ log.md ทำให้ implement ได้ทันที</li>



<li><strong>มี health check criteria</strong> contradictions, stale claims, orphan pages, missing cross-references</li>



<li><strong>มี adaptation boundary</strong> บอกว่า abstract และ modular จึงไม่บังคับ implementation เดียว</li>
</ul>



<p class="wp-block-paragraph">ถ้า AI อ่านเอกสารนี้แล้วต้องสร้างระบบ มันสามารถ infer ต่อได้ค่อนข้างดีว่าต้องมี directory เช่น raw, wiki, schema, index, log และ workflow สำหรับ ingest/query/lint แม้เอกสารจะไม่ได้ specify exact command ทุกอย่าง</p>



<h2 class="wp-block-heading">สูตรการเขียนแบบนี้</h2>



<p class="wp-block-paragraph">ถ้าผมจะสรุปเป็นสูตรสำหรับเขียน requirement ที่คนอ่านเข้าใจและ AI เอาไปทำต่อได้ ผมจะใช้โครงนี้ครับ</p>



<pre class="wp-block-code"><code># Title
One-line description

## Intent
เอกสารนี้ใช้เพื่ออะไร ใครเป็นผู้อ่าน มนุษย์หรือ AI หรือทั้งคู่

## The problem
โลกเดิมทำงานอย่างไร และติดปัญหาอะไร

## The core idea
แนวคิดใหม่คืออะไร ต่างจากเดิมอย่างไร

## Examples / use cases
ใช้กับสถานการณ์ไหนได้บ้าง

## Architecture
มี layer, object, actor, ownership อะไรบ้าง

## Operations
workflow หลักคืออะไร เช่น create, ingest, update, query, lint, approve

## Artifacts
ไฟล์ ตาราง log index หรือ output ที่ต้องมีคืออะไร

## Rules and constraints
อะไรทำได้ อะไรห้ามทำ อะไรต้องขอ approval

## Optional tools
อะไรเป็นตัวช่วย แต่ไม่ใช่ core requirement

## Why this works
ทำไมแนวทางนี้ถึงเหมาะ

## Adaptation note
อะไรต้องปรับตาม domain และอะไรควรคงไว้</code></pre>



<p class="wp-block-paragraph">โครงนี้ไม่จำเป็นต้องใช้ทุก section ทุกครั้ง แต่ถ้าเป็นงานที่ต้องให้ทั้งคนและ AI เข้าใจร่วมกัน ผมว่ามันเป็น template ที่ดีมาก</p>



<h2 class="wp-block-heading">ตัวอย่าง rewrite requirement แบบเดิมให้เป็นสไตล์นี้</h2>



<p class="wp-block-paragraph">ลองดู requirement แบบสั้นที่ยังไม่ค่อยมี context ก่อน</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ระบบต้องบันทึก requirement และสร้าง traceability ระหว่าง requirement, API, database และ test case</p>
</blockquote>



<p class="wp-block-paragraph">ถ้าเขียนแบบ context-first อาจเปลี่ยนเป็นประมาณนี้</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ทีมเรามีปัญหาว่า requirement, API, database change และ test case กระจายอยู่คนละที่ เวลามี change ใหม่ เรามักไม่รู้ว่าต้องแก้ endpoint ไหน table ไหน และ test ไหนตามไปด้วย แนวคิดของระบบนี้คือสร้าง requirement knowledge graph ที่เก็บ change เป็นแกนกลาง แล้วเชื่อม requirement, UX, API, table, field, test และ approval เข้าด้วยกัน เพื่อให้ทั้งคนและ AI ตรวจ impact ได้ก่อนเริ่ม implement</p>
</blockquote>



<p class="wp-block-paragraph">แบบหลังยาวกว่า แต่ AI เข้าใจมากกว่าเยอะ เพราะมันเห็น problem, object, relation และ goal ของระบบพร้อมกัน ไม่ใช่แค่เห็น feature ที่ต้องทำ</p>



<h2 class="wp-block-heading">Checklist ก่อนส่งเอกสารให้ AI implement</h2>



<p class="wp-block-paragraph">เวลาผมจะเขียนเอกสารแนวนี้ ผมน่าจะใช้ checklist นี้เช็กตัวเองครับ</p>



<ul class="wp-block-list">
<li>คนอ่านรู้ไหมว่าปัญหาเดิมคืออะไร</li>



<li>มีประโยค core idea ที่จำได้ใน 1-2 บรรทัดไหม</li>



<li>มี actor และ ownership ชัดไหม</li>



<li>มี layer หรือ entity หลักครบไหม</li>



<li>มี operation verbs ที่ AI แปลงเป็น task ได้ไหม</li>



<li>มี artifact ชัดไหม เช่น file, index, log, schema, report</li>



<li>มี rule ว่าอะไรห้ามแก้ หรืออะไรต้องขอ approval ไหม</li>



<li>มีตัวอย่าง use case ให้มนุษย์เห็นภาพไหม</li>



<li>มี note ว่าอะไร optional และอะไร core ไหม</li>



<li>อ่านแล้วคนเข้าใจโดยไม่ต้องถามเพิ่ม และ AI มี context พอจะเริ่ม plan ได้ไหม</li>
</ul>



<h2 class="wp-block-heading">สรุป</h2>



<p class="wp-block-paragraph">สิ่งที่ผมชอบในเอกสาร LLM Wiki ของ Karpathy คือมันอยู่ตรงกลางระหว่าง essay กับ spec ครับ มันไม่ได้แข็งแบบ requirement document เต็มรูปแบบ แต่ก็ไม่ได้เป็นบทความเล่าไอเดียลอยๆ</p>



<p class="wp-block-paragraph">มันเขียนให้มนุษย์เข้าใจผ่าน problem, contrast, metaphor และตัวอย่าง แต่ในขณะเดียวกันก็ใส่ architecture, operation, artifact และ constraint พอให้ AI agent เอาไป instantiate ต่อได้</p>



<p class="wp-block-paragraph">ถ้าต้องเขียน requirement ในยุคที่ AI เป็นคนช่วย implement ผมว่าเราอาจต้องเขียนเอกสารแบบนี้มากขึ้น คือไม่ใช่แค่ “ระบบต้องทำอะไร” แต่ต้องเขียนให้เห็นว่า “โลกนี้ทำงานอย่างไร, ปัญหาอยู่ตรงไหน, object สำคัญคืออะไร, ใครเป็นเจ้าของอะไร, workflow ควรไหลอย่างไร, และอะไรคือกติกาที่ห้ามหลุด”</p>



<p class="wp-block-paragraph">พูดอีกแบบคือ requirement ที่ดีสำหรับ AI ไม่ใช่ requirement ที่ละเอียดที่สุดเสมอไป แต่คือ requirement ที่จัด context ได้ถูกที่สุดครับ</p>



<h2 class="wp-block-heading">แหล่งอ้างอิง</h2>



<ul class="wp-block-list">
<li><a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" target="_blank" rel="noreferrer noopener">Andrej Karpathy: LLM Wiki gist</a></li>



<li><a href="https://gist.githubusercontent.com/karpathy/442a6bf555914893e9891c11519de94f/raw" target="_blank" rel="noreferrer noopener">Raw text version of the LLM Wiki gist</a></li>



<li><a href="https://news.ycombinator.com/item?id=47963913" target="_blank" rel="noreferrer noopener">Hacker News discussion: Karpathy LLM Wiki gist</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7879/karpathy-llm-wiki-requirement-context-engineering/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Working Agreement กับ AI: กติกาเล็กๆ ที่ทำให้ Coding Agent ไม่หลุดทาง</title>
		<link>https://myifew.com/7871/working-agreement-with-ai/</link>
					<comments>https://myifew.com/7871/working-agreement-with-ai/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Fri, 24 Jul 2026 07:38:34 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Agent]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[Working Agreement]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7871</guid>

					<description><![CDATA[ทำไมทีมที่ใช้ AI coding agent ควรมีกติกาการทำงานร่วมกัน เช่น test ก่อน push, create issue หลังตกลง plan และห้าม merge dev โดยไม่ขอ approve]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ผมใช้ AI มาพักใหญ่ๆ แล้วเริ่มรู้สึกว่ามีเรื่องหนึ่งที่ตอนแรกดูเหมือนเล็ก แต่พอใช้งานจริงไปเรื่อยๆ กลับสำคัญมาก คือการมี <strong>Working Agreement กับ AI</strong> หรือข้อตกลงวิธีทำงานร่วมกันระหว่างเรากับ AI</p>



<p class="wp-block-paragraph">ช่วงแรกๆ ผมก็สั่งเป็นรอบๆ ไปเหมือนกันครับ วันนี้ให้ช่วยแก้ bug พรุ่งนี้ให้ช่วย refactor อีกวันให้ช่วยเขียน test แต่พอใช้ไปนานๆ จะเริ่มเห็น pattern ว่า หลายเรื่องเราสั่งซ้ำๆ อยู่ตลอด เช่น ก่อน push ต้อง test ก่อน, ถ้าตกลง plan แล้วให้ create task เป็น issue, ห้าม merge dev เอง ต้องขอ approve ก่อน</p>



<p class="wp-block-paragraph">จนวันหนึ่งผมสังเกตน้องในทีมใช้งาน AI แล้วไม่ได้คุยเรื่องข้อตกลงกันก่อน ผลคือ AI ทำบ้างไม่ทำบ้าง บางรอบจำได้ บางรอบลืม พอปิด session ก็เหมือนต้องเริ่มใหม่ ทั้งที่ขั้นตอนส่วนใหญ่เป็นเรื่องเดิมๆ นั่นแหละครับ</p>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้เป็นงานเขียนร่วมกันระหว่างผมกับ AI agent โดยอิงจากประสบการณ์ใช้งานจริงของผมเอง ส่วนข้อมูลเชิงอ้างอิงนำมาประกอบจากเอกสารและแหล่งที่มาที่ลิงก์ไว้ท้ายบทความ</em></p>




<span id="more-7871"></span>




<h2 class="wp-block-heading">Working Agreement กับ AI คืออะไร</h2>



<p class="wp-block-paragraph">ถ้าแปลตรงตัว Working Agreement คือข้อตกลงในการทำงานร่วมกัน ในทีมคน เราอาจตกลงกันว่า pull request ต้องมี review, ต้องเขียน test, ห้าม push เข้า main ตรงๆ หรือถ้างานใหญ่ต้องแตก task ก่อนทำ</p>



<p class="wp-block-paragraph">พอมาเป็น AI coding agent แนวคิดเดียวกันก็ใช้ได้ครับ เพียงแต่คู่สนทนาของเราเป็น AI ที่อ่าน instruction แล้วพยายามทำตาม ถ้าเราไม่เขียนกติกาไว้ให้ชัด มันก็จะใช้ default behavior ของตัวเอง หรือเดาจาก prompt รอบนั้นๆ</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Working Agreement กับ AI คือการเปลี่ยนสิ่งที่เราต้องสั่งซ้ำทุกวัน ให้กลายเป็นกติกาประจำโปรเจกต์</p></blockquote>



<p class="wp-block-paragraph">สำหรับผม มันไม่ใช่เรื่องสวยหรูหรือ process หนักๆ แต่เป็น trick เล็กๆ ที่ช่วยลดการหลุด ลดการลืม และทำให้ AI ทำงานใกล้เคียงกับวิธีที่ทีมต้องการมากขึ้น</p>



<h2 class="wp-block-heading">ทำไมสั่งเป็นรอบๆ แล้ว AI ถึงหลุดง่าย</h2>



<p class="wp-block-paragraph">AI เก่งขึ้นมากก็จริง แต่การคุยแบบ chat มีข้อจำกัดตามธรรมชาติอยู่ครับ เช่น context ยาวขึ้นเรื่อยๆ, session ถูกปิด, prompt รอบใหม่ไม่เหมือนรอบเดิม หรือบางคำสั่งถูกกลืนไปกับรายละเอียดอื่น</p>



<p class="wp-block-paragraph">ถ้าเราบอกแค่รอบนี้ว่า “ช่วยแก้ให้แล้ว test ด้วยนะ” AI ก็อาจทำตามในรอบนี้ แต่ไม่ได้แปลว่ารอบหน้ามันจะจำได้ว่า project นี้ต้อง test ก่อน push เสมอ หรือห้าม merge เองทุกครั้ง</p>



<p class="wp-block-paragraph">เอกสารของ <strong>Claude Code</strong> มีแนวคิดเรื่อง memory files เช่น <code>CLAUDE.md</code> ที่ใช้เก็บ project instructions และบอกด้วยว่าสามารถใช้คำสั่ง <code>/init</code> เพื่อสร้างไฟล์เริ่มต้นจาก project ได้ ส่วน <strong>OpenAI Codex</strong> ก็มีแนวทางใช้ <code>AGENTS.md</code> เพื่อให้ coding agent รู้กติกา repo เช่น setup, test และ convention ของโปรเจกต์</p>



<p class="wp-block-paragraph">พอผมเห็นแนวทางนี้แล้ว มันทำให้คิดง่ายขึ้นว่า เราไม่ควรเอากติกาประจำโปรเจกต์ไปซ่อนอยู่ใน chat ชั่วคราว แต่ควรยกมันขึ้นมาเป็นไฟล์หรือ instruction ที่ AI อ่านซ้ำได้ทุกครั้ง</p>



<h2 class="wp-block-heading">เริ่มง่ายสุด: init project แล้วเขียนกติกาไว้</h2>



<p class="wp-block-paragraph">วิธีที่ง่ายที่สุดสำหรับคนใช้ Claude Code คือเริ่มจาก <code>/init</code> เพื่อให้ Claude อ่าน repo แล้วสร้าง <code>CLAUDE.md</code> เป็น project memory ตั้งต้นก่อน จากนั้นค่อยเติม Working Agreement ของทีมลงไป</p>



<pre class="wp-block-code"><code>/init</code></pre>



<p class="wp-block-paragraph">สำหรับเครื่องมืออื่น แนวคิดเหมือนกันครับ เช่น Codex ใช้ <code>AGENTS.md</code>, บางทีมใช้ <code>.cursorrules</code>, บางทีมใช้ project instructions หรือ docs เฉพาะของตัวเอง ชื่อไฟล์อาจต่างกัน แต่หน้าที่คล้ายกัน คือบอก AI ว่า “โปรเจกต์นี้ทำงานกันแบบนี้นะ”</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>อย่าปล่อยให้ rule สำคัญอยู่ในหัวคน หรืออยู่ใน chat รอบเดียว ถ้ามันเป็นกติกาซ้ำๆ ให้เขียนลง project instruction</p></blockquote>



<h2 class="wp-block-heading">ควรเขียน Working Agreement อะไรไว้บ้าง</h2>



<p class="wp-block-paragraph">จากที่ผมใช้มา กติกาที่ควรเขียนไว้ไม่จำเป็นต้องเยอะมาก แต่ควรครอบคลุมจุดที่ถ้า AI หลุดแล้วจะกระทบ workflow หรือทำให้ทีมเสียเวลา</p>



<figure class="wp-block-table"><table><thead><tr><th>หมวด</th><th>ตัวอย่างข้อตกลง</th><th>ทำไมสำคัญ</th></tr></thead><tbody><tr><td>Safety</td><td>ห้าม merge dev/main อัตโนมัติ ต้องขอ approve ก่อน</td><td>กัน side effect ที่กระทบ repo จริง</td></tr><tr><td>Testing</td><td>ก่อน push ต้องรัน test ที่เกี่ยวข้อง และรายงานผลจริง</td><td>ลด bug จาก patch ที่ยังไม่ verify</td></tr><tr><td>Task management</td><td>หลังตกลง plan แล้วให้ create issue/task เสมอ</td><td>กันงานหายและทำให้ทีมตามต่อได้</td></tr><tr><td>Code change</td><td>แก้แบบ minimal diff ไม่ rewrite ทั้งไฟล์ถ้าไม่จำเป็น</td><td>ลด regression และลด review cost</td></tr><tr><td>Communication</td><td>ถ้า scope ไม่ชัด ให้ถามก่อนแก้ส่วนที่เสี่ยง</td><td>กัน AI เดาแล้วแตะผิดจุด</td></tr><tr><td>Verification</td><td>ทุก final response ต้องบอกไฟล์ที่แก้และ command ที่รัน</td><td>ทำให้ตรวจสอบย้อนหลังได้</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">ตัวอย่าง CLAUDE.md / AGENTS.md แบบสั้น</h2>



<p class="wp-block-paragraph">ตัวอย่างนี้เป็นแนวทางที่ผมคิดว่าเริ่มใช้ได้ทันที แล้วค่อยปรับตามทีมครับ</p>



<pre class="wp-block-code"><code># AI Working Agreement

## Goal
ช่วยพัฒนา project นี้แบบปลอดภัย ตรวจสอบได้ และไม่ทำ side effect โดยไม่ขออนุญาต

## Before coding
- ถ้างานเกิน 1 ไฟล์ ให้เสนอ plan สั้นๆ ก่อนแก้
- ถ้า scope ไม่ชัด ให้ถามก่อน ไม่เดาเองในจุดเสี่ยง
- หลังตกลง plan แล้ว ให้สร้างหรืออัปเดต issue/task เสมอ

## Coding rules
- แก้แบบ minimal diff
- ห้าม rewrite ทั้งไฟล์ถ้าไม่จำเป็น
- ทำตาม style เดิมของ repo
- ถ้าเปลี่ยน behavior ต้องเพิ่มหรือแก้ test ที่เกี่ยวข้อง

## Verification
- ก่อนเสนอว่าเสร็จ ต้องรัน targeted test ที่เกี่ยวข้อง
- ถ้าแก้หลายส่วน ให้รัน lint/typecheck ตามที่เหมาะสม
- final response ต้องบอก command ที่รันและผลจริง

## Git safety
- ห้าม merge dev/main/master อัตโนมัติ
- ห้าม push โดยไม่ขอ approve
- ห้ามลบไฟล์หรือ migration สำคัญโดยไม่ถามก่อน

## Output
- สรุป changed files
- สรุป tests ที่รัน
- บอก risk หรือสิ่งที่ยังไม่ได้ verify</code></pre>



<p class="wp-block-paragraph">แค่นี้ก็ช่วยได้เยอะแล้วครับ เพราะมันเปลี่ยนจากการสั่งซ้ำทุกครั้ง เป็นข้อตกลงที่ AI อ่านก่อนเริ่มงาน</p>



<h2 class="wp-block-heading">Working Agreement ไม่ใช่ prompt ยาวๆ แต่คือ guardrail</h2>



<p class="wp-block-paragraph">จุดที่ต้องระวังคืออย่าเขียน instruction ยาวจนกลายเป็น manual ที่ไม่มีใครอ่าน ทั้งคนและ AI ควรเขียนให้สั้น ชัด และ actionable</p>



<ul class="wp-block-list"><li>เขียนเป็น bullet</li><li>แยกหมวดชัดเจน</li><li>ระบุ command ที่ต้องใช้จริง</li><li>แยกสิ่งที่ทำได้เอง กับสิ่งที่ต้องขอ approve</li><li>มี verification rule ทุกงาน</li></ul>



<p class="wp-block-paragraph">ผมชอบคิดว่ามันคือ guardrail ไม่ใช่ prompt สวยๆ หน้าที่ของมันคือกันไม่ให้ AI หลุดออกจากวิธีทำงานที่ทีมตกลงกันไว้</p>



<h2 class="wp-block-heading">แยกกติกาเป็น 3 ระดับ</h2>



<p class="wp-block-paragraph">ถ้าใช้จริงในทีม ผมแนะนำให้แยก rule เป็น 3 ระดับ จะดูแลง่ายกว่าเขียนทุกอย่างกองไว้ที่เดียว</p>



<figure class="wp-block-table"><table><thead><tr><th>ระดับ</th><th>ตัวอย่าง</th><th>ควรอยู่ที่ไหน</th></tr></thead><tbody><tr><td>Team rule</td><td>ห้าม merge เอง, ต้องขอ approve ก่อน push</td><td>global/team instruction</td></tr><tr><td>Project rule</td><td>วิธีรัน test, build, lint, naming convention</td><td>CLAUDE.md / AGENTS.md ใน repo</td></tr><tr><td>Task rule</td><td>งานนี้แก้เฉพาะ payment flow ห้ามแตะ auth</td><td>prompt หรือ issue ของงานนั้น</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">การแยกแบบนี้ช่วยให้ rule ที่ถาวรไม่ปนกับรายละเอียดงานชั่วคราว และช่วยลดโอกาสที่ AI จะเอา instruction เฉพาะ task ไปใช้ผิดบริบทในงานอื่น</p>



<h2 class="wp-block-heading">ตัวอย่าง rule ที่ผมว่าน่าใส่แทบทุก repo</h2>



<p class="wp-block-paragraph">ถ้าจะเริ่มแบบ practical ผมว่าสามารถ copy แนวนี้ไปปรับได้เลยครับ</p>



<ul class="wp-block-list"><li><strong>ต้อง search ก่อนอ่านไฟล์เยอะๆ</strong> เพื่อประหยัด token และลด noise</li><li><strong>ต้องอ่านไฟล์ที่เกี่ยวข้องจริงก่อน patch</strong> ห้ามเดา code จากชื่อไฟล์อย่างเดียว</li><li><strong>ต้องเสนอ plan ก่อนงานใหญ่</strong> โดยเฉพาะงานที่แตะหลาย module</li><li><strong>ต้องทำ minimal diff</strong> ถ้าไม่ได้สั่ง refactor ใหญ่</li><li><strong>ต้องรัน test ก่อนบอกว่าเสร็จ</strong> และรายงาน output จริง</li><li><strong>ห้าม push/merge/delete/migrate โดยไม่ขอ approve</strong></li><li><strong>ถ้า command fail ต้องรายงานตรงๆ</strong> ห้ามบอกว่าสำเร็จจากการเดา</li><li><strong>ถ้าเจอ requirement ใหม่ ให้บันทึกเป็น issue/task</strong> ไม่ปล่อยหายใน chat</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>AI ที่เก่งแต่ไม่มี working agreement จะทำงานเร็ว แต่ทีมอาจต้องเสียเวลาตามเก็บทีหลัง</p></blockquote>



<h2 class="wp-block-heading">ควรทบทวนกติกานี้เมื่อไร</h2>



<p class="wp-block-paragraph">Working Agreement ไม่ควรเขียนครั้งเดียวแล้วจบครับ เพราะวิธีทำงานของทีมเปลี่ยนได้ตลอด เครื่องมือ AI ก็เปลี่ยนเร็วมากเหมือนกัน</p>



<p class="wp-block-paragraph">ผมคิดว่าน่าทบทวนเมื่อมีเหตุการณ์พวกนี้</p>



<ul class="wp-block-list"><li>AI หลุด rule เดิมซ้ำๆ</li><li>ทีมเริ่มใช้ AI agent หลายตัวพร้อมกัน</li><li>มี incident จากการแก้ code โดยไม่ได้ verify</li><li>เปลี่ยน test command หรือ build pipeline</li><li>มีคนใหม่เข้าทีมแล้วใช้ AI ไม่เหมือนคนอื่น</li><li>เริ่มใช้เครื่องมือใหม่ เช่น Claude Code, Codex, Cursor หรือ Gemini CLI</li></ul>



<p class="wp-block-paragraph">พูดง่ายๆ คือถ้าเป็นบทเรียนที่ไม่อยากให้เกิดซ้ำ ให้ย้ายมันเข้า Working Agreement ครับ</p>



<h2 class="wp-block-heading">ข้อควรระวัง: อย่าเชื่อว่าเขียน rule แล้ว AI จะไม่พลาดอีกเลย</h2>



<p class="wp-block-paragraph">การมี Working Agreement ช่วยได้มาก แต่ไม่ได้ทำให้ AI กลายเป็นระบบ deterministic 100% ครับ เรายังต้องมี verification, test, review และ approval gate อยู่ดี</p>



<p class="wp-block-paragraph">โดยเฉพาะ rule ที่มีผลกับ production หรือ source control เช่น merge, push, deploy, migration, delete data อันนี้ไม่ควรปล่อยให้ AI ตัดสินใจเองจาก prompt อย่างเดียว ต้องมี human approval หรือ branch protection ช่วยล็อกอีกชั้น</p>



<p class="wp-block-paragraph">ผมมองว่า Working Agreement เป็นชั้นแรกที่ช่วยให้ AI ทำถูกทางมากขึ้น ส่วน test, CI, review และ approval เป็นชั้นถัดมาที่ช่วยจับความผิดพลาดก่อนกระทบของจริง</p>



<h2 class="wp-block-heading">สรุป</h2>



<p class="wp-block-paragraph">หลังจากใช้ AI มาพักใหญ่ ผมเริ่มรู้สึกว่าเราไม่ควรมอง AI เป็นแค่ chatbot ที่สั่งทีละรอบ แต่ควรมองเป็นผู้ช่วยทำงานที่ต้องมี working agreement เหมือนสมาชิกทีมคนหนึ่ง</p>



<p class="wp-block-paragraph">ถ้ามีเรื่องที่เราต้องสั่งซ้ำๆ เช่น test ก่อน push, create issue หลังตกลง plan, ห้าม merge dev เอง หรือรายงานผล verify ทุกครั้ง ก็ไม่ควรปล่อยให้มันอยู่ในความทรงจำชั่วคราวของ session ครับ เขียนมันลง project instruction ไปเลย</p>



<p class="wp-block-paragraph">เริ่มจากเล็กๆ ก็พอ เช่นใช้ <code>/init</code> ใน Claude Code เพื่อสร้าง <code>CLAUDE.md</code> แล้วเติมกติกาของทีมลงไป หรือถ้าใช้ Codex ก็ทำ <code>AGENTS.md</code> ใน repo ให้ชัด แค่นี้ก็ช่วยลดการหลุด ลดการสั่งซ้ำ และทำให้ AI ทำงานเข้ากับทีมได้ดีขึ้นมากแล้วครับ</p>



<h2 class="wp-block-heading">แหล่งอ้างอิง</h2>



<ul class="wp-block-list"><li><a href="https://code.claude.com/docs/en/memory" target="_blank" rel="noreferrer noopener">Claude Code Docs: How Claude remembers your project</a></li><li><a href="https://developers.openai.com/codex/guides/agents-md" target="_blank" rel="noreferrer noopener">OpenAI Codex: Custom instructions with AGENTS.md</a></li><li><a href="https://agents.md/" target="_blank" rel="noreferrer noopener">AGENTS.md: open format for coding agent instructions</a></li><li><a href="https://www.augmentcode.com/guides/ai-agent-pre-merge-verification" target="_blank" rel="noreferrer noopener">Augment Code: AI Agent Pre-Merge Verification</a></li></ul>

]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7871/working-agreement-with-ai/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MaTamNud: ระบบนัดหมายช่วยโหวตหาวันว่างตรงกันของกลุ่มเพื่อน</title>
		<link>https://myifew.com/7865/matamnud-group-scheduling-poll-review/</link>
					<comments>https://myifew.com/7865/matamnud-group-scheduling-poll-review/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Fri, 24 Jul 2026 07:26:31 +0000</pubDate>
				<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Coding]]></category>
		<category><![CDATA[matamnud]]></category>
		<category><![CDATA[Vibe Coding]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7865</guid>

					<description><![CDATA[แนะนำ MaTamNud ระบบนัดหมายออนไลน์สำหรับสร้างนัด แชร์ลิงก์ ให้เพื่อนโหวตวันหรือช่วงเวลาที่ว่างตรงกัน เหมาะกับนัดกิน นัดเที่ยว จัดทริป และกิจกรรมกลุ่ม]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ผมมีปัญหาหนึ่งที่เจอบ่อยมาก เวลาเพื่อนๆ ในกลุ่มจะนัดกินข้าว นัดเที่ยว นัดดื่ม หรือจัดทริปกัน คือก่อนจะได้วันนัดจริง ต้องตบตีกันในแชตนานอยู่ ฮ่าๆ</p>



<p class="wp-block-paragraph">คนนี้ว่างเสาร์ อีกคนว่างอาทิตย์ คนนั้นว่างแค่ช่วงเย็น แฟนอีกคนอ่านแล้วลืมตอบ สุดท้ายต้องมีใครสักคนรับบทเป็นเลขากลุ่ม ไล่ถาม ไถอ่าน คอยสรุป แล้วก็วนกลับมาถามซ้ำอีกทีว่า “ตกลงเอาวันไหนดี!” ฮ่าๆ</p>



<p class="wp-block-paragraph">ผมเลยทำเว็บเล็กๆ ชื่อ <strong>มาตามนัด (MaTamNud)</strong> ไว้ช่วยแก้ปัญหานี้แหละ (ใครอยู่ Gen Y คงคุ้นชื่อนี้ ฮ่าๆ) ไอเดียตรงไปตรงมาครับ แทนที่จะไล่ถามทีละคน ก็สร้างนัด แชร์ลิงก์ แล้วให้ทุกคนโหวตวันหรือช่วงเวลาที่ตัวเองว่าง จากนั้นค่อยดูพร้อมกันว่าวันไหนเวลาตรงกันที่สุด ไม่ต้องถาม ไม่ต้องย้อนแชตรวบรวมเพื่อมาสรุป ใครไม่ตอบ ก็ไม่มีชื่ออยู่ในนั้นแหละ ประจานกันไปเงียบๆ </p>



<p class="wp-block-paragraph">หากอยากลองเล่นเลย กดที่นี่ 👉 <a href="https://tamnud.com/" target="_blank" rel="noreferrer noopener"><strong>https://tamnud.com/</strong></a></p>



<ul class="wp-block-list">
<li>ใช้ฟรี (ขี้เกียจทำระบบเก็บตัง)</li>



<li>สร้างนัดแล้วแชร์ลิงก์ได้เลย</li>



<li>ใช้โหวตเป็นช่วงวันว่าง หรือโหวตเป็นเวลาก็ได้</li>



<li>เหมาะกับนัดกิน นัดเที่ยว ปาร์ตี้ สังสรรค์ จัดทริป หรือกิจกรรมกลุ่ม</li>



<li>ไม่เก็บข้อมูลใดๆ ใน Server ทั้งสิ้น (มีเก็บ profile ในอุปกรณ์ของผู้ใช้เท่านั้น เพื่อยืนยันว่าเป็นคนดีคนเดิม คนโหวตหรือคนสร้างนัด)</li>
</ul>



<p class="wp-block-paragraph">อ่ะ ใครอยากรู้รายละเอียดเพิ่มเติม ก็ไปอ่านกันต่อ&#8230;</p>



<span id="more-7865"></span>



<h2 class="wp-block-heading">เลือกได้ทั้งนัดเป็นวัน และนัดเป็นเวลา</h2>



<p class="wp-block-paragraph">จุดที่ผมอยากให้มีตั้งแต่แรกคือ ระบบไม่ควรจำกัดแค่การโหวต “วัน” อย่างเดียว เพราะในชีวิตจริง หลายครั้งวันเดียวกันแต่ว่างคนละช่วงเวลาก็มี</p>



<p class="wp-block-paragraph">MaTamNud เลยมีประเภทนัดให้เลือก 2 แบบ</p>



<ul class="wp-block-list">
<li><strong>นัดเป็นวัน</strong> เหมาะกับการเลือกวันแบบกว้างๆ เช่น เสาร์นี้ อาทิตย์หน้า หรือวันหยุดยาว</li>



<li><strong>นัดเป็นเวลา</strong> เหมาะกับนัดที่ต้องรู้ช่วงเวลาชัด เช่น 18:00, 19:30 หรือหลายช่วงเวลาในวันเดียวกัน</li>
</ul>



<p class="wp-block-paragraph">ในหน้า create นัด จะมีปฏิทินให้เลือกวัน และถ้าเลือกนัดเป็นเวลา ก็จะมีช่องเลือกเวลาเป็นชั่วโมงและนาที พร้อมปุ่มเพิ่มเวลาได้ ผมว่าอันนี้สำคัญ เพราะหลายงานไม่ได้ต้องการแค่ “วันไหนว่าง” แต่ต้องการรู้ว่า “ช่วงไหนที่ทุกคนชนกันน้อยที่สุด”</p>



<h2 class="wp-block-heading">วิธีใช้งานแบบเร็วๆ</h2>



<ol class="wp-block-list">
<li>เข้าเว็บ <a href="https://tamnud.com/" target="_blank" rel="noreferrer noopener">tamnud.com</a></li>



<li>กด <strong>สร้างนัดหมาย</strong></li>



<li>เลือกประเภทนัดว่าจะเป็นวันหรือเป็นเวลา</li>



<li>ใส่ชื่อนัด เช่น “กินข้าววันเกิด”, “ทริปเขาใหญ่”, “ดริ๊งที่อารีย์”</li>



<li>เลือกวันหรือช่วงเวลาที่อยากเสนอ</li>



<li>ตั้งค่าที่จำเป็น เช่น จำกัดจำนวนคน, ให้เพื่อนเสนอเวลาเองได้, กำหนดปิดโหวต หรือ timezone</li>



<li>แชร์ลิงก์หรือรหัสนัดหมายให้เพื่อน</li>



<li>ทุกคนเข้ามาโหวต แล้วผู้สร้างนัดค่อยเคาะวันที่ว่างตรงกันมากที่สุด</li>
</ol>



<h2 class="wp-block-heading">ฟีเจอร์เล็กๆ ที่ทำให้ใช้กับชีวิตจริงได้</h2>



<p class="wp-block-paragraph">จากที่ลองดูหน้าเว็บและ flow การสร้างนัด มีรายละเอียดบางอย่างที่ผมคิดว่าเหมาะกับการใช้งานจริงมาก</p>



<figure class="wp-block-table"><table><thead><tr><th>ฟีเจอร์</th><th>ใช้ทำอะไร</th><th>ทำไมถึงมีประโยชน์</th></tr></thead><tbody><tr><td>นัดเป็นวัน</td><td>ให้เพื่อนโหวตวันที่ว่าง</td><td>เหมาะกับนัดเที่ยว นัดกินข้าว ทริปสั้นๆ</td></tr><tr><td>นัดเป็นเวลา</td><td>ให้เลือกวันพร้อมเวลา</td><td>เหมาะกับนัดที่ต้องหาช่วงเวลาว่างตรงกัน</td></tr><tr><td>จำกัดจำนวนคน</td><td>กำหนดจำนวนผู้ร่วมได้</td><td>เหมาะกับโต๊ะอาหาร ห้องประชุม หรือกิจกรรมที่รับคนจำกัด</td></tr><tr><td>ให้เพื่อนเสนอเวลาเองได้</td><td>เปิดให้คนอื่นเพิ่มตัวเลือก</td><td>ไม่ต้องให้เจ้าของนัดคิดทุก slot เอง</td></tr><tr><td>กำหนดปิดโหวต</td><td>ตั้ง deadline การเลือกวัน</td><td>ช่วยกันไม่ให้นัดลากยาวจนลืม</td></tr><tr><td>Timezone</td><td>เลือกโซนเวลา เช่น Asia/Bangkok</td><td>ใช้ได้กับกลุ่มที่อาจอยู่คนละประเทศหรือคนละ timezone</td></tr><tr><td>หลายภาษา</td><td>หน้าเว็บมีตัวเลือกภาษาไทย อังกฤษ จีน เวียดนาม</td><td>เหมาะกับกลุ่มเพื่อนหรือทีมที่มีหลายภาษา</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">เหมาะกับใครบ้าง</h2>



<p class="wp-block-paragraph">ผมว่า MaTamNud เหมาะกับกลุ่มที่มีปัญหาแบบนี้ครับ</p>



<ul class="wp-block-list">
<li><strong>กลุ่มเพื่อนที่นัดกินข้าวบ่อย</strong> ไม่ต้องไล่ถามทีละคนว่าวันไหนว่าง</li>



<li><strong>แก๊งเที่ยวหรือเดินทาง</strong> เลือกวันจัดทริปได้ง่ายขึ้น</li>



<li><strong>กลุ่มปาร์ตี้หรือสังสรรค์</strong> เห็นวันว่างร่วมกันก่อนจองร้าน</li>



<li><strong>ทีมงานเล็กๆ</strong> ใช้หาช่วงประชุมแบบไม่ต้องเปิด calendar ซับซ้อน</li>



<li><strong>ครอบครัวหรือญาติๆ</strong> เวลานัดกินข้าว นัดรวมตัว หรือไปทำธุระด้วยกัน</li>
</ul>



<p class="wp-block-paragraph">โดยเฉพาะกลุ่มที่ไม่ได้อยู่ในระบบ calendar เดียวกัน เช่น เพื่อนคนละบริษัท ญาติคนละบ้าน หรือกลุ่มทริปที่มีคนใช้คนละ platform แบบนี้การส่งลิงก์โหวตง่ายๆ มัก practical กว่ามาก</p>



<h2 class="wp-block-heading">ต่างจากการถามในแชตยังไง</h2>



<p class="wp-block-paragraph">ถ้าถามในแชต ข้อมูลจะเป็นข้อความเรียงตามเวลา คนตอบก่อนอาจโดนข้อความใหม่กลบ คนตอบทีหลังอาจไม่ได้อ่านของคนก่อน และคนสรุปต้องเป็นคนเชื่อมทุกอย่างเอง</p>



<p class="wp-block-paragraph">แต่ถ้าใช้ระบบโหวต ทุกคนตอบลงที่เดียวกัน ตัวเลือกอยู่ในรูปแบบเดียวกัน และผลลัพธ์รวมอยู่หน้าเดียว พูดง่ายๆ คือเปลี่ยนจาก “บทสนทนา” ให้กลายเป็น “ข้อมูลที่ตัดสินใจร่วมกันได้”</p>



<figure class="wp-block-table"><table><thead><tr><th>วิธีเดิมในแชต</th><th>ใช้ MaTamNud</th></tr></thead><tbody><tr><td>ต้องไล่อ่านข้อความย้อนกลับ</td><td>ดูผลโหวตจากหน้าเดียว</td></tr><tr><td>มีคนต้องจดเอง</td><td>ระบบเก็บคำตอบไว้ให้</td></tr><tr><td>คำตอบกระจัดกระจาย</td><td>ทุกคนตอบในรูปแบบเดียวกัน</td></tr><tr><td>ลืมง่าย</td><td>แชร์ลิงก์กลับมาดูซ้ำได้</td></tr><tr><td>ยิ่งคนเยอะยิ่งวุ่น</td><td>ยิ่งคนเยอะยิ่งเห็นประโยชน์ของการรวมผล</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">สุดท้าย ในฐานะคนทำ</h2>



<p class="wp-block-paragraph">เหมือนตอนที่ผมทำ <a href="https://kaiten.myifew.com/" target="_blank" rel="noreferrer noopener">Kaiten Share Calculator</a> เพื่อแก้ปัญหาแยกบิลซูชิสายพาน ตัวระบบไม่ได้ซับซ้อนมาก แต่ตอบโจทย์สถานการณ์ที่เจอบ่อยจริงๆ และสะท้อนออกมาจากเพื่อนๆใน Internet เข้ามามากกว่าวันละ 500 page views</p>



<p class="wp-block-paragraph">MaTamNud ก็คล้ายกันครับ ผมไม่พยายามให้มันเป็น calendar หรือระบบ event ใหญ่โต อยากทำเล็กๆ ง่ายๆ แก้ปัญหาเฉพาะจุด คือ “ช่วยให้กลุ่มเห็นวันว่างร่วมกันเร็วขึ้น” ช่วยลดเวลาคุยวนๆ เรื่องวันนัด ซึ่งเป็นปัญหาที่หลายคนเจอแต่ปล่อยให้กลายเป็นความวุ่นวายประจำกลุ่ม</p>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7865/matamnud-group-scheduling-poll-review/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Open Knowledge Format ฟอร์แมตกลางของ Knowledge/Dataset สำหรับ AI จาก Google Cloud</title>
		<link>https://myifew.com/7843/open-knowledge-format-okf-llm-wiki/</link>
					<comments>https://myifew.com/7843/open-knowledge-format-okf-llm-wiki/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Tue, 21 Jul 2026 17:29:47 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Agent]]></category>
		<category><![CDATA[Data Analytics]]></category>
		<category><![CDATA[Google Cloud]]></category>
		<category><![CDATA[LLM Wiki]]></category>
		<category><![CDATA[OKF]]></category>
		<category><![CDATA[Open Knowledge Format]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7843</guid>

					<description><![CDATA[Open Knowledge Format (OKF) คือความพยายามของ Google Cloud ในการทำให้ LLM Wiki และคลังความรู้แบบ markdown กลายเป็น format กลางที่ AI agent และมนุษย์ใช้ร่วมกันได้]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ช่วงนี้ผมสนใจเรื่อง knowledge base สำหรับ AI agent มากขึ้น อาจจะต้องใช้ในเรื่องส่วนตัว และใช้เอาไปทำงานด้วย โดยเฉพาะปัญหาที่เอามาคิดว่า ถ้าองค์กรมีข้อมูล business condition, schema, document, changelog และเอกสารกระจัดกระจายอยู่เต็มไปหมด เราจะทำให้ AI เข้าใจ context เหล่านี้ได้อย่างไร</p>



<p class="wp-block-paragraph">หนึ่งในแนวคิดที่น่าสนใจคือ <strong>Open Knowledge Format</strong> หรือ OKF จาก Google Cloud ที่เพิ่งเผยแพร่เป็นบทความเมื่อ 13 มิ.ย. ที่ผ่านมานี่เองครับ ซึ่งผมมองว่าแก่นของมันไม่ใช่การสร้าง LLM Wiki ตัวใหม่ แบบของ Karpathy แต่คือการเสนอ <strong>ฟอร์แมตกลางสำหรับชุด </strong><strong> knowledge/context ให้ AI, agent, data catalog และเครื่องมืออื่นๆ อ่านร่วมกันได้</strong></p>



<span id="more-7843"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้ฟิวส์กับเอเจ้นชมพูช่วยกันเรียบเรียงจากเรื่อง <a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing">Introducing the Open Knowledge Format</a> ของ Google Cloud Blog ที่เล่าถึงหลักการและมุมมองการนำ OKF ไปใช้กับงาน AI / knowledge base</em></p>



<h2 class="wp-block-heading">สรุปสั้นๆ ก่อน: OKF คืออะไร</h2>



<p class="wp-block-paragraph">OKF หรือ <strong>Open Knowledge Format</strong> คือ รูปแบบ specification ที่ Google Cloud เสนอให้ใช้จัดเก็บ “knowledge” ให้อยู่ในรูปที่ทั้งคนและ AI อ่านได้ง่าย โดยใช้หลักการง่ายๆ และวิธีง่ายๆ  คือ:</p>



<ul class="wp-block-list">
<li>เก็บข้อมูลความรู้เป็น Markdown file</li>



<li>กำหนดรูปแบบด้วย YAML frontmatter</li>



<li>จัดการโครงสร้าง Directory structure</li>



<li>จัดทำ Markdown links หาเรื่องที่เกี่ยวข้อง</li>



<li>และมีไฟล์เสริมอย่าง <code>index.md</code> และ <code>log.md เพื่อบันทึกการทำงาน</code></li>
</ul>



<p class="wp-block-paragraph">ถ้าอธิบายแบบบ้านๆ OKF คือการบอกว่า “ถ้าเราจะส่ง knowledge ก้อนหนึ่งให้ AI หรือระบบอื่นเอาไปอ่านต่อ เราควรแพ็กมันเป็นไฟล์แบบไหนดี”</p>



<p class="wp-block-paragraph">และคำตอบของ Google คือ ไม่ต้องสร้างฐานข้อมูลใหม่ ไม่ต้องมี SDK เฉพาะ ไม่ต้องบีบอัดเป็น format แปลกๆ แต่ให้ใช้ markdown + YAML + link + folder แบบที่คนอ่านก็ได้ เครื่องอ่านก็ดี</p>



<p class="wp-block-paragraph">ถ้าสังเกตให้ดี  LLM Wiki ของ Karpathy ก็ใช้หลักการแบบนี้เช่นกัน แต่แค่มันไม่เคยมีใคร (แม้แต่ Andrej Karpathy) ออกมาบอกว่ามันเป็นสิ่งที่ดีหรือควรเป็นมาตรฐานนะ และคราวนี้ Google เลยออกมาบอกแทน ว่า เออ ทำแบบนี้ก็ดีแล้ว ง่ายๆ ได้ใจความ และขอเสนอเพิ่มเติมนิดหน่อยเพื่อให้มันดีขึ้น ประมาณนั้นครับ</p>



<h2 class="wp-block-heading">จุดที่ต้องแยกให้ชัด: OKF กับ LLM Wiki ไม่ใช่สิ่งเดียวกัน</h2>



<p class="wp-block-paragraph">เพื่อความกระจ่างขึ้น ขอชี้แจงเพิ่มเติมอีกนิดว่า OKF กับ LLM Wiki มีหน้าตาคล้ายกันมาก เพราะทั้งคู่ใช้ markdown, มี link, มี index, มี log และให้ AI อ่านความรู้ที่คนหรือ agent รวบรวมไว้ แต่บทบาทของสองอย่างนี้ไม่เหมือนกัน</p>



<p class="wp-block-paragraph">แต่พอคิดดีๆ แล้วมันคนละระดับกัน</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>LLM Wiki คือ แนวทางหรือระบบการสะสมความรู้ระยะยาว</strong><br><strong>OKF คือ ฟอร์แมตกลางสำหรับแลกเปลี่ยน knowledge/context บางชนิด</strong></p>
</blockquote>



<p class="wp-block-paragraph">พูดอีกแบบคือ LLM Wiki เป็นเหมือน “คลังความรู้ที่ AI ช่วยดูแล” ส่วน OKF เป็นเหมือน “กล่องมาตรฐานสำหรับแพ็กความรู้บางส่วนให้ส่งต่อได้” และเอาจริงๆ ส่วนตัวผมคิดว่า Google เน้นให้ใช้ในเชิงการเก็บชุดข้อมูล (dateset) และความสัมพันธ์ด้วยซ้ำ เดี๋ยวลองดูจากตัวอย่างด้านล่างได้</p>



<p class="wp-block-paragraph">ดังนั้น OKF ไม่ได้เกิดมาเพื่อแทน Notion, Obsidian, Wiki หรือ LLM Wiki ทั้งระบบ แต่มันเกิดมาเพื่อแก้ปัญหาว่า dateset หรือ knowledge ที่กระจัดกระจายอยู่ตาม data catalog, schema, runbook, doc, wiki, notebook หรือในหัว senior engineer จะถูกแพ็กให้อยู่ในรูปที่ AI ใช้ได้อย่างไร</p>



<h2 class="wp-block-heading">ที่มาของ OKF: ปัญหาไม่ใช่ model ไม่เก่ง แต่ context กระจัดกระจาย</h2>



<p class="wp-block-paragraph">ในบทความ Google Cloud เขาเปิดด้วยประเด็นที่ผมเห็นด้วยมาก คือ foundation model เก่งขึ้นเรื่อยๆ แต่พอใช้งานจริง โดยเฉพาะงานแบบ agentic system ปัญหามักไม่ใช่ model ทำไม่ได้ แต่เป็น model ไม่มี context ที่ถูกต้องพอ</p>



<p class="wp-block-paragraph">ตัวอย่างเช่น ถ้า AI agent ต้องตอบคำถามว่า “จะคำนวณ weekly active users จาก event stream ยังไง” มันไม่ได้ต้องการแค่ SQL syntax แต่มันต้องรู้หลายอย่างพร้อมกัน:</p>



<ul class="wp-block-list">
<li>table ไหนเก็บ event</li>



<li>field ไหนคือ user id จริง</li>



<li>business definition ของ active user คืออะไร</li>



<li>join กับ table ไหนได้บ้าง</li>



<li>metric นี้เคยเปลี่ยนนิยามหรือไม่</li>



<li>มี runbook หรือ caveat อะไร</li>



<li>ข้อมูลนี้ deprecated หรือยัง</li>
</ul>



<p class="wp-block-paragraph">ข้อมูลพวกนี้ในองค์กรจริงมักกระจายอยู่หลายที่มาก บางส่วนอยู่ใน data catalog บางส่วนอยู่ใน wiki บางส่วนอยู่ใน code comment บางส่วนอยู่ใน dashboard บางส่วนอยู่ใน ticket และบางส่วนอยู่ในหัวคน</p>



<p class="wp-block-paragraph">OKF จึงพยายามเสนอ format กลางให้ knowledge เหล่านี้กลายเป็นก้อนที่ส่งต่อได้ อ่านได้ และเชื่อมโยงกันได้</p>



<h2 class="wp-block-heading">ภาพที่เข้าใจง่าย: producer กับ consumer</h2>



<p class="wp-block-paragraph">ภาพที่เข้าใจง่ายคือ OKF คล้ายกับ NotebookLM, Notion หรือ Obsidian ที่ช่วงหลังเริ่มเชื่อม AI เข้ามาอ่านและสรุปเนื้อหา</p>



<p class="wp-block-paragraph">ประเด็นสำคัญคือโลกเริ่มแยกเป็นสองฝั่ง:</p>



<ul class="wp-block-list">
<li><strong>Producer</strong> คือ คนหรือระบบที่สร้างและเก็บ knowledge</li>



<li><strong>Consumer</strong> คือ AI, agent, app หรือเครื่องมือที่อ่าน knowledge นั้นไปใช้งานต่อ</li>
</ul>



<p class="wp-block-paragraph">ปัญหาคือแต่ละแอพมีวิธีเก็บของตัวเอง พอจะย้ายข้ามแอพหรือให้ agent คนละตัวอ่านร่วมกัน ก็ต้องแปลงไปแปลงมา ดังนั้น OKF จึงเข้ามาเสนอว่าอย่างน้อยเราควรมีฟอร์แมตไฟล์กลางที่ทุกฝ่ายเข้าใจร่วมกันได้</p>



<h2 class="wp-block-heading">OKF หน้าตาเป็นอย่างไร</h2>



<p class="wp-block-paragraph">Google บอกว่า OKF v0.1 แทน knowledge เป็น directory ของ markdown files ที่มี YAML frontmatter กำกับรูปแบบการเก็บ และข้อมูลแต่ละไฟล์คือ concept document หนึ่งเรื่อง</p>



<p class="wp-block-paragraph">ตัวอย่างแบบง่ายๆ อาจเป็นแบบนี้:</p>



<pre class="wp-block-code"><code>knowledge-bundle/
├── index.md
├── log.md
├── datasets/
│   └── ecommerce.md
├── tables/
│   ├── orders.md
│   └── customers.md
└── metrics/
    └── weekly-active-users.md</code></pre>



<p class="wp-block-paragraph">และในไฟล์หนึ่งอาจมี frontmatter ประมาณนี้:</p>



<pre class="wp-block-code"><code>---
type: table
title: orders
description: Orders table for ecommerce transactions
resource: bigquery://project.dataset.orders
tags: &#91;ecommerce, transaction, order]
timestamp: 2026-06-13
---

# orders

ตารางนี้เก็บ order transaction ของลูกค้า

## Important fields

| Field | Meaning |
|---|---|
| order_id | unique order identifier |
| customer_id | reference to customers |
| status | order lifecycle status |

## Relationships

- Join with &#91;customers](../tables/customers.md) by `customer_id`
- Used by &#91;weekly-active-users](../metrics/weekly-active-users.md)</code></pre>



<p class="wp-block-paragraph">สิ่งที่น่าสนใจคือ OKF ไม่ได้บังคับ schema ลึกมาก เขาบังคับพื้นฐานน้อยมาก โดย Google บอกว่าทุก concept ต้องมีอย่างน้อย <code>type</code> ส่วน field อื่นๆ เช่น <code>title</code>, <code>description</code>, <code>resource</code>, <code>tags</code>, <code>timestamp</code> เป็นส่วนที่ช่วยให้ query และ consume ได้ง่ายขึ้น</p>



<p class="wp-block-paragraph">จากตัวอย่าง ถ้าใครเป็นโปรแกรมเมอร์และทำเรื่อง database มาก่อน จะพอมองภาพออกได้ไม่ยาก</p>



<h2 class="wp-block-heading">สามหลักการสำคัญของ OKF</h2>



<h3 class="wp-block-heading">1. Minimally opinionated</h3>



<p class="wp-block-paragraph">OKF ไม่ได้พยายามบอกว่าองค์กรต้องมี type อะไรบ้าง หรือแต่ละไฟล์ต้องมี section อะไรบ้าง มันบอกแค่ขอมูลขั้นต่ำที่ทำให้ระบบอื่นอ่านได้ นี่เป็นจุดสำคัญ เพราะถ้ากำหนดมาตรฐานเป๊ะจนเกินไป เราก็อาจจะใช้ยากมาก</p>



<h3 class="wp-block-heading">2. Producer กับ Consumer แยกจากกัน</h3>



<p class="wp-block-paragraph">ความรู้ก้อนหนึ่งอาจถูกเขียนโดยคน, export จาก metadata catalog, generate จาก LLM, หรือสรุปจากเอกสารเดิม ส่วนคนอ่านอาจเป็น AI agent, search index, visualizer หรือระบบ catalog คนละตัวกัน OKF ทำหน้าที่เป็น contract ระหว่างสองฝั่งนี้</p>



<h3 class="wp-block-heading">3. Format ไม่ใช่ platform</h3>



<p class="wp-block-paragraph">OKF ไม่ผูกกับ Google Cloud, database, model provider หรือ agent framework ใดๆ สิ่งนี้สำคัญมาก เพราะถ้าจะเป็นฟอร์แมตกลางจริง มันต้องอ่านเขียนได้โดยไม่ต้องมีบัญชีเฉพาะหรือ SDK เฉพาะ</p>



<h2 class="wp-block-heading">แล้ว OKF เกี่ยวอะไรกับ LLM Wiki</h2>



<p class="wp-block-paragraph">ผมคิดว่า OKF เกี่ยวกับ LLM Wiki ในฐานะ “หยิบ pattern บางอย่างมา formalize” ไม่ใช่ “เอา LLM Wiki ทั้งระบบมาทำเป็นมาตรฐาน”</p>



<p class="wp-block-paragraph">LLM Wiki ของ Karpathy เน้นแนวคิดว่าเราควรให้ LLM ช่วย build knowledge base แบบสะสมไปเรื่อยๆ จาก source ต่างๆ แล้วเชื่อมโยงเป็น wiki ที่ query ได้ ไม่ต้อง RAG จากศูนย์ทุกครั้ง ผมเคยเขียนเรื่องนี้ไว้ในบทความ <a href="https://myifew.com/7636/llm-wiki-karpathy/" target="_blank" rel="noreferrer noopener">LLM Wiki: คลังความรู้ส่วนตัว ตามแบบฉบับของ Karpathy</a></p>



<p class="wp-block-paragraph">ส่วน OKF เอารูปแบบที่คล้ายกัน เช่น markdown, frontmatter, link, directory, index, log มาใช้เป็นฟอร์แมตกลางสำหรับ knowledge bundle โดยเฉพาะสำหรับเรื่อง metadata, data catalog, dataset context และความรู้ที่ต้องส่งต่อข้าม tool หรือข้าม agent</p>



<figure class="wp-block-table"><table><thead><tr><th></th><th>LLM Wiki</th><th>OKF</th></tr></thead><tbody><tr><td>หลักการ</td><td>แนวทางทำ knowledge base ที่ LLM ช่วยดูแล</td><td>ฟอร์แมตกลางสำหรับแพ็ก knowledge/context</td></tr><tr><td>เป้าหมาย</td><td>สะสม, สรุป, cross-link และ query ความรู้ระยะยาว</td><td>ทำให้ knowledge ส่งต่อและ consume ข้ามระบบได้</td></tr><tr><td>ขอบเขต</td><td>กว้างมาก ใช้กับบทความ, paper, notes, project memory, research ได้</td><td>เหมาะมากกับ metadata, dataset, schema, metric, runbook, catalog</td></tr><tr><td>หน่วยหลัก</td><td>wiki page / concept page / source summary</td><td>concept document ใน bundle</td></tr><tr><td>schema</td><td>ขึ้นกับ repo หรือทีมที่ออกแบบ</td><td>มีข้อมูลพื้นฐานขั้นต่ำ เช่น type และ frontmatter</td></tr><tr><td>คนสร้างและคนใช้</td><td>มักอยู่ใน workflow เดียวกัน เช่น agent ช่วย maintain wiki</td><td>producer และ consumer แยกกันชัดเจนกว่า</td></tr><tr><td>การนำไปใช้</td><td>ทำ second brain, research wiki, project knowledge, internal KB</td><td>ทำ exchange format สำหรับ data catalog, enrichment pipeline, AI agent context</td></tr><tr><td>สรุปสั้น</td><td>ระบบความรู้</td><td>ฟอร์แมตแลกเปลี่ยนความรู้ หรือแลกเปลี่ยน dataset</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">OKF เหมาะกับ knowledge แบบไหน</h2>



<p class="wp-block-paragraph">จากที่อ่าน ผมว่า use case ที่ตรงที่สุดของ OKF คือ knowledge ที่มีลักษณะ “เป็น context ให้ AI ใช้ reasoning ต่อ” โดยเฉพาะ knowledge ที่มาเป็นชุด data เช่น</p>



<ul class="wp-block-list">
<li>dataset description</li>



<li>table schema</li>



<li>field meaning</li>



<li>business metric definition</li>



<li>join path</li>



<li>runbook</li>



<li>API deprecation note</li>



<li>data lineage</li>



<li>usage guide ของ table หรือ report</li>



<li>context สำหรับ agent ที่ต้องทำงานกับข้อมูล</li>
</ul>



<p class="wp-block-paragraph">ตัวอย่างที่ Google ปล่อยมาก็ไปทางนี้ชัดเจน เช่น enrichment agent ที่เดิน BigQuery dataset แล้วร่าง OKF concept document สำหรับ table และ view จากนั้นใช้ LLM อีกส่วน ไปหา documentation มา enrich ด้วย citation, schema และ join path</p>



<p class="wp-block-paragraph">เขายังมี static HTML visualizer ที่เปลี่ยน OKF bundle เป็น graph view ได้ในไฟล์เดียว และมี sample bundle เช่น <a href="https://developers.google.com/analytics/bigquery/web-ecommerce-demo-dataset" target="_blank" rel="noreferrer noopener">GA4 e-commerce</a>, <a href="https://console.cloud.google.com/bigquery?ws=!1m4!1m3!3m2!1sbigquery-public-data!2sstackoverflow" target="_blank" rel="noreferrer noopener">Stack Overflow</a>, และ <a href="https://cloud.google.com/blog/topics/public-datasets/bitcoin-in-bigquery-blockchain-analytics-on-public-data?e=48754805">Bitcoin public datasets</a></p>



<h2 class="wp-block-heading">ตัวอย่างการใช้ในองค์กร</h2>



<p class="wp-block-paragraph">สมมติองค์กรมี data warehouse และมี table ชื่อ <code>orders</code>, <code>customers</code>, <code>events</code> อยู่แล้ว ปัญหาคือคนรู้จริงว่า table ไหนใช้ทำอะไรอาจมีไม่กี่คน และนิยาม business metric อาจอยู่กระจัดกระจาย</p>



<p class="wp-block-paragraph">ถ้าใช้แนว OKF เราอาจ export หรือเขียน knowledge bundle แบบนี้:</p>



<pre class="wp-block-code"><code>company-data-context/
├── index.md
├── log.md
├── datasets/
│   └── ecommerce.md
├── tables/
│   ├── orders.md
│   ├── customers.md
│   └── events.md
├── metrics/
│   ├── gross-merchandise-value.md
│   └── weekly-active-users.md
└── runbooks/
    └── data-quality-incident.md</code></pre>



<p class="wp-block-paragraph">พอ agent ต้องเขียน SQL, ตรวจ data quality, อธิบาย dashboard หรือช่วย analyst หา join path มันก็ไม่ได้อ่านแค่ schema ดิบ แต่ได้อ่าน business context ที่ curated แล้วด้วย</p>



<p class="wp-block-paragraph">นี่คือจุดที่ผมคิดว่า OKF มีประโยชน์มาก เพราะมันไม่ได้พยายามเป็น app ใหม่ แต่มันเป็น format ที่อยู่ตรงกลางระหว่าง data source, documentation, catalog และ AI agent</p>



<h2 class="wp-block-heading">ถ้าจะเอา OKF มาใช้กับ LLM Wiki ควรทำยังไง</h2>



<p class="wp-block-paragraph">ความเห็นผมตอนนี้คือ ไม่ควรเอา OKF ไปครอบ LLM Wiki ทั้งหมด แต่ควรใช้ OKF เป็น subset หรือ format สำหรับ knowledge บางกลุ่ม</p>



<p class="wp-block-paragraph">ตัวอย่างเช่น LLM Wiki ส่วนตัวหรือของทีมอาจมีหลายเรื่องมาก:</p>



<ul class="wp-block-list">
<li>บทความที่อ่าน</li>



<li>paper summary</li>



<li>project notes</li>



<li>decision log</li>



<li>people/company/entity</li>



<li>research synthesis</li>



<li>requirement spec</li>



<li>API/database/UX knowledge</li>
</ul>



<p class="wp-block-paragraph">ส่วนที่ควรทำให้ OKF-compatible อาจเป็นเฉพาะส่วนที่ต้องแลกเปลี่ยนกับระบบอื่น เช่น:</p>



<ul class="wp-block-list">
<li>dataset catalog</li>



<li>API catalog</li>



<li>data dictionary</li>



<li>business metric glossary</li>



<li>requirement knowledge graph</li>



<li>runbook ที่ agent ต้องใช้ทำงาน</li>
</ul>



<p class="wp-block-paragraph">พูดง่ายๆ คือ LLM Wiki เป็นระบบใหญ่ ส่วน OKF เป็น format ที่ช่วยให้บางส่วนของระบบใหญ่ส่งต่อได้ง่ายขึ้น</p>



<h2 class="wp-block-heading">แล้ว Requirement Spec Center ใช้แนวนี้ได้ไหม</h2>



<p class="wp-block-paragraph">ผมว่าตรงนี้น่าสนใจมาก เพราะช่วงนี้ผมกำลังคิดเรื่อง requirement/spec center ที่ให้ AI ช่วย maintain ความรู้ของระบบ เช่น product, change, API, database, table, field, UX/UI, test case, approval และ release</p>



<p class="wp-block-paragraph">สำหรับงานแบบนี้ ผมไม่คิดว่า OKF คือคำตอบทั้งหมด แต่แนวคิด OKF เอามาใช้ได้เยอะมาก โดยเฉพาะการทำให้แต่ละ entity เป็น markdown file ที่มี frontmatter และ link ถึงกัน</p>



<p class="wp-block-paragraph">เช่น change หนึ่งอาจเชื่อมไปหา API, table, field, UX screen, test case และ approval record:</p>



<pre class="wp-block-code"><code>product-change-kb/
├── changes/
│   └── HOME-25Q3-FEA-01.md
├── apis/
│   └── API-HOME-POST-BOOKINGS.md
├── databases/
│   └── HOME/tables/bookings.md
├── ux-ui/
│   └── HOME/booking-form.md
└── tests/
    └── HOME-25Q3-FEA-01-test-case.md</code></pre>



<p class="wp-block-paragraph">สิ่งนี้ไม่ใช่ OKF ตาม Google ตรงๆ ทั้งหมด แต่มันใช้แนวเดียวกัน คือ knowledge เป็น file, มี metadata, มี link, มี graph และ AI อ่านความสัมพันธ์ได้</p>



<p class="wp-block-paragraph">และจากที่ผมเอา LLM Wiki มาดัดแปลงเพื่อลองทำ Requirement Spec Center ก็พบว่าคล้ายกับสิ่งที่ OKF กำหนดมาก แต่ก็ยังพบว่าต้องปรับอะไรอีกหลายอย่าง ถ้าจะใช้งานจริงๆ ซึ่ง OKF พอมาเสริมไอเดียได้</p>



<h2 class="wp-block-heading">ความเห็นส่วนตัวของผม</h2>



<p class="wp-block-paragraph">สิ่งที่ทำให้ OKF น่าสนใจไม่ใช่เพราะมันมีเทคนิคซับซ้อน แต่เพราะมันเรียบง่ายมากจนมีโอกาสถูกใช้จริง</p>



<p class="wp-block-paragraph">โลก AI ตอนนี้มีปัญหาใหญ่คือทุกคนพยายามสร้าง agent แต่ context ที่ agent ต้องใช้กลับกระจัดกระจายและไม่ portable เท่าไร ถ้าแต่ละองค์กรเริ่มมีวิธีแพ็ก context เป็น markdown bundle ที่มี metadata และ link ชัดเจน AI จะทำงานกับ knowledge ได้ดีขึ้นมาก</p>



<p class="wp-block-paragraph">แต่ผมก็ยังคิดว่า OKF v0.1 ยังเป็นจุดเริ่มต้นมากๆ ต้องดูต่อว่าจะมี tool, producer, consumer และ adoption จริงแค่ไหน โดยเฉพาะนอก Google Cloud</p>



<p class="wp-block-paragraph">สำหรับผม takeaway ที่สำคัญที่สุดคือ:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>OKF ไม่ได้มาแทน LLM Wiki แต่มาช่วยให้ knowledge บางส่วนของ LLM Wiki หรือ data catalog ถูกแลกเปลี่ยนและใช้งานโดย AI ได้ง่ายขึ้น</strong></p>
</blockquote>



<p class="wp-block-paragraph">ถ้าจะใช้จริง ผมจะเริ่มจาก use case ที่ชัดก่อน เช่น data dictionary, metric glossary, API catalog หรือ requirement traceability แล้วค่อยดูว่าควร เชื่อมโยงกันอย่างไร และนำไปปลั๊กกับ AI อย่างไรต่อ</p>



<h2 class="wp-block-heading">แหล่งอ้างอิง</h2>



<ul class="wp-block-list">
<li><a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing" target="_blank" rel="noreferrer noopener">Google Cloud: How the Open Knowledge Format can improve data sharing</a></li>



<li><a href="https://www.blognone.com/node/150909" target="_blank" rel="noreferrer noopener">Blognone: กูเกิลเปิดตัว Open Knowledge Format (OKF)</a></li>



<li><a href="https://www.facebook.com/peesamac/posts/google-%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%87%E0%B8%9B%E0%B8%A5%E0%B9%88%E0%B8%AD%E0%B8%A2%E0%B8%A1%E0%B8%B2%E0%B8%95%E0%B8%A3%E0%B8%90%E0%B8%B2%E0%B8%99%E0%B9%83%E0%B8%AB%E0%B8%A1%E0%B9%88%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%8A%E0%B8%B7%E0%B9%88%E0%B8%AD-open-knowledge-format-okf-%E0%B9%81%E0%B8%A5%E0%B9%89%E0%B8%A7%E0%B8%9E%E0%B8%AD%E0%B8%9C%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%AD%E0%B9%88%E0%B8%B2%E0%B8%99%E0%B8%88%E0%B8%A3%E0%B8%B4%E0%B8%87/122167457078655322/" target="_blank" rel="noreferrer noopener">โพสต์อธิบาย OKF จาก AI กับ Peesamac</a></li>



<li><a href="https://myifew.com/7636/llm-wiki-karpathy/" target="_blank" rel="noreferrer noopener">บทความเดิมของผมเรื่อง LLM Wiki ของ Andrej Karpathy</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7843/open-knowledge-format-okf-llm-wiki/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI Spec Writing Checklist: เขียนสเปกให้ AI เดาถูกขึ้น</title>
		<link>https://myifew.com/7820/ai-spec-writing-checklist/</link>
					<comments>https://myifew.com/7820/ai-spec-writing-checklist/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Sat, 11 Jul 2026 18:44:35 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Coding]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Spec-Driven Development]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7820</guid>

					<description><![CDATA[บันทึกจากบทความ How to write specs for AI ว่าทำไม spec ที่ดีช่วยให้ AI coding agent เดาผิดน้อยลง พร้อม checklist ก่อนส่งงานให้ AI ลงมือเขียนโค้ด]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">หลังๆ มานี้ผมใช้ skill พวก grill-me ในการ discovery ความต้องการตนเอง หรือเขียน reqruiement ตั้งต้นแล้วให้ grill-me มาถามเติมต่อ แต่ถึงกระนั้น ในตอนที่ผมเขียน requriement ตั้งต้นเอง ผมก็จะพยามเขียนให้ละเอียดที่สุดเท่าที่ตนเองจะทำได้ โดยเฉพาะ Features และ Business Condition ต่างๆ เพื่อให้ AI ไม่ต้องเดาใจความสำคัญของระบบที่ผมต้องการให้มันทำ และไม่ต้องหงุดหงิดความหลอน (hallucinate) ของมันด้วย</p>



<p class="wp-block-paragraph">ผมไปอ่านบทความของ <strong>Jaroslaw Wasowski</strong> เรื่อง <strong>How to write specs for AI</strong> แล้วรู้สึกว่าตรงกับสิ่งที่ผมทำอยู่ แต่ก็มีบางข้อน่าสนใจที่ผมต้องปรับเพิ่ม โดยเขาพูดตรงๆ ว่า หลายครั้งปัญหาไม่ได้อยู่ที่ model อย่างเดียว แต่อยู่ที่ spec ที่เราเขียนให้มันต่างหาก</p>



<p class="wp-block-paragraph">เพราะ AI ไม่ได้อ่านใจเราออก ดังนั้นถ้าเราเขียน requirement แบบคลุมเครือ มันก็ไม่ได้หยุดแล้วถามเหมือน senior developer ที่นั่งข้างๆ แต่มันจะเดาต่อจาก pattern ที่มันเคยเห็นมาใน training data แล้วบางทีเดาได้เนียนมาก เนียนจนสรุปออกมา หรือ code ดูเหมือนจะถูกต้อง แต่การใช้งานผิด (เป็นเหตุผลว่าผมต้องมี skill ให้มันตั้งคำถามผมไปเรื่อยๆ นอกจากช่วยคิดแล้ว ผมใช้เพื่อคอยเช็กความเข้าใจของมัน)</p>



<span id="more-7820"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้อ้างอิงจาก<em>ประสบการณ์</em>ฟิวส์กับเอเจ้นชมพู เพื่อเรียบเรียงและแปลจากต้นฉบับของ Jaroslaw Wasowski เรื่อง <a href="https://levelup.gitconnected.com/how-to-write-specs-for-ai-7-rules-and-a-checklist-for-better-code-a5af2b2c6205" target="_blank" rel="noopener">How to write specs for AI: 7 rules and a checklist for better code</a></em></p>



<h2 class="wp-block-heading">ปัญหาไม่ใช่แค่ AI เขียนโค้ดผิด แต่คือมันไม่รู้ว่าอะไรห้ามเดา</h2>



<p class="wp-block-paragraph">ตั้งแต่ปีก่อนที่ vibe code มาใหม่ๆ จนถึงปัจจุบัน เรามักใส่ความต้องการของเราว่าอยากได้อะไร แต่ไม่ได้ใส่ว่ามันห้ามทำอะไร </p>



<p class="wp-block-paragraph">ซึ่งประโยคที่ผมชอบที่สุดในบทความนี้คือ AI ไม่มีสถานะว่า “อันนี้ไม่แน่ใจ ขอถามเพิ่มก่อน” เวลา requirement ขาดอะไรไป มันจะไม่หยุด และมันจะเติมเอง</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">สิ่งที่ไม่อยู่ spec เราในตอนแรก แต่จู่ๆ มันก็โผล่มา เพราะ AI จะเอา pattern จาก training data มาเติมแทนเจตนาของเรา (ซึ่งอาจจะผิด)</p>
</blockquote>



<p class="wp-block-paragraph">นี่แหละครับที่น่ากลัว เพราะ code ที่ออกมาอาจ compile ผ่าน, test ผ่าน หน้าตาดูดี แต่จริงๆ มันกำลังทำระบบที่มีการใช้งานหรือ behavior คนละแบบกับที่เราต้องการ</p>



<p class="wp-block-paragraph">เหมือนเราจ้างช่างมาทำบ้าน แล้วบอกแค่ว่า “ทำครัวให้ดีๆ หน่อย” ถ้าช่างทำครัวสวยมาก แต่ไม่มีปลั๊ก ไม่มีที่วางเตา หรือเปิดประตูตู้แล้วชนผนัง ปัญหาไม่ได้อยู่ที่ช่างไม่ขยันอย่างเดียว แต่อยู่ที่แบบบ้านของเราก็ไม่ได้บอกอะไรเขาเลย (อยากได้ครัวฝรั่งเตาไฟฟ้า แต่เอไอตั้งเตาอั่งโล่มาให้เพราะสเปกบอกว่ามีเตา 555)</p>



<h2 class="wp-block-heading">Spec ที่ดีต้องปิด 5 เรื่อง ที่ AI ชอบเดาเอง</h2>



<p class="wp-block-paragraph">บทความนี้สรุป 5 เรื่องหลักๆ ซึ่งผมว่าตรงนี้เอาไปใช้กับ Jira ticket, GitHub/GitLab issue, Markdown spec หรือ prompt ตรงๆ ได้เลย</p>



<h3 class="wp-block-heading">1. Outcome ต้องชัดว่าอยากได้พฤติกรรมอะไร</h3>



<p class="wp-block-paragraph">เริ่มจากบอกผลลัพธ์ที่ต้องการ ไม่ใช่บอกให้มันไปเขียน code แบบกว้างๆ เช่น แทนที่จะบอกว่า “ทำ endpoint export users เป็น CSV” ให้บอกว่า &#8220;endpoint นี้ต้องคืน active users เป็นไฟล์ CSV ที่ download ได้&#8221; และต้องมีเงื่อนไขความสำเร็จอะไรบ้าง (ภาษาเทคนิคจะเรียกว่า Acceptance Criteria)</p>



<p class="wp-block-paragraph">จุดนี้ช่วยแยก what ออกจาก how ได้ดีมาก เพราะ AI จะได้ไม่รีบเลือก implementation pattern ที่มันคุ้น แต่เริ่มจาก behavior ที่เราต้องการก่อน</p>



<h3 class="wp-block-heading">2. Scope กับ non-goals ต้องเขียนคู่กัน</h3>



<p class="wp-block-paragraph">อันนี้ผมว่าเป็นจุดที่หลายคนพลาด รวมถึงผมเองก็เคยและก็ยังพลาดบ่อย เราชอบเขียนว่า change นี้ต้องทำอะไร แต่ไม่ค่อยเขียนว่า change นี้ไม่ต้องทำอะไร</p>



<p class="wp-block-paragraph">เช่น ถ้าให้ AI ทำ export users ก็ควรบอกไปเลยว่า export เฉพาะ active users เท่านั้น ไม่ export deleted accounts ไม่ export billing data และไม่แก้ database schema</p>



<p class="wp-block-paragraph">เพราะถ้าไม่บอก มันอาจ “ใจดี” เพิ่ม feature ให้เอง ซึ่งฟังดูดี แต่ทำให้ diff บวม และบางทีไปแตะของที่ไม่ควรแตะ</p>



<p class="wp-block-paragraph">จากประสบการณ์ผมเองที่สังเกต โมเดลฉลาดๆ อย่าง Claude Opus 4.8+ / ChatGPT 5.5+ มักจะบอกเลยว่า ผมจะทำสิ่งนี้ แต่ไม่ทำสิ่งนี้เพราะจะกระทบอะไรก็ว่าไป ซึ่งมันไม่เป็นกับบางโมเดลอื่นๆ ตรงนี้เราโดนพวก Frontier Model สปอยจนมองข้ามไป ฮ่าๆ</p>



<h3 class="wp-block-heading">3. Constraints คือรั้วกัน AI หลุดโลก</h3>



<p class="wp-block-paragraph">AI ไม่ได้รู้จัดโค้ดทั้ง repo ของเราจริงๆ ถ้าเราไม่ได้ให้ context มันแต่แรก, มันไม่รู้ว่าใช้ framework เวอร์ชันไหน มี convention อะไร library ไหนห้ามใช้ response format ต้องเป็นแบบไหน หรือ performance limit คือเท่าไร (แต่ก็ได้ยินบ่อยจากคนรอบข้าง (ระดับมหาราชา/มหาราชินี) คือให้ AI อ่านโค้ดทั้ง repo ก่อนเลย)</p>



<p class="wp-block-paragraph">ดังนั้น constraints ควรมีของพวกนี้:</p>



<ul class="wp-block-list">
<li>stack และ version ที่ใช้</li>



<li>repo convention ที่ต้องตาม</li>



<li>library ที่ใช้ได้หรือห้ามใช้</li>



<li>output format เช่น UTF-8, JSON shape, CSV delimiter</li>



<li>security หรือ performance limit</li>



<li>integration boundary เช่นห้ามแก้ schema หรือห้ามกระทบ API เดิม</li>
</ul>



<p class="wp-block-paragraph">คือถ้าไม่มีสิ่งเหล่านี้ เราจะตรวจสอบได้ยากมากว่า AI ทำอะไรไป เพราะไฟล์อาจจะเยอะมาก รวมถึงถ้าต้องแก้ บางเรื่องอาจต้องรื้อทั้งโครงสร้างเลย เสียเวลา เสียโทเค็นไปเปล่าๆ</p>



<h3 class="wp-block-heading">4. Acceptance criteria ต้องพิสูจน์ได้ ไม่ใช่แค่ฟังดูดี</h3>



<p class="wp-block-paragraph">คำว่า “ใช้งานได้ดี” หรือ “make it work nicely” เป็นประโยคที่น่ากลัวมากสำหรับ AI เพราะมันไม่มีทางรู้ว่า nicely ของเราคืออะไร ดังนั้นเราต้องบอกมันว่า เงื่อนไขการรับงาน (Acceptance criteria) ของเราคืออะไร</p>



<p class="wp-block-paragraph">ซึ่ง Acceptance criteria ที่ดีควรเป็นแบบตรวจสอบได้ เช่น:</p>



<ul class="wp-block-list">
<li>ถ้ามี active users 3 คน ต้องได้ CSV 3 data rows และ header 1 แถว</li>



<li>ถ้าไม่มี users ต้องได้ header อย่างเดียวและ status 200</li>



<li>ถ้า user ไม่มี admin role ต้องได้ 403 และไม่ส่ง CSV body</li>



<li>ถ้ามีข้อมูล 50,000 records ต้องใช้ streaming และ response ไม่เกินเวลาที่กำหนด</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ถ้าไม่มีเกณฑ์ตรวจสอบได้ (ไม่ว่าจะมนุษย์ไม่เขียน หรือเอไอไม่ทำให้) ยังถือว่าเป็น Draft Requirement ไม่ใช่ Requirement จริง</p>
</blockquote>



<p class="wp-block-paragraph">เพราะการที่ Spec มี acceptance criteria มันจะเปลี่ยนจากคำอธิบายสวยๆ ให้กลายเป็น Goal ที่ AI ทำให้สำเร็จ และระบบเราจะใช้งานได้ตามที่ต้องการ</p>



<h3 class="wp-block-heading">5. Edge case กับ failure path ต้องมีตั้งแต่ก่อนเขียน code</h3>



<p class="wp-block-paragraph">Happy path เป็นแค่ส่วนหนึ่งของ production เท่านั้น แต่ spec จำนวนมากเขียนเหมือนโลกมีแต่ happy path ฮาาา</p>



<p class="wp-block-paragraph">อย่างน้อย spec ที่ส่งให้ AI ควรมี:</p>



<ul class="wp-block-list">
<li>error path 1 กรณี</li>



<li>edge case 1 กรณี</li>



<li>empty state หรือ permission case 1 กรณี</li>
</ul>



<p class="wp-block-paragraph">เพราะถ้าเราไม่เขียน มันจะเดาวิธี handle error จาก pattern ที่มันเห็นบ่อย ซึ่งอาจไม่ตรงกับระบบเราเลย</p>



<h2 class="wp-block-heading">Checklist ก่อนโยนงานให้ AI coding agent</h2>



<p class="wp-block-paragraph">ผมลองเอาแนวคิดในบทความมาจัดเป็น checklist table แบบที่น่าจะใช้จริงกับงานประจำวันได้ประมาณนี้ครับ</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>คำถาม</th><th>ผ่านหรือยัง</th></tr></thead><tbody><tr><td>Outcome ชัดไหมว่าระบบต้องทำพฤติกรรมอะไร</td><td>ถ้ายังตอบเป็นคำกว้างๆ เช่น ดีขึ้น เร็วขึ้น ใช้งานง่าย ให้เขียนใหม่</td></tr><tr><td>มี scope และ non-goals ไหม</td><td>ต้องบอกทั้งทำอะไร และไม่ทำอะไร</td></tr><tr><td>มี constraints ของ repo, stack, format, security, performance ไหม</td><td>ถ้าไม่มี AI จะเดาจากโลกทั่วไป ไม่ใช่จากระบบเรา</td></tr><tr><td>Acceptance criteria พิสูจน์ได้ไหม</td><td>ควรตรวจด้วย test, log, screenshot หรือ metric ได้</td></tr><tr><td>มี error path หรือ edge case ไหม</td><td>อย่างน้อยต้องมี 1 เคสที่ไม่ใช่ happy path</td></tr><tr><td>มีตัวอย่าง input/output ไหม</td><td>ตัวอย่างดีๆ หนึ่งชุด ลด ambiguity ได้เยอะมาก</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">checklist นี้ไม่ได้บอกให้เขียน spec ยาวเสมอไป แต่มันบอกให้ AI เขียน spec แบบเดาน้อยลง</p>



<h2 class="wp-block-heading">Spec ไม่ได้ต้องยาว แต่ต้องมี signal พอ</h2>



<p class="wp-block-paragraph">บทความต้นฉบับใช้คำว่า signal redundancy matched to complexity ซึ่งผมแปลแบบบ้านๆ ว่า รายละเอียดต้องพอดีกับความเสี่ยงของงาน</p>



<p class="wp-block-paragraph">ถ้าแค่แก้ margin หรือเปลี่ยน text เล็กๆ จะเขียน spec ยาว 3 หน้า ก็อาจเกินไป แต่ถ้างานแตะ authorization, payment, data integrity, migration, report export หรือ performance ตรงนี้ผมว่าไม่ควรประหยัด spec</p>



<p class="wp-block-paragraph">เพราะงานพวกนี้ถ้าพลาด ไม่ใช่แค่ UI เพี้ยน แต่มันอาจกระทบข้อมูล สิทธิ์ผู้ใช้ หรือ logic สำคัญของระบบ</p>



<h2 class="wp-block-heading">Workflow ที่ผมคิดว่าเอาไปใช้ได้ทันที</h2>



<p class="wp-block-paragraph">ถ้าจะเอาเรื่องนี้ไปใช้กับทีม software จริงๆ ผมคิดว่าไม่ต้องเริ่มจาก process ใหญ่โต แต่เริ่มจากงานหนึ่งชิ้นก่อนก็พอ</p>



<ol class="wp-block-list">
<li>เลือก feature หรือ change ที่มีขอบเขตงานและโค้ดชัดเจน (boundary)</li>



<li>เขียน spec ให้มี 5 เรื่องหลัก: outcome, scope, constraints, acceptance criteria, edge cases</li>



<li>review spec ก่อนให้ AI ลงมือ</li>



<li>ให้ AI implement พร้อม test</li>



<li>ถ้า test fail หรือ reviewer ต้องถามเพิ่ม ให้กลับไปแก้ spec ก่อน ไม่ใช่แค่สั่ง AI แก้ code ไปเรื่อยๆ</li>
</ol>



<p class="wp-block-paragraph">จุดนี้ผมว่ามันต่อกับแนวคิด Spec-Driven Development มาก คือ spec ไม่ใช่เอกสารประกอบงาน แต่เป็น contract ของงาน ถ้า code กับ spec ขัดกัน ต้องถามก่อนว่า spec ยังถูกไหม ไม่ใช่ปล่อยให้ code ที่ AI generate มาเป็นความจริงใหม่ของระบบ</p>



<p class="wp-block-paragraph">ข้อสุดท้ายสำคัญมาก และทำให้ Spec มีการอัพเดทตลอดเวลา (หรือที่เรียกว่า Living documentation)</p>



<h2 class="wp-block-heading">เรื่องที่ต้องระวัง อย่าเอา checklist ไปทำให้ทีมเหนื่อยกว่าเดิม</h2>



<p class="wp-block-paragraph">ถึงผมจะชอบ checklist นี้มาก แต่ก็ไม่คิดว่าต้องใช้เต็มรูปแบบกับทุกงานนะครับ</p>



<p class="wp-block-paragraph">ถ้าเป็น bug fix เล็กๆ ที่ test เดียวพิสูจน์ได้ หรือ prototype ที่ตั้งใจ throw away อยู่แล้ว การเขียน spec ยาวอาจไม่คุ้ม</p>



<p class="wp-block-paragraph">อีกอย่างคือ spec ที่ดีไม่ได้แก้ทุกปัญหา AI ยังพลาดได้จาก model limitation, context retrieval ไม่ครบ, repo ใหญ่เกินไป หรือระบบเดิมซับซ้อนจน spec อธิบายไม่หมด</p>



<p class="wp-block-paragraph">ดังนั้นอย่าใช้ checklist นี้เป็นพิธีกรรมใหม่ของทีม แต่ใช้เป็นเครื่องมือถามตัวเองว่า “งานนี้มีอะไรที่ AI ไม่ควรเดาเองบ้าง”</p>



<h2 class="wp-block-heading">สรุปแบบฟิวส์ๆ</h2>



<p class="wp-block-paragraph">สิ่งที่ผมได้จากบทความนี้คือ AI ไม่ได้ทำให้ requirement หายไป แต่มันทำให้ requirement ที่คลุมเครือส่งผลแรงขึ้นกว่าเดิม</p>



<p class="wp-block-paragraph">เมื่อก่อนถ้า requirement คลุมเครือ senior developer อาจถามกลับ หรืออย่างน้อยก็รู้จาก context ของระบบว่าอะไรควรทำไม่ควรทำ แต่ AI coding agent ไม่ทำแบบนั้น ถ้าเราไม่บอก มันจะเดา</p>



<p class="wp-block-paragraph">และบางครั้งมันเดาแบบมั่นใจมากด้วยว่าจะถูก!</p>



<p class="wp-block-paragraph">ยิ่ง AI เขียน code เร็วเท่าไร เราก็ยิ่งต้องเขียนให้ชัดขึ้นเท่านั้นครับ</p>



<h2 class="wp-block-heading">แหล่งอ้างอิง</h2>



<ul class="wp-block-list">
<li><a href="https://levelup.gitconnected.com/how-to-write-specs-for-ai-7-rules-and-a-checklist-for-better-code-a5af2b2c6205" target="_blank" rel="noopener">How to write specs for AI: 7 rules and a checklist for better code</a> โดย Jaroslaw Wasowski, Level Up Coding</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7820/ai-spec-writing-checklist/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>วิธีใช้ Fable 5 แบบประหยัด Token</title>
		<link>https://myifew.com/7793/how-optimize-token-use-fable5-advisor/</link>
					<comments>https://myifew.com/7793/how-optimize-token-use-fable5-advisor/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Thu, 09 Jul 2026 16:18:24 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Agent]]></category>
		<category><![CDATA[Anthropic]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[Fable 5]]></category>
		<category><![CDATA[Token Optimization]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7793</guid>

					<description><![CDATA[ผมไปเจอโพสต์ของ ClaudeDevs เรื่องการใช้ Fable 5 เป็น advisor ให้ Sonnet 5 ทำงานหลัก แล้วรู้สึกว่านี่คือ pattern ที่ตอบโจทย์ agent workload มาก เพราะเราไม่จำเป็นต้องเอาโมเดลแพงที่สุดไปเผา token กับงานอ่าน/ทำทุกบรรทัด]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">โพสต์ใน X ของ ClaudeDevs ที่พูดถึง pattern การใช้ Fable 5 แบบประหยัด token ผมรู้สึกว่าน่าสนใจมาก เพราะมันแตะปัญหาที่คนทำ AI agent เจอกันจริงๆ คือถ้าเราใช้โมเดลฉลาดสุดทำทุกอย่าง ทั้งคิด อ่านไฟล์ อ่านเว็บ เรียก tool แก้โค้ด รัน test และสรุปผล จะใช้โทเค็นเยอะมาก (ต้นทุนสูงมาก) ทั้งที่หลาย step ไม่ได้ต้องใช้ความฉลาดระดับสูงตลอดเวลา</p>



<p class="wp-block-paragraph">แนวคิดที่ Anthropic ยกมาคือ ให้ Sonnet 5 เป็น executor ทำงานหลักใน loop ปกติ แล้วให้ Fable 5 เป็น advisor ที่ถูกเรียกเฉพาะตอนต้องใช้ judgment สูง เช่น วางแผน ตัดสินใจ architecture แก้ทางเมื่อเริ่มหลุด หรือ review ก่อนจบงาน ผมว่ามันเป็น pattern ที่ practical มาก เพราะมันไม่ได้พยายามลดคุณภาพด้วยการใช้โมเดลเล็กอย่างเดียว แต่ใช้โมเดลฉลาดให้ถูกจังหวะมากกว่า</p>



<span id="more-7793"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้ฟิวส์กับเอเจ้นชมพูช่วยกันเรียบเรียง โดยอิงจาก<a href="https://x.com/claudedevs/status/2074606058128224365" target="_blank" rel="noreferrer noopener">โพสต์ของ ClaudeDevs บน X</a>, เอกสาร Advisor tool ของ Anthropic และ Claude Cookbook แล้วนำมาตีความเป็นแนวทางใช้งานจริงสำหรับคนทำ AI agent / coding agent</em></p>



<p class="wp-block-paragraph">ต้นทางของเรื่องนี้สรุปไว้สั้นมากว่า หนึ่งใน pattern ที่ Anthropic ใช้กับ Fable 5 คือ “ใช้ Fable 5 เป็น advisor” โดย executor อย่าง Sonnet 5 จะเรียก Fable 5 เพื่อขอคำแนะนำ ดังนั้นการทำงานส่วนใหญ่จะใช้ token ไปกับ executor ที่ Sonnet 5 ทำมากกว่า</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1992" height="872" src="https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern.jpg" alt="Fable 5 advisor pattern จากโพสต์ ClaudeDevs" class="wp-image-7791" srcset="https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern.jpg 1992w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-1024x448.jpg 1024w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-1200x525.jpg 1200w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-768x336.jpg 768w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-1536x672.jpg 1536w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-542x237.jpg 542w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-1084x475.jpg 1084w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-792x347.jpg 792w, https://myifew.com/wp-content/uploads/2026/07/fable5-advisor-pattern-1230x538.jpg 1230w" sizes="(max-width: 1992px) 100vw, 1992px" /><figcaption class="wp-element-caption">ภาพจากโพสต์ ClaudeDevs: Sonnet 5 ทำหน้าที่ executor ใน main loop และเรียก Fable 5 เป็น advisor แบบ on-demand</figcaption></figure>



<h2 class="wp-block-heading">ต้องเข้าใจก่อนว่า agent workload ไม่ต้องใช้โมเดลฉลาดทุกงาน</h2>



<p class="wp-block-paragraph">เวลาพูดถึง AI coding agent หรือ agent ที่ทำงานหลาย step ผมคิดว่าหลายคนมักติดกับดักว่า “ใช้โมเดลฉลาดสุดไปเลยจะได้จบ” ซึ่งจริงในบางงาน แต่ไม่จริงเสมอไป โดยเฉพาะงานยาวๆ ที่มี token จำนวนมากถูกใช้ไปกับงาน mechanical มากกว่า reasoning</p>



<p class="wp-block-paragraph">ในงานหนึ่งๆ มักมี 2 ส่วนปนกัน:</p>



<ul class="wp-block-list">
<li><strong>ส่วนที่ต้องคิดจริง:</strong> แตกโจทย์, ตีความ requirement, เลือก architecture, ประเมิน trade-off, หาทางออกตอนติดปัญหา</li>



<li><strong>ส่วนที่ต้องทำเยอะ:</strong> อ่านไฟล์, อ่านเว็บ, grep โค้ด, ดู log, แก้ไฟล์, รัน test, สรุป output จาก tool</li>
</ul>



<p class="wp-block-paragraph">ถ้าใช้โมเดลระดับ frontier ทำทั้งสองส่วนทั้งหมด ก็โครตจะเปลือง token เลยครับ เพราะถูกใช้ไปกับงานทั่วไปที่ไม่ต้องการ frontier reasoning ทุกบรรทัด เช่น อ่านหน้าเว็บยาวๆ หรือไล่ log หลายพันบรรทัด ตรงนี้เองที่ทำให้ค่าใช้จ่ายสูงโดยไม่จำเป็น</p>



<p class="wp-block-paragraph">ผมขอเปรียบให้เห็นภาพง่ายๆ เหมือนเอา senior engineer ไปนั่งอ่าน log ทุกบรรทัดเอง ซึ่งงานเขาควรเข้ามาตอนวางทิศทาง ตรวจจุดเสี่ยง หรือช่วยตัดสินใจเรื่องที่ถ้าผิดแล้วจะเสียเวลาเยอะ ส่วนงานอ่าน/เก็บข้อมูล/ทำตามขั้นตอนให้คนที่เร็วกว่าและต้นทุนต่ำกว่าช่วยทำได้</p>



<p class="wp-block-paragraph">หรือเทียบในงานก่อสร้าง ก็เหมือนเอาวิศะไปก่ออิฐฉาบปูนแทนคนงานก่อสร้าง แทนที่วิศวะจะออกแบบ วางแผน และคนงานจะเป็นคนทำ</p>



<figure class="wp-block-image size-large"><img alt="" decoding="async" width="1200" height="622" src="https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-1200x622.jpg" alt="" class="wp-image-7797" srcset="https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-1200x622.jpg 1200w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-1024x531.jpg 1024w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-768x398.jpg 768w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-1536x797.jpg 1536w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-2048x1062.jpg 2048w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-542x281.jpg 542w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-1084x562.jpg 1084w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-792x411.jpg 792w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ-1230x638.jpg 1230w, https://myifew.com/wp-content/uploads/2026/07/HMp6DWEa4AE10vQ.jpg 2194w" sizes="(max-width: 1200px) 100vw, 1200px" /><figcaption class="wp-element-caption">วิธ๊พื้นฐานหน่อย คือ ใช้ Fable 5 ทำหน้าที่วางแผน แล้วมอบหมายงานให้ worker Sonnet 5 ทำ</figcaption></figure>



<h2 class="wp-block-heading">เแนวคิด: Sonnet 5 เป็นคนทำงานหลัก ส่วน Fable 5 เป็นคนให้คำปรึกษา</h2>



<p class="wp-block-paragraph">จาก diagram ในโพสต์ของ ClaudeDevs โครงสร้างคือ Sonnet 5 ทำหน้าที่ executor และรัน main loop ทุก turn ส่วน Fable 5 เป็น advisor ที่ถูกเรียกผ่าน tool call เฉพาะเมื่อจำเป็น พูดง่ายๆ คือ Sonnet ทำงานหนัก แต่ Fable ช่วยคิดตอนที่ต้องคิดอย่างมีเหตุมีผล</p>



<p class="wp-block-paragraph">เอกสาร <a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool" target="_blank" rel="noreferrer noopener">Advisor tool ของ Anthropic</a> อธิบายแนวคิดนี้ว่า executor model ที่เร็วกว่า/ต้นทุนต่ำกว่า สามารถ consult advisor model ที่ฉลาดกว่า mid-generation ได้ โดย advisor จะเห็น conversation transcript ทั้งหมด แล้วส่งคำแนะนำกลับมาให้ executor ทำงานต่อ</p>



<p class="wp-block-paragraph">จุดที่ผมว่าสำคัญคือ advisor ไม่ได้มาแทน executor แต่เป็นเหมือน reviewer หรือ architect ที่ถูกเรียกในจังหวะที่ควรเรียก ทำให้เรายังได้คุณภาพจากโมเดลใหญ่ในการตัดสินใจสำคัญๆ แต่ไม่ต้องจ่ายราคาโมเดลใหญ่กับทุกการทำงานง่ายๆ หลายงาน</p>



<h2 class="wp-block-heading">แล้ว Advisor tool ทำงานยังไง?</h2>



<p class="wp-block-paragraph">เมื่อเราเพิ่ม advisor tool เข้าไปใน <code>tools</code> array แล้ว ตัว executor จะตัดสินใจเองว่าจะเรียก advisor เมื่อไรเหมือน tool อื่นๆ แต่การ call นี้เกิดฝั่ง server ภายใน request เดียว ไม่ใช่ client ต้อง orchestration เองหลายรอบ</p>



<ul class="wp-block-list">
<li>executor สร้าง <code>server_tool_use</code> ชื่อ <code>advisor</code></li>



<li>server ส่ง transcript ทั้งหมดให้ advisor model</li>



<li>advisor ส่งคำแนะนำกลับมาเป็น <code>advisor_tool_result</code></li>



<li>executor ใช้คำแนะนำนี้ทำงานต่อจนจบ</li>
</ul>



<p class="wp-block-paragraph">ตัวอย่างแบบย่อจากเอกสาร Anthropic:</p>



<pre class="wp-block-code"><code>client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=4096,
    betas=&#91;"advisor-tool-2026-03-01"],
    tools=&#91;
        {
            "type": "advisor_20260301",
            "name": "advisor",
            "model": "claude-opus-4-8",
        }
    ],
    messages=&#91;
        {
            "role": "user",
            "content": "Build a concurrent worker pool in Go with graceful shutdown.",
        }
    ],
)</code></pre>



<p class="wp-block-paragraph">ถ้านำ concept นี้มาเทียบกับโพสต์ Fable 5 ภาพในหัวจะประมาณนี้:</p>



<pre class="wp-block-code"><code>tools=&#91;
    {
        "type": "advisor_20260301",
        "name": "advisor",
        "model": "claude-fable-5",
        "max_tokens": 2048,
        "max_uses": 2,
    }
]</code></pre>



<p class="wp-block-paragraph">ตรงนี้ <code>max_tokens</code> กับ <code>max_uses</code> สำคัญมาก เพราะถ้าเปิด advisor ไว้แบบไม่จำกัด มันอาจกลายเป็น “เรียกโมเดลแพงบ่อยขึ้น” แทนที่จะช่วยประหยัด token</p>



<figure class="wp-block-image size-large"><img alt="" decoding="async" width="1200" height="1072" src="https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-1200x1072.jpg" alt="" class="wp-image-7796" srcset="https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-1200x1072.jpg 1200w, https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-1024x915.jpg 1024w, https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-768x686.jpg 768w, https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-542x484.jpg 542w, https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-1084x968.jpg 1084w, https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-792x707.jpg 792w, https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q-1230x1099.jpg 1230w, https://myifew.com/wp-content/uploads/2026/07/HMp4vKMakAAEa3Q.jpg 1274w" sizes="(max-width: 1200px) 100vw, 1200px" /><figcaption class="wp-element-caption">การใช้ Sonnet 5 เป็น Excutor แล้วมี Fable 5 เป็น advisor ทำคะแนนได้ 92% จากการใช้ Fable 5 อย่างเดียว แต่จะใช้เงินแค่ 63% เมื่อเทียบกับใช้ Fable 5 อย่างเดียวเช่นกัน</figcaption></figure>



<h2 class="wp-block-heading">วิธีใช้ให้ประหยัด token จริง</h2>



<h3 class="wp-block-heading">1. ให้ executor อ่านบริบทก่อน แล้วค่อยเรียก advisor</h3>



<p class="wp-block-paragraph">ผมคิดว่าเราไม่ควรเรียก Fable 5 ตั้งแต่ครั้งแรกที่ยังไม่รู้อะไรเลย เพราะคำแนะนำจะกว้างเกินไป วิธีที่ดีกว่าคือให้ Sonnet 5 อ่านทำความเข้าใจบริบทแรกของเราก่อน เช่น requirement, โครง repo, error log หรือไฟล์หลัก แล้วค่อยเรียก Fable 5 เพื่อช่วยวางแผน</p>



<h3 class="wp-block-heading">2. ใช้ advisor ในจุดที่ตัดสินใจผิดแล้วแพง</h3>



<p class="wp-block-paragraph">จุดที่คุ้มจะเรียก advisor คือจุดที่ถ้าคิดผิดแล้วต้องแก้งานเยอะ เช่น:</p>



<ul class="wp-block-list">
<li>เลือก architecture หรือ migration strategy</li>



<li>ตีความ requirement ที่กำกวม</li>



<li>เจอ test fail ซ้ำๆ แล้วแนวทางเดิมแก้ไม่ได้ หรือไม่ครอบคลุม</li>



<li>ก่อนจบงาน เพื่อ review ว่าหลุด security, edge case หรือ test อะไรไหม</li>
</ul>



<h3 class="wp-block-heading">3. จำกัดจำนวนครั้งด้วย <code>max_uses</code></h3>



<p class="wp-block-paragraph">ถ้างานหนึ่งควรเรียก advisor แค่ 1–2 ครั้ง ก็ตั้ง <code>max_uses</code> ไว้เลย จะช่วยไม่ให้ executor เรียก advisor ถี่เกินไปใน request เดียว</p>



<h3 class="wp-block-heading">4. จำกัดคำตอบของ advisor ด้วย <code>max_tokens</code></h3>



<p class="wp-block-paragraph">เอกสาร Anthropic แนะนำจุดเริ่มต้นที่ <code>max_tokens: 2048</code> สำหรับ advisor output cap โดยระบุว่าในการทดสอบของเขา การตั้ง cap นี้ลด output ของ advisor ได้มากเมื่อเทียบกับการไม่ตั้ง และยังไม่เห็นว่าคุณภาพลดลงเท่าไรอย่างชัดเจน (quality degradation) แต่ประโยคสำคัญคือ เราต้องตรวจสอบกับ workload ของตัวเองเสมอนะ เพื่อป้องกันความผิดพลาด เนื่องจากจำกัด token (ผมเคยเจอบ่อยว่า output งานออกมาได้ไม่ถูกต้อง หรือโค้ดไม่ครบ)</p>



<h3 class="wp-block-heading">5. เปิด caching เฉพาะงานที่เรียก advisor หลายครั้ง</h3>



<p class="wp-block-paragraph">ใน docs ระบุว่า advisor-side caching จะเริ่มคุ้มเมื่อคาดว่าจะมี advisor call ประมาณ 3 ครั้งขึ้นไปใน conversation เดียว ถ้างานสั้นๆ เรียกครั้งเดียวหรือสองครั้ง การเปิด cache อาจไม่คุ้ม เพราะ cache write ก็มีต้นทุนของมันเอง</p>



<h2 class="wp-block-heading">อีกแนวคิดที่คล้ายกัน คือ Plan big, execute small</h2>



<p class="wp-block-paragraph">ใน <a href="https://github.com/anthropics/claude-cookbooks/blob/main/managed_agents/CMA_plan_big_execute_small.ipynb" target="_blank" rel="noreferrer noopener">Claude Cookbook เรื่อง Coordinator pattern</a> Anthropic อธิบายอีก pattern ที่คล้ายกันมาก คือให้โมเดลใหญ่เป็น coordinator สำหรับวางแผนและสังเคราะห์คำตอบ ส่วน worker model ที่ถูกกว่าเป็นคนอ่านเว็บหรือดึงข้อมูลจำนวนมากใน context ของตัวเอง</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="1309" src="https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-scaled.png" alt="Coordinator pattern: Fable 5 coordinator และ Sonnet 5 workers" class="wp-image-7792" srcset="https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-scaled.png 2560w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-1024x524.png 1024w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-1200x614.png 1200w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-768x393.png 768w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-1536x785.png 1536w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-2048x1047.png 2048w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-542x277.png 542w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-1084x554.png 1084w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-792x405.png 792w, https://myifew.com/wp-content/uploads/2026/07/anthropic-coordinator-pattern-1230x629.png 1230w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption class="wp-element-caption">ภาพจาก Anthropic Claude Cookbook: Fable 5 เป็น coordinator วางแผนและสังเคราะห์ ส่วน Sonnet 5 workers อ่านเว็บและส่ง distilled findings กลับมา</figcaption></figure>



<p class="wp-block-paragraph">ในการทดลองที่ Anthropic ยกตัวอย่าง ทีมแบบ split ราคาจะถูกลงกว่าประมาณ 2.5x และทำงานเร็วขึ้นประมาณ 3x โดยจำนวน input token 84–98% ถูกคิดที่ worker ที่ใช้ราคา Token ถูกกว่า </p>



<p class="wp-block-paragraph">แต่ๆๆ เขาบอกว่า นี่แค่ตัวอย่างนะ อย่าเอาตัวเลขนี้ไปใช้อ้างอิงว่าทุกงานจะประหยัดเท่านี้ เพราะมันขึ้นกับ workload แต่ละงาน </p>



<p class="wp-block-paragraph">แต่โครงสร้างวิธีการทำแบบนี้ก็ชัดเจนดี คือ งานอ่านเยอะๆ ให้ worker ทำ ส่วนโมเดลใหญ่แตะเฉพาะ planning/synthesis</p>



<h2 class="wp-block-heading">จากที่อ่าน ถ้าผมจะใช้จริง จะวาง flow แบบนี้</h2>



<ol class="wp-block-list">
<li><strong>เริ่มด้วย Sonnet 5:</strong> ให้ทำงานหลัก อ่านไฟล์ เรียก tool แก้โค้ด รัน test</li>



<li><strong>Orientation:</strong> เก็บบริบทขั้นต่ำก่อน เช่น requirement, repo structure, error หลัก</li>



<li><strong>Advisor call แรก:</strong> เรียก Fable 5 ให้ช่วยวางแผนและชี้ risk</li>



<li><strong>Execute:</strong> ให้ Sonnet 5 ลงมือทำตาม plan โดยไม่เรียก advisor ทุกจุด</li>



<li><strong>Replan เมื่อจำเป็น:</strong> ถ้า error วนหรือทางเดิมไม่ไปต่อ ค่อยเรียก Fable 5 อีกครั้ง</li>



<li><strong>Review ก่อนจบ:</strong> เรียก advisor ช่วยดูว่าตกหล่น test, security, edge case หรือ assumption อะไรไหม</li>



<li><strong>Finish:</strong> ให้ executor สรุปผลพร้อม evidence จาก test/diff/tool output</li>
</ol>



<p class="wp-block-paragraph">ต้องบอกว่า ผมยังแค่คิดนะ เพราะยังไม่มีโจทย์ซับซ้อนพอที่จะใช้ Fable ทำงาน และยังไม่อยากลองรันเทียบ เพราะต้องทำหลายครั้ง อาจจะเสีย Token เยอะ ฮาา, ไว้รอมีผลการทดสอบจากผู้กล้า หรือได้ลองจริงๆ แล้วจะเอามาเล่าให้ฟังอีกที หรือหากใครลองแล้วก็มาแชร์กันหน่อยครับ</p>



<h2 class="wp-block-heading">ข้อควรระวัง</h2>



<ul class="wp-block-list">
<li><strong>งานเล็กมากอาจไม่คุ้ม:</strong> ถ้าเป็น single-turn Q&amp;A หรือแก้ typo เล็กๆ advisor อาจเพิ่ม overhead มากกว่าประโยชน์</li>



<li><strong>ต้องวัดกับ workload จริง:</strong> ตัวเลขประหยัด token ไม่ใช่ค่าคงที่ ขึ้นกับชนิดงานและความยาวของ context</li>



<li><strong>อย่าแตกงานย่อยจนเกินพอดี:</strong> ใน cookbook เองก็เตือนว่าการแตก brief แคบเกินไปมี floor cost ของ worker thread (ขออธิบายเพิ่มเติมครับ: มันคือต้นทุนขั้นต่ำต่อ worker thread หมายถึง ทุกครั้งที่สร้าง worker หรือ sub-agent ใหม่ มันมี “ต้นทุนตั้งต้น” เสมอ ไม่ว่าจะงานเล็กหรือใหญ่ เช่น เปิด session ,รับ prompt, อ่าน context, เรียก Skill)</li>



<li><strong>advisor แก้โจทย์เท่าที่ได้รับจาก context:</strong> ถ้า executor ยังไม่ได้อ่านของสำคัญก่อนเรียก advisor คำแนะนำก็อาจกว้างหรือผิดทิศได้ เช่นเราใส่บริบทไม่ครบหรือไม่เข้าใจให้ advisor เองแต่แรก (นั่นคือเหตุผลของ Anthopic ว่าทำไมไม่ควรเอาตัวฉลาดมารับงานก่อน)</li>



<li><strong>ต้อง track cost แยก:</strong> usage ของ advisor อยู่ใน <code>usage.iterations</code> เป็น <code>advisor_message</code> เพราะถูก bill คนละ rate กับ executor</li>
</ul>



<p class="wp-block-paragraph">ผมขอขยายความข้อสุดท้ายนิดนึงคือ มันไม่สามารถคิด token cost แบบ usage.input_tokens + usage.output_tokens ทั่วไปนะ เพราะอาจจะเข้าใจผิดคิดว่าแพงทั้งหมด แต่ควรคิดจาก </p>



<p class="wp-block-paragraph">total_cost = executor_tokens × ราคา Sonnet 5 + advisor_tokens × ราคา Fable 5</p>



<p class="wp-block-paragraph">ดังนั้น ใน Anthropic API ที่ส่งค่า usage.iterations กลับมา เราต้องคิดราคาแยกตาม type ด้วย ว่าอะไรคือ executor (message) และอะไรคือ advisor (advisor_message)</p>



<h2 class="wp-block-heading">สรุป</h2>



<p class="wp-block-paragraph">ผมคิดว่า “Fable 5 เป็น advisor” เป็นแนวทางที่น่าลองมากสำหรับ agent workflow ที่เราจะให้มันทำงานยากๆ หรือต้องใช้การตัดสินใจอย่างมีเหตุมีผลสูงมาก ส่วนงานง่ายๆ อย่างการ อ่าน/ทำ/ตรวจซ้ำ ก็ให้ใช้โมเดลรองๆ ลงมา ทำก็คิดว่าเพียงพอแล้ว (อย่างน้องชมพูที่ผมให้แชต ก็ใช้แค่ ChatGPT mini แต่หาข้อมูลและเขียนบทความ ผมจะใช้ ChatGPT ปกติ</p>



<h2 class="wp-block-heading">อ้างอิง</h2>



<ul class="wp-block-list">
<li><a href="https://x.com/claudedevs/status/2074606058128224365" target="_blank" rel="noreferrer noopener">ClaudeDevs on X — Fable 5 as advisor pattern</a></li>



<li><a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool" target="_blank" rel="noreferrer noopener">Anthropic Claude Platform Docs — Advisor tool</a></li>



<li><a href="https://github.com/anthropics/claude-cookbooks/blob/main/managed_agents/CMA_plan_big_execute_small.ipynb" target="_blank" rel="noreferrer noopener">Anthropic Claude Cookbooks — Coordinator pattern: big models for planning, small models for execution</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7793/how-optimize-token-use-fable5-advisor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Harness Design: ทำ AI Agent ให้ทำงานยาวๆ ได้โดยไม่ต้องมีคนเฝ้าตลอดเวลา</title>
		<link>https://myifew.com/7778/harness-design-by-anthopic/</link>
					<comments>https://myifew.com/7778/harness-design-by-anthopic/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Wed, 08 Jul 2026 17:16:55 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Agent]]></category>
		<category><![CDATA[Anthropic]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[Harness Design]]></category>
		<category><![CDATA[Long-running Agents]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7778</guid>

					<description><![CDATA[ผมไปเจอบทความของ Anthropic เรื่อง harness design สำหรับ long-running application development ซึ่งตรงกับสิ่งที่กำลังทดลองอยู่ เลยเอามาเล่าในมุมที่นำไปพัฒนาต่อได้จริง]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ไปเจอบทความของ Anthropic เรื่อง <a href="https://www.anthropic.com/engineering/harness-design-long-running-apps" target="_blank" rel="noopener">Harness design for long-running application development</a> แล้วรู้สึกว่าน่าสนใจมาก เพราะเขาพูดถึงการออกแบบ <strong>harness</strong> สำหรับให้ AI Agent ทำงานยาวๆ จนได้ของออกมา โดยไม่ต้องมีมนุษย์คอยเข้ามาเกี่ยวข้องตลอดเวลา</p>



<p class="wp-block-paragraph">เรื่องนี้ตรงกับสิ่งที่ผมเองก็กำลังทดลองและพัฒนาอยู่เหมือนกัน โจทย์คือจะทำยังไงให้ Agent ไม่ได้เป็นแค่ผู้ช่วยตอบคำถาม หรือช่วยเขียนโค้ดเป็นรอบๆ แต่สามารถรับโจทย์ยาวๆ วางแผน ทำงาน ตรวจงาน ส่งต่องาน และค่อยๆ ปรับปรุงผลลัพธ์ได้เองมากขึ้น (ยุคนี้เรียกว่า Loop Engineering)</p>



<p class="wp-block-paragraph">ผมเลยอยากเอาบทความนี้มาเล่าในมุมที่นำไปต่อยอดได้จริง โดยเฉพาะสำหรับคนที่กำลังสนใจเรื่อง AI Agent, coding agent, workflow automation หรือระบบที่ให้ AI ทำงานต่อเนื่องแทนการ prompt ทีละครั้ง</p>



<span id="more-7778"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้ฟิวส์กับเอเจ้นชมพู ได้เรียบเรียงและต่อยอดจากบทความต้นฉบับของ Anthropic Engineering เรื่อง <a href="https://www.anthropic.com/engineering/harness-design-long-running-apps" target="_blank" rel="noopener">Harness design for long-running application development</a> เขียนโดย Prithvi Rajasekaran</em></p>



<h2 class="wp-block-heading">Harness คืออะไรในบริบทของ AI Agent</h2>



<p class="wp-block-paragraph">ถ้าแปลแบบง่ายๆ harness คือชุดเครื่องมือที่หุ้ม AI Agent อีกทีเพื่อให้มันทำงานได้เป็นระบบ ไม่ใช่แค่โยน prompt ให้ model แล้วหวังว่ามันจะทำทุกอย่างถูกต้องเอง</p>



<p class="wp-block-paragraph">ซึ่งในโลกของการเขียนโปรแกรม เรามักคุ้นกับ test harness หรือ automation harness อยู่แล้ว คือชุดเครื่องมือที่ช่วยรัน ทดสอบ ตรวจผล และคุมการทำงานบางอย่างให้เป็นระบบ พอมาอยู่ในโลกของ AI Agent แนวคิดก็คล้ายกัน แต่ขยายใหญ่กว่าเดิม</p>



<p class="wp-block-paragraph">Harness ของ AI Agent อาจรวมหลายอย่าง เช่น</p>



<ul class="wp-block-list">
<li>วิธีแตกงานใหญ่ให้เล็กลง</li>



<li>วิธีให้ agent วางแผนก่อนลงมือทำ</li>



<li>วิธีเก็บ state ของงานไว้นอก context window</li>



<li>วิธีส่งต่องานระหว่าง agent หรือ session</li>



<li>วิธีตรวจคุณภาพของงานที่ทำเสร็จ</li>



<li>วิธีบังคับให้ agent แก้ไขงานตาม feedback</li>



<li>วิธีหยุดงานเมื่อถึงเงื่อนไขบางอย่าง</li>
</ul>



<p class="wp-block-paragraph">พูดอีกแบบคือ ถ้า model คือสมอง harness ก็คือระบบการทำงานรอบสมองนั้น</p>



<p class="wp-block-paragraph">และผมคิดว่านี่แหละคือประเด็นสำคัญมาก เพราะช่วงแรกๆ เรามักคิดกันว่า AI จะเก่งขึ้นเพราะ model ฉลาดขึ้นอย่างเดียว แต่พอเริ่มใช้งานจริงจะเห็นว่า model ที่เก่งมากๆ ถ้าไม่มีระบบคุมงานที่ดี ก็ยังหลุด ยังลืม ยังทำงานซ้ำ ยังประเมินตัวเองผิด และยังจบงานแบบไม่ครบได้เหมือนกัน</p>



<p class="wp-block-paragraph">จริงๆ ลองทดสอบได้ง่ายๆ ครับ ถ้าเอา prompt ใส่ใน Claude Web ตั้งโมเดลเป็น Opus 4.8 กับใส่ในระบบแชตแจกฟรีเช่น Langflow โดยต่อโมเดล Opus 4.8 ผ่าน Claude API, คำตอบที่ได้ออกมาจะไม่เหมือนกัน แม้ว่าใช้สมอง Opus 4.8 เหมือนกัน (เรื่องนี้ 9arm ก็มีเล่าให้ฟังตอนทำ 9arm AI Passport)</p>



<h2 class="wp-block-heading">ปัญหาของ Agent ที่ให้ทำงานยาวๆ</h2>



<p class="wp-block-paragraph">บทความนี้เริ่มจากโจทย์ที่ Anthropic ทดลองอยู่ 2 เรื่อง คือทำให้ Claude สร้าง frontend design ที่มีคุณภาพสูงขึ้น และทำให้ Claude สร้าง application เต็มรูปแบบได้โดยไม่ต้องมีมนุษย์เข้าไปช่วยระหว่างทาง</p>



<p class="wp-block-paragraph">สองงานนี้ดูเหมือนคนละเรื่อง งานแรกเป็นเรื่องรสนิยมและความสวยงาม งานหลังเป็นเรื่องซอฟต์แวร์ที่ใช้งานได้จริง แต่ทั้งคู่มีปัญหาร่วมกันอย่างหนึ่ง คือถ้าให้ AI ทำงานยาวๆ แบบ naive เกินไป คุณภาพจะเริ่มแกว่ง</p>



<h3 class="wp-block-heading">1. Context เต็มแล้วเริ่มหลุด</h3>



<p class="wp-block-paragraph">งานที่ยาวหลายชั่วโมงจะมีข้อมูลสะสมเยอะมาก ตั้งแต่ requirement, decision, bug, code, test result, feedback ไปจนถึงสิ่งที่ลองแล้วไม่เวิร์ก ถ้าทุกอย่างถูกกองอยู่ใน context window เดียว สุดท้าย agent จะเริ่มจับประเด็นไม่ครบ</p>



<p class="wp-block-paragraph">Anthropic ยังพูดถึงอาการที่น่าสนใจชื่อว่า <strong>context anxiety</strong> คือ model เริ่มเหมือนรู้ตัวว่าบริบทใกล้เต็ม แล้วพยายามรีบ wrap up งานก่อนเวลา ทั้งที่งานจริงยังไม่เสร็จดี</p>



<p class="wp-block-paragraph">ปัญหานี้ผมว่าคนที่ใช้ coding agent น่าจะเจอบ่อย บางทีมันทำงานดีมาตลอด แต่พอท้ายๆ เริ่มสรุปเองว่าทุกอย่างเรียบร้อย ทั้งที่ test ยังไม่ครบ หรือยังมี TODO ค้างอยู่</p>



<h3 class="wp-block-heading">2. Agent มักตรวจงานตัวเองใจดีเกินไป</h3>



<p class="wp-block-paragraph">อีกปัญหาหนึ่งที่ตรงมากคือ self-evaluation</p>



<p class="wp-block-paragraph">เวลาถาม agent ว่างานที่ตัวเองทำดีไหม มันมักตอบว่าดี ใช้ได้ พร้อมแล้ว หรือใกล้เสร็จแล้ว ทั้งที่ถ้ามนุษย์ลองใช้งานจริงอาจเห็นเลยว่ามีหลายจุดยังไม่ดีพอ</p>



<p class="wp-block-paragraph">งาน coding ยังพอมี test ช่วยจับได้บ้าง แต่งานอย่าง design, UX, product completeness หรือบทความนี่ตรวจยากกว่าเยอะ เพราะไม่มีคำตอบแบบ pass/fail ชัดเจน</p>



<p class="wp-block-paragraph">Anthropic เลยใช้แนวทางแยก agent ที่สร้างงาน ออกจาก agent ที่ตรวจงาน ซึ่งผมคิดว่าเป็น pattern ที่ควรใช้จริงในระบบ agent ที่ต้องการคุณภาพ</p>



<h2 class="wp-block-heading">แนวคิดหลัก: Planner, Generator, Evaluator</h2>



<p class="wp-block-paragraph">โครงสร้างที่บทความนี้พูดถึงคือการแบ่ง agent ออกเป็น 3 บทบาทหลัก</p>



<figure class="wp-block-table"><table><thead><tr><th>บทบาท</th><th>หน้าที่</th></tr></thead><tbody><tr><td><strong>Planner</strong></td><td>รับโจทย์สั้นๆ แล้วขยายเป็น product spec, plan, task list หรือแนวทางการทำงาน</td></tr><tr><td><strong>Generator</strong></td><td>ลงมือสร้าง feature, เขียนโค้ด หรือผลิต output ตามแผน</td></tr><tr><td><strong>Evaluator</strong></td><td>ตรวจงาน ทดลองใช้งาน ให้ feedback และบอกว่างานผ่านเกณฑ์หรือยัง</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ถ้ามองในเชิงทีมซอฟต์แวร์ มันก็คล้ายๆ การแยก role ในทีมจริง</p>



<ul class="wp-block-list">
<li>Planner ทำหน้าที่คล้าย product/tech lead</li>



<li>Generator ทำหน้าที่คล้าย developer</li>



<li>Evaluator ทำหน้าที่คล้าย QA, reviewer และ product tester</li>
</ul>



<p class="wp-block-paragraph">ข้อดีคือเราไม่ต้องหวังให้ agent ตัวเดียวทำทุกอย่างเก่งหมด เพราะในความเป็นจริง มนุษย์เองก็ยังไม่ค่อยทำงานแบบนั้น เรามีคนคิด คนทำ คนตรวจ และ feedback loop ที่ทำให้งานดีขึ้น</p>



<h2 class="wp-block-heading">ทำเรื่อง subjective ให้ตรวจได้</h2>



<p class="wp-block-paragraph">ส่วนที่ผมชอบมากในบทความคือการทดลองกับ frontend design เพราะ design เป็นเรื่องที่วัดยาก</p>



<p class="wp-block-paragraph">Anthropic พบว่า Claude มักสร้าง UI ที่ technically ใช้งานได้ แต่ดู generic มาก เช่น layout ปลอดภัย card เยอะๆ gradient เดิมๆ หรือหน้าตาที่ดูเหมือน AI สร้างแบบไม่มี character</p>



<p class="wp-block-paragraph">เขาเลยสร้าง evaluator ที่มี criteria ชัดเจน เช่น</p>



<ul class="wp-block-list">
<li><strong>Design quality</strong> งานดูเป็นภาพรวมเดียวกันไหม</li>



<li><strong>Originality</strong> มีความคิดสร้างสรรค์จริงไหม หรือเป็น template</li>



<li><strong>Craft</strong> typography, spacing, contrast, color harmony ดีไหม</li>



<li><strong>Functionality</strong> ผู้ใช้เข้าใจและใช้งานได้จริงไหม</li>
</ul>



<p class="wp-block-paragraph">จุดสำคัญคือเขาไม่ได้ถามกว้างๆ ว่า “สวยไหม” แต่แตกคำว่าสวยให้กลายเป็น rubric ที่ตรวจได้</p>



<p class="wp-block-paragraph">ผมว่านี่เอาไปใช้กับงานอื่นได้เยอะมาก เช่นบทความดีไหม requirement ชัดไหม dashboard ใช้งานง่ายไหม หรือแม้แต่ระบบ automation ที่ agent สร้างขึ้นมามี failure mode อะไรบ้าง ถ้าเราไม่มี rubric evaluator ก็จะตอบกว้างๆ และหลุดง่าย</p>



<h2 class="wp-block-heading">Context Reset ไม่ใช่แค่ล้างแชท แต่ต้องมี Handoff</h2>



<p class="wp-block-paragraph">อีกเรื่องที่สำคัญมากคือ structured handoff</p>



<p class="wp-block-paragraph">ถ้า agent ทำงานยาวจนต้องเริ่ม session ใหม่ หรือให้ agent ตัวใหม่มารับช่วงต่อ เราไม่ควรส่งต่อด้วย chat history ยาวๆ อย่างเดียว แต่ควรมี artifact ที่สรุปสถานะงานอย่างเป็นระบบ</p>



<p class="wp-block-paragraph">handoff ที่ดีควรบอกอย่างน้อยว่า</p>



<ul class="wp-block-list">
<li>เป้าหมายของงานคืออะไร</li>



<li>ทำอะไรเสร็จแล้ว</li>



<li>ไฟล์ไหนถูกแก้</li>



<li>คำสั่งไหนรันแล้ว</li>



<li>ผลลัพธ์จริงคืออะไร</li>



<li>ยังเหลือปัญหาอะไร</li>



<li>next step คืออะไร</li>
</ul>



<p class="wp-block-paragraph">ถ้าเป็นงาน coding ก็ควรมี test result, git diff, known issue และคำอธิบาย decision ที่สำคัญด้วย</p>



<p class="wp-block-paragraph">ในมุมผม นี่คือจุดที่ทำให้ agent system เริ่มจริงจังขึ้นมาก เพราะเราเริ่มย้าย source of truth จาก “บทสนทนา” ไปอยู่ใน “artifact” ที่อ่านซ้ำได้ ตรวจได้ และส่งต่อได้</p>



<h2 class="wp-block-heading">Sprint Contract: ก่อนทำ ต้องรู้ก่อนว่า Done คืออะไร</h2>



<p class="wp-block-paragraph">อีกไอเดียที่น่าสนใจคือก่อนแต่ละ sprint ให้ Generator และ Evaluator ตกลงกันก่อนว่า sprint นี้จะทำอะไร และจะตรวจยังไงถึงเรียกว่าสำเร็จ</p>



<p class="wp-block-paragraph">ผมมองว่านี่คือ acceptance criteria สำหรับ agent โดยเฉพาะ</p>



<p class="wp-block-paragraph">ถ้าให้ agent “สร้างระบบ task management” เฉยๆ มันอาจทำหน้าจอสวย แต่ข้อมูลไม่ persist หรือ filter ใช้ไม่ได้ แต่ถ้ามี sprint contract เช่น</p>



<ul class="wp-block-list">
<li>สร้าง task ได้</li>



<li>แก้สถานะ task ได้</li>



<li>filter ตาม status ได้</li>



<li>refresh แล้วข้อมูลยังอยู่</li>



<li>Evaluator ต้องทดสอบผ่าน browser จริง</li>
</ul>



<p class="wp-block-paragraph">แบบนี้งานจะตรวจได้ชัดขึ้นมาก และลดโอกาสที่ agent จะทำ feature แบบดูเหมือนเสร็จ แต่ใช้งานจริงไม่ได้</p>



<h2 class="wp-block-heading">ผลลัพธ์ที่ Anthropic เจอ</h2>



<p class="wp-block-paragraph">บทความยกตัวอย่างให้ Claude สร้าง 2D retro game maker แล้วเทียบระหว่าง solo agent กับ full harness</p>



<figure class="wp-block-table"><table><thead><tr><th>วิธี</th><th>เวลา</th><th>ต้นทุน</th></tr></thead><tbody><tr><td>Solo agent</td><td>ประมาณ 20 นาที</td><td>ประมาณ $9</td></tr><tr><td>Full harness</td><td>ประมาณ 6 ชั่วโมง</td><td>ประมาณ $200</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">full harness แพงกว่ามาก แต่คุณภาพต่างกันชัดเจน solo agent ทำหน้าตาได้บางส่วน แต่เกมเล่นจริงไม่ได้ดีนัก ส่วน full harness ทำ feature ได้ลึกกว่า polished กว่า และ play mode ใช้งานได้จริงกว่า</p>



<p class="wp-block-paragraph">นี่เป็น trade-off ที่ต้องจำไว้ ไม่ใช่ว่าเราควรใช้ harness หนักๆ กับทุกงาน เพราะบางงาน single agent ก็พอ แต่ถ้างานสำคัญ งานซับซ้อน หรืองานที่ต้องการคุณภาพสูงมาก harness แบบนี้อาจคุ้ม</p>



<h2 class="wp-block-heading">เมื่อ Model เก่งขึ้น Harness ก็ต้องเปลี่ยน</h2>



<p class="wp-block-paragraph">อีกประเด็นที่ผมชอบคือ Anthropic บอกว่าเมื่อ model รุ่นใหม่เก่งขึ้น บางส่วนของ harness ที่เคยจำเป็นอาจไม่จำเป็นอีกต่อไป</p>



<p class="wp-block-paragraph">นี่เป็นความจริงที่สำคัญมาก ทุก component ใน harness คือสมมติฐานบางอย่างว่า model ยังทำเองได้ไม่ดีพอ เช่น ยังวางแผนไม่ดีพอ ยัง review ตัวเองไม่ดีพอ ยังทำงานยาวไม่ได้พอ หรือยังต้องแตกงานเป็น sprint เล็กๆ</p>



<p class="wp-block-paragraph">แต่เมื่อ model ดีขึ้น สมมติฐานเหล่านี้อาจหมดอายุ</p>



<p class="wp-block-paragraph">ดังนั้น harness ที่ดีไม่ควรเป็น pipeline แข็งๆ แต่ควรเป็นระบบที่ปรับได้ เช่น</p>



<ul class="wp-block-list">
<li>เปิดหรือปิด planner ได้</li>



<li>เลือก evaluator แบบเบาหรือหนักได้</li>



<li>ปรับจำนวนรอบ iteration ได้</li>



<li>เลือกใช้ context reset หรือ compaction ได้</li>



<li>ถอด component ที่ไม่ load-bearing ออกได้</li>
</ul>



<p class="wp-block-paragraph">ผมคิดว่านี่คือแนวคิดที่ดีมากสำหรับคนทำ agent platform เพราะเราไม่ได้ออกแบบระบบเพื่อ model รุ่นเดียว แต่ต้องออกแบบให้ evolve ตาม model ได้</p>



<h2 class="wp-block-heading">ถ้าจะเอามาพัฒนาต่อ ผมจะเริ่มจากอะไร</h2>



<p class="wp-block-paragraph">ถ้าเอาแนวคิดนี้มาใช้กับระบบ agent ที่ผมกำลังทำอยู่ ผมคิดว่าสิ่งที่ควรเริ่มมีคือ 5 เรื่องนี้</p>



<h3 class="wp-block-heading">1. Artifact-first workflow</h3>



<p class="wp-block-paragraph">อย่าให้ chat เป็นที่เก็บ state หลักของงาน แต่ให้ agent ทำงานผ่านไฟล์หรือ object ที่ชัดเจน เช่น</p>



<ul class="wp-block-list">
<li><code>SPEC.md</code></li>



<li><code>PLAN.md</code></li>



<li><code>TASKS.md</code></li>



<li><code>STATE.md</code></li>



<li><code>EVAL.md</code></li>



<li><code>HANDOFF.md</code></li>
</ul>



<p class="wp-block-paragraph">ไฟล์เหล่านี้ทำให้ agent ตัวถัดไปอ่านต่อได้ และมนุษย์ก็ตรวจได้ด้วย</p>



<p class="wp-block-paragraph">ซึ่งหากใครใช้ skill พวกทำ Spec Driven มันจะสร้างเอกสาร spec/plan/adr ให้อัตโนมัติ คอนเซ็ปประมาณนี้เลย</p>



<h3 class="wp-block-heading">2. Maker กับ Checker ต้องแยกกัน</h3>



<p class="wp-block-paragraph">งานสำคัญไม่ควรให้ agent ตัวเดียวสร้างและรับรองงานตัวเอง ควรมี reviewer หรือ evaluator แยกออกมาเสมอ โดยเฉพาะงานที่ต้อง publish, deploy หรือกระทบข้อมูลจริง</p>



<h3 class="wp-block-heading">3. Evaluator ต้องมี Rubric</h3>



<p class="wp-block-paragraph">rubric คือชุดเกณฑ์การให้คะแนน หรือเครื่องมือประเมินผลที่อธิบายระดับคุณภาพของชิ้นงาน </p>



<p class="wp-block-paragraph">ดังนั้น Evaluator ที่ไม่มี rubric จะตรวจแบบลอยๆ และมักใจดีเกินไป rubric ที่ดีควรบอกว่าอะไรคือ pass, อะไรคือ fail, ต้องลอง edge case ไหน และอะไรที่ห้ามมองข้าม</p>



<h3 class="wp-block-heading">4. Context Reset ต้องเป็น Feature ไม่ใช่ปล่อยให้แก้ตอนเต็ม</h3>



<p class="wp-block-paragraph">ถ้างานยาวพอ เราควรออกแบบไว้เลยว่า agent จะ reset ตอนไหน ส่งต่ออะไร และ agent ตัวใหม่ต้องอ่านอะไรบ้าง ไม่ใช่รอให้ context เต็มแล้วค่อยหาทางรอด</p>



<h3 class="wp-block-heading">5. ต้องมี Stop Condition</h3>



<p class="wp-block-paragraph">Agent ที่ทำงานเองได้ต้องรู้ด้วยว่าเมื่อไรควรหยุด ถ้าไม่มี stop condition มันอาจวนแก้ไปเรื่อยๆ ใช้ token ใช้เวลา แต่คุณภาพไม่ได้ดีขึ้นตามสัดส่วน</p>



<h2 class="wp-block-heading">ข้อควรระวัง</h2>



<p class="wp-block-paragraph">แนวทางนี้น่าสนใจมาก แต่ก็มีข้อควรระวังเยอะเหมือนกัน</p>



<ul class="wp-block-list">
<li><strong>Cost สูงขึ้น</strong> เพราะใช้หลาย agent ทำงานหลายรอบ และต้องมี evaluation loop</li>



<li><strong>สร้างงานได้ช้าขึ้น</strong> เพราะงานบางอย่างต้องรอ browser test, QA หรือ iteration</li>



<li><strong>ซับซ้อนขึ้น</strong> เพราะต้องดูแล state, artifact, prompt, rubric และ orchestration</li>



<li><strong>Evaluator ก็พลาดได้</strong> ถ้า rubric ไม่ดีหรือทดสอบไม่ลึกพอ</li>



<li><strong>Handoff ที่ไม่ดีอันตรายมาก</strong> เพราะ agent รุ่นถัดไปอาจสานต่อจากข้อมูลผิด</li>
</ul>



<p class="wp-block-paragraph">ดังนั้นผมคิดว่าควรใช้ harness หนักๆ เฉพาะงานที่คุ้มจริง เช่นงานที่มีผลลัพธ์สำคัญ งานที่ต้องใช้ซ้ำ หรืองานที่ถ้าพลาดแล้วเสียเวลามาก</p>



<h2 class="wp-block-heading">สรุป</h2>



<p class="wp-block-paragraph">บทความนี้ทำให้ผมยิ่งเชื่อว่าอนาคตของ AI Agent ไม่ได้อยู่ที่ prompt อย่างเดียว แต่อยู่ที่การออกแบบ harness รอบๆ model ให้ดีพอ</p>



<p class="wp-block-paragraph">Agent ที่ทำงานยาวได้จริงต้องมี plan ต้องมี state ต้องมี handoff ต้องมี evaluator ต้องมี rubric และต้องมีวิธีรู้ว่าเมื่อไรควรทำต่อหรือหยุด</p>



<p class="wp-block-paragraph">ถ้าทำได้ดี เราจะเริ่มเปลี่ยนจากการใช้ AI เป็นผู้ช่วยทีละคำสั่ง ไปสู่การมี AI operator ที่รับโจทย์ซับซ้อน ทำงานต่อเนื่อง ตรวจตัวเอง ส่งต่องาน และปรับปรุงผลลัพธ์ได้มากขึ้นเรื่อยๆ</p>



<p class="wp-block-paragraph">สำหรับผม นี่เป็นทิศทางที่น่าทดลองมาก และน่าจะเป็นแกนสำคัญของระบบ agent รุ่นถัดไปที่ไม่ได้แค่ “ตอบเก่ง” แต่ “ทำงานเป็นระบบ” ได้จริง</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7778/harness-design-by-anthopic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ZeeSpec กับการโค้ดงานแบบ  Greenfield และ Brownfield</title>
		<link>https://myifew.com/7769/zeespec-spec/</link>
					<comments>https://myifew.com/7769/zeespec-spec/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Mon, 06 Jul 2026 16:06:52 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Coding]]></category>
		<category><![CDATA[Brownfield]]></category>
		<category><![CDATA[Greenfield]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Spec-Driven Development]]></category>
		<category><![CDATA[ZeeSpec]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=7769</guid>

					<description><![CDATA[ZeeSpec คือแนวคิดการเขียน spec แบบ constraint system เพื่อกัน AI เดา requirement เอง โดยวิธีใช้จะแตกต่างกันมากระหว่าง greenfield และ brownfield project]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">โพสต์ก่อน ผมเขียนถึง <a href="https://myifew.com/7753/writing-effective-prompts-by-google/" data-type="post" data-id="7753">คู่มือการเขียน Prompt ที่ดี ให้ได้ผลตรงใจ จากคำแนะนำของ Google</a> ซึ่งเบสิกเลยคือการระบุ Role/Task/Context/Output Format</p>



<p class="wp-block-paragraph">สำหรับโพสต์นี้ เอาใจสาย Spec Driven Development หน่อย คือผมไปเจออีกวิธีที่น่าสนใจดี ที่ใช้ในการทำ Spec ค่อนข้างละเอียดเลย แต่พอนึกดีๆ แล้ว หลายครั้งผมก็เขียนแบบนี้โดยไม่รู้ตัว</p>



<p class="wp-block-paragraph">เพราะความไม่ต้องการให้ AI เดาเอง และไม่อยากอารมณ์เสียเมื่อรอมันรันนานแต่ผลลัพธ์ที่ได้ไม่ตรงใจ ผมจึงมักจะระบุว่าใคร ทำอะไร อย่างไร ที่ไหน เมื่อไร อะไรควรทำ ไม่ควรทำ</p>



<p class="wp-block-paragraph">ซึ่งเครื่องมือในโพสต์นี้เป็นประมาณนั้นเลยครับ เผื่อใครจะเอาไปเป็นไอเดียเสริมสไตล์การเขียน Prompt/Spec ให้กับผู้อ่านได้</p>



<span id="more-7769"></span>



<p class="wp-block-paragraph"><em>หมายเหตุ: บทความนี้ฟิวส์กับเอเจ้นชมพู ได้เรียบเรียงและแปลจากต้นฉบับของ Vishal Mysore เรื่อง <a href="https://medium.com/@visrow/zeespec-spec-driven-development-for-greenfield-vs-brownfield-projects-c593b5d88186" target="_blank" rel="noopener">ZeeSpec- Spec Driven Development for Greenfield vs Brownfield Projects</a></em></p>



<h2 class="wp-block-heading">AI มันไม่กลัว requirement ที่ไม่ชัด แต่มันจะเดาแทนเราเลย</h2>



<p class="wp-block-paragraph">บทความต้นฉบับพูดถึงเครื่องมือชื่อ <strong>ZeeSpec</strong> ซึ่งเป็นแนวคิดการทำ spec แบบบังคับให้เราตอบคำถามให้ครบก่อนเริ่มให้ AI สร้างระบบ</p>



<p class="wp-block-paragraph">คำสำคัญของ ZeeSpec คือ มันไม่ได้เป็น documentation เฉยๆ แต่มันเป็น <strong>constraint system</strong> หรือระบบกรอบข้อจำกัดที่บอก AI ว่าอะไรทำได้ อะไรทำไม่ได้ อะไรห้ามเดา</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ถ้าเราไม่ตอบ AI จะตอบแทนเรา และคำตอบนั้นอาจดูดีมากจนเราไม่ทันระวัง</p>
</blockquote>



<p class="wp-block-paragraph">ฟังดูเหมือนเรื่องเล็กนะครับ แต่คนทำ software น่าจะเคยเจออาการนี้กันบ่อยมาก เช่น บอกให้เพิ่ม feature นิดเดียว แต่ AI ดัน refactor service เดิมให้ด้วย หรือบอกให้เพิ่ม field ในตาราง แต่มัน generate migration ที่กระทบข้อมูลเดิมแบบชวนเสียวหลัง</p>



<p class="wp-block-paragraph">พออ่านบทความนี้แล้วผมนึกถึงการสร้างบ้านเลย ถ้าเราไม่บอกว่าเสาไหนห้ามแตะ ผนังไหนรับน้ำหนัก ท่อประปาเดินตรงไหน ช่างที่ขยันมากอาจทำบ้านใหม่ให้สวยกว่าเดิม แต่พังโครงเดิมไปด้วย</p>



<h2 class="wp-block-heading">ZeeSpec ใช้ 5W1H มาบีบให้เราคิดครบ</h2>



<p class="wp-block-paragraph">ZeeSpec วางอยู่บนแนวคิด <strong>Zachman Framework</strong> ซึ่งเป็นกรอบคิดด้าน enterprise architecture และโมเดล <strong>5W1H</strong> ที่ประกอบด้วย What, Where, When, Who, Why, How</p>



<p class="wp-block-paragraph">ในบทความบอกว่า ZeeSpec มีคำถาม 60 ข้อ แบ่งเป็น 6 มิติ มิติละ 10 ข้อ เป้าหมายไม่ได้อยู่ที่การเขียนเอกสารให้ยาว แต่อยู่ที่การบังคับให้ decision สำคัญถูกพูดออกมาก่อน AI จะลงมือเขียนโค้ด</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>มิติ</th><th>คำถามหลัก</th><th>ตัวอย่างสิ่งที่ต้องระบุ</th></tr></thead><tbody><tr><td><strong>WHAT</strong></td><td>ระบบคืออะไร</td><td>entity, state, boundary, สิ่งที่ห้ามมี</td></tr><tr><td><strong>WHERE</strong></td><td>ข้อมูลและการทำงานอยู่ที่ไหน</td><td>storage, infrastructure, integration, data flow</td></tr><tr><td><strong>WHEN</strong></td><td>อะไรเกิดขึ้นตอนไหน</td><td>trigger, expiry, schedule, blocking condition</td></tr><tr><td><strong>WHO</strong></td><td>ใครทำอะไรได้</td><td>role, permission, ownership, approval</td></tr><tr><td><strong>WHY</strong></td><td>ทำไม rule นี้มีอยู่</td><td>business intent, validation, policy</td></tr><tr><td><strong>HOW</strong></td><td>ระบบทำงานและพังอย่างไร</td><td>error handling, recovery, consistency, rollback</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ผมชอบตรงที่มันไม่ได้ถามแค่ว่า “อยากได้ feature อะไร” แต่มันถามด้วยว่า “อะไรห้ามเกิดขึ้น” ซึ่งปกติเราไม่ค่อยเขียนลง requirement กัน ทั้งที่ในโลกจริง สิ่งที่ห้ามเกิดขึ้นนี่สำคัญมาก</p>



<h2 class="wp-block-heading">Greenfield คือพื้นที่ว่างที่อันตรายกว่าที่คิด</h2>



<p class="wp-block-paragraph"><strong>Greenfield project</strong> คือโปรเจกต์ที่เริ่มใหม่แทบทั้งหมด ไม่มี schema เดิม ไม่มี API เดิม ไม่มี legacy ให้ต้องเกรงใจ</p>



<p class="wp-block-paragraph">ข้อดีคือเราออกแบบใหม่ได้เต็มที่ แต่ข้อเสียคือไม่มีอะไรคอยขัด AI เลย ถ้าเรา spec ไม่ครบ มันจะเติมโลกทั้งใบให้เราเอง</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Greenfield ไม่ได้เสี่ยงเพราะไม่มีของเดิม แต่มันเสี่ยงเพราะไม่มีแรงต้านเวลา AI เดา</p>
</blockquote>



<p class="wp-block-paragraph">ในบทความเสนอว่า สำหรับ greenfield ต้องตอบให้ครบทุกมิติ โดยเฉพาะคำถามที่คนมักข้าม เช่น</p>



<ul class="wp-block-list">
<li>ระบบนี้ทำอะไร และไม่ทำอะไร</li>



<li>entity ไหนมีจริง entity ไหนห้ามมี</li>



<li>ข้อมูลอะไรห้ามเก็บเด็ดขาด เช่น PII, payment data, secret</li>



<li>ใครเห็นข้อมูลอะไรได้บ้าง</li>



<li>เมื่อเกิด error ระบบควร fail แบบไหน</li>



<li>ถ้าเจอข้อมูลไม่ครบ ระบบควรหยุดหรือเดา</li>
</ul>



<p class="wp-block-paragraph">ถ้าเขียนแบบนี้ก่อนให้ AI ทำงาน โอกาสที่มันจะสร้าง table ประหลาดๆ หรือ flow ที่ดูสมเหตุสมผลแต่ผิด business rule จะน้อยลงมาก</p>



<h2 class="wp-block-heading">Brownfield ต้องล็อกของเดิมก่อนค่อยสั่งของใหม่</h2>



<p class="wp-block-paragraph"><strong>Brownfield project</strong> คือระบบที่มีอยู่แล้ว อาจมี database จริง มี user ใช้งานจริง มี API consumer ภายนอก มี technical debt ที่ทุกคนรู้ว่าไม่สวย แต่แตะมั่วไม่ได้</p>



<p class="wp-block-paragraph">ตรงนี้บทความให้แนวคิดที่ผมว่าโดนมาก คือ brownfield ไม่ควร spec ทั้งระบบใหม่ แต่ควร spec เฉพาะ <strong>delta</strong> หรือส่วนที่เปลี่ยน</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Greenfield คือเติมทุกมิติ ส่วน brownfield คือ lock สิ่งที่มีอยู่ แล้วระบุเฉพาะสิ่งที่จะเปลี่ยน</p>
</blockquote>



<p class="wp-block-paragraph">นี่เป็นจุดที่หลายทีมพลาด รวมถึงผมเองก็เคยพลาดครับ เวลาใช้ AI กับระบบเดิม เรามักคิดว่าให้ context เยอะๆ แล้วมันจะเข้าใจ แต่ถ้าเราไม่บอกว่า “ห้ามแตะอะไร” มันอาจช่วยเกินหน้าที่</p>



<p class="wp-block-paragraph">ตัวอย่างง่ายๆ เช่น เราขอเพิ่ม endpoint ใหม่สำหรับ export report แต่ถ้าไม่ได้ lock authentication pattern เดิมไว้ AI อาจ generate middleware แบบใหม่ หรือแก้ permission model ให้ดูสะอาดขึ้น ซึ่งดูดีใน diff แต่พังกับระบบจริง</p>



<h2 class="wp-block-heading">ก่อน spec ระบบเก่า ต้องป้อน context ของระบบเก่าก่อน</h2>



<p class="wp-block-paragraph">สำหรับ brownfield บทความแนะนำให้เริ่มด้วย Step 0 คือป้อน context ของระบบเดิมก่อนตอบ ZeeSpec</p>



<ul class="wp-block-list">
<li>schema ปัจจุบัน แม้จะเป็น version ย่อก็ยังดีกว่าไม่มี</li>



<li>API pattern ที่ใช้อยู่ เช่น naming, response shape, error format</li>



<li>tech stack และ infrastructure ที่เปลี่ยนไม่ได้</li>



<li>constraint ที่เป็น non-negotiable เช่น ต้องใช้ PostgreSQL 14 หรือห้าม breaking change กับ client เดิม</li>
</ul>



<p class="wp-block-paragraph">ผมว่าข้อนี้ practical มาก เพราะ AI ที่ไม่เห็น schema จะออกแบบรอบ schema ไม่ได้ มันจะออกแบบ schema ใหม่ให้เราแทน ซึ่งใน brownfield นี่คือความเจ็บปวดล้วนๆ</p>



<h2 class="wp-block-heading">วิธีคิดต่างกันระหว่าง greenfield กับ brownfield</h2>



<p class="wp-block-paragraph">ถ้าเอามาแปลงเป็นภาษาคนทำงานจริง ผมจะสรุปแบบนี้ครับ</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>เรื่อง</th><th>Greenfield</th><th>Brownfield</th></tr></thead><tbody><tr><td>จุดเริ่มต้น</td><td>เริ่มจากศูนย์</td><td>เริ่มจากระบบที่มีข้อจำกัดอยู่แล้ว</td></tr><tr><td>ความเสี่ยงหลัก</td><td>AI invent สิ่งที่เราไม่ได้สั่ง</td><td>AI overwrite หรือ refactor สิ่งที่ยังทำงานอยู่</td></tr><tr><td>กลยุทธ์</td><td>ตอบให้ครบทุกมิติ</td><td>ล็อกของเดิม แล้วระบุเฉพาะ delta</td></tr><tr><td>สิ่งที่ควรเน้น</td><td>domain model, boundary, rule, failure behavior</td><td>compatibility, migration, rollback, non-breaking change</td></tr><tr><td>ประโยคเตือนใจ</td><td>อย่าให้ AI เดาโลกใหม่เอง</td><td>อย่าให้ AI ทำความสะอาดบ้านจนโยนของสำคัญทิ้ง</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Conflict ใน spec ไม่ใช่ edge case แต่มันคือ bug ตั้งแต่ยังไม่เขียนโค้ด</h2>



<p class="wp-block-paragraph">อีกประเด็นที่ผมชอบคือ เวลาคำตอบใน spec ขัดกัน ZeeSpec ไม่ควรปล่อยผ่าน</p>



<p class="wp-block-paragraph">เช่น ในมิติ WHO เราบอกว่าเฉพาะ Admin เท่านั้นที่ลบ user ได้ แต่ในมิติ WHEN เราบอกว่า unverified account จะถูกลบอัตโนมัติหลัง 30 วัน แบบนี้มันมี conflict อยู่แล้ว</p>



<p class="wp-block-paragraph">ถ้าเราไม่ resolve ตอน spec AI อาจ resolve ให้เองแบบเงียบๆ และเราอาจไม่รู้ด้วยว่ามันเลือกทางไหน</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Spec ที่ขัดกัน คือ bug ที่ยังไม่ได้ compile</p>
</blockquote>



<p class="wp-block-paragraph">ผมชอบประโยคนี้มาก เพราะมันทำให้เราเปลี่ยนมุมมองจาก “เดี๋ยวค่อยดูตอน implementation” เป็น “ต้องเคลียร์ก่อนให้ AI ลงมือ”</p>



<h2 class="wp-block-heading">เอาไปใช้กับงานจริงได้ยังไง</h2>



<p class="wp-block-paragraph">ถ้าจะเอาแนวคิดนี้ไปใช้กับทีม software development ผมคิดว่าไม่จำเป็นต้องเริ่มด้วย 60 ข้อแบบเต็มทันที เพราะเดี๋ยวทีมจะรู้สึกว่าเอกสารกลับมาฆ่าเราอีกแล้ว 555</p>



<p class="wp-block-paragraph">เริ่มแบบเบากว่านั้นก็ได้ เช่น ก่อนให้ AI ทำ feature ใดๆ ให้ตอบ 6 ช่องนี้ให้ได้ก่อน</p>



<ul class="wp-block-list">
<li><strong>WHAT</strong> จะเพิ่มหรือเปลี่ยนอะไร และอะไรไม่อยู่ใน scope</li>



<li><strong>WHERE</strong> ต้องแตะ file, service, database, integration ไหนบ้าง และอะไรห้ามแตะ</li>



<li><strong>WHEN</strong> flow ใหม่เกิดตอนไหน กระทบ trigger เดิมไหม</li>



<li><strong>WHO</strong> role ไหนใช้ได้ role ไหนห้ามใช้</li>



<li><strong>WHY</strong> business rule สำคัญคืออะไร ทำไมต้องเป็นแบบนี้</li>



<li><strong>HOW</strong> migration, rollback, error, test ต้องเป็นอย่างไร</li>
</ul>



<p class="wp-block-paragraph">สำหรับ greenfield ให้ช่องพวกนี้เป็นการออกแบบระบบ สำหรับ brownfield ให้ช่องพวกนี้เป็นรั้วกัน AI ไม่ให้ไปช่วยแก้สิ่งที่ไม่ควรแก้</p>



<h2 class="wp-block-heading">Prompt แบบย่อสำหรับ greenfield</h2>



<p class="wp-block-paragraph">อันนี้ผมเรียบเรียงเป็น template สั้นๆ เอาไว้ใช้ได้เลย</p>



<pre class="wp-block-code"><code>System: &#91;ชื่อระบบ]
Assumption: เริ่มใหม่ ไม่มี infrastructure เดิม

WHAT: entity, relationship, boundary, สิ่งที่ห้ามมี, ข้อมูลที่ห้ามเก็บ
WHERE: infrastructure, data flow, integration, system boundary
WHEN: trigger ของ create/update/delete, expiry, blocking condition
WHO: role, permission, visibility, approval
WHY: business rule, intent, validation, เหตุผลของข้อจำกัด
HOW: error handling, recovery, consistency, idempotency, test

Generate a system spec with no unstated assumptions. If information is missing, ask before generating code.</code></pre>



<h2 class="wp-block-heading">Prompt แบบย่อสำหรับ brownfield</h2>



<p class="wp-block-paragraph">ส่วน brownfield ผมจะเน้นคำว่า unchanged และ delta ให้ชัด เพราะนี่คือหัวใจของระบบเดิม</p>



<pre class="wp-block-code"><code>Existing system context: &#91;paste schema / API pattern / tech stack / non-negotiable constraints]

New feature: &#91;ชื่อ feature] 

WHAT: delta only, new entity, changed field, สิ่งที่ exclude ชัดเจน 
WHERE: existing infrastructure unchanged, list what must not change 
WHEN: new trigger, conflict with existing trigger, blocking rule เดิมที่ยังต้องใช้ WHO: permission ใหม่อิง role เดิม, role ที่ห้าม access 
WHY: เหตุผลของ feature และเหตุผลที่ constraint เดิมยัง valid 
HOW: migration path, backward compatibility, rollback, tests Generate only the delta. 

Do not refactor existing components unless explicitly requested.</code></pre>



<h2 class="wp-block-heading">สิ่งที่ผมได้จากบทความนี้</h2>



<p class="wp-block-paragraph">ผมว่าประเด็นของ ZeeSpec ไม่ใช่แค่ “เขียน spec ให้ละเอียดขึ้น” แต่คือ “เปลี่ยนหน้าที่ของ spec”</p>



<p class="wp-block-paragraph">เมื่อก่อน spec มักเป็นเอกสารอธิบายให้คนอ่าน แต่ในยุค AI coding spec กลายเป็นรั้วกั้นพฤติกรรมของเครื่องมือ ถ้ารั้วหลวม AI ก็เดินออกนอกเขต ถ้ารั้วไม่บอกตำแหน่งท่อ มันก็อาจขุดโดนท่อ</p>



<p class="wp-block-paragraph">ฟังดูเหมือนกลับไปยุคเขียนเอกสารเยอะๆ แต่ผมว่าไม่ใช่ครับ จุดต่างคือ spec แบบนี้ไม่ได้เขียนเพื่อความสวยงามหรือ compliance อย่างเดียว แต่มันเขียนเพื่อควบคุมสิ่งที่จะถูก generate ออกมาจริง จะได้ไม่ต้องเสียเวลา เสียโทเค็น แล้วได้ผลลัพธ์ผิดๆ แบบที่ทำให้อารมณ์เสีย</p>



<p class="wp-block-paragraph">และยิ่ง AI เขียนโค้ดได้เร็วขึ้นเท่าไร spec ยิ่งสำคัญขึ้นเท่านั้น</p>



<p class="wp-block-paragraph">เพราะความเร็วไม่ได้ช่วยอะไร ถ้าเอไอลากเราวิ่งหลงทาง ผ่าม!</p>



<h2 class="wp-block-heading">แหล่งที่มา</h2>



<ul class="wp-block-list">
<li><a href="https://medium.com/@visrow/zeespec-spec-driven-development-for-greenfield-vs-brownfield-projects-c593b5d88186" target="_blank" rel="noopener">ZeeSpec- Spec Driven Development for Greenfield vs Brownfield Projects</a> โดย Vishal Mysore</li>



<li><a href="https://dev.to/vishalmysore/spec-driven-development-with-zeespec-greenfield-vs-brownfield-4103" target="_blank" rel="noopener">Spec Driven Development with ZeeSpec : greenfield vs brownfield</a> บน DEV Community</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/7769/zeespec-spec/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
