<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>บล็อก Maguyva</title><description>บทความเจาะลึกเชิงเทคนิคเกี่ยวกับโค้ดอินเทลลิเจนซ์ MCP สถาปัตยกรรมเอเจนต์ AI และบทเรียนจากการสร้างแพลตฟอร์มค้นหาโค้ดที่รองรับหลายภาษา</description><link>https://maguyva.ai/th/blog</link><language>th</language><atom:link href="https://maguyva.ai/th/rss.xml" rel="self" type="application/rss+xml"/><item><title>บริบทที่เดินทางไปกับคุณ</title><link>https://maguyva.ai/th/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/th/blog/context-that-travels</guid><description>ตัวสร้างดัชนีของ Cursor นั้นยอดเยี่ยมภายใน Cursor เอง Maguyva คือแผนที่ MCP บนคลาวด์ที่เอเจนต์ตัวเดียวกันสามารถสอบถามได้จากตัวแก้ไขโค้ด, CLI และ CI อื่น ๆ</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ตัวสร้างดัชนีของ Cursor นั้นยอดเยี่ยมภายใน Cursor เอง การเติมคำในแท็บ การแก้ไขแบบอินไลน์ แชท และเอเจนต์ในหน้าต่างนั้นล้วนพึ่งพาดัชนีโปรเจกต์ที่ Cursor รันสำหรับพื้นที่ทำงานที่เปิดอยู่แล้ว หาก Cursor คือพื้นผิวเดียวที่คุณเขียนโค้ด และดัชนีนั้นก็หาไฟล์ที่ถูกต้องเจออยู่แล้ว ก็จงอยู่ที่นั่นต่อไป นี่คือกรณี ‘อยู่ที่เดิม’ ตามความเป็นจริง และมันสมควรเป็นประโยคแรกของหน้านี้&lt;/p&gt;
&lt;p&gt;บทความนี้พูดถึงอีกครึ่งหนึ่งของสัปดาห์ทั่วไป รีโพซิทอรีเดียวกันนั้นก็เปิดอยู่ใน Claude Code เช่นกัน ถูกสอบถามจาก Codex CLI ถูกตรวจสอบบนเครื่องที่สอง หรือถูกสอบถามโดยเอเจนต์ที่รันใน CI คำถามไม่ใช่ ‘ตัวสร้างดัชนีตัวไหนดีกว่า’ คำถามคือแผนที่ที่เอเจนต์เชื่อถือในหน้าต่างหนึ่งนั้นเป็นแผนที่เดียวกันกับที่มันเชื่อถือในหน้าต่างถัดไปหรือไม่&lt;/p&gt;
&lt;p&gt;Maguyva คือแผนที่ที่เดินทางไปกับคุณ มันคือชั้นบริบทโค้ดเบส MCP ระยะไกล เอเจนต์สอบถามมันในลักษณะเดียวกับที่สอบถามเครื่องมือ MCP อื่น ๆ ผลลัพธ์กลับมาเป็นเส้นทางไฟล์ที่จัดอันดับแล้วพร้อมหมายเลขบรรทัด Cursor ยังคงเป็นตัวแก้ไขโค้ด บริบทต่างหากที่เคลื่อนที่&lt;/p&gt;
&lt;h2 id=&quot;ตัวสร้างดัชนีของ-cursor-มีไว้เพื่ออะไร&quot;&gt;ตัวสร้างดัชนีของ Cursor มีไว้เพื่ออะไร&lt;/h2&gt;
&lt;p&gt;การสร้างดัชนีในตัวของ Cursor มีอยู่เพื่อให้แชท เอเจนต์ และการค้นหาภายในตัวแก้ไขโค้ดสามารถดึงโค้ดที่เกี่ยวข้องได้ แทนที่จะพึ่งพาเพียงสิ่งที่พอดีกับหน้าต่างบริบทดิบของโมเดล นี่คือการออกแบบที่ถูกต้องสำหรับ IDE ดัชนีนี้เป็นแบบเนทีฟของ Cursor มันไม่ใช่เซิร์ฟเวอร์ MCP และไคลเอนต์อื่นเข้าถึงไม่ได้&lt;/p&gt;
&lt;p&gt;นี่คือวิธีการทำงาน ตามที่อธิบายไว้ในเอกสารสาธารณะของ Cursor และคำอธิบายของ Cursor เอง ณ เวลาที่เขียนบทความนี้: เส้นทางการค้นหาหลักไม่ใช่ดัชนี embedding บนคลาวด์อีกต่อไป ทีม Cursor ระบุในฟอรัมชุมชนของพวกเขาว่าการค้นหาเชิงความหมายด้วย embedding เฉพาะทางกำลังถูกลดบทบาทลง เพื่อหันไปใช้การดึงข้อมูลแบบ grep เนื่องจากโมเดลปัจจุบันเก่งพอที่จะสำรวจต้นไม้ไฟล์ปัจจุบันด้วยตัวเองอยู่แล้ว แทนที่ด้วย Instant Grep ซึ่งเป็นดัชนีค้นหาในเครื่องที่สร้างจาก n-gram, รายการดัชนีผกผัน และตัวกรอง Bloom จัดเก็บในตารางค้นหาที่แมปเข้าหน่วยความจำ เพื่อให้คิวรีถูกประมวลผลบนเครื่องของนักพัฒนาเองแทนที่จะเป็นเซิร์ฟเวอร์&lt;/p&gt;
&lt;p&gt;ดัชนีเองอาศัยอยู่ในไดเรกทอรี &lt;code&gt;.git/cursor/&lt;/code&gt; ของรีโพซิทอรีเอง ยึดกับ git commit เฉพาะ การเปลี่ยนแปลงตั้งแต่ commit นั้นจะถูกซ้อนทับแทนที่จะกระตุ้นการสแกนใหม่ และดัชนีจะถูกสร้างใหม่ก็ต่อเมื่อสถานะในเครื่องเบี่ยงเบนไปมากจากสิ่งที่มันสร้างขึ้นบน เนื่องจากมันอยู่ใน &lt;code&gt;.git&lt;/code&gt; มันไม่เคยถูกติดตามและไม่เคยถูกพุชขึ้นรีโมต — ลบโฟลเดอร์นั้น แล้วดัชนีก็หายไป &lt;code&gt;.gitignore&lt;/code&gt; ได้รับการเคารพในการสร้าง เนื่องจากมีเพียงเนื้อหาที่ถูกติดตามเท่านั้นที่มีสิทธิ์ และ &lt;code&gt;.cursorignore&lt;/code&gt; ถูกบังคับใช้ในเส้นทางการอ่าน ไม่มีขั้นตอน embedding ฝั่งเซิร์ฟเวอร์หรือฐานข้อมูลเวกเตอร์ระยะไกลในเส้นทางนั้นอีกต่อไป เอกสารเก่าเคยอธิบายการออกแบบที่ช่วยเหลือด้วยคลาวด์ — การเข้ารหัสชิ้นส่วนโค้ด, การซิงค์ผ่านต้นไม้ Merkle, การใช้ดัชนีร่วมกันระหว่างสมาชิกในทีม — และทีม Cursor เองก็กล่าวตั้งแต่นั้นมาว่าการออกแบบนั้นกำลังถูกลดบทบาทลง ดังนั้นบทความนี้จึงไม่อธิบายมันว่าเป็นปัจจุบันอีกต่อไป&lt;/p&gt;
&lt;p&gt;สิ่งที่โดดเด่นภายในตัวแก้ไขโค้ดคือเอเจนต์ย่อย Explore ของ Cursor มันสามารถเปิดการค้นหาแบบขนานหลายรายการในหน้าต่างบริบทของตัวเองบนโมเดลที่เร็วกว่า และส่งคืนเฉพาะสิ่งที่ค้นพบที่เกี่ยวข้องเท่านั้น เพื่อไม่ให้บทสนทนาหลักบวมด้วยผลการค้นหา นั่นคือจุดแข็งที่แท้จริงภายในตัวแก้ไขโค้ด รักษามันไว้&lt;/p&gt;
&lt;p&gt;พื้นที่ทำงานแบบหลายรูทได้รับการรองรับ: บริบทของแต่ละโฟลเดอร์ที่เปิดอยู่จะพร้อมใช้งานสำหรับ Agent คุณสมบัติบางอย่างที่พึ่งพา git เช่น worktree จะถูกปิดใช้งานในการตั้งค่าแบบหลายรูท และ Cloud Agents ไม่รองรับพื้นที่ทำงานแบบหลายรูทเลย&lt;/p&gt;
&lt;p&gt;ไม่มีสิ่งใดในนี้ที่เป็นเหตุผลให้เลิกใช้ Cursor มันคือคำอธิบายที่ถูกต้องของแผนที่ที่ดีมากในที่ที่มันอาศัยอยู่&lt;/p&gt;
&lt;h2 id=&quot;เดินทางไปกับคุณ-หมายความว่าอย่างไรกันแน่&quot;&gt;‘เดินทางไปกับคุณ’ หมายความว่าอย่างไรกันแน่&lt;/h2&gt;
&lt;p&gt;แผนที่จะเดินทางไปกับคุณเมื่อคำถามเดียวกันให้คำตอบประเภทเดียวกันกลับมา พร้อมการอ้างอิงที่คุณเปิดได้ จากไคลเอนต์มากกว่าหนึ่งตัว&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ใน Cursor: ‘&lt;code&gt;parseConfig&lt;/code&gt; ถูกกำหนดที่ไหน และใครเรียกใช้มัน’&lt;/li&gt;
&lt;li&gt;ใน Claude Code บนรีโพเดียวกัน: คำถามเดียวกัน&lt;/li&gt;
&lt;li&gt;ใน Codex CLI บนเครื่องตรวจสอบที่ไม่เคยเปิดหน้าต่าง Cursor เลย: คำถามเดียวกัน&lt;/li&gt;
&lt;li&gt;ในเอเจนต์ CI ที่พูดภาษา MCP: คำถามเดียวกัน กับสแนปช็อตบนคลาวด์เดียวกัน&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;หากทุกพื้นผิวสร้างดัชนีส่วนตัวของตัวเอง คุณก็ไม่ได้มีแผนที่เดียว คุณมีแคชหลายชุดที่กำลังเบี่ยงเบนออกจากกัน ดัชนีของตัวแก้ไขโค้ดอาจอัปเดตล่าสุดสำหรับต้นไม้บนดิสก์ เซสชัน CLI อาจล้าหลังไปหนึ่งวัน งาน CI อาจเห็นสำเนาโค้ดที่เช็กเอาต์ไว้ต่างกัน และเอเจนต์ก็จะยังคงฟังดูมั่นใจอยู่ดี&lt;/p&gt;
&lt;p&gt;ตัวสร้างดัชนีของ Cursor ไม่ได้ถูกออกแบบมาเพื่อแก้ปัญหานั้น เนื่องจากมันอาศัยอยู่ภายในตัวแก้ไขโค้ด บริบทที่มันสร้างจึงมีไว้สำหรับตัวแก้ไขโค้ดนั้น ผู้อ่านที่ต้องการ CLI, ไปป์ไลน์ CI หรือตัวแก้ไขโค้ดอื่นด้วยเช่นกัน จำเป็นต้องมีเครื่องมือแยกต่างหากสำหรับพื้นผิวเหล่านั้น นี่คือข้อเท็จจริงเรื่องขอบเขต ไม่ใช่ข้อบกพร่อง Maguyva คือเครื่องมือแยกต่างหากนั้น&lt;/p&gt;
&lt;p&gt;จำนวนภาษาที่เผยแพร่สำหรับตัวสร้างดัชนีของ Cursor ไม่ได้ถูกระบุไว้ในเนื้อหาที่ใช้งานได้ของบทความนี้ Maguyva เผยแพร่การรองรับมากกว่า 279 ภาษาและเทคโนโลยีที่อิงข้อความ ราคาของ Cursor ก็ไม่ได้ถูกทำซ้ำที่นี่เช่นกัน ดูหน้าราคาของพวกเขา Maguyva คิดค่าบริการต่อพื้นที่ทำงาน ไม่ใช่ต่อที่นั่ง โดยมีแผนที่เผยแพร่ที่ $0, $19, $49 และ $149 ขึ้นอยู่กับความครอบคลุมที่จัดทำดัชนีและขนาดพื้นที่ทำงาน&lt;/p&gt;
&lt;h2 id=&quot;แผนที่บนคลาวด์เดียว-ทุกไคลเอนต์-mcp&quot;&gt;แผนที่บนคลาวด์เดียว ทุกไคลเอนต์ MCP&lt;/h2&gt;
&lt;p&gt;Maguyva คือเซิร์ฟเวอร์ MCP ระยะไกล คุณเชื่อมต่อ GitHub เลือกรีโพซิทอรีและไปป์ไลน์บนคลาวด์จะสร้างสัญลักษณ์ ขอบกราฟ และแผนที่ที่จัดอันดับแล้ว คุณเพิ่มคีย์ API ในการตั้งค่า MCP ของไคลเอนต์ที่คุณใช้อยู่แล้ว Maguyva มีคู่มือการตั้งค่าสำหรับไคลเอนต์ MCP ที่มีเอกสารประกอบ 24 ตัว — รวมถึง Cursor — และสามารถเชื่อมต่อกับไคลเอนต์ที่เข้ากันได้กับ MCP อื่น ๆ ที่รองรับการตั้งค่ามาตรฐานได้&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/th/for-cursor&quot;&gt;หน้าการตั้งค่า Cursor&lt;/a&gt; เป็นเส้นทางเฉพาะสำหรับตัวแก้ไขโค้ด หากนั่นคือที่ที่คุณทำงาน เซิร์ฟเวอร์เดียวกันตอบสนอง Claude Code, VS Code, Windsurf, Codex CLI และอื่น ๆ คุณไม่ได้เปลี่ยนตัวแก้ไขโค้ด คุณกำลังมอบพื้นผิวเครื่องมือเดียวกันให้กับทุกเอเจนต์: เครื่องมือ MCP ที่เน้นลูกค้า 11 ตัวครอบคลุมการค้นหา สัญลักษณ์ การวิเคราะห์การพึ่งพา การดึงไฟล์ บริบทรีโพซิทอรีและเวิร์กโฟลว์เครื่องมืออรรถประโยชน์ที่กำหนดผลลัพธ์ได้แน่นอน การค้นหาเชิงความหมาย เชิงโครงสร้าง เชิงกราฟ และข้อความรวมกันเป็นผลลัพธ์ที่มีการจัดอันดับ&lt;/p&gt;
&lt;p&gt;นั่นคือประโยชน์ของความสามารถในการพกพา การอ้างอิงที่คุณตรวจสอบใน Cursor เมื่อเช้านี้มีรูปแบบเดียวกันกับที่ Codex CLI จะส่งคืนในคืนนี้ เส้นทางไฟล์และหมายเลขบรรทัด เปิดมัน หากผิด คุณจะเห็น หากถูกต้อง การเปลี่ยนแปลงถัดไปก็มีที่ให้ลงจอด สิ่งที่อ้างคือการเปลี่ยนแปลงที่หลอนน้อยลง ไม่ใช่คำสัญญาว่าทุกการเปลี่ยนแปลงจะถูกต้อง&lt;/p&gt;
&lt;p&gt;ความสดใหม่ถูกเผยแพร่ สแนปช็อตมีการประทับเวลา เพื่อให้เอเจนต์รู้ว่ากำลังอ่านต้นไม้เวอร์ชันใด อัตราการสร้างใหม่คือรายวันในแผนฟรีและรายชั่วโมงในแผนที่เสียเงิน ข้อจำกัดตามจริงคืองานในเครื่องที่ยังไม่ซิงค์: การเปลี่ยนแปลงที่มีอยู่เฉพาะในไดเรกทอรีทำงานยังไม่อยู่ในแผนที่บนคลาวด์ ข้อจำกัดนี้ไม่ขึ้นอยู่กับไคลเอนต์ที่คุณใช้สอบถาม และนั่นคือประเด็นที่แท้จริง การเบี่ยงเบนระหว่างไคลเอนต์ไม่ใช่ข้อจำกัดที่ซ่อนอยู่ตัวที่สองอีกต่อไป&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/th/docs&quot;&gt;เอกสารประกอบ&lt;/a&gt; ให้วงจรการเปิดใช้งานเดียวกันสำหรับทุกไคลเอนต์: จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว เชื่อมต่อไคลเอนต์ ถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ ทำสิ่งนั้นครั้งหนึ่งใน Cursor ทำอีกครั้งจาก CLI ที่คุณใช้จริงในวันตรวจสอบ หากคำตอบทั้งสองอ้างอิงตัวจัดการเดียวกัน แสดงว่าแผนที่ได้เดินทางไปกับคุณจริง ๆ&lt;/p&gt;
&lt;h2 id=&quot;แผนที่ทั้งสองอยู่ร่วมกันอย่างไร&quot;&gt;แผนที่ทั้งสองอยู่ร่วมกันอย่างไร&lt;/h2&gt;
&lt;p&gt;ใช้ทั้งสองอย่าง มันไม่ใช่ทางเลือกในความหมายของหน้าเปรียบเทียบ&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;เปิดตัวสร้างดัชนีของ Cursor ไว้สำหรับโปรเจกต์บนดิสก์ ให้ Explore, Instant Grep และเอเจนต์ภายในตัวแก้ไขโค้ดใช้มัน วงจรนั้นเป็นแบบเนทีฟและรวดเร็ว&lt;/li&gt;
&lt;li&gt;เพิ่ม Maguyva เป็นเซิร์ฟเวอร์ MCP ใน Cursor เพื่อให้เซสชันเดียวกันสามารถสอบถามแผนที่พื้นที่ทำงานบนคลาวด์ได้ด้วย Cursor เป็นไคลเอนต์ Maguyva ที่มีเอกสารประกอบ คุณไม่ได้เลือกดัชนีหนึ่งแล้วลบอีกดัชนีหนึ่ง&lt;/li&gt;
&lt;li&gt;เพิ่มเซิร์ฟเวอร์ Maguyva ตัวเดียวกันไปยัง Claude Code, Codex CLI หรือไคลเอนต์ MCP อื่นใดที่แตะต้องรีโพ รูปแบบคีย์ API เดียว พื้นที่ทำงานเดียว&lt;/li&gt;
&lt;li&gt;หากเอเจนต์ CI เข้ากันได้กับ MCP ให้ชี้ไปที่เซิร์ฟเวอร์เดียวกัน มันจะอ่านสแนปช็อตที่มีการประทับเวลาเดียวกับที่แล็ปท็อปอ่าน&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ดัชนีของตัวแก้ไขโค้ดยังคงเป็นเครื่องมือที่ดีที่สุดสำหรับ ‘มีอะไรอยู่บนดิสก์ในหน้าต่างนี้ ตอนนี้’ แผนที่บนคลาวด์คือเครื่องมือที่ดีที่สุดสำหรับ ‘พื้นที่ทำงานนี้มีลักษณะอย่างไรสำหรับทุกเอเจนต์ที่จะแตะต้องมันวันนี้’ ประโยคเหล่านั้นไม่ได้แข่งขันกัน&lt;/p&gt;
&lt;p&gt;โควตาพื้นที่ทำงานถูกเผยแพร่ที่&lt;a href=&quot;https://maguyva.ai/th/pricing&quot;&gt;หน้าราคา&lt;/a&gt;: รีโพ, บรรทัดที่จัดทำดัชนี และผู้ใช้ คิดค่าบริการต่อพื้นที่ทำงาน เอเจนต์และมนุษย์ใช้จำนวนผู้ใช้ร่วมกัน เริ่มต้นฟรีกับรีโพที่คุณสามารถประเมินได้อยู่แล้ว อัปเกรดพื้นที่ทำงานหลังจากการอ้างอิงพิสูจน์ตัวเองจากการสัมผัสกับต้นไม้นั้นเท่านั้น&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่หน้านี้ไม่ได้อ้าง&quot;&gt;สิ่งที่หน้านี้ไม่ได้อ้าง&lt;/h2&gt;
&lt;p&gt;มันไม่ได้อ้างว่าตัวสร้างดัชนีของ Cursor อ่อนแอ ไม่สมบูรณ์ หรือเป็นเหตุผลให้เปลี่ยนตัวแก้ไขโค้ด ประโยคแรกของบทความนี้ระบุตรงกันข้าม&lt;/p&gt;
&lt;p&gt;มันไม่ได้อ้างว่า Maguyva แทนที่ Instant Grep หรือเอเจนต์ย่อย Explore สิ่งเหล่านั้นคือคุณสมบัติของ Cursor มันยังคงอยู่ใน Cursor&lt;/p&gt;
&lt;p&gt;มันไม่ได้สร้างจำนวนภาษา ตัวเลขความหน่วง หรือการประหยัด token สำหรับผลิตภัณฑ์ใด ๆ ตัวเลขที่ไม่ทราบยังคงไม่ได้เผยแพร่&lt;/p&gt;
&lt;p&gt;มันไม่ได้แสร้งทำเป็นว่างานในเครื่องที่ยังไม่ได้พุชอยู่ในแผนที่บนคลาวด์ สแนปช็อตที่มีการประทับเวลาทำให้ข้อจำกัดนั้นมองเห็นได้ มันไม่ได้ลบล้างข้อจำกัดนั้น&lt;/p&gt;
&lt;p&gt;การทดสอบนั้นเรียบง่าย จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว ถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ ก่อนใน Cursor แล้วในไคลเอนต์ MCP ตัวที่สอง บริบทที่เดินทางไปกับคุณคือการอ้างอิงเดียวกันในทั้งสองที่&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>แผนที่ก่อน ตรวจสอบทีหลัง</title><link>https://maguyva.ai/th/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/th/blog/map-first-review-second</guid><description>ให้เอเจนต์เขียนโค้ดของคุณยึดกับแผนที่รีโพ ก่อนที่มันจะเขียน จากนั้นให้ Greptile ตรวจสอบคำขอรวมโค้ดทีหลัง คู่หูที่เสริมกัน ไม่ใช่ตัวแทนกัน</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;งานที่แตกต่างกันสองอย่างอยู่ในสองด้านของ pull request ก่อนที่เอเจนต์จะเขียน มันต้องการแผนที่ของต้นไม้ที่มันกำลังจะเปลี่ยนแปลง หลังจากที่เอเจนต์เปิด PR แล้ว บางสิ่งต้องอ่านการเปลี่ยนแปลงนั้นเทียบกับระบบที่เหลือ และทิ้งความคิดเห็นที่มนุษย์สามารถนำไปปฏิบัติได้&lt;/p&gt;
&lt;p&gt;งานเหล่านี้ดูคล้ายกันจากระยะไกลเพราะทั้งคู่เกี่ยวข้องกับ ‘การเข้าใจโค้ดเบส’ มันไม่ใช่ผลิตภัณฑ์เดียวกัน อย่างหนึ่งตอบว่า ‘การเปลี่ยนแปลงนี้ควรลงจอดที่ไหน?’ อีกอย่างตอบว่า ‘อะไรที่ diff นี้ทำพังที่ลินเตอร์แบบบรรทัดต่อบรรทัดจะพลาดไป?’ การผสมทั้งสองเข้าด้วยกันให้ผลเป็นร่างแรกที่แย่กว่าและการตรวจสอบที่มีเสียงรบกวนมากกว่า&lt;/p&gt;
&lt;p&gt;บทความนี้คือคู่มือเวิร์กโฟลว์แบบคู่ Maguyva คือแผนที่ที่เอเจนต์สอบถามก่อน Greptile คือเอเจนต์ตรวจสอบที่แสดงความคิดเห็นบน PR หลังจากนั้น คู่นี้เสริมกันตามการออกแบบ: Maguyva ไม่ตรวจสอบ pull request และ Greptile ไม่แทนที่ชั้นบริบทที่เอเจนต์ใช้เขียนมัน&lt;/p&gt;
&lt;h2 id=&quot;ทำไมการแบ่งแยกนี้จึงมีประโยชน์&quot;&gt;ทำไมการแบ่งแยกนี้จึงมีประโยชน์&lt;/h2&gt;
&lt;p&gt;เอเจนต์เขียนโค้ดที่เริ่มต้นด้วยอคติจากการฝึกฝนบวกกับไฟล์บางไฟล์ที่ถูกวางไว้ จะประดิษฐ์เส้นทางที่น่าเชื่อถือขึ้นมาและแก้ไขมัน นี่คือความล้มเหลวแบบ ‘ไฟล์ผิด’ และมันคือปัญหาการดึงข้อมูล Maguyva คือชั้นบริบทโค้ดเบส MCP ระยะไกล: การดึงข้อมูลเชิงความหมาย เชิงโครงสร้าง (AST) เชิงกราฟ/การพึ่งพา และข้อความรวมกันเป็นผลลัพธ์ที่มีการจัดอันดับ พร้อมการค้นหาสัญลักษณ์และการดึงไฟล์ คำตอบที่มีหลักฐานกลับมาเป็น &lt;code&gt;path/file.ext:line&lt;/code&gt; เพื่อให้คุณปฏิเสธข้อผิดพลาดได้ก่อนที่ patch จะมีอยู่ สิ่งที่อ้างนั้นเรียบง่ายโดยตั้งใจ: การเปลี่ยนแปลงที่หลอนน้อยลง โมเดลยังคงเดาได้ แค่ก้าวแรกไม่ใช่การเดาอีกต่อไป&lt;/p&gt;
&lt;p&gt;Greptile คือเอเจนต์ตรวจสอบโค้ดที่ขับเคลื่อนด้วย AI ในคำพูดของพวกเขาเอง มันตรวจสอบทุก pull request โดยอัตโนมัติด้วยความเข้าใจโค้ดเบสอย่างเต็มที่ และวางตำแหน่งตัวเองเทียบกับลินเตอร์แบบดั้งเดิมที่ตรวจสอบไฟล์แยกกันแทนที่จะเป็นระบบทั้งหมด การตั้งค่าประกอบด้วยการติดตั้งแอป GitHub หรือ GitLab และเลือกรีโพซิทอรี ไม่มีดัชนีในเครื่องที่คุณต้องรัน การโฮสต์คือ Greptile Cloud (พวกเขาระบุว่าปฏิบัติตาม SOC 2 Type II โดยมีรายงานพร้อมให้เมื่อมีการร้องขอ) โดยมีตัวเลือกโฮสต์เองสำหรับองค์กร&lt;/p&gt;
&lt;p&gt;ขั้นตอนที่มีหมายเลขของพวกเขาเองคือ: เชื่อมต่อและสร้างกราฟการพึ่งพาของทุกฟังก์ชัน คลาส และการพึ่งพา; ในทุก pull request วิเคราะห์การเปลี่ยนแปลงโดยใช้กราฟรีโพเต็มรูปแบบนั้น และเผยแพร่ผลการค้นพบเป็นความคิดเห็น PR พร้อมการแก้ไขที่แนะนำ ภายในเวลาประมาณสามนาที; ทุกความคิดเห็นสามารถส่งต่อปัญหาไปยังเอเจนต์เขียนโค้ดที่ทีมใช้อยู่แล้ว พวกเขายังระบุว่าอ่านความคิดเห็น PR ของมนุษย์ในอดีตเมื่อเวลาผ่านไปเพื่อเรียนรู้มาตรฐานโค้ดของทีมและลดคำแนะนำที่มีเสียงรบกวน ระบบการเรียนรู้ของพวกเขา ตามที่พวกเขาระบุเอง ใช้เวลา 2-3 สัปดาห์ในการปรับตัว&lt;/p&gt;
&lt;p&gt;นั่นคือการตรวจสอบ ไม่ใช่การร่าง จุดแข็งของ Greptile คือบริบทกราฟรีโพเต็มรูปแบบเทียบกับการเปลี่ยนแปลงที่ลงจอดแล้วใน PR ตามด้วยวงจรปิดที่ส่งผลการค้นพบไปยัง Claude Code, Codex, Conductor, Cursor หรือ Devin จุดแข็งของ Maguyva คือแผนที่ที่มีการจัดอันดับซึ่งเอเจนต์สอบถามก่อนที่การเปลี่ยนแปลงจะถูกเขียน ใช้ทั้งสองอย่าง อย่าขอให้อย่างหนึ่งทำงานของอีกอย่างหนึ่ง&lt;/p&gt;
&lt;p&gt;ไม่มีการระบุว่ามีการผสานรวมผลิตภัณฑ์อย่างเป็นทางการระหว่าง Maguyva และ Greptile คุณก็ไม่ต้องการมันเช่นกัน Maguyva พูดคุยกับเอเจนต์ผ่าน MCP Greptile พูดคุยกับ GitHub หรือ GitLab ผ่านแอปของพวกเขาเอง พวกเขาพบกันที่ pull request ไม่มีสคริปต์เชื่อมต่อ ไม่มี cron ที่ป้อนเครื่องมือหนึ่งไปยังอีกเครื่องมือหนึ่ง คู่นี้ไม่ต้องการ bash เพราะแต่ละผลิตภัณฑ์นั่งอยู่บนพื้นผิวที่เป็นของตัวเองอยู่แล้ว&lt;/p&gt;
&lt;h2 id=&quot;สิ่งนี้ไม่ใช่อะไร&quot;&gt;สิ่งนี้ไม่ใช่อะไร&lt;/h2&gt;
&lt;p&gt;นี่ไม่ใช่การดูถูก Greptile นี่ไม่ใช่หน้า ‘เปลี่ยนตัวตรวจสอบของคุณ’ Greptile เปิดตัวบน Hacker News เมื่อวันที่ 5 มีนาคม 2024 ในฐานะบริษัท Y Combinator W24 และกระทู้นั้นคือวิธีที่หลาย ๆ คนรู้จักผลิตภัณฑ์นี้เป็นครั้งแรก หากนั่นคือวิธีที่คุณค้นพบพวกเขา ก็ใช้พวกเขาต่อไป หน้านี้คือครึ่งหน้าที่ขาดหายไปของวงจรนั้น: ทำให้เอเจนต์อ้างอิงข้อเท็จจริงก่อน เพื่อให้ PR ที่ Greptile เห็นนั้นกำหนดเป้าหมายไปที่ไฟล์ที่ถูกต้องอยู่แล้ว&lt;/p&gt;
&lt;p&gt;เนื้อหาการตลาดของ Greptile นำเสนอด้วยการอ้างเรื่องความเร็วในการตรวจสอบและการจับบัค ให้ถือว่านั่นเป็นการอ้างของ Greptile เอง ไม่ใช่ตัวเลขที่ได้รับการตรวจสอบอย่างเป็นอิสระ บทความนี้ไม่ได้ทำซ้ำมันเป็นข้อเท็จจริง&lt;/p&gt;
&lt;p&gt;ความครอบคลุมด้านภาษาก็เป็นความซื่อสัตย์แบบเดียวกัน Greptile กำหนดกรอบการรองรับว่าครอบคลุมภาษาโปรแกรมทั้งหมดแทนที่จะเป็นรายการที่ระบุไว้ ตัวเลขที่แน่นอนไม่ได้ระบุไว้ Maguyva เผยแพร่การรองรับมากกว่า 279 ภาษาและเทคโนโลยีที่อิงข้อความ พร้อมการแบ่งแยกทางเทคนิค (AST ที่รองรับโดยตัวแยกวิเคราะห์ไวยากรณ์ เทียบกับข้อความเท่านั้น) บนเว็บไซต์เมื่อคำถามเป็นเรื่องทางเทคนิค นี่คือผลิตภัณฑ์ที่แตกต่างกันที่อ้างสิ่งที่แตกต่างกัน อย่าผสมมันเข้าด้วยกัน&lt;/p&gt;
&lt;p&gt;ราคาของ Greptile ไม่ได้ระบุไว้ในเนื้อหาที่ใช้งานได้ของบทความนี้ แผนที่เสียเงินมีอยู่ ดูหน้าราคาของพวกเขา Maguyva คิดค่าบริการต่อพื้นที่ทำงาน ไม่ใช่ต่อที่นั่ง แผนเริ่มต้นฟรี &lt;a href=&quot;https://maguyva.ai/th/pricing&quot;&gt;หน้าราคา&lt;/a&gt; แสดงรายการระดับที่เผยแพร่หากคุณต้องการตัวเลขพื้นที่ทำงาน&lt;/p&gt;
&lt;h2 id=&quot;เวิร์กโฟลว์&quot;&gt;เวิร์กโฟลว์&lt;/h2&gt;
&lt;p&gt;สามขั้นตอนที่มีชื่อ ดำเนินการตามลำดับนี้ อย่าข้ามข้อใดในครั้งแรกที่คุณลองคู่นี้&lt;/p&gt;
&lt;h3 id=&quot;1-บริบท-maguyva&quot;&gt;1. บริบท Maguyva&lt;/h3&gt;
&lt;p&gt;จัดทำดัชนีรีโพซิทอรีหนึ่งที่คุณรู้จักอยู่แล้ว เชื่อมต่อไคลเอนต์ MCP ที่คุณเขียนโค้ดอยู่แล้ว — Claude Code, Cursor, Codex CLI, VS Code, Windsurf หรือไคลเอนต์ที่เข้ากันได้กับ MCP อื่น ๆ Maguyva มีคู่มือการตั้งค่าสำหรับไคลเอนต์ MCP ที่มีเอกสารประกอบ 24 ตัว และสามารถเชื่อมต่อกับไคลเอนต์อื่น ๆ ที่รองรับการตั้งค่า MCP มาตรฐานได้&lt;/p&gt;
&lt;p&gt;ถามคำถามหนึ่งข้อที่คุณสามารถประเมินได้ก่อนที่ใครจะเขียนอะไรเลย ‘การหมดอายุของเซสชันถูกจัดการที่ไหน และใครเรียกใช้มัน?’ เป็นก้าวแรกที่ดีกว่า ‘แก้ไข auth’ เรียกร้องการอ้างอิง เปิดผลลัพธ์ &lt;code&gt;file.ext:line&lt;/code&gt; ติดตามสัญลักษณ์ ยืนยันการพึ่งพาที่คุณกำลังจะแตะต้อง&lt;/p&gt;
&lt;p&gt;Maguyva เปิดเผยเครื่องมือ MCP ที่เน้นลูกค้า 11 ตัวครอบคลุมการค้นหา สัญลักษณ์ การวิเคราะห์การพึ่งพา การดึงไฟล์ บริบทรีโพซิทอรีและเวิร์กโฟลว์เครื่องมืออรรถประโยชน์ที่กำหนดผลลัพธ์ได้แน่นอน โหมดการดึงข้อมูลสี่แบบรวมกันเป็นผลลัพธ์ที่มีการจัดอันดับ; &lt;code&gt;find_symbol&lt;/code&gt; เป็นเครื่องมือแยกต่างหากเมื่อคุณรู้ชื่ออยู่แล้ว &lt;a href=&quot;https://maguyva.ai/th/docs&quot;&gt;เอกสารประกอบ&lt;/a&gt; อธิบายเส้นทางที่สั้นที่สุด: เริ่มต้นฟรี จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว เชื่อมต่อไคลเอนต์ จากนั้นถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้&lt;/p&gt;
&lt;p&gt;สแนปช็อตมีการประทับเวลา เพื่อให้เอเจนต์บอกได้ว่ากำลังอ่านต้นไม้เวอร์ชันใด ข้อจำกัดตามจริงคืองานในเครื่องที่ยังไม่ซิงค์ หากการเปลี่ยนแปลงมีอยู่เฉพาะในไดเรกทอรีทำงานและยังไม่ได้พุช แผนที่บนคลาวด์ยังไม่มีมัน ไฟล์คำสั่ง (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) ยังคงมีที่ทางที่นี่ สำหรับข้อตกลงและสิ่งที่ไม่ควรแตะต้อง มันไม่ใช่แผนที่ที่มีชีวิต ใช้สำหรับพฤติกรรม ใช้ Maguyva สำหรับข้อเท็จจริง&lt;/p&gt;
&lt;p&gt;อย่าให้เอเจนต์เปิด PR ก่อนที่การอ้างอิงจะพิสูจน์ตัวเองผ่านการสัมผัสกับรีโพ ประตูนั้นคือจุดประสงค์ทั้งหมดของขั้นตอนนี้&lt;/p&gt;
&lt;h3 id=&quot;2-pr-ของเอเจนต์&quot;&gt;2. PR ของเอเจนต์&lt;/h3&gt;
&lt;p&gt;เอเจนต์ตัวเดียวกันตอนนี้เขียนการเปลี่ยนแปลงในไคลเอนต์ที่คุณจ่ายเงินไปแล้ว Maguyva ไม่ใช่ตัวแก้ไขโค้ดหรือตัวตรวจสอบ เอเจนต์ยังคงสร้าง diff คุณยังคงเปิด pull request บน GitHub หรือ GitLab เหมือนที่คุณเคยทำ&lt;/p&gt;
&lt;p&gt;สิ่งที่ควรแตกต่างคือไฟล์แรก PR ควรระบุชื่อตัวจัดการที่อิมพลีเมนต์พฤติกรรมนั้นจริง ผู้เรียกที่จะพัง และการทดสอบที่จะล้มเหลวหากการเปลี่ยนแปลงนั้นผิด หากข้ามขั้นตอนที่ 1 ไป ขั้นตอนที่ 3 จะเสียความคิดเห็นไปกับการเปลี่ยนแปลงที่ลงจอดในแพ็กเกจผิด Greptile ยังคงสามารถค้นหาปัญหาเชิงระบบได้ มันไม่ควรต้องกู้คืนจากเส้นทางที่หลอนด้วย&lt;/p&gt;
&lt;p&gt;รักษา PR ให้เล็ก ไฟล์แรกที่มีหลักฐานไม่ใช่ใบอนุญาตให้เขียนโมดูลใหม่ คู่ที่เสริมกันนี้ทำงานเมื่อเอเจนต์ทำงานหนึ่งอย่างด้วยแผนที่ แล้วขอให้ตัวตรวจสอบทำงานอีกอย่างบน diff ที่จำกัด&lt;/p&gt;
&lt;h3 id=&quot;3-การตรวจสอบของ-greptile&quot;&gt;3. การตรวจสอบของ Greptile&lt;/h3&gt;
&lt;p&gt;Greptile เชื่อมต่อกับรีโพซิทอรีผ่านแอป GitHub หรือ GitLab อยู่แล้ว ในทุก pull request ใหม่ มันวิเคราะห์การเปลี่ยนแปลงโดยใช้กราฟรีโพเต็มรูปแบบที่มันสร้างขึ้น และเผยแพร่ผลการค้นพบเป็นความคิดเห็นพร้อมการแก้ไขที่แนะนำ เนื้อหาของพวกเขาเองระบุขั้นตอนนี้ไว้ที่ประมาณสามนาที&lt;/p&gt;
&lt;p&gt;อ่านความคิดเห็นเหมือนที่คุณจะอ่านเพื่อนร่วมทีมที่ใส่ใจ: เปิดตำแหน่งที่อ้างอิง ตัดสินใจว่าผลการค้นพบนั้นถูกต้องหรือไม่ จากนั้นดำเนินการ ที่ที่ Greptile เสนอ ‘Fix with your Agent’ มันส่งปัญหา — เส้นทางไฟล์ หมายเลขบรรทัด โค้ดที่แนะนำ — ไปยัง Claude Code, Codex, Conductor, Cursor หรือ Devin ‘Fix All’ ส่งปัญหาทั้งหมดในการตรวจสอบนั้นในครั้งเดียว พวกเขายังมี Greptile MCP และปลั๊กอิน Claude Code สำหรับการส่งต่อนั้นด้วย Maguyva ไม่อยู่ในรายการเป้าหมายที่มีชื่อนั้น การขาดหายไปนั้นไม่ใช่ปัญหา Maguyva ทำงานของมันเสร็จแล้วในขั้นตอนที่ 1 เอเจนต์เขียนโค้ดที่เขียน PR นั้นคือฝ่ายที่ควรได้รับ payload การแก้ไข&lt;/p&gt;
&lt;p&gt;คาดหวังเสียงรบกวนใน 2-3 สัปดาห์แรก ในขณะที่ระบบการเรียนรู้ของ Greptile ปรับตัวให้เข้ากับความคิดเห็นที่ทีมของคุณทิ้งไว้จริง ๆ นั่นคือกำหนดเวลาที่พวกเขาระบุ ไม่ใช่ข้อบกพร่องของคู่นี้ การตรวจสอบของมนุษย์ยังคงอยู่ในวงจรนั้น Greptile คือก้าวแรกอัตโนมัติ ไม่ใช่ปุ่มผสาน&lt;/p&gt;
&lt;p&gt;หากความคิดเห็นของ Greptile ชี้ไปที่ไฟล์ที่เอเจนต์ไม่เคยสอบถามในขั้นตอนที่ 1 นั่นคือสัญญาณที่มีประโยชน์ ไม่ว่าจะเป็นแผนที่พลาดผู้เรียก หรือเอเจนต์ข้ามการอ้างอิงไป แก้ไขร่างตามความคิดเห็น อย่าปิดใช้งานตัวตรวจสอบ&lt;/p&gt;
&lt;h2 id=&quot;วิธีรักษาความซื่อสัตย์ของการเสริมกันนี้&quot;&gt;วิธีรักษาความซื่อสัตย์ของการเสริมกันนี้&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva มาก่อนเสมอ การตรวจสอบ PR ที่มีไฟล์ผิดก็ยังคงเป็นการตรวจสอบไฟล์ผิดอยู่ดี&lt;/li&gt;
&lt;li&gt;Greptile มาทีหลังเสมอ ร่างที่อ้างอิงได้ดียังคงต้องการการอ่าน diff ระดับทั้งระบบ&lt;/li&gt;
&lt;li&gt;อย่าขอให้ Maguyva เผยแพร่ความคิดเห็น PR มันไม่ทำอย่างนั้น&lt;/li&gt;
&lt;li&gt;อย่าขอให้ Greptile เป็นชั้นการดึงข้อมูลแรกของเอเจนต์ในขณะที่มันยังคงเลือกเส้นทางอยู่ นั่นไม่ใช่งานที่ออกแบบไว้สำหรับแอป GitHub หรือ GitLab ของพวกเขา&lt;/li&gt;
&lt;li&gt;อย่าประดิษฐ์ไปป์ไลน์ bash ที่ ‘ซิงค์’ ทั้งสองอย่าง PR คืออินเทอร์เฟซนั้น&lt;/li&gt;
&lt;li&gt;ตรวจสอบทั้งสองฝั่งแยกกัน จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว ถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ จากนั้นเปิด PR เล็ก ๆ และอ่านสิ่งที่ Greptile แสดงความคิดเห็นจริง ๆ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;วงจรนี้กลายเป็นเรื่องธรรมดาเมื่อได้รับการตั้งชื่อแล้ว แผนที่ก่อน PR ของเอเจนต์ ตรวจสอบทีหลัง แต่ละผลิตภัณฑ์ยังคงอยู่ในฝั่งของ pull request ที่ตนเชี่ยวชาญ&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>การให้บริบทรีโพขนาดใหญ่แก่เอเจนต์ AI โดยไม่ต้องใช้ตัวสร้างดัชนีในเครื่อง</title><link>https://maguyva.ai/th/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/th/blog/large-repo-context-without-a-local-indexer</guid><description>วิธีให้เอเจนต์เขียนโค้ดมีแผนที่ของรีโพซิทอรีขนาดใหญ่ที่สามารถสอบถามได้จากคลาวด์ โดยไม่ต้องรันตัวสร้างดัชนีในเครื่องบนแล็ปท็อปของคุณ</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;รีโพซิทอรีขนาดใหญ่ไม่พอดีกับหน้าต่างบริบท และหากคุณเคยชี้ตัวสร้างดัชนีบนแล็ปท็อปไปที่โมโนรีโพจริง คุณก็รู้ดีว่ามันก็ไม่พอดีอย่างสบาย ๆ ที่นั่นเช่นกัน — RAM พุ่งสูง การจัดทำดัชนีครั้งแรกใช้เวลาเป็นชั่วโมง และเอเจนต์ของคุณก็ยังเริ่มเซสชันถัดไปด้วยการเดาว่าไฟล์ไหนสำคัญอยู่ดี&lt;/p&gt;
&lt;p&gt;คำตอบทั่วไปคือการรันตัวสร้างดัชนีข้าง ๆ ตัวแก้ไขโค้ด และสำหรับรีโพที่พอดีอย่างสบาย ๆ บนเครื่องเดียว นั่นคือคำตอบที่ดี หากโมโนรีโพของคุณจัดทำดัชนีได้เร็วอยู่แล้วใน Cursor และนั่นคือที่เดียวที่คุณต้องการแผนที่ บทความนี้ไม่มีอะไรจะเพิ่ม — ข้ามไปได้เลย&lt;/p&gt;
&lt;p&gt;บทความนี้พูดถึงกรณีอื่น — เมื่อเอเจนต์ต้องการแผนที่ของรีโพขนาดใหญ่ที่สอบถามได้ และคุณไม่ต้องการรันตัวสร้างดัชนีในเครื่องเพื่อให้ได้มันมา&lt;/p&gt;
&lt;h2 id=&quot;เมื่อไหร่ที่ตัวสร้างดัชนีในเครื่องกลายเป็นเครื่องมือที่ผิด&quot;&gt;เมื่อไหร่ที่ตัวสร้างดัชนีในเครื่องกลายเป็นเครื่องมือที่ผิด&lt;/h2&gt;
&lt;p&gt;ดัชนีในเครื่องสันนิษฐานว่าโค้ดอาศัยอยู่บนเครื่องที่สอบถามมัน และในขนาดโมโนรีโพจริง สมมติฐานนั้นตึงเครียดแม้กระทั่งภายในตัวแก้ไขโค้ดตัวเดียว รีโพแค่ใหญ่กว่าที่คุณต้องการให้ ‘ร้อน’ บนแล็ปท็อปเท่านั้นเอง: คุณทำงานในแพ็กเกจเดียวในขณะที่รัศมีผลกระทบอยู่ห่างออกไปสามไดเรกทอรี และการจัดทำดัชนีเย็นครั้งแรกของต้นไม้สองล้านบรรทัดนั้นไม่ใช่สิ่งที่คุณอยากผ่านมันสองครั้ง — ไม่ว่าจะบนเครื่องของคุณเอง หรือบนตัวรัน CI ที่ไม่เคยโคลนต้นไม้นั้นมาก่อน หรือเพื่อนร่วมทีมควรจะสามารถสอบถามแผนที่เดียวกับที่คุณสอบถามได้ โดยไม่ต้องรอเครื่องของตัวเองต่อสู้กับดัชนีเดียวกันนั้น&lt;/p&gt;
&lt;p&gt;ไม่มีสิ่งใดในนี้ที่เป็นเหตุผลให้ทิ้งตัวสร้างดัชนีในตัวแก้ไขโค้ดที่ดี มันคือเหตุผลให้มีแผนที่บนคลาวด์ที่เอเจนต์ตัวใดของคุณสามารถสอบถามได้ผ่าน MCP ด้วยเช่นกัน&lt;/p&gt;
&lt;p&gt;และปัญหาเรื่องขนาดนั้นลึกซึ้งกว่า ‘มีไฟล์มากเกินไปที่จะวาง’ บนต้นไม้ขนาดใหญ่ คำถามที่น่าสนใจแทบจะไม่เคยเป็น ‘แสดงไฟล์นี้ให้ฉันดู’ — มันคือไฟล์ไหน สัญลักษณ์ไหน ใครเรียกใช้ การทดสอบไหน เอเจนต์ที่เริ่มด้วยการแสดงรายการ &lt;code&gt;src/&lt;/code&gt; และอ่านสามผลลัพธ์แรกจะพลาดตัวจัดการใน &lt;code&gt;apps/api&lt;/code&gt; และไคลเอนต์ที่สร้างขึ้นใน &lt;code&gt;packages/sdk&lt;/code&gt; ได้อย่างง่ายดาย สิ่งที่คุณต้องการคือการดึงข้อมูลที่สร้างจากต้นไม้ทั้งหมด จากนั้นจัดอันดับ จากนั้นอ้างอิง&lt;/p&gt;
&lt;h2 id=&quot;บริบทรีโพขนาดใหญ่-หมายความว่าอย่างไรกันแน่&quot;&gt;‘บริบทรีโพขนาดใหญ่’ หมายความว่าอย่างไรกันแน่&lt;/h2&gt;
&lt;p&gt;การทิ้งไฟล์ลงในพรอมต์ไม่ใช่บริบท — มันคือการคัดลอกต้นไม้ที่เล็กกว่าและแย่กว่า สิ่งที่เอเจนต์ของคุณต้องการจริง ๆ คือการถามคำถามและได้คำตอบที่มีการอ้างอิงกลับมา: สัญลักษณ์นี้ถูกกำหนดที่ไหนและใครเรียกใช้มัน อะไรพึ่งพาโมดูลที่ฉันกำลังจะเปลี่ยน ไฟล์ทดสอบไหนครอบคลุมพฤติกรรมนี้ และต้นไม้นั้นมีลักษณะอย่างไร &lt;em&gt;ตอนนี้&lt;/em&gt; ไม่ใช่ไตรมาสที่แล้ว&lt;/p&gt;
&lt;p&gt;คำตอบเหล่านั้นต้องมาจากดัชนีที่สร้างจากรีโพของคุณ ไม่ใช่จากความทรงจำของโมเดลเกี่ยวกับรีโพของคนอื่น และดัชนีนั้นต้องอาศัยอยู่ที่ไหนสักแห่งนอกหน้าต่างบริบทของเอเจนต์ สำหรับปัญหานี้ มันควรอาศัยอยู่ที่ไหนสักแห่งนอกแล็ปท็อปของคุณด้วย&lt;/p&gt;
&lt;p&gt;อีกสิ่งหนึ่งที่ไฟล์คำสั่งทำให้คุณไม่ได้: &lt;code&gt;CLAUDE.md&lt;/code&gt; และ &lt;code&gt;AGENTS.md&lt;/code&gt; เป็นที่ที่ถูกต้องสำหรับข้อตกลงและพฤติกรรม แต่มันไม่ใช่แผนที่ที่มีชีวิต จัดอันดับ และสอบถามได้ของต้นไม้สองล้านบรรทัด ใช้กฎสำหรับพฤติกรรม ใช้ความฉลาดของรีโพสำหรับข้อเท็จจริง&lt;/p&gt;
&lt;h2 id=&quot;เราสร้างแผนที่บนคลาวด์-คุณสอบถามมันจากไคลเอนต์ใดก็ได้&quot;&gt;เราสร้างแผนที่บนคลาวด์ คุณสอบถามมันจากไคลเอนต์ใดก็ได้&lt;/h2&gt;
&lt;p&gt;Maguyva คือชั้นบริบทโค้ดเบส MCP ระยะไกล คุณเชื่อมต่อ GitHub เลือกรีโพซิทอรีของคุณ แล้วปล่อยให้ระบบทำงานไปได้เลยในขณะที่ไปป์ไลน์บนคลาวด์แยกวิเคราะห์ต้นไม้ สร้างสัญลักษณ์และขอบกราฟ และรักษาแผนที่ที่จัดอันดับไว้ — ไม่ต้องใช้ตัวสร้างดัชนีในเครื่องเลย&lt;/p&gt;
&lt;p&gt;เมื่อคุณพุชโค้ด ไฟล์ที่เปลี่ยนแปลงจะถูกแยกวิเคราะห์แบบส่วนเพิ่ม และชั้นกราฟและการจัดอันดับจะถูกสร้างใหม่ตามกำหนดเวลา: รายวันในแผนฟรี รายชั่วโมงในแผนที่เสียเงิน ทุกสแนปช็อตมีการประทับเวลา เพื่อให้เอเจนต์ของคุณสามารถบอกได้ว่ากำลังอ่านต้นไม้เวอร์ชันใด ข้อจำกัดตามจริงที่นี่คืองานในเครื่องที่ยังไม่ซิงค์ — การเปลี่ยนแปลงที่มีอยู่เฉพาะในไดเรกทอรีทำงานของคุณ ไม่เคยถูกพุช ยังไม่อยู่ในแผนที่บนคลาวด์&lt;/p&gt;
&lt;p&gt;จากนั้นคุณเชื่อมต่อไคลเอนต์ใดก็ได้ที่คุณใช้อยู่แล้วโดยเพิ่มคีย์ API ในการตั้งค่า MCP ของมัน มีคู่มือการตั้งค่าสำหรับไคลเอนต์ MCP ที่มีเอกสารประกอบ 24 ตัว และไคลเอนต์ที่เข้ากันได้กับ MCP อื่น ๆ ที่รองรับการตั้งค่ามาตรฐานก็สามารถเชื่อมต่อได้เช่นกัน หาก Cursor คือที่ที่คุณอาศัยอยู่ &lt;a href=&quot;https://maguyva.ai/th/for-cursor&quot;&gt;หน้า Cursor&lt;/a&gt; อธิบายขั้นตอนสำหรับเส้นทางนั้น เซิร์ฟเวอร์เดียวกันตอบสนอง Claude Code, VS Code, Windsurf, Codex CLI และอื่น ๆ&lt;/p&gt;
&lt;p&gt;คุณไม่ได้เปลี่ยนตัวแก้ไขโค้ด คุณกำลังมอบพื้นผิวเครื่องมือให้เอเจนต์ของคุณ — เครื่องมือ MCP 11 ตัวครอบคลุมการค้นหา สัญลักษณ์ การวิเคราะห์การพึ่งพา การดึงไฟล์ และบริบทรีโพซิทอรี — พร้อมความครอบคลุมมากกว่า 279 ภาษาและเทคโนโลยีที่อิงข้อความ ซึ่งหมายถึงมากกว่าที่คุณคิดสำหรับโมโนรีโพที่เลิกเป็นภาษาเดียวไปนานแล้ว&lt;/p&gt;
&lt;p&gt;คำตอบกลับมาพร้อมหลักฐาน เป็นเส้นทางไฟล์พร้อมหมายเลขบรรทัด การค้นหาเชิงความหมาย เชิงโครงสร้าง เชิงกราฟ และข้อความรวมกันเป็นผลลัพธ์ที่มีการจัดอันดับ เพื่อให้คำถามอย่าง ‘อะไรพึ่งพา parseConfig’ ไม่ได้ให้คุณเป็นกองผลลัพธ์ grep หรือชิ้นส่วนเชิงความหมายเพียงชิ้นเดียว แต่เป็นสถานที่ไม่กี่แห่งที่สำคัญจริง ๆ&lt;/p&gt;
&lt;h2 id=&quot;คำแนะนำที่เป็นรูปธรรม&quot;&gt;คำแนะนำที่เป็นรูปธรรม&lt;/h2&gt;
&lt;p&gt;อย่าเริ่มด้วยการจัดทำดัชนีทั้งบริษัท นี่คือเส้นทางที่ได้ผล:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;เลือกรีโพซิทอรีหนึ่งที่คุณรู้จักดีอยู่แล้ว — แพ็กเกจที่คุณสามารถประเมินด้วยตนเองมีค่ามากกว่าต้นไม้ที่ใหญ่ที่สุดที่คุณมี&lt;/li&gt;
&lt;li&gt;เริ่มต้นฟรี: 3 รีโพ, 50,000 บรรทัดที่จัดทำดัชนี เครื่องมือทั้ง 11 ตัว ไม่มีโควตาคิวรีรายเดือน หากรีโพตัวแทนของคุณใหญ่กว่านั้น &lt;a href=&quot;https://maguyva.ai/th/pricing&quot;&gt;หน้าราคา&lt;/a&gt; แสดงรายการระดับพื้นที่ทำงาน ($0, $19, $49, $149) ตามความครอบคลุมที่จัดทำดัชนี — ไม่ใช่ตามจำนวนที่นั่ง&lt;/li&gt;
&lt;li&gt;เชื่อมต่อ GitHub และรอให้การจัดทำดัชนีครั้งแรกเสร็จสิ้น คุณไม่ได้คอมไพล์อะไรในเครื่องเลย&lt;/li&gt;
&lt;li&gt;เชื่อมต่อไคลเอนต์ MCP ของคุณ — บรรทัดการตั้งค่าไม่กี่บรรทัด Maguyva คือเซิร์ฟเวอร์ MCP ระยะไกล ดังนั้นจึงไม่มีปลั๊กอิน ไม่มีส่วนขยาย และไม่มีตัวแก้ไขโค้ดตัวที่สองให้ต้องนำมาใช้&lt;/li&gt;
&lt;li&gt;ถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ ‘อะไรพึ่งพา parseConfig?’ หรือ ‘การหมดอายุของเซสชันล็อกอินถูกจัดการที่ไหน?’ จากนั้นเปิดผลลัพธ์ที่มีการอ้างอิง &lt;code&gt;file.ext:line&lt;/code&gt; และตรวจสอบกับต้นไม้ที่อยู่ตรงหน้าคุณ&lt;/li&gt;
&lt;li&gt;หลังจากที่การอ้างอิงพิสูจน์ตัวเองผ่านการสัมผัสกับต้นไม้นั้นเท่านั้น คุณจึงปล่อยให้เอเจนต์แก้ไข&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;หากรีโพแรกพอดีดี และต้นไม้ของคุณใหญ่ ให้อัปเกรดพื้นที่ทำงานให้ตรงกับบรรทัดที่จัดทำดัชนีและอัตราการสร้างใหม่ของคุณ มนุษย์และเอเจนต์ใช้จำนวนผู้ใช้ร่วมกัน — Maguyva คิดค่าบริการต่อพื้นที่ทำงาน ไม่ใช่ต่อที่นั่ง — ดังนั้นการเพิ่มเอเจนต์ตัวที่สามเข้าไปในวงจรจึงไม่ทำให้คุณเสียค่าใช้จ่ายเพิ่มขึ้นเลย&lt;/p&gt;
&lt;p&gt;การทดสอบการเปิดใช้งานเหมือนกับที่&lt;a href=&quot;https://maguyva.ai/th/docs&quot;&gt;เอกสารประกอบ&lt;/a&gt;แนะนำสำหรับการรันครั้งแรกใด ๆ: จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว ถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ รีโพขนาดใหญ่ไม่ได้เปลี่ยนการทดสอบนั้น มันแค่ทำให้ไฟล์แรกที่ผิดมีราคาแพงขึ้น&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่ควรจับตาดูหลังจากเชื่อมต่อ&quot;&gt;สิ่งที่ควรจับตาดูหลังจากเชื่อมต่อ&lt;/h2&gt;
&lt;p&gt;จับตาดูสามสิ่ง ความสดใหม่: แผนที่เสียเงินสร้างใหม่รายชั่วโมง แผนฟรีรายวัน และงานในเครื่องที่ไม่ได้พุชจะไม่อยู่ในแผนที่ — นั่นคือข้อแลกเปลี่ยนที่คุณยอมรับ ขอบเขต: จัดทำดัชนีชุดรีโพที่เป็นตัวแทน ไม่ใช่ทุกฟอร์กที่เก็บถาวร ระดับฟรีถูกออกแบบมาอย่างตั้งใจให้เล็กพอที่จะรู้ว่าคำตอบคุ้มค่าที่จะเก็บไว้หรือไม่ และการตรวจสอบ: แผนที่รีโพขนาดใหญ่ที่ไม่สามารถอ้างอิงเส้นทางและหมายเลขบรรทัดได้ก็เป็นเพียงเครื่องมือเดาที่ช้ากว่าเท่านั้น ดังนั้นให้เอเจนต์ของคุณแสดงตำแหน่งก่อนที่จะส่ง patch&lt;/p&gt;
&lt;p&gt;จากนั้นรันการทดสอบเดียวกับที่คุณจะรันบนรีโพเล็ก ๆ จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว ถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ หากแผนที่ถูกต้อง เอเจนต์ของคุณจะเลิกเริ่มงานจากศูนย์บนต้นไม้ที่ไม่เคยรู้จัก&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>ทำไมเอเจนต์เขียนโค้ด AI ของคุณจึงหลอนเส้นทางไฟล์</title><link>https://maguyva.ai/th/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/th/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>เอเจนต์เขียนโค้ด AI ประดิษฐ์เส้นทางไฟล์เมื่อพวกมันไม่มีแผนที่จริงของรีโพ นี่คือสาเหตุที่มันเกิดขึ้น และวิธีที่แผนที่ที่มีหลักฐานนำไปสู่การเปลี่ยนแปลงที่หลอนน้อยลง</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;สัญญาณไม่ใช่เนื้อหาฟังก์ชันที่ผิด มันคือการเปลี่ยนแปลงที่มั่นใจในไฟล์ที่ไม่มีอยู่จริง หรือในไฟล์ที่มีอยู่จริงแต่ไม่ใช่ไฟล์ที่อิมพลีเมนต์พฤติกรรมนั้น&lt;/p&gt;
&lt;p&gt;คุณขอให้แก้ไขการหมดอายุของเซสชัน เอเจนต์เปิด &lt;code&gt;src/auth/session.ts&lt;/code&gt; เส้นทางนั้นน่าเชื่อถือ มันก็ผิดด้วย ตัวจัดการจริงอาศัยอยู่ใน &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt; ซึ่งถูกเปลี่ยนชื่อสองรอบการปรับโครงสร้างที่แล้ว เอเจนต์ไม่ได้โกหกคุณ มันกำลังเติมสตริงรูปร่างเหมือนเส้นทางให้สมบูรณ์ตามอคติจากการฝึกฝนบวกกับสิ่งใดก็ตามที่มีอยู่แล้วในหน้าต่างบริบท&lt;/p&gt;
&lt;p&gt;นี่คือรูปแบบความล้มเหลวทั่วไปบนรีโพซิทอรีจริง โมเดลสามารถเขียนโค้ดได้ ข้อผิดพลาดของมันคือการเลือกที่ผิดที่จะเขียนมัน&lt;/p&gt;
&lt;h2 id=&quot;ทำไมเอเจนต์จึงประดิษฐ์เส้นทาง&quot;&gt;ทำไมเอเจนต์จึงประดิษฐ์เส้นทาง&lt;/h2&gt;
&lt;p&gt;เอเจนต์เขียนโค้ดคือโมเดลทำนาย token ถัดไปที่มีเครื่องมือติดตั้งอยู่ เมื่อคุณพูดว่า ‘แก้ไขการหมดอายุของเซสชัน’ มันต้องระบุชื่อไฟล์ก่อนที่มันจะอ่านหรือแก้ไขอะไรได้ หากมันยังไม่มีแผนที่ที่มีหลักฐาน มันจะสร้างเส้นทางจาก:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ข้อตกลงการตั้งชื่อที่มันเคยเห็นในรีโพซิทอรีอื่น &lt;code&gt;src/auth/session.ts&lt;/code&gt; เป็นรูปแบบที่พบบ่อย&lt;/li&gt;
&lt;li&gt;ไฟล์ที่มีอยู่ในการสนทนาแล้ว ซึ่งอาจเป็นไฟล์ที่คุณวางไว้เมื่อสัปดาห์ที่แล้ว ไม่ใช่ไฟล์ที่สำคัญตอนนี้&lt;/li&gt;
&lt;li&gt;รายการไดเรกทอรีที่มันรันโดยบังเอิญ ไม่สมบูรณ์บนต้นไม้ขนาดใหญ่&lt;/li&gt;
&lt;li&gt;ไฟล์คำสั่ง &lt;code&gt;CLAUDE.md&lt;/code&gt; และ &lt;code&gt;AGENTS.md&lt;/code&gt; บอกเอเจนต์ว่าจะประพฤติตัวอย่างไร มันไม่ใช่ดัชนีที่มีชีวิตของสัญลักษณ์ ผู้เรียก หรือเส้นทางปัจจุบัน&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ไม่มีแหล่งใดในนี้ที่เป็นแผนที่ของรีโพนี้ วันนี้ โมเดลเติมช่องว่างในลักษณะเดียวกับที่มันเติมช่องว่างใด ๆ: ด้วยความต่อเนื่องที่มีความน่าจะเป็นสูง ความต่อเนื่องนั้นมักดูเหมือนเส้นทางจริง บางครั้งไฟล์นั้นมีอยู่จริงและอยู่ติดกับไฟล์ที่ถูกต้อง บางครั้งมันมีอยู่บนแบรนช์ที่เมิร์จไปแล้วเมื่อเดือนที่แล้ว บางครั้งมันไม่เคยมีอยู่เลย&lt;/p&gt;
&lt;p&gt;Grep ไม่ช่วยคุณที่นี่หากเอเจนต์ไม่ได้ค้นหาสตริงที่ถูกต้องตั้งแต่แรก เอเจนต์เดาเส้นทาง จากนั้นอ่านสิ่งที่เส้นทางนั้นส่งคืน จากนั้นแก้ไขมัน ก้าวแรกที่ผิดคือเส้นทาง ไม่ใช่ patch&lt;/p&gt;
&lt;p&gt;การอ่านไฟล์ก็ไม่เหมือนกับการค้นหาไฟล์ที่ถูกต้อง Claude Code, Cursor, Codex และเครื่องมือที่คล้ายกันสามารถเปิดสิ่งใดก็ตามที่คุณชี้ให้มันดู คำถามคือมันหาไฟล์ที่ถูกต้อง สัญลักษณ์ที่สำคัญ การพึ่งพา การทดสอบ และรัศมีผลกระทบได้อย่างน่าเชื่อถือก่อนที่จะแก้ไขหรือไม่ การเข้าถึงไฟล์โดยไม่มีแผนที่ยังคงเริ่มต้นด้วยการเดา&lt;/p&gt;
&lt;h2 id=&quot;การแก้ไขไฟล์ผิดคือปัญหาการดึงข้อมูล&quot;&gt;การแก้ไขไฟล์ผิดคือปัญหาการดึงข้อมูล&lt;/h2&gt;
&lt;p&gt;คิดว่าเส้นทางที่ประดิษฐ์ขึ้นเป็นข้อผิดพลาดในการดึงข้อมูล ไม่ใช่ข้อบกพร่องทางบุคลิกภาพ&lt;/p&gt;
&lt;p&gt;หากเอเจนต์ต้องส่งคืน &lt;code&gt;path/file.ext:line&lt;/code&gt; ก่อนที่จะได้รับอนุญาตให้แก้ไข สองสิ่งจะเกิดขึ้น อย่างแรก คุณสามารถเปิดการอ้างอิงและปฏิเสธงานได้ภายในสิบวินาที อย่างที่สอง เอเจนต์ต้องสอบถามบางสิ่งที่รู้จักต้นไม้นั้นจริง ๆ&lt;/p&gt;
&lt;p&gt;นั่นคืองานของชั้นบริบทโค้ดเบส การค้นหาเชิงความหมายเพียงอย่างเดียวไม่เพียงพอ ชิ้นส่วนโค้ดที่ ‘ฟังดูเหมือนการหมดอายุของเซสชัน’ ก็ยังคงลงจอดในแพ็กเกจที่เลิกใช้แล้วได้ คุณยังต้องการข้อความที่แน่นอนเมื่อคุณรู้สตริง การค้นหาสัญลักษณ์เมื่อคุณรู้ชื่อ การค้นหาเชิงโครงสร้างเมื่อคุณรู้รูปร่าง และกราฟการพึ่งพาเมื่อคุณต้องการผู้เรียกและรัศมีผลกระทบ&lt;/p&gt;
&lt;p&gt;Maguyva คือชั้นนั้นสำหรับเอเจนต์เขียนโค้ดที่เข้ากันได้กับ MCP มันไม่ใช่ตัวแก้ไขโค้ด Claude Code, Cursor, Codex CLI, VS Code, Windsurf และไคลเอนต์ MCP อื่น ๆ ยังคงอยู่ในตำแหน่งของมัน เอเจนต์สอบถามแผนที่ที่มีการจัดอันดับก่อนที่จะแตะบรรทัดใด ๆ&lt;/p&gt;
&lt;p&gt;สิ่งที่อ้างนั้นเรียบง่ายโดยตั้งใจ: การเปลี่ยนแปลงที่หลอนน้อยลง Maguyva ไม่ได้เอาความสามารถในการเดาไปจากโมเดล มันเปลี่ยนก้าวแรกเริ่มต้นจาก ‘ประดิษฐ์เส้นทางที่น่าเชื่อถือ’ เป็น ‘ขอตำแหน่งที่จัดอันดับและอ้างอิงได้’&lt;/p&gt;
&lt;h2 id=&quot;คำตอบที่มีหลักฐานมีลักษณะอย่างไร&quot;&gt;คำตอบที่มีหลักฐานมีลักษณะอย่างไร&lt;/h2&gt;
&lt;p&gt;คำตอบที่มีประโยชน์สำหรับ ‘การหมดอายุของเซสชันถูกจัดการที่ไหน’ ไม่ใช่ย่อหน้าเดียว มันคือรายการตำแหน่งสั้น ๆ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - ตัวจัดการ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - ผู้เรียก&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - การทดสอบที่จะล้มเหลวหากการเปลี่ยนแปลงนั้นผิด&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;คุณสามารถเปิดบรรทัดเหล่านี้ได้ หากผิด คุณหยุด หากถูกต้อง เอเจนต์สามารถแก้ไขได้ การตรวจสอบคือประเด็นหลัก ไม่ใช่คำขวัญ&lt;/p&gt;
&lt;p&gt;Maguyva เปิดเผยเครื่องมือ MCP ที่เน้นลูกค้า 11 ตัวครอบคลุมการค้นหา สัญลักษณ์ การวิเคราะห์การพึ่งพา การดึงไฟล์ บริบทรีโพซิทอรีและเวิร์กโฟลว์เครื่องมืออรรถประโยชน์ที่กำหนดผลลัพธ์ได้แน่นอน โหมดการดึงข้อมูลสี่แบบ (เชิงความหมาย เชิงโครงสร้าง เชิงกราฟ/การพึ่งพา และข้อความ) รวมกันเป็นผลลัพธ์ที่มีการจัดอันดับ; การค้นหาสัญลักษณ์เป็นเครื่องมือ MCP แยกต่างหาก (&lt;code&gt;find_symbol&lt;/code&gt;) คำตอบที่มีหลักฐานกลับมาพร้อมเส้นทางไฟล์และหมายเลขบรรทัด เพื่อให้คุณประเมินมันเทียบกับต้นไม้ที่อยู่ตรงหน้าคุณ&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/th/docs&quot;&gt;เอกสารประกอบ&lt;/a&gt; อธิบายเส้นทางที่สั้นที่สุด: เริ่มต้นฟรี จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว เชื่อมต่อไคลเอนต์ จากนั้นถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้&lt;/p&gt;
&lt;h2 id=&quot;วงจรที่เปลี่ยนการเปลี่ยนแปลงแรก&quot;&gt;วงจรที่เปลี่ยนการเปลี่ยนแปลงแรก&lt;/h2&gt;
&lt;p&gt;คุณไม่ต้องการศาสนาเวิร์กโฟลว์ใหม่ คุณต้องการก้าวเพิ่มเติมหนึ่งก้าวก่อนการเขียนครั้งแรก&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ถามคำถามหนึ่งข้อที่คุณสามารถประเมินได้อยู่แล้ว ‘โค้ดไหนจัดการล็อกอินและการหมดอายุของเซสชัน?’ ดีกว่า ‘แก้ไข auth’&lt;/li&gt;
&lt;li&gt;เรียกร้องการอ้างอิง เส้นทางไฟล์และหมายเลขบรรทัด ไม่ใช่บทสรุปว่า ‘โมดูล auth’&lt;/li&gt;
&lt;li&gt;เปิดไฟล์ที่อ้างอิง ติดตามสัญลักษณ์ ยืนยันการพึ่งพาที่คุณกำลังจะแตะต้อง&lt;/li&gt;
&lt;li&gt;ปล่อยให้เอเจนต์ patch หลังจากนั้นเท่านั้น&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;หากขั้นตอนที่ 2 ไม่ส่งคืนสิ่งที่มีประโยชน์ เอเจนต์ไม่มีสิทธิ์ด้นสดเส้นทาง มันค้นหาอีกครั้ง หรือคุณแสดงให้มันดู ประตูเดียวนั้นคือสิ่งที่สร้างการเปลี่ยนแปลงที่หลอนน้อยลง โมเดลก็เป็นโมเดลเดิม แผนที่ต่างหากที่เปลี่ยนไป&lt;/p&gt;
&lt;p&gt;ไฟล์คำสั่งยังคงสำคัญ รักษามันไว้ ใช้สำหรับข้อตกลง กฎการตรวจสอบ และสิ่งที่ไม่ควรแตะต้อง อย่าขอให้มันเป็นดัชนี &lt;code&gt;CLAUDE.md&lt;/code&gt; ที่แสดงรายการสามไดเรกทอรีสำคัญจะล้าสมัยหนึ่งสัปดาห์หลังจากการแบ่งแพ็กเกจ แผนที่ที่สอบถามได้จะอัปเดตเมื่อรีโพอัปเดต&lt;/p&gt;
&lt;p&gt;ความล้มเหลวที่เกี่ยวข้องคือไฟล์เกือบถูกต้อง: เอเจนต์เปิด &lt;code&gt;auth.ts&lt;/code&gt; ในขณะที่พฤติกรรมอาศัยอยู่ใน &lt;code&gt;auth-client.ts&lt;/code&gt; หรือ patch ไฟล์ที่สร้างขึ้นแทนที่จะเป็นแหล่งที่มา หรือแก้ไขสำเนาใน &lt;code&gt;packages/legacy&lt;/code&gt; เพราะชื่อตรงกัน การอ้างอิงไม่ได้ทำให้ข้อผิดพลาดเหล่านี้เป็นไปไม่ได้ มันทำให้มองเห็นได้ก่อนที่ diff จะลงจอด&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่แผนที่จะไม่แก้ไขให้คุณ&quot;&gt;สิ่งที่แผนที่จะไม่แก้ไขให้คุณ&lt;/h2&gt;
&lt;p&gt;จงซื่อสัตย์เกี่ยวกับสิ่งที่คุณได้รับ แผนที่ที่มีหลักฐานจะไม่ทำให้ทุกการเปลี่ยนแปลงถูกต้อง — เอเจนต์ของคุณยังคงสามารถเขียน patch ที่แย่บนไฟล์ที่ถูกต้องเป๊ะได้ หากโค้ดเบสของคุณพึ่งพาการเรียกเมธอดแบบไดนามิก รีเฟลกชัน หรือการแพตช์โค้ดขณะรันไทม์ การค้นหาสัญลักษณ์บางอย่างจะให้ผลลัพธ์ที่บางกว่าที่คุณต้องการ เพราะนั่นคือสิ่งที่ความไม่ชัดเจนของรันไทม์ทำกับดัชนีแบบสแตติกใด ๆ และหากคุณคาดหวังเปอร์เซ็นต์ — ‘เส้นทางที่หลอนลดลง X%’ — คุณจะไม่พบมันที่นี่ เพราะไม่มีใครสามารถวัดตัวเลขนั้นได้อย่างซื่อสัตย์สำหรับรีโพของคุณนอกจากคุณเอง&lt;/p&gt;
&lt;p&gt;สิ่งที่คุณคาดหวังได้นั้นแคบกว่าและมีประโยชน์มากกว่า: เอเจนต์หยุดเริ่มต้นการเปลี่ยนแปลงด้วยเส้นทางที่เดา ก้าวแรกนั้นมีหลักฐานในแผนที่จริง และจากนั้นการเปลี่ยนแปลงที่หลอนน้อยลงก็เกิดขึ้น ทุกสิ่งหลังการอ้างอิง — การอ่าน diff การประเมิน patch — ยังคงเป็นงานของคุณ เหมือนที่มันเป็นมาตลอด&lt;/p&gt;
&lt;p&gt;การทดสอบนี้แทบไม่มีค่าใช้จ่ายอะไรเลย: จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้วและถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ เริ่มด้วยเส้นทางที่เคยทำให้คุณลำบากมาก่อน หากการอ้างอิงผิด คุณจะเห็นทันที หากถูกต้อง การเปลี่ยนแปลงถัดไปของเอเจนต์ของคุณจะมีที่ที่ดีกว่าให้ลงจอด&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>เหตุใดเราจึงอัปเกรดการค้นหาโค้ดเป็น voyage-4-large</title><link>https://maguyva.ai/th/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/th/blog/upgrading-code-search-to-voyage-4-large</guid><description>เราย้ายเอ็มเบดดิ้งโค้ดของเราไปที่ voyage-4-large — ปัจจุบันอยู่อันดับหนึ่งของตารางอันดับการค้นคืนโค้ด RTEB สาธารณะ ฉบับตรงไปตรงมา: การแลกเปลี่ยนที่เรายอมรับ สิ่งที่เราทำดัชนีจริง และเหตุผลที่เราจ่ายเงินเพื่อเอ็มเบดดิ้งระดับพรีเมียม</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ตัวเลขเบนช์มาร์กในบทความนี้สะท้อนตารางอันดับของ RTEB ณ วันที่เผยแพร่ (มิถุนายน 2026) ตารางอันดับเปลี่ยนแปลงได้ ให้ถือว่าอันดับเป็นภาพ ณ ช่วงเวลาหนึ่ง ไม่ใช่ข้อเท็จจริงถาวร&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Semantic search จะดีได้เพียงใด ขึ้นอยู่กับคุณภาพของเอ็มเบดดิ้งที่รองรับมัน&lt;/p&gt;
&lt;p&gt;เมื่อ agent ถาม Maguyva ว่า “เราจัดการ retry ตรงไหน” มันไม่ได้ grep หาคำว่า “retry” มันกำลังถามหา &lt;em&gt;ความหมาย&lt;/em&gt; — ลูป backoff, circuit breaker, สิ่งที่ห่อการเรียกที่ไม่เสถียร คำถามนั้นถูกตอบโดยโมเดลเวกเตอร์ที่แปลงโค้ดให้เป็นจุดในพื้นที่แล้วหาเพื่อนบ้าน เลือกโมเดลที่ดีกว่า แล้วทุกคิวรี semanticในผลิตภัณฑ์จะคมชัดขึ้นอย่างเงียบๆ&lt;/p&gt;
&lt;p&gt;เราจึงเปลี่ยนของเรา ณ เดือนมิถุนายน 2026 เอ็มเบดดิ้งโค้ดของ Maguyva รันบน &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt; แทนที่ &lt;code&gt;voyage-code-3&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;เบนช์มาร์ก&quot;&gt;เบนช์มาร์ก&lt;/h2&gt;
&lt;p&gt;เราไม่ได้ตัดสินใจนี้ด้วยความรู้สึก &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; สาธารณะจัดอันดับโมเดลเอ็มเบดดิ้งบนงาน retrieval จริง และบนตารางอันดับ &lt;strong&gt;Code&lt;/strong&gt; ของมัน &lt;code&gt;voyage-4-large&lt;/code&gt; อยู่ที่ &lt;strong&gt;อันดับหนึ่งโดยรวม (90.86)&lt;/strong&gt; — นำหน้า &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90.26) และที่น่าสังเกตคือ นำหน้าโมเดลที่เราใช้อยู่แล้ว &lt;code&gt;voyage-code-3&lt;/code&gt; (89.73, อันดับ 3)&lt;/p&gt;
&lt;p&gt;นั่นคือความต่างของคะแนนจริงที่ไม่มาก แต่มันคือช่องว่างในทิศทางที่ถูกต้อง บนเบนช์มาร์กสาธารณะ ในงานที่เราสนใจอย่างแท้จริง: การค้นคืนโค้ดตามความหมาย&lt;/p&gt;
&lt;h2 id=&quot;การแลกเปลี่ยนที่เรายอมรับ-binary-quantization&quot;&gt;การแลกเปลี่ยนที่เรายอมรับ: Binary Quantization&lt;/h2&gt;
&lt;p&gt;นี่คือส่วนที่บทความ “เราอัปเกรดโมเดลของเรา” ส่วนใหญ่มักละไว้&lt;/p&gt;
&lt;p&gt;Maguyva ไม่เก็บเวกเตอร์แบบ full-precision เราเก็บเอ็มเบดดิ้งแบบ &lt;strong&gt;ไบนารีควอนไทซ์&lt;/strong&gt;: เวกเตอร์ 2048 มิติแต่ละตัวยุบเหลือซิกเนเจอร์ 2048 บิต — &lt;strong&gt;256 ไบต์ต่อเวกเตอร์&lt;/strong&gt; ซิกเนเจอร์เหล่านั้นถูกค้นด้วย Hamming distance มีดัชนีและแบ่งพาร์ติชันแยกตามเทแนนต์&lt;/p&gt;
&lt;p&gt;นั่นคือการแลกเปลี่ยนที่ตั้งใจ Binary quantization ยอมสละความแม่นยำในการค้นคืนบางส่วน แลกกับพื้นที่จัดเก็บที่เล็กลงอย่างมาก และการคำนวณระยะทางที่รวดเร็วและต้นทุนต่ำ โดยไม่ต้องมีฐานข้อมูลเวกเตอร์แยกต่างหากให้ดูแล สำหรับผลิตภัณฑ์ที่ทำดัชนีทั้งรีโพซิทอรีต่อเวิร์กสเปซ เศรษฐศาสตร์นั้นสำคัญกว่าการบีบเอาเศษเสี้ยวสุดท้ายของคะแนนเบนช์มาร์กออกมา&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; เข้ากับดีไซน์นี้โดยไม่ต้องบังคับให้ย้ายชั้นพื้นที่จัดเก็บ: มันสร้างผลลัพธ์ 2048 มิติ เหมือนกับ &lt;code&gt;voyage-code-3&lt;/code&gt; ดังนั้นคอลัมน์ &lt;code&gt;bit(2048)&lt;/code&gt; และเส้นทาง Hamming search ของเราจึงไม่เปลี่ยนแปลง โมเดลดีขึ้น schema ยังคงเดิม&lt;/p&gt;
&lt;h2 id=&quot;โค้ดเป็นแค่จุดเริ่มต้น&quot;&gt;โค้ดเป็นแค่จุดเริ่มต้น&lt;/h2&gt;
&lt;p&gt;Maguyva คือเครื่องมือโค้ดอินเทลลิเจนซ์ แต่เรายังเป็นลูกค้ารายแรกของตัวเองด้วย และเราชี้มันไปยังอีกสิ่งหนึ่ง: markdown ที่อยู่ในรีโพของเราข้างๆ โค้ด บันทึกการตัดสินใจเชิงสถาปัตยกรรม, runbook, สัญญา, เอกสารการเงินและนโยบาย — ทั้งหมดถูกควบคุมเวอร์ชันใน Git ทั้งหมดอยู่หลัง MCP เซิร์ฟเวอร์เดียวกัน ดัชนีเชิงความหมายเหนือ &lt;em&gt;เอกสาร&lt;/em&gt; ไม่ใช่แค่ซอร์สโค้ด&lt;/p&gt;
&lt;p&gt;นั่นคือเหตุผลที่ความกว้างของ voyage-4-large สำคัญพอดี ใน RTEB ตารางอันดับตระกูลเดียวกันนี้ มันคือ &lt;strong&gt;อันดับหนึ่งด้านการเงิน อันดับหนึ่งด้าน healthcare และอันดับหนึ่งด้านการค้นคืนข้อความโดยรวม&lt;/strong&gt; — นำหน้า Gemini Embedding ของ Google, Embed v4 ของ Cohere และ text-embedding-3-large ของ OpenAI (Voyage เป็นผู้ร่วมสร้าง RTEB ดังนั้นเราจึงอ่านมันเป็นสัญญาณสาธารณะที่แข็งแกร่ง มากกว่าจะเป็นกรรมการที่เป็นกลางอย่างสมบูรณ์แบบ — แต่มันถูกเบนช์มาร์กแบบตัวต่อตัวกับโมเดลเชิงพาณิชย์หลักทุกตัว บนชุดข้อมูลที่กันไว้ทดสอบและไม่ได้เปิดเผยต่อสาธารณะ) ดัชนีเดียวกันที่หาฟังก์ชันที่ถูกต้องให้ agent ก็หาข้อสัญญาที่ถูกต้องในสัญญาหรือบรรทัดที่ถูกต้องในนโยบาย — และในโดเมนเหล่านั้น voyage-4-large ไม่ใช่การประนีประนอม มันคือผู้นำ&lt;/p&gt;
&lt;h2 id=&quot;เหตุใดเราจึงจ่ายเงินเพื่อ-embedding-ระดับพรีเมียม&quot;&gt;เหตุใดเราจึงจ่ายเงินเพื่อ Embedding ระดับพรีเมียม&lt;/h2&gt;
&lt;p&gt;มีวิธีค้นหาที่ถูกกว่า และหลายวิธีก็ฟรี การค้นหาเชิงคำศัพท์ — BM25 และญาติของมัน — จับคู่คำสำคัญ รันในเครื่อง และไม่มีค่าใช้จ่าย โมเดลเอ็มเบดดิ้งแบบโอเพนซอร์สอย่าง BGE, Nomic และ embeddinggemma ให้การค้นคืนเชิงความหมายที่ &lt;em&gt;พอใช้ได้&lt;/em&gt; จริง และคุณสามารถโฮสต์เองได้ในราคาของ GPU หนึ่งตัว Maguyva ใช้ฝั่งฟรีด้วยเหมือนกัน: ทุกคำค้นผสาน text, AST, graph และ semantic search เข้าด้วยกัน สิ่งที่เราไม่ลดต้นทุนจนเสียคุณภาพคือชั้น semantic&lt;/p&gt;
&lt;p&gt;เราจ่ายเงินต่อ token สำหรับเอ็มเบดดิ้งระดับพรีเมียม — &lt;code&gt;voyage-4-large&lt;/code&gt; — แทนที่จะโฮสต์โมเดลฟรีเอง ด้วยเหตุผลสองข้อ ข้อแรก การค้นหาด้วยคำสำคัญ อย่างเดียวตอบ “เราจัดการ retry ตรงไหน” ไม่ได้ เมื่อโค้ดเขียนว่า &lt;code&gt;backoff&lt;/code&gt; และ &lt;code&gt;circuit breaker&lt;/code&gt; และไม่เคยพูดคำว่า “retry” เลย — ความหมายคือประเด็นทั้งหมดของเอ็มเบดดิ้ง และในโดเมนที่เราให้บริการ โมเดลแบบเปิดยังตามหลังโมเดลพรีเมียมอยู่: ตามหลังไม่กี่คะแนนในข้อความทั่วไป และตามหลังมากกว่านั้น ในกลุ่มเฉพาะอย่างโค้ด สัญญา และการเงิน ข้อสอง จากประสบการณ์ของเรา คุณภาพการค้นคืนหล่อหลอมคำตอบสุดท้ายมากกว่าโมเดลที่อยู่อีกฝั่งหนึ่ง — agent ที่แข็งแกร่งแต่ได้รับบริบทผิดก็ยังตอบผิดอยู่ดี และมันไม่มีวันเห็นเอกสารที่มันไม่เคยได้รับ&lt;/p&gt;
&lt;p&gt;ดังนั้นเอ็มเบดดิ้งระดับพรีเมียมจึงเป็นบิลต่อ token ที่ขยายตามทุกรีโพและเอกสารที่เราทำดัชนี — และเราจ่ายมันโดยตั้งใจ สำหรับผลลัพธ์ที่ผู้ใช้ของเราได้รับ ฟังก์ชันที่ถูกต้อง หรือข้อสัญญาที่ถูกต้อง เราคิดว่าการแลกเปลี่ยนนั้นคุ้มค่า&lt;/p&gt;
&lt;h2 id=&quot;ส่วนที่ตรงไปตรงมา&quot;&gt;ส่วนที่ตรงไปตรงมา&lt;/h2&gt;
&lt;p&gt;เอกสารของ Voyage เองยังคงระบุว่า &lt;code&gt;voyage-code-3&lt;/code&gt; เป็นโมเดลที่ปรับให้เหมาะกับโค้ด แล้วทำไมถึงย้าย?&lt;/p&gt;
&lt;p&gt;เพราะเราอ่านเบนช์มาร์กสาธารณะ ไม่ใช่แค่ตารางโมเดลของ vendor และเบนช์มาร์กจัดให้ &lt;code&gt;voyage-4-large&lt;/code&gt; อยู่อันดับหนึ่งสำหรับการค้นคืนโค้ด นี่คือการตัดสินใจแบบมองไปข้างหน้า: เลือกโมเดลที่ใหม่กว่าและแข็งแกร่งกว่าโดยทั่วไป แล้วยืนยันมันกับตารางอันดับสาธารณะบนงานที่สำคัญ เราสบายใจที่จะเดิมพันแบบนี้เพราะหลักฐานนั้นกว้าง — voyage-4-large ไม่ได้แค่ชนะบนโค้ด มันยังนำในการเงิน healthcare และการค้นคืนโดยรวมด้วย&lt;/p&gt;
&lt;h2 id=&quot;รากฐานที่ไม่เด่นสะดุดตา&quot;&gt;รากฐานที่ไม่เด่นสะดุดตา&lt;/h2&gt;
&lt;p&gt;ทุกเครื่องมือที่เราเปิดให้ใช้ — semantic search, การรวบรวมบริบทงาน, การถาม-ตอบแบบอิงหลักฐาน — ล้วนมีการค้นคืนเป็นพื้นฐาน เมื่อตัวค้นคืนดีขึ้น agent ที่อีกฝั่งหนึ่งได้หลักฐานที่ดีขึ้น เลือกเส้นทางผิดน้อยลง และยึดคำตอบของมันไว้กับโค้ดที่ถูกต้อง — หรือข้อสัญญาที่ถูกต้อง หรือนโยบายที่ถูกต้อง โมเดลเอ็มเบดดิ้งที่คมชัดขึ้นไม่ใช่ฟีเจอร์หรูหรา มันคือรากฐานของทุกอย่าง และเราเพิ่งปรับปรุงรากฐานนั้น คุณจะไม่สังเกตเห็น นั่นคือประเด็น&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>การพัฒนาตนเองเชิงเวียนซ้ำของภาษา: ขัดเกลาโค้ดอินเทลลิเจนซ์ ครอบคลุมราว 280 ภาษา</title><link>https://maguyva.ai/th/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/th/blog/autonomous-quality-loops-language-grind</guid><description>เรารองรับโค้ดอินเทลลิเจนซ์สำหรับราว 280 ภาษา ไม่มีมนุษย์คนไหนตรวจสอบด้วยมือได้ทั้งหมดนั้น เราจึงสร้างลูปการพัฒนาตนเองเชิงเวียนซ้ำของภาษา — สุ่มตรวจ ใช้ LLM เป็นผู้ตัดสิน แก้ไขทีละจุด ตรวจสอบซ้ำ — และรันมันด้วยทีมเอเจนต์ที่แยกจากกัน จนกว่าการดึงข้อมูลโครงสร้างจะถูกต้องจริง ไม่ใช่แค่เขียวผ่าน</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ตัวเลขในบทความนี้สะท้อนระบบ ณ วันที่เผยแพร่ (พฤษภาคม 2026) ดู&lt;a href=&quot;https://maguyva.ai/th/team&quot;&gt;หน้าทีม&lt;/a&gt;ของเราสำหรับตัวเลขปัจจุบัน&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva ดึงสัญลักษณ์ การอ้างอิง และ dependency กราฟ จากซอร์สโค้ดในราว 280 ภาษา แต่ละภาษาคือตัวจัดการ tree-sitter ที่พัฒนาขึ้นเฉพาะ — คิวรี ฮิวริสติก กรณีขอบ — และแต่ละตัวจัดการสามารถผิดพลาดในแบบที่ละเอียดอ่อนของตัวเองได้ การเรียกเมธอดที่ถูกปล่อยออกมาเป็นการอ่าน ฟังก์ชันที่ถูกระบุว่าเป็นของขอบเขตที่ห่อหุ้มผิด ความสัมพันธ์ที่ไม่มีอยู่จริงเลย&lt;/p&gt;
&lt;p&gt;คุณตรวจสอบด้วยมือไม่ได้ ไม่มีทีมไหนอ่านผลการแตกโครงสร้างข้าม 280 ไวยากรณ์แล้วจับ edge ที่ไม่ดีได้ ดังนั้นคำถามที่น่าสนใจไม่ใช่ “การแตกโครงสร้างของเราถูกต้องหรือไม่” — แต่เป็น “คุณจะ &lt;em&gt;ค้นพบ&lt;/em&gt; ว่ามันผิดได้อย่างไร ในระดับความกว้างนี้ โดยไม่มีมนุษย์อยู่ในทุกลูป” คำตอบของเราคือการพัฒนาตนเองเชิงเวียนซ้ำของภาษา: ลูปคุณภาพที่ขับเคลื่อนโดย agent ประจำภาษา, LLM ที่ทำหน้าที่เป็นผู้ตัดสิน และกฎหนึ่งข้อที่เรายังคงเรียนรู้ซ้ำแล้วซ้ำเล่า: เขียวไม่เท่ากับถูกต้อง&lt;/p&gt;
&lt;h2 id=&quot;เขียวไม่ใช่ถูกต้อง&quot;&gt;เขียวไม่ใช่ถูกต้อง&lt;/h2&gt;
&lt;p&gt;ทุกภาษามีชุด fixture และเกณฑ์การปล่อยใช้งานให้คะแนนมันครอบคลุมห้ามิติ — ความแม่นยำ, ความสมบูรณ์เชิงโครงสร้าง, ความครบถ้วน, คุณภาพ และประสิทธิภาพ ภาษาหนึ่งจะเป็น &lt;strong&gt;สีเขียว (GREEN)&lt;/strong&gt; ก็ต่อเมื่อ บน fixture ของมัน precision ≥ 0.95, recall ≥ 0.99 และ F1 ≥ 0.97 พร้อม edge ที่คาดหวังอย่างน้อย 20 edge เพื่อความเชื่อมั่นทางสถิติ ต่ำกว่านั้นคือ YELLOW หรือ RED และมันจะไม่ถูกปล่อยออกมา&lt;/p&gt;
&lt;p&gt;เกณฑ์นั้นจำเป็นแต่ไม่เพียงพอ fixture ตรวจสอบกับ fixture &lt;em&gt;ที่เราเขียนเอง&lt;/em&gt; มันเข้ารหัสกรณีที่เราคิดไว้แล้ว ตัวจัดการหนึ่งอาจไร้ที่ติบน fixture ของมัน แต่ยังคงบิดเบือนรูปแบบที่ปรากฏเฉพาะในโค้ดจริง — สำนวนแมโคร เมธอดที่ผูกกับเจเนอริก ฟีเจอร์ภาษาที่ไม่มีใครเขียน fixture ให้ GREEN หมายความว่า fixture ผ่าน มันไม่ได้หมายความว่ารีโพซิทอรีจริงจะแตกโครงสร้างได้สะอาด ดังนั้นลูปนี้ต้องละทิ้ง fixture แล้วมองไปที่โลกจริง&lt;/p&gt;
&lt;h2 id=&quot;ลูปด้านใน-สุ่มตรวจ-ตัดสิน-แก้ไข-พิสูจน์&quot;&gt;ลูปด้านใน: สุ่มตรวจ ตัดสิน แก้ไข พิสูจน์&lt;/h2&gt;
&lt;p&gt;ลูปหลักรันทีละภาษา:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;มีไม่กี่อย่างที่ทำให้สิ่งนี้ทำงานได้จริง แทนที่จะดิ้นอยู่กับที่&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ผู้ตัดสินคือ agent เอง ไม่ใช่การเรียก API&lt;/strong&gt; เมื่อเราพูดว่า “LLM เป็นผู้ตัดสิน” เราหมายถึง agent ประจำภาษาเองอ่าน edge ที่สุ่มมาแต่ละตัวเทียบกับซอร์สจริง แล้วจำแนกมันด้วยหลักเกณฑ์การตัดสินห้าประเภทที่ตายตัว: edge นี้ถูกต้องหรือไม่ เป็นผลบวกลวง เป็นความสัมพันธ์ที่ถูกต้องแต่ประเภทผิด ผูกกับขอบเขตผิด หรือพก metadata ผิด หลักเกณฑ์การตัดสินนั้นคือทั้งหมดของเกม — “อัตราความผิดพลาด 23%” ไม่มีความหมายจนกว่าคุณจะรู้ว่านั่นคือข้อบกพร่องจริงหรือผู้ตัดสินนับผิด&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;แก้ไขทีละอย่าง แล้วพิสูจน์มัน&lt;/strong&gt; แต่ละรอบเปลี่ยนแปลงส่วนที่แก้ไขได้เพียงหนึ่งส่วนเท่านั้น แล้วรันซ้ำกับชุดทดสอบที่ตายตัว และเก็บการเปลี่ยนแปลงไว้ก็ต่อเมื่อ F1 ดีขึ้นและการจำแนกซ้ำดูดีขึ้น ถ้าไม่ มันจะถูกย้อนกลับ ไม่มีชุดการแก้ไขแบบเดาสุ่ม ไม่มี “น่าจะดีขึ้น” การเปลี่ยนแปลงต้องพิสูจน์คุณค่าของมันเอง ไม่เช่นนั้นก็หายไป และเมื่อการแก้ไขผ่านเกณฑ์และถูกเก็บไว้ มันจะถูกเลื่อนขึ้นเข้าสู่ชุด fixture — เพื่อให้ bug ที่มันแก้ไม่สามารถกลับมาเงียบๆ ได้อีก ขั้นตอนการเลื่อนขึ้นนั้นคือสิ่งที่ทำให้ลูปนี้ &lt;em&gt;เวียนซ้ำ&lt;/em&gt; แทนที่จะเป็นแค่การทำซ้ำ: ทุกรอบจะทำให้มาตรฐานอ้างอิงที่รอบถัดไปใช้ตรวจสอบแข็งแกร่งขึ้น&lt;/p&gt;
&lt;h2 id=&quot;บทเรียนที่เรายังคงเรียนรู้ซ้ำ-เมตริกรายงานเกินจริง&quot;&gt;บทเรียนที่เรายังคงเรียนรู้ซ้ำ: เมตริกรายงานเกินจริง&lt;/h2&gt;
&lt;p&gt;นี่คือกับดัก และเราเดินเข้าไปตรงๆ เมตริกคลังข้อมูลรอง — ความถี่ที่เป้าหมายที่ถูกดึงออกมาไม่มีสัญลักษณ์ที่ระบุเป้าหมายได้ สัญลักษณ์กี่ตัวดู “กำพร้า” และอื่นๆ — รายงานปัญหาเกินจริงอย่างมาก ส่วนใหญ่เป็น &lt;em&gt;ผลที่เกิดจากรูปแบบของภาษา&lt;/em&gt; ไม่ใช่ bug&lt;/p&gt;
&lt;p&gt;ตัวอย่างที่ชัดที่สุด: &lt;code&gt;llvm&lt;/code&gt; เคยแสดงอัตรา “ซอร์สที่ไม่มี symbol” ที่ 73% และถูกตราหน้าว่าเลวร้าย เราเจาะลึกเข้าไป ความแม่นยำจริง คือ &lt;strong&gt;98.5%&lt;/strong&gt; “symbol ที่หายไป” เกือบทั้งหมดเป็นการอ้างอิงภายนอกที่ถูกต้อง — การเรียกเข้าไลบรารีมาตรฐาน เข้าเฟรมเวิร์ก เข้าโค้ดที่อยู่นอกรีโพ เมตริกนั้นกำลังวัดคุณสมบัติของภาษา ไม่ใช่ข้อบกพร่องในตัวจัดการ ภาษาอย่าง Zig, COBOL และ Odin แสดงอัตรา “กำพร้า” 65–70% และถูกต้องทั้งหมด COBOL มีความผิดพลาดจริงเป็นศูนย์&lt;/p&gt;
&lt;p&gt;หากเราปล่อยให้ตัวเลขเหล่านั้นขับเคลื่อนงาน เราคงใช้เวลาหลายสัปดาห์ “แก้ไข” ตัวจัดการที่ถูกต้องอยู่แล้ว และมองข้ามภาษาที่มี bug จริงแบบเงียบๆ บทสรุปนั้นตรงไปตรงมา: เมตริกรวมเป็นสัญญาณคัดกรองคร่าวๆ อย่างดีที่สุด &lt;strong&gt;สัญญาณคุณภาพจริงคือการสุ่มตรวจพร้อมการจำแนก edge&lt;/strong&gt; — การมอง edge จริงในรีโพซิทอรีจริง และตัดสินทีละตัว ข้อมูลเหนือสัญชาตญาณ แต่ก็ต่อเมื่อคุณรู้แล้วว่าข้อมูลไหนบอกความจริง&lt;/p&gt;
&lt;h2 id=&quot;ลูปด้านนอก-ทีมงาน-ไม่ใช่มาราธอน&quot;&gt;ลูปด้านนอก: ทีมงาน ไม่ใช่มาราธอน&lt;/h2&gt;
&lt;p&gt;ทีละภาษาจะใช้เวลานานมากข้าม 280 ภาษา ดังนั้นลูปด้านในจึงถูกห่อด้วยลูปด้านนอกที่รันหลายภาษาพร้อมกัน&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;แต่ละ agent ทำงานใน worktree แบบใช้แล้วทิ้งเพื่อไม่ให้เหยียบกันเอง ออร์เคสเตรเตอร์รวมการแก้ไขของพวกมันทีละอย่าง แต่ละครั้งอยู่หลังการตรวจสอบการถดถอยแบบ full-manifest: การเปลี่ยนแปลงที่ช่วยภาษาของตัวเองแต่แอบทำลายอีกสามภาษาจะไม่ถูกรวมเข้ามา การรวมเข้ามาถูกควบคุม และยืนยันก่อนที่อะไรจะถูก push — เกณฑ์การถดถอยตัดสินว่าอะไร &lt;em&gt;ปลอดภัย&lt;/em&gt; มนุษย์ยังคงตัดสินว่าอะไร &lt;em&gt;ถูกปล่อยออกมา&lt;/em&gt; จากนั้น pool จะหมุนไปยังชุดภาษาถัดไป และทั้งหมดก็รันอีกครั้ง&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่ยังไม่สมบูรณ์แบบ&quot;&gt;สิ่งที่ยังไม่สมบูรณ์แบบ&lt;/h2&gt;
&lt;p&gt;ผู้ตัดสินสามารถผิดพลาดได้ และความผิดพลาดนั้นมีทิศทาง: agent ที่รันด้วยบริบทน้อยเกินไป &lt;em&gt;รายงานเกินจริง&lt;/em&gt; ในชุดหนึ่ง ภาษาแปดภาษาถูกตั้งค่าสถานะที่ความผิดพลาด 5–20% เมื่อตรวจสอบ มีเพียงหนึ่งภาษาที่เป็น bug จริงเฉพาะภาษา — ที่เหลือเป็นความผิดพลาดของผู้ตัดสินจากการพลาด semantic เฉพาะของภาษานั้น (บรรทัดซอร์สหนึ่งบรรทัดปล่อย edge หลายตัวอย่างถูกต้อง, การผูกพารามิเตอร์ถูกจำลองเป็นการกำหนดค่า, ภาษาที่มีการอ้างอิงต่อหนึ่งตัวระบุ) นั่นคือเหตุผลที่เราสุ่มด้วยสองซีดแล้วตรวจไขว้ และเหตุผลที่ความไม่ลงรอยกันระหว่างผู้ตัดสินกับ fixture ถูกมองว่าเป็นสัญญาณที่ &lt;em&gt;น่าสนใจที่สุด&lt;/em&gt; ไม่ใช่คำตัดสินที่ยุติแล้ว — บางครั้ง fixture ต่างหากที่เป็นสิ่งที่ผิด&lt;/p&gt;
&lt;p&gt;เรายังตรงไปตรงมาเกี่ยวกับเป้าหมายด้วย เป้าหมายคือความผิดพลาดจริงเป็นศูนย์ ไม่มีข้อแม้ — แต่ “ศูนย์” คือทิศทางที่เราค่อยๆ มุ่งไปทีละภาษา ไม่ใช่กล่องที่ถูกกาเครื่องหมายแล้ว มักมีรีโพอื่นที่มีสำนวนอื่นเสมอ&lt;/p&gt;
&lt;h2 id=&quot;ได้มา-ไม่ใช่แค่กล่าวอ้าง&quot;&gt;ได้มา ไม่ใช่แค่กล่าวอ้าง&lt;/h2&gt;
&lt;p&gt;ทุกสิ่งที่ Maguyva ทำให้ agent — การหาสัญลักษณ์, การตามรอย dependency, การตอบคำถามพร้อมโค้ดที่อ้างอิงได้ — ล้วนพึ่งพาการแตกโครงสร้างที่อยู่ข้างล่างว่าถูกต้อง ข้าม 280 ภาษา คำว่า “ถูกต้อง” ไม่สามารถกล่าวอ้างได้ มันต้อง &lt;em&gt;ได้มา&lt;/em&gt; อย่างต่อเนื่องจากโค้ดจริง ลูปนี้คือวิธีที่เราได้มันมา: วงจรสุ่มตรวจและแก้ไขแบบอัตโนมัติที่ปฏิบัติต่อเมตริกของตัวเองด้วยความสงสัย พิสูจน์ทุกการเปลี่ยนแปลง และเปลี่ยนทุกการแก้ไขให้เป็นเครื่องป้องกันการถดถอยครั้งถัดไป มันไม่ใช่เรื่องหรูหรา มันคืองานที่ทำให้เราพูดได้ว่า “เรารองรับภาษาของคุณ” และหมายความอย่างนั้นจริงๆ เขียวนั้นง่าย ถูกต้องนั้นต้องได้มา&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>ค้นหาแบบผสานหลายโหมด: เลือกตัวค้นคืนที่ใช่สำหรับทุกคำค้น</title><link>https://maguyva.ai/th/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/th/blog/multi-modal-fusion-search</guid><description>คำค้นอย่าง &apos;parseConfig ถูกนิยามที่ไหน&apos; ต้องการการค้นหาที่ต่างจาก &apos;auth ทำงานอย่างไร&apos; Maguyva จำแนกเจตนา ให้น้ำหนักทั้งสี่รูปแบบการค้นคืนตามนั้น แล้วรวมผลลัพธ์ด้วย weighted Reciprocal Rank Fusion</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;หมายเหตุเกี่ยวกับการออกแบบในอดีต: บทความเดือนเมษายน 2026 นี้อธิบายการออกแบบการกำหนดเส้นทางในขณะนั้น ไม่ใช่พฤติกรรมเริ่มต้นในปัจจุบัน ข้อแก้ไขในเดือนกันยายนด้านล่างกล่าวถึงข้อกล่าวอ้างเกี่ยวกับการวัดผลเท่านั้น สำหรับการกำหนดเส้นทาง ชุดค่าที่กำหนดไว้ล่วงหน้า และการควบคุมวิธีค้นหาอย่างชัดเจนในปัจจุบัน โปรดดู&lt;a href=&quot;https://maguyva.ai/th/docs/how-it-works&quot;&gt;วิธีการทำงาน&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;คำค้นหาแต่ละแบบต้องการสิ่งที่ต่างกัน&lt;/p&gt;
&lt;p&gt;“&lt;code&gt;parseConfig&lt;/code&gt; ถูกนิยามที่ไหน” ต้องการสัญลักษณ์ที่แน่นอน — ตำแหน่งเดียวที่แม่นยำ เร็ว “authentication ทำงานอย่างไร” ต้องการความหมาย — การกระจายของโค้ดที่เกี่ยวข้องซึ่งอธิบายแนวคิด “อะไรจะพังถ้าฉันเปลี่ยนฟังก์ชันนี้” ต้องการ dependency graph “หาสตริง &lt;code&gt;ECONNREFUSED&lt;/code&gt;” ต้องการการจับคู่แบบตรงตัว ไม่ต้องมีอะไรฉลาด&lt;/p&gt;
&lt;p&gt;Grep ยอดเยี่ยมสำหรับการจับคู่แบบตรงตัวและมีประโยชน์สำหรับการตามหาการอ้างอิงบางอย่าง แต่มันไม่ใช่ dependency graph และมันไม่เข้าใจความหมาย Embedding ครอบคลุมด้าน semantic แต่มันเป็นเครื่องมือที่ผิดสำหรับสตริงตรงตัวและการวิเคราะห์ผลกระทบ เครื่องมือค้นหาโค้ดส่วนใหญ่เลือกเอนจินเดียวและให้ทุกคำค้นอยู่กับตัวเลือกนั้น Maguyva ไม่ยึดติดกับเอนจินเดียว มันหาให้ได้ว่าคุณถามคำถามประเภทไหน แล้วผสมตัวค้นคืนสี่ตัวในสัดส่วนที่คำถามนั้นสมควรได้รับ&lt;/p&gt;
&lt;h2 id=&quot;สี่รูปแบบ&quot;&gt;สี่รูปแบบ&lt;/h2&gt;
&lt;p&gt;ภายใต้ระบบมีสี่วิธีอิสระในการหาโค้ด:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantic&lt;/strong&gt; — การค้นหาเวกเตอร์บน Voyage binary embedding หาโค้ดตามความหมาย&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;text&lt;/strong&gt; — การจับคู่ trigram หาข้อความตรงตัว, สตริงข้อผิดพลาด, ตัวระบุที่แน่นอน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;structural&lt;/strong&gt; — AST คิวรี หาคำนิยาม, ซิกเนเจอร์ และโครงสร้างภาษา&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graph&lt;/strong&gt; — dependency graph หาผู้เรียก, สิ่งที่ถูกเรียก และรัศมีผลกระทบ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;แต่ละอย่างแข็งแกร่งในคำถามคนละประเภท เคล็ดลับคือการตัดสินใจว่าจะเชื่อแต่ละอย่างมากแค่ไหนสำหรับคำค้นที่อยู่ตรงหน้าคุณ&lt;/p&gt;
&lt;h2 id=&quot;การจำแนกเจตนา&quot;&gt;การจำแนกเจตนา&lt;/h2&gt;
&lt;p&gt;ก่อนที่การค้นคืนใดจะรัน ตัวจำแนกที่ใช้ทรัพยากรน้อยจะจัดคำค้นให้อยู่ในหนึ่งในหกเจตนา พร้อมคะแนนความมั่นใจ มันตั้งใจให้ราคาถูก — ฮิวริสติกที่เรียงลำดับ การจับคู่แรกชนะ — เพราะมันรันบนเส้นทางที่ใช้งานบ่อย และเพิ่มเวลาแค่หนึ่งหรือสองมิลลิวินาที:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เริ่มด้วย &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (ความมั่นใจ 0.95)&lt;/li&gt;
&lt;li&gt;“who calls”, “usages of”, “references to” (ใครเรียก การใช้งานของ การอ้างอิงถึง) → &lt;strong&gt;find_references&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” (ผลกระทบ รัศมีผลกระทบ สิ่งที่พึ่งพา) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;string&quot;&lt;/code&gt; ที่ใส่เครื่องหมายคำพูด หรือโทเคนข้อผิดพลาดอย่าง &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0.85–0.90)&lt;/li&gt;
&lt;li&gt;ตัวระบุแบบ &lt;code&gt;CamelCase&lt;/code&gt; หรือ &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0.60–0.80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” (อย่างไร ทำไม อธิบาย สถาปัตยกรรม) → &lt;strong&gt;understand_code&lt;/strong&gt; (0.75)&lt;/li&gt;
&lt;li&gt;ไม่มีอะไรตรง → &lt;strong&gt;understand_code&lt;/strong&gt; ความมั่นใจต่ำ (0.40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;แต่ละเจตนามีโปรไฟล์น้ำหนักข้ามสี่รูปแบบ นี่คือตัวเลขจริง:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;เจตนา&lt;/th&gt;
&lt;th&gt;semantic&lt;/th&gt;
&lt;th&gt;text&lt;/th&gt;
&lt;th&gt;structural (AST)&lt;/th&gt;
&lt;th&gt;graph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ดังนั้น “&lt;code&gt;parseConfig&lt;/code&gt; ถูกนิยามที่ไหน” จะเอนหนักไปทาง AST (0.6) “auth ทำงานอย่างไร” เอนไปทาง semantic เวกเตอร์ (0.5) “อะไรพึ่งพาสิ่งนี้” แทบทั้งหมดเป็น graph (0.7) “หา &lt;code&gt;ECONNREFUSED&lt;/code&gt;” แทบทั้งหมดเป็น trigram (0.9) โดยปิดโมเดล embedding ไปเลย — เพราะความคล้ายคลึงเชิงความหมายเป็นเครื่องมือที่ผิดโดยสิ้นเชิงสำหรับสตริงที่แน่นอน&lt;/p&gt;
&lt;h2 id=&quot;เส้นทางด่วน-และเส้นทางที่ผสมแล้ว&quot;&gt;เส้นทางด่วน และเส้นทางที่ผสมแล้ว&lt;/h2&gt;
&lt;p&gt;เมื่อตัวจำแนกมั่นใจ — คะแนน ≥ 0.85 — และคำค้นเป็นแบบปกติ Maguyva ข้ามการผสมทั้งหมด แล้วส่งตรงไปยังรูปแบบหลักที่ครองอยู่ “X ถูกนิยามที่ไหน” ไม่ต้องการตัวค้นคืนสี่ตัว มันต้องการดัชนี AST ทันที เส้นทางตรงนั้นถูกรายงานกลับมาเป็น &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ทุกอย่างที่คลุมเครือจะผ่านการผสม สี่รูปแบบ (หรือสามบนพรีเซ็ตเริ่มต้น) รันคู่ขนานกัน แต่ละอย่างคืนรายการจัดอันดับของตัวเอง แล้วเรารวมพวกมัน&lt;/p&gt;
&lt;h2 id=&quot;weighted-reciprocal-rank-fusion&quot;&gt;Weighted Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;การผสมตัวค้นคืนที่แตกต่างกันนั้นยากกว่าที่ฟังดู: ความคล้ายคลึงแบบโคไซน์ 0.82, คะแนน trigram 137 และความเป็นศูนย์กลางของกราฟ 0.004 ไม่ได้อยู่บนมาตราส่วนเดียวกัน ดังนั้นคุณบวกมันตรงๆ ไม่ได้ Reciprocal Rank Fusion หลบเลี่ยงปัญหาด้วยการทิ้งคะแนนดิบไป แล้วเก็บไว้แค่ &lt;strong&gt;อันดับ&lt;/strong&gt; ที่แต่ละเอนจินกำหนดให้ การมีส่วนร่วมของผลลัพธ์หนึ่งจากรูปแบบหนึ่งคือ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;โดยที่ &lt;code&gt;rank&lt;/code&gt; คือตำแหน่งของมันในรายการของรูปแบบนั้น และ &lt;code&gt;k&lt;/code&gt; คือค่าคงที่ทำให้เรียบ การมีส่วนร่วมจะถูกรวมข้ามรูปแบบสำหรับผลลัพธ์ใดๆ ที่มากกว่าหนึ่งเอนจินพบ — ความสอดคล้องระหว่างตัวค้นคืนลอยขึ้นไปด้านบนตามธรรมชาติ เราใช้ &lt;strong&gt;k = 40&lt;/strong&gt; บนพรีเซ็ตเริ่มต้น และ 60 บน &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; รันแบบ semantic-only เท่านั้น ดังนั้นการผสมจึงไม่เคยเข้ามาเกี่ยวข้องที่นั่น) งาน RRF ดั้งเดิมลงเอยที่ k = 60 สำหรับการค้นคืนเอนกประสงค์ ค่าเริ่มต้นของเราให้น้ำหนักเพิ่มขึ้นเล็กน้อยกับผลลัพธ์ที่หลายรูปแบบจัดไว้ในอันดับต้นๆ — และเราไม่แนะนำให้ปรับแต่งด้วยมือ&lt;/p&gt;
&lt;p&gt;นอกจากนั้น ผลลัพธ์ยังพก &lt;strong&gt;การเพิ่มค่าตามความสำคัญของ graph&lt;/strong&gt; ฮับ — ฟังก์ชันที่ทั้งโค้ดเบสพึ่งพา — ควรอยู่เหนือโหนดใบที่ไม่ค่อยมีใครรู้จักแม้ที่ความเกี่ยวข้องเชิงข้อความเท่ากัน ดังนั้นเราคูณการมีส่วนร่วมแต่ละอย่างด้วย:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ความเป็นศูนย์กลางมาจากเมตริก PageRank/ดีกรีที่คำนวณล่วงหน้าของ pipeline และการเพิ่มค่าถูกจำกัดที่ 1.5 เท่า เพื่อไม่ให้ฟังก์ชันยอดนิยมกลบฟังก์ชันที่ไม่ค่อยมีใครรู้จักแต่เกี่ยวข้องมากกว่าไปเสียหมด สุดท้ายเราลดอันดับผลลัพธ์จาก path ของ vendor, build และ archive และตัดซ้ำเหลือส่วนที่ดีที่สุดต่อไฟล์&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่ยังไม่สมบูรณ์แบบ&quot;&gt;สิ่งที่ยังไม่สมบูรณ์แบบ&lt;/h2&gt;
&lt;p&gt;ตัวจำแนกเจตนาเป็นชุดของนิพจน์ปรกติ ไม่ใช่โมเดลที่ฝึกมา มันจัดการรูปแบบคำค้นทั่วไปด้วยฮิวริสติก และคำค้นที่กำกวมจะใช้ &lt;code&gt;understand_code&lt;/code&gt; กับการผสมผลที่ให้น้ำหนักด้านความหมายมากกว่า บทความฉบับก่อนระบุว่าได้ลดอัตราคำค้นที่ไม่มีผลลัพธ์จากประมาณ 15% เหลือต่ำกว่า 5% สำเร็จแล้ว แต่ข้อเสนอในเดือนธันวาคม 2025 ระบุเพียงค่าประมาณเริ่มต้นและเป้าหมาย โดยไม่ได้ให้ชุดคำค้นหรือบันทึกการวัดที่สนับสนุนผลดังกล่าว เราขอถอนข้อกล่าวอ้างว่าได้ปรับปรุงสำเร็จแล้วนี้ ดู&lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;หลักฐานต้นทางและข้อแก้ไข (ภาษาอังกฤษ)&lt;/a&gt; เรายังไม่ได้แทนที่ตัวจำแนกด้วยโมเดลที่ฝึกมา เพราะรุ่นต้นทุนต่ำนี้เร็วและดีพอสำหรับหน้าที่กำหนดเส้นทางที่ตั้งใจไว้ และตัวจำแนกที่ผิดแต่มั่นใจนั้นแย่กว่าทางเลือกสำรองที่ซื่อตรง น้ำหนักต่าง ๆ เป็นค่าตั้งต้นที่เลือกด้วยมือ ไม่ได้เรียนรู้จากข้อมูลการคลิกที่เราไม่ได้เก็บรวบรวม&lt;/p&gt;
&lt;h2 id=&quot;ถามสิ่งที่ต้องการรู้-โดยไม่ต้องเลือกเครื่องมือเอง&quot;&gt;ถามสิ่งที่ต้องการรู้ โดยไม่ต้องเลือกเครื่องมือเอง&lt;/h2&gt;
&lt;p&gt;agent ไม่ควรต้องรู้ว่าจะหยิบ grep หรือ embedding หรือ call graph ขึ้นมา — มันควรถามคำถามด้วยคำพูดธรรมดาแล้วได้คำตอบที่ถูกต้อง การผสานหลายโหมดคือสิ่งที่ทำให้ &lt;code&gt;find_symbol&lt;/code&gt;, semantic search และการวิเคราะห์ dependency อยู่ภายใต้อินเทอร์เฟซคำค้นเดียว: ระบบอ่านรูปแบบของคำถามแล้วประกอบตัวค้นคืนที่ถูกต้องให้อย่างเงียบๆ โมเดลที่ให้คะแนน embedding สำคัญ แต่การรู้ว่าเมื่อไหร่ &lt;em&gt;ไม่ควร&lt;/em&gt; ใช้มันก็สำคัญเช่นกัน การเลือกเครื่องมือที่ถูกต้องสำหรับแต่ละคำค้นเป็นคุณภาพชนิดหนึ่งในตัวมันเอง และเป็นชนิดที่เราอยากรับผิดชอบเองมากกว่าผลักให้ผู้เรียก&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>การสังเกตการณ์เอเจนต์: Hooks, Alloy และ Grafana</title><link>https://maguyva.ai/th/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/th/blog/agent-observability-hooks-alloy-grafana</guid><description>เราเชื่อมต่อ Claude Code และ Codex เข้ากับ Grafana สแตกเดียวกันด้วย OpenTelemetry และ Alloy จากนั้นใช้ trace และล็อกเพื่อค้นหาและแก้ไขปัญหาพฤติกรรมของเอเจนต์ที่ต้นตอ</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ระบบ agent พังในรูปแบบที่แปลกๆ&lt;/p&gt;
&lt;p&gt;บางครั้งโมเดลคือปัญหา บางครั้งเครื่องมือคือปัญหา บางครั้ง MCP เซิร์ฟเวอร์ของคุณก็ไม่มีอะไรผิด แต่ agent เลือกผู้เชี่ยวชาญผิดคน หรือใช้เวลาครึ่งเซสชันทำงาน shell ที่คุณไม่ได้คาดคิด หรือเผาผลาญต้นทุนอย่างเงียบๆ ในลูปที่ดูมีประสิทธิผลจากภายนอก&lt;/p&gt;
&lt;p&gt;ถ้าคุณมองไม่เห็นความแตกต่าง แสดงว่าคุณไม่ได้กำลังควบคุมระบบ agent จริงๆ คุณกำลังเดา&lt;/p&gt;
&lt;p&gt;เราจึงสร้าง observability สแตกสำหรับเวิร์กโฟลว์ของเราเอง: Claude Code, Codex, Claude hook อีเวนต์, Codex notify อีเวนต์, OpenTelemetry แบบเนทีฟ, Grafana Alloy และ Grafana Cloud อยู่อีกฝั่งหนึ่ง&lt;/p&gt;
&lt;p&gt;ส่วนที่น่าสนใจไม่ใช่ “เราสร้างแดชบอร์ด” ส่วนที่น่าสนใจคือเราต้องแยกเทเลเมทรีออกเป็นสองสตรีมที่ต่างกัน เพราะไม่มีฟีดเดียวที่ให้ภาพรวมทั้งหมด&lt;/p&gt;
&lt;h2 id=&quot;ปัญหา-เทเลเมทรีของ-agent-กระจัดกระจาย&quot;&gt;ปัญหา: เทเลเมทรีของ Agent กระจัดกระจาย&lt;/h2&gt;
&lt;p&gt;agent เขียนโค้ดสมัยใหม่ปล่อยเทเลเมทรีอยู่แล้วบางส่วน สิ่งนั้นช่วยได้ แต่ไม่พอ&lt;/p&gt;
&lt;p&gt;OTEL แบบเนทีฟเก่งในการตอบคำถามอย่าง:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เราส่งคำขอไปกี่ครั้ง?&lt;/li&gt;
&lt;li&gt;เซสชันนี้มีต้นทุนเท่าไหร่?&lt;/li&gt;
&lt;li&gt;span และ trace อยู่ตรงไหน?&lt;/li&gt;
&lt;li&gt;เวลาแฝงพุ่งขึ้นหรือไม่?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;แต่มันแย่กว่ามากในการตอบคำถามอย่าง:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;agent พึ่งพา MCP เซิร์ฟเวอร์ตัวไหน?&lt;/li&gt;
&lt;li&gt;ความล้มเหลวนี้เกิดใน &lt;code&gt;Bash&lt;/code&gt;, เครื่องมือไฟล์ในตัว หรือการเรียก MCP?&lt;/li&gt;
&lt;li&gt;skill ตัวไหนที่ทำงานจริง?&lt;/li&gt;
&lt;li&gt;เอเจนต์ย่อยประเภทไหนที่ถูกส่งงานไป?&lt;/li&gt;
&lt;li&gt;เซสชันนี้กำลังทำงานที่มีประโยชน์ หรือแค่วนซ้ำอยู่กับที่?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;คำถามกลุ่มที่สองนั้นอยู่ใกล้ hook มากกว่า trace&lt;/p&gt;
&lt;p&gt;แต่ในทางกลับกันก็จริงเช่นกัน: คำถามด้านประสิทธิภาพที่สำคัญที่สุดบางข้ออยู่ใกล้ trace มากกว่า hook&lt;/p&gt;
&lt;p&gt;ถ้าคุณอยากรู้ว่าเวลาแฝงสะสมอยู่ตรงไหนจริงๆ span ไหนที่ช้า หรือเซสชันเผาเวลาไปกับการเรียกโมเดลหรือการรันเครื่องมือ คุณต้องการข้อมูล trace เช่นเดียวกับ semantic อีเวนต์&lt;/p&gt;
&lt;h2 id=&quot;สถาปัตยกรรมที่เราเลือกใช้&quot;&gt;สถาปัตยกรรมที่เราเลือกใช้&lt;/h2&gt;
&lt;p&gt;เรารันเส้นทางเทเลเมทรีสองเส้นทางคู่ขนานกัน&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;การแยกนั้นตั้งใจ&lt;/p&gt;
&lt;p&gt;มันยังไม่สมมาตรด้วย Claude Code ให้อินเทอร์เฟซ hook ตลอดวงจรชีวิตที่หลากหลายกว่ามาก Codex ให้ OTEL แบบเนทีฟพร้อมอินเทอร์เฟซ notify ดังนั้นเรานอร์มัลไลซ์อีเวนต์การจบเทิร์นที่มีข้อมูลน้อยกว่าให้เข้ากับ schema ล็อกเดียวกัน แทนที่จะแสร้งว่าทั้งสองรันไทม์เปิดเผยการควบคุมแบบเดียวกัน&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OTEL แบบเนทีฟ&lt;/strong&gt; ให้สตรีมพื้นฐาน: ล็อกและ trace จากรันไทม์เอง บวกกับเมตริกในจุดที่รันไทม์ปล่อยจริง&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook และ notify อีเวนต์&lt;/strong&gt; ให้ชั้น semantic: สิ่งอย่าง &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt; และ metadata ที่จำแนกแล้ว ซึ่งเราสนใจจริงๆ เมื่อดีบักพฤติกรรม agent Claude Code ให้สตรีมอีเวนต์ที่หลากหลายกว่าตรงนี้ Codex ให้สตรีมที่นอร์มัลไลซ์แล้วซึ่งมีข้อมูลน้อยกว่าแต่ยังมีประโยชน์&lt;/p&gt;
&lt;h2 id=&quot;เหตุใด-hook-จึงมีอยู่เลย&quot;&gt;เหตุใด Hook จึงมีอยู่เลย&lt;/h2&gt;
&lt;p&gt;hook pipeline ของเราเสริมอีเวนต์ก่อนที่มันจะไปถึง Loki&lt;/p&gt;
&lt;p&gt;แทนที่จะบอกแค่ว่า “เครื่องมือหนึ่งทำงาน” เราจำแนกอีเวนต์ให้อยู่ในฟิลด์อย่าง:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: MCP แบ็กเอนด์ตัวไหนที่จัดการการเรียกนี้&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: กลุ่มคำสั่ง shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: ผู้เชี่ยวชาญประเภทไหนที่ถูกส่งงานไป&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: แหล่งที่มาคือ Claude Code หรือ Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;นั่นหมายความว่าเราถามคำถามที่สำคัญในทางปฏิบัติได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ฟิลด์เหล่านั้นไม่ใช่แค่ของประดับ มันคือความแตกต่างระหว่าง “agent รู้สึกช้า” กับ “agent ใช้เวลาสิบนาทีล่าสุดไปกับงาน git ที่หนัก shell และมีอัตราความล้มเหลวของเครื่องมือสูง”&lt;/p&gt;
&lt;p&gt;รายละเอียดการอิมพลีเมนต์หนึ่งที่ดูแปลกกว่าที่มันเป็น: Loki สตรีมที่ใช้ร่วมกันยังคงใช้ &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; เป็นเลเบล แม้ว่าอีเวนต์จะมาจาก Codex ก็ตาม การแบ่งจริงระหว่างรันไทม์เกิดขึ้นที่ &lt;code&gt;agent_tool&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;เหตุใด-alloy-จึงอยู่ตรงกลาง&quot;&gt;เหตุใด Alloy จึงอยู่ตรงกลาง&lt;/h2&gt;
&lt;p&gt;Grafana Alloy ไม่ใช่แค่ตัวส่งต่อในการตั้งค่านี้ มันคือขอบเขตนโยบาย&lt;/p&gt;
&lt;p&gt;เราชี้สตรีม OTEL แบบเนทีฟจาก Claude Code และ Codex ไปยัง Alloy พร็อกซีในเครื่องที่ &lt;code&gt;localhost:4318&lt;/code&gt; แล้วปล่อยให้ Alloy ทำความสะอาด payload ก่อนส่งต่อไปยัง Grafana Cloud&lt;/p&gt;
&lt;p&gt;สิ่งนี้สำคัญเพราะเทเลเมทรีของ agent แบบดิบเต็มไปด้วยฟิลด์คาร์ดินาลิตีสูงที่มีประโยชน์สำหรับการวิเคราะห์ แต่แย่มากเมื่อใช้เป็นเลเบลที่ถูกทำดัชนี:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;จำนวน token&lt;/li&gt;
&lt;li&gt;ระยะเวลา&lt;/li&gt;
&lt;li&gt;ก้อนพารามิเตอร์ของเครื่องมือ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ถ้าคุณทำดัชนีทุกอย่าง จำนวนเลเบลจะพุ่งสูงจนสร้างปัญหาในการทำงาน&lt;/p&gt;
&lt;p&gt;ดังนั้น Alloy ทำสามอย่างให้เรา:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;เก็บชุดเลเบลคาร์ดินาลิตีต่ำที่จำเป็นเพียงเล็กน้อยไว้ในดัชนี&lt;/li&gt;
&lt;li&gt;ย้ายฟิลด์ที่มีสัญญาณรบกวนแต่มีประโยชน์ไปยัง metadata ที่มีโครงสร้าง&lt;/li&gt;
&lt;li&gt;ทิ้งสัญญาณรบกวนล้วนๆ ออกไปทั้งหมด&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;แนวคิดสำคัญนั้นเรียบง่าย: &lt;strong&gt;สังเกตให้มากขึ้น ทำดัชนีให้น้อยลง&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;เหตุใด-hook-สตรีมจึงข้าม-alloy&quot;&gt;เหตุใด Hook สตรีมจึงข้าม Alloy&lt;/h2&gt;
&lt;p&gt;hook สตรีมถูกจัดรูปแบบให้ Loki อยู่แล้ว&lt;/p&gt;
&lt;p&gt;เมื่อถึงเวลาที่ &lt;code&gt;send_event.py&lt;/code&gt; ส่งอีเวนต์ เราตัดสินใจไปแล้วว่าฟิลด์ไหนควรได้รับการปฏิบัติแบบเลเบล และฟิลด์ไหนควรอยู่ในเนื้อหา JSON ที่มีโครงสร้าง สตรีมนั้นไปตรงยังเกตเวย์ OTLP ของ Grafana Cloud แทนที่จะผ่าน Alloy อีกรอบ&lt;/p&gt;
&lt;p&gt;ดังนั้นระบบจึงมีการแบ่งงานที่ชัดเจน:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; จัดระเบียบสตรีม OTEL แบบเนทีฟที่ยังไม่ผ่านการปรับแต่ง&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การเสริม hook&lt;/strong&gt; ทำให้ semantic อีเวนต์ค้นหาได้&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;สิ่งนี้ทำให้สถาปัตยกรรมเรียบง่ายกว่าการพยายามบังคับทุกอย่างให้ผ่านเส้นทางเดียว&lt;/p&gt;
&lt;h2 id=&quot;แดชบอร์ดแสดงอะไรจริงๆ&quot;&gt;แดชบอร์ดแสดงอะไรจริงๆ&lt;/h2&gt;
&lt;p&gt;ภาพหน้าจอด้านล่างมาจากหนึ่งในแดชบอร์ด observability เบื้องหลังเวิร์กโฟลว์ agent ของเรา มันไม่ใช่ benchmark และตัวเลขเป็นแค่ภาพ ณ ช่วงเวลาหนึ่ง ประเด็นคือรูปทรงของข้อมูล: ฟีดกิจกรรม, การเรียกเครื่องมือ, ความล้มเหลว, พรอมต์ และการแยกตาม agent, เครื่องมือในตัว, การใช้ MCP, คำสั่ง shell และ skill&lt;/p&gt;
&lt;p&gt;ส่วนที่มีประโยชน์คือแดชบอร์ดนี้อยู่บน Grafana สแตกเดียวกับ agent เทเลเมทรีที่เหลือ เราสามารถกรองตาม agent ต้นทางและกลุ่มเครื่องมือ และดูข้อมูลข้ามรันไทม์โดยไม่ต้องคิดค้นเรื่องราว observability ที่ต่างกันสำหรับแต่ละระบบ&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;เปิดภาพหน้าจอแดชบอร์ด observability ที่ความละเอียดเต็ม&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;แดชบอร์ด Grafana แสดงฟีดกิจกรรม, จำนวนการเรียกเครื่องมือ, ความล้มเหลว, พรอมต์ และการแยกตาม agent, เครื่องมือในตัว, การใช้ MCP, คำสั่ง CLI และ skill สำหรับเวิร์กโฟลว์ agent&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    หนึ่งในแดชบอร์ดที่ทำงานสดเบื้องหลังเวิร์กโฟลว์ agent ของเรา ภาพหน้าจอนี้เป็นเพียงส่วนหนึ่งของ Grafana สแตกที่ใช้ร่วมกัน ซึ่งยังรับเทเลเมทรีจาก agent รันไทม์และระบบอื่นๆ ของเราด้วย คลิกที่ภาพเพื่อดูเวอร์ชันความละเอียดเต็ม
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;เหตุใด-trace-จึงสำคัญกว่าที่เห็นในตอนแรก&quot;&gt;เหตุใด Trace จึงสำคัญกว่าที่เห็นในตอนแรก&lt;/h2&gt;
&lt;p&gt;ล็อกบอกเราว่าเกิดงานประเภทไหน Trace บอกเราว่างานนั้นคลี่คลายไปตามเวลาอย่างไร&lt;/p&gt;
&lt;p&gt;ความแตกต่างนั้นสำคัญในระบบ agent เพราะคำว่า “ช้า” นั้นทื่อเกินกว่าจะมีประโยชน์&lt;/p&gt;
&lt;p&gt;trace สามารถบอกเราได้ว่าปัญหานั้นมาจาก:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เวลาแฝงของโมเดล&lt;/li&gt;
&lt;li&gt;เวลาการรันเครื่องมือ&lt;/li&gt;
&lt;li&gt;การลองซ้ำซ้ำๆ&lt;/li&gt;
&lt;li&gt;การโต้ตอบ MCP หนึ่งครั้งที่แพงเป็นพิเศษ&lt;/li&gt;
&lt;li&gt;งานเล็กๆ จำนวนมากที่สะสมเวลาไว้ที่ดูไม่เป็นอันตรายเมื่อมองแยกกัน&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ในทางปฏิบัติเราใช้ hook สตรีมและ Tempo trace ร่วมกัน&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ล็อกจาก hook&lt;/strong&gt; ตอบว่า: เกิดอะไรขึ้น?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trace&lt;/strong&gt; ตอบว่า: เวลาหายไปไหน?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;การผสมผสานนี้คือสิ่งที่เปลี่ยน observability จากแดชบอร์ดให้กลายเป็นคำอธิบาย&lt;/p&gt;
&lt;h2 id=&quot;codex-เข้ามาตรงไหน&quot;&gt;Codex เข้ามาตรงไหน&lt;/h2&gt;
&lt;p&gt;Codex เป็นส่วนหนึ่งของสแตกเดียวกัน แต่ไม่เหมือนกับ Claude Code เสียทีเดียว&lt;/p&gt;
&lt;p&gt;สำหรับ Codex เราเชื่อมสองส่วน:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OTEL แบบเนทีฟจาก Codex เข้าสู่ Alloy&lt;/li&gt;
&lt;li&gt;notify webhook เข้าสู่ &lt;code&gt;codex_notify.py&lt;/code&gt; ซึ่งแมปการจบเทิร์นให้เข้ากับ Loki schema เดียวกับที่เราใช้กับ hook อีเวนต์&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;นั่นทำให้เรามีตัวกรองรวมอย่าง &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; ภายในสตรีมล็อกเดียวกัน&lt;/p&gt;
&lt;p&gt;ข้อแม้ที่ตรงไปตรงมา: payload notify ของ Codex ในตอนนี้บางกว่า payload hook ของ Claude Code เพราะมันไม่ใช่อินเทอร์เฟซการผสานรวมแบบเดียวกัน ในระบบของเราวันนี้ การจบเทิร์นของ Codex สามารถถูกนอร์มัลไลซ์ให้เข้ากับ schema ที่ใช้ร่วมกันได้ แต่การดึงข้อมูลระดับเครื่องมือ ทีละตัวยังคงดีกว่าใน OTEL สตรีมแบบเนทีฟ มากกว่าใน notify บริดจ์&lt;/p&gt;
&lt;p&gt;เราไม่ได้ยกข้อจำกัดนี้มาเป็นข้อแก้ตัว มันคือประเด็นของบทความนี้ ระบบ observability จริงถูกประกอบขึ้นจากสัญญาณที่ไม่สมบูรณ์แบบ&lt;/p&gt;
&lt;h2 id=&quot;grafana-ผ่าน-mcp-เปลี่ยนเกม&quot;&gt;Grafana ผ่าน MCP เปลี่ยนเกม&lt;/h2&gt;
&lt;p&gt;การเปลี่ยนแปลงที่ใหญ่กว่าคือ Grafana ไม่ได้เป็นแค่สถานที่ที่มนุษย์เข้าไปดูในเบราว์เซอร์อีกต่อไป&lt;/p&gt;
&lt;p&gt;ในรีโพนี้เรายังเปิด Grafana ผ่าน MCP ด้วย นั่นหมายความว่า agent สามารถคิวรี Loki, Prometheus และ Tempo ได้โดยตรง แทนที่จะรอให้มนุษย์ตรวจแดชบอร์ดด้วยมือก่อน&lt;/p&gt;
&lt;p&gt;นั่นเปลี่ยน observability ให้กลายเป็นข้อมูลนำเข้าที่ช่วยขับเคลื่อนเวิร์กโฟลว์&lt;/p&gt;
&lt;p&gt;agent สามารถถามได้ว่า:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;กลุ่มเครื่องมือไหนล้มเหลวมากที่สุดในชั่วโมงที่ผ่านมา?&lt;/li&gt;
&lt;li&gt;MCP เซิร์ฟเวอร์ตัวไหนครองเซสชันนี้?&lt;/li&gt;
&lt;li&gt;การเปลี่ยนแปลงล่าสุดลดความล้มเหลวของเครื่องมือลงจริงหรือแค่ย้ายงานไปยังเส้นทางที่หนัก shell มากขึ้นด้วยความผิดพลาดแบบเดิม?&lt;/li&gt;
&lt;li&gt;trace ไหนแสดงเวลาแฝงสูงสุดหรือการลองซ้ำซ้ำๆ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;เมื่อคุณมีสิ่งนั้นแล้ว คุณก็ใกล้เข้าไปยังลูปการปรับปรุงตัวเองมาก&lt;/p&gt;
&lt;h2 id=&quot;จากแดชบอร์ดสู่ลูปป้อนกลับ&quot;&gt;จากแดชบอร์ดสู่ลูปป้อนกลับ&lt;/h2&gt;
&lt;p&gt;นี่คือส่วนที่เราพบว่าน่าสนใจที่สุด&lt;/p&gt;
&lt;p&gt;เมื่อ observability สแตกค้นหาได้จากชั้น agent แล้ว เทเลเมทรีจะหยุดเป็นเครื่องมือรายงานที่รอให้คนเข้ามาดู และกลายเป็นสัญญาณควบคุม&lt;/p&gt;
&lt;p&gt;ลูปหน้าตาแบบนี้:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;กิจกรรมของ agent ปล่อย trace, เมตริก และล็อกจาก hook ที่เสริมแล้ว&lt;/li&gt;
&lt;li&gt;Grafana เก็บหลักฐานไว้ใน Loki, Tempo และ Prometheus ในจุดที่มีเมตริก&lt;/li&gt;
&lt;li&gt;agent คิวรีหลักฐานนั้นผ่าน Grafana MCP&lt;/li&gt;
&lt;li&gt;ระบบระบุส่วนผสมเครื่องมือที่ไม่ดี skill ที่เปราะบาง การจัดเส้นทางที่อ่อนแอ หรือเวิร์กโฟลว์ที่หนัก shell ซึ่งยังคงก่อความผิดพลาดที่หลีกเลี่ยงได้&lt;/li&gt;
&lt;li&gt;agent หรือผู้ควบคุมปรับพรอมต์, การตั้งค่าของ agent, คำอธิบาย skill, กฎการจัดเส้นทาง หรือสิทธิ์เข้าถึงเครื่องมือ&lt;/li&gt;
&lt;li&gt;เซสชันถัดไปสร้างรูปทรงเทเลเมทรีใหม่ และวงจรก็ทำซ้ำ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;นั่นคือวิธีที่คุณเคลื่อนจาก “แดชบอร์ดที่น่าสนใจ” ไปสู่ “ระบบปรับปรุงที่วัดผลได้”&lt;/p&gt;
&lt;p&gt;เป้าหมายไม่ใช่การเพิ่มการใช้เครื่องมือประเภทเดียวให้สูงสุด แต่คือการลงเอยที่ส่วนผสมที่เหมาะสมของ CLI, เครื่องมือในตัว, การเรียก MCP และ skill สำหรับงานที่กำลังทำอยู่จริง&lt;/p&gt;
&lt;h2 id=&quot;สิ่งนี้ช่วยให้เราตอบอะไรได้&quot;&gt;สิ่งนี้ช่วยให้เราตอบอะไรได้&lt;/h2&gt;
&lt;p&gt;เมื่อทั้งสองรันไทม์ลงเอยใน Grafana สแตกเดียวกัน เราตอบคำถามเชิงปฏิบัติการได้เร็วขึ้นมาก:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ความล้มเหลวกระจุกตัวอยู่ในกลุ่มเครื่องมือเดียวหรือไม่?&lt;/li&gt;
&lt;li&gt;เวิร์กโฟลว์ที่หนัก shell กำลังสร้างความผิดพลาดที่หลีกเลี่ยงได้ ในจุดที่ควรมีเครื่องมือระดับสูงกว่าอยู่หรือไม่?&lt;/li&gt;
&lt;li&gt;MCP เซิร์ฟเวอร์ตัวไหนแบกรับภาระงาน?&lt;/li&gt;
&lt;li&gt;เรากำลังจ่ายเงินสำหรับกิจกรรม agent ที่ไม่ได้สร้างความคืบหน้าที่มีความหมายอยู่หรือไม่?&lt;/li&gt;
&lt;li&gt;เซสชันหนึ่งไม่แข็งแรงเพราะโมเดล เครื่องมือ หรือชั้นออร์เคสเตรชัน?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;สิ่งนี้มีประโยชน์เป็นพิเศษในเวิร์กโฟลว์แบบหลาย agent ที่คำว่า “agent กำลังยุ่งอยู่” แทบไม่บอกอะไรคุณเลย&lt;/p&gt;
&lt;p&gt;ถ้าผู้เชี่ยวชาญตัวหนึ่งถูกส่งงานซ้ำๆ และสร้างอัตราความล้มเหลวสูง นั่นคือปัญหาการจัดเส้นทางหรือการปรับพรอมต์&lt;/p&gt;
&lt;p&gt;ถ้า MCP เซิร์ฟเวอร์ตัวหนึ่งครองการเรียกทั้งหมด นั่นอาจเป็นสถาปัตยกรรมที่ดี หรือเป็นสัญญาณว่าส่วนอื่นทั้งหมดเป็นส่วนเกินที่ไม่มีประโยชน์&lt;/p&gt;
&lt;p&gt;ถ้าความล้มเหลวของเครื่องมือพุ่งขึ้นในขณะที่ต้นทุนยังสูงอยู่ คุณมีปัญหาเชิงปฏิบัติการ ไม่ใช่ปัญหาคุณภาพ&lt;/p&gt;
&lt;p&gt;ถ้างาน shell ยังคงล้มเหลวในรูปแบบที่คาดเดาได้และหลีกเลี่ยงได้ ในจุดที่ควรมีเครื่องมือระดับสูงกว่า นั่นคือสัญญาณของผลิตภัณฑ์&lt;/p&gt;
&lt;p&gt;ถ้า skill หนึ่งทำงานตลอดเวลาแต่ไม่ได้ปรับปรุงผลลัพธ์ นั่นคือสัญญาณของพรอมต์หรือการจัดเส้นทาง&lt;/p&gt;
&lt;h2 id=&quot;บทเรียนที่แท้จริง&quot;&gt;บทเรียนที่แท้จริง&lt;/h2&gt;
&lt;p&gt;บทเรียนที่ลึกกว่านี้คือ agent observability ต้องการทั้ง &lt;strong&gt;เทเลเมทรีรันไทม์&lt;/strong&gt; และ &lt;strong&gt;เทเลเมทรีเวิร์กโฟลว์&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;เทเลเมทรีรันไทม์บอกคุณว่าระบบทำอะไร&lt;/p&gt;
&lt;p&gt;เทเลเมทรีเวิร์กโฟลว์บอกคุณว่า agent คิดว่าตัวเองกำลังทำอะไร&lt;/p&gt;
&lt;p&gt;เราต้องการทั้งสองอย่าง&lt;/p&gt;
&lt;p&gt;ถ้าคุณเก็บแค่ trace และตัวนับ คุณจะพลาดชั้น semantic ถ้าคุณเก็บแค่ hook อีเวนต์ คุณจะพลาดเวลาแฝง, span และภาพรวมรันไทม์&lt;/p&gt;
&lt;p&gt;และถ้าคุณเก็บทั้งสองอย่างแต่ไม่เคยป้อนกลับเข้าสู่ชั้น agent คุณก็มีแค่การมอนิเตอร์ ไม่ใช่การปรับตัว&lt;/p&gt;
&lt;p&gt;การผสมผสานนี้คือสิ่งที่ทำให้ระบบอธิบายได้พอที่จะควบคุม และปรับได้พอที่จะปรับปรุง&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่ยังไม่สมบูรณ์แบบ&quot;&gt;สิ่งที่ยังไม่สมบูรณ์แบบ&lt;/h2&gt;
&lt;p&gt;ยังมีบางส่วนที่ต้องปรับปรุง&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hook อีเวนต์ไม่ทุกตัวรวมข้อมูลระยะเวลาและ token ที่เราต้องการ&lt;/li&gt;
&lt;li&gt;มุมมองด้านการจับเวลาที่ดีที่สุดบางส่วนยังคงมาจาก Tempo trace ไม่ใช่ล็อกจาก hook&lt;/li&gt;
&lt;li&gt;Codex ในวันนี้มี semantic น้อยกว่า Claude Code ในสตรีมอีเวนต์ที่เสริมข้อมูลแล้ว&lt;/li&gt;
&lt;li&gt;ภาพหน้าจอแดชบอร์ดเป็นหน้าจอที่ใช้ในการปฏิบัติงานจริง ไม่ใช่ผลงานการตลาดที่ขัดเกลาแล้ว&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ประเด็นสุดท้ายนั้นตั้งใจ เราอยากแสดงแผงเครื่องมือจริงมากกว่าจะแสร้งว่าระบบ agent อธิบายตัวเองได้อย่างน่าอัศจรรย์&lt;/p&gt;
&lt;h2 id=&quot;เหตุใดสิ่งนี้จึงสำคัญสำหรับ-maguyva&quot;&gt;เหตุใดสิ่งนี้จึงสำคัญสำหรับ Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva คือการมอบโค้ดอินเทลลิเจนซ์ที่ดีกว่าให้ agent แต่เมื่อ agent ทำงานที่มีประโยชน์จริงๆ แล้ว ความต้องการใหม่ก็ปรากฏขึ้นทันที: คุณต้องเห็นว่าพวกมันมีพฤติกรรมอย่างไร&lt;/p&gt;
&lt;p&gt;คุณภาพการค้นหา คุณภาพการจัดเส้นทาง การเลือกเครื่องมือ และประสิทธิภาพของบริบท ล้วนกลายเป็นปัญหาที่สังเกตได้&lt;/p&gt;
&lt;p&gt;นั่นคือเหตุผลที่เราคิดว่านี่คุ้มค่าที่จะเขียนถึง agent สแตกแห่งอนาคตไม่ใช่แค่พรอมต์และเครื่องมือ มันคือพรอมต์ เครื่องมือ และชั้นอินสทรูเมนเทชันที่บอกคุณว่าทั้งหมดกำลังทำงานหรือไม่&lt;/p&gt;
&lt;p&gt;ถ้าคุณกำลังสร้างเวิร์กโฟลว์ agent อย่างจริงจัง observability ไม่ใช่โครงสร้างพื้นฐานที่เลือกได้ มันคือส่วนหนึ่งของผลิตภัณฑ์&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>ขุดค้นและปิดวงจร: การเปลี่ยนแปลงกลายเป็นความทรงจำองค์กรได้อย่างไร</title><link>https://maguyva.ai/th/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/th/blog/mining-workflow-closing-the-loop</guid><description>Git commit กลายเป็นรายการบันทึกการเปลี่ยนแปลงที่มีโครงสร้างและบันทึกการตัดสินใจเชิงสถาปัตยกรรม แล้วป้อนกลับเข้าสู่เอเจนต์ AI ในรูปแบบความทรงจำองค์กรที่ค้นหาได้</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ตัวเลขในบทความนี้สะท้อนระบบ ณ วันที่เผยแพร่ (กุมภาพันธ์ 2026) ดู&lt;a href=&quot;https://maguyva.ai/th/team&quot;&gt;หน้าทีม&lt;/a&gt;ของเราสำหรับตัวเลขปัจจุบัน&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ทุกทีมวิศวกรรมเผชิญความท้าทายเดียวกัน: การเปลี่ยนแปลงเกิดขึ้นตลอดเวลา แต่ &lt;em&gt;เหตุผล&lt;/em&gt; เบื้องหลังการเปลี่ยนแปลงเหล่านั้นหายไป หกเดือนต่อมา มีคนถามว่า “ทำไมเราถึงเลือกใช้ DuckDB สำหรับสเตจของไปป์ไลน์” และคำตอบอยู่ในหัวของคนที่ตัดสินใจนั้นเท่านั้น — ถ้าเขายังอยู่&lt;/p&gt;
&lt;p&gt;เราสร้างเวิร์กโฟลว์การขุดค้นที่ปิดวงจรนี้ การเปลี่ยนแปลงไหลผ่าน git commit ถูกประมวลผลโดย pipeline การขุดค้นของเรา กลายเป็นรายการบันทึกการเปลี่ยนแปลงที่มีโครงสร้างและบันทึกการตัดสินใจเชิงสถาปัตยกรรม แล้วป้อนกลับเข้าสู่ AI agent ของเราผ่านคำสั่ง CLI ผลลัพธ์คือ: ความทรงจำองค์กรที่ทั้งมนุษย์และ AI เข้าถึงได้&lt;/p&gt;
&lt;h2 id=&quot;ปัญหา-การตัดสินใจระเหยหายไป&quot;&gt;ปัญหา: การตัดสินใจระเหยหายไป&lt;/h2&gt;
&lt;p&gt;พิจารณาสถานการณ์ทั่วไป นักพัฒนา commit ว่า:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;commit นี้แทนการเลือกเชิงสถาปัตยกรรมที่สำคัญ ทีมประเมินตัวเลือก พิจารณาข้อแลกเปลี่ยน และลงเอยที่ DuckDB ด้วยเหตุผลเฉพาะ แต่บริบททั้งหมดนั้นอยู่ใน:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เธรด Slack (น่าจะถูกลบไปแล้ว)&lt;/li&gt;
&lt;li&gt;ความทรงจำของใครบางคน (ที่กำลังจางหายแน่นอน)&lt;/li&gt;
&lt;li&gt;คอมเมนต์ในโค้ด (บางทีถ้าคุณโชคดี)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;สามเดือนต่อมา สมาชิกทีมใหม่ถามว่า “ฉันควรใช้ DuckDB หรือ SQLite สำหรับสเตจใหม่นี้” หากไม่มีความทรงจำองค์กร พวกเขาจะต้องเริ่มคิดวิธีแก้ปัญหาเดิมตั้งแต่ต้น หรือเลือกอย่างไม่สอดคล้องกัน&lt;/p&gt;
&lt;h2 id=&quot;วงจร-จาก-commit-สู่บริบท&quot;&gt;วงจร: จาก Commit สู่บริบท&lt;/h2&gt;
&lt;p&gt;เวิร์กโฟลว์การขุดค้นของเราแปลงประวัติ git ให้เป็นความรู้ที่ค้นหาได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ข้อมูลเชิงลึกที่สำคัญ: ทั้งบันทึกการเปลี่ยนแปลงและการตัดสินใจเชิงสถาปัตยกรรมไหลมาจากประวัติ git เดียวกัน ประมวลผลผ่าน pipeline เดียวกัน สิ่งนี้ทำให้แน่ใจว่าไม่มีอะไรหลุดรอดไป&lt;/p&gt;
&lt;h2 id=&quot;การขุดค้นทำงานอย่างไร&quot;&gt;การขุดค้นทำงานอย่างไร&lt;/h2&gt;
&lt;h3 id=&quot;ขั้นที่-1-ซิงค์ดัชนี&quot;&gt;ขั้นที่ 1: ซิงค์ดัชนี&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;คำสั่งนี้สแกนประวัติ git และสร้างดัชนีของ commit ทั้งหมด มันดึงสัญญาณเชิงโครงสร้างจากแต่ละ commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ประเภท conventional commit (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;ขอบเขต (แพ็กเกจหรือพื้นที่ไหน)&lt;/li&gt;
&lt;li&gt;เครื่องหมาย breaking change&lt;/li&gt;
&lt;li&gt;ไฟล์ที่ถูกแตะและเมตริกความซับซ้อน&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ขั้นที่-2-ตรวจสอบสถานะความครอบคลุม&quot;&gt;ขั้นที่ 2: ตรวจสอบสถานะความครอบคลุม&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;นี่คือสถานะปัจจุบันของเรา:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;commit 15,637 รายการได้รับการประมวลผลแล้ว 476 รายการกลายเป็นการตัดสินใจเชิงสถาปัตยกรรม 6,799 รายการกลายเป็นรายการบันทึกการเปลี่ยนแปลง ทุก commit ถูกจำแนกแล้ว&lt;/p&gt;
&lt;h3 id=&quot;ขั้นที่-3-รับตัวเลือกเพื่อรีวิว&quot;&gt;ขั้นที่ 3: รับตัวเลือกเพื่อรีวิว&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้แสดง commit ที่ยังไม่ถูกประมวลผล พร้อมบริบทเต็มสำหรับการจำแนก:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สัญญาณช่วยชี้แนวทางการจำแนก: &lt;code&gt;is_releasable_type: true&lt;/code&gt; บ่งบอกว่านี่ควรปรากฏในบันทึกการเปลี่ยนแปลง จำนวนบรรทัดที่เพิ่มขึ้นมากและไฟล์โครงสร้างพื้นฐานบ่งบอกว่ามันอาจเป็นการตัดสินใจเชิงสถาปัตยกรรมด้วย&lt;/p&gt;
&lt;h3 id=&quot;ขั้นที่-4-จำแนก-commit&quot;&gt;ขั้นที่ 4: จำแนก Commit&lt;/h3&gt;
&lt;p&gt;สองเส้นทางแยกจากกันที่นี่: รายการบันทึกการเปลี่ยนแปลงและการตัดสินใจเชิงสถาปัตยกรรม&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับรายการบันทึกการเปลี่ยนแปลง:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้บันทึกว่า commit &lt;code&gt;abc123&lt;/code&gt; ควรปรากฏในบันทึกการเปลี่ยนแปลงภายใต้หมวด “Added”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับการตัดสินใจเชิงสถาปัตยกรรม:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ก่อนอื่น รับ ID การตัดสินใจจริง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;จากนั้นจำแนกด้วย ID การตัดสินใจ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้เชื่อมโยง commit เข้ากับบันทึกการตัดสินใจที่จะถูกสร้างหรืออัปเดต&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับการประมวลผลเป็นชุด (สิ่งที่เราทำจริงๆ):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;รูปแบบ JSONL รองรับทั้งสองโดเมนในรอบเดียว:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;ขั้นที่-5-เรนเดอร์ผลลัพธ์&quot;&gt;ขั้นที่ 5: เรนเดอร์ผลลัพธ์&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้สร้างไฟล์ &lt;code&gt;CHANGELOG.md&lt;/code&gt; ต่อแพ็กเกจ จาก ledger บันทึกการเปลี่ยนแปลง เป็นไฟล์ที่สร้างจากข้อมูลต้นทาง — ลบมันแล้วมันจะสร้างขึ้นใหม่ได้อย่างสมบูรณ์จาก ledger ต้นทาง&lt;/p&gt;
&lt;h2 id=&quot;โครงสร้างบันทึกการตัดสินใจ&quot;&gt;โครงสร้างบันทึกการตัดสินใจ&lt;/h2&gt;
&lt;p&gt;การตัดสินใจที่ดึงออกมากลายเป็นไฟล์ YAML ที่มี metadata อันหลากหลาย:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ทุกการตัดสินใจเชื่อมโยงกลับไปยัง commit ต้นทาง ทุกการตัดสินใจระบุว่าไฟล์ไหนได้รับผลกระทบ ความสัมพันธ์ระหว่างการตัดสินใจถูกทำให้ชัดเจน&lt;/p&gt;
&lt;h2 id=&quot;การผสานรวมกับ-cli-การคิวรีความทรงจำองค์กร&quot;&gt;การผสานรวมกับ CLI: การคิวรีความทรงจำองค์กร&lt;/h2&gt;
&lt;p&gt;นี่คือจุดที่วงจรปิดลง agent สามารถคิวรีการตัดสินใจผ่าน CLI ได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;คืนการตัดสินใจเกี่ยวกับตรรกะการลองซ้ำ, การจัดการข้อผิดพลาด, รูปแบบการกู้คืน&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;คืนบันทึกการตัดสินใจฉบับสมบูรณ์พร้อมบริบท เหตุผล และผลกระทบ&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;แสดงว่าการเลือกเชิงสถาปัตยกรรมใดถูกทำล่าสุด&lt;/p&gt;
&lt;h3 id=&quot;agent-ใช้สิ่งนี้อย่างไร&quot;&gt;Agent ใช้สิ่งนี้อย่างไร&lt;/h3&gt;
&lt;p&gt;คำสั่งพื้นฐานของออร์เคสเตรเตอร์ของเรารวมถึง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;เมื่อ agent ถูกขอให้นำสิ่งที่เกี่ยวข้องกับ DuckDB ไปใช้งานจริง มันสามารถตรวจสอบก่อนได้ว่า:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;และค้นพบ DEC-PL-142 เรียนรู้ว่า:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ทำไมเราถึงเลือก DuckDB (บริบท)&lt;/li&gt;
&lt;li&gt;ใช้มันอย่างถูกต้องอย่างไร (agent_guidance)&lt;/li&gt;
&lt;li&gt;ไฟล์ไหนที่ต้องดู (files)&lt;/li&gt;
&lt;li&gt;การตัดสินใจที่เกี่ยวข้องมีอะไรบ้าง (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;agent ไม่ต้องเริ่มคิดวิธีแก้ปัญหาเดิมตั้งแต่ต้น มันต่อยอดจากรูปแบบที่วางไว้แล้ว&lt;/p&gt;
&lt;h2 id=&quot;แบบทดสอบสามคำถาม&quot;&gt;แบบทดสอบสามคำถาม&lt;/h2&gt;
&lt;p&gt;ไม่ใช่ทุก commit ที่สมควรมีบันทึกการตัดสินใจ เราใช้แบบทดสอบสามคำถามเพื่อคัดกรอง:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;สิ่งนี้ตัดสินใจยากไหม?&lt;/strong&gt; มันต้องการการวิเคราะห์อย่างมีนัยสำคัญ การประเมินข้อแลกเปลี่ยน หรือการถกเถียงหรือไม่?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การเปลี่ยนการตัดสินใจนี้มีต้นทุนสูงไหม?&lt;/strong&gt; การกลับคำตัดสินใจนี้จะต้องทำงานใหม่อย่างมีนัยสำคัญหรือไม่?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;มันมีผลกระทบระดับระบบไหม?&lt;/strong&gt; มันส่งผลต่อหลายแพ็กเกจหรือสร้างรูปแบบที่คนอื่นจะทำตามหรือไม่?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;หาก commit ตอบว่า “ใช่” อย่างน้อยหนึ่งในคำถามเหล่านี้ มันคือตัวเลือกสำหรับการดึงการตัดสินใจ อัตราทั่วไปของเรา: 1-4 การตัดสินใจต่อ 100 commit (ประมาณ 1-4%)&lt;/p&gt;
&lt;p&gt;สำหรับรายการบันทึกการเปลี่ยนแปลง เกณฑ์ต่ำกว่า: การเปลี่ยนแปลงที่ผู้ใช้เห็น (ฟีเจอร์, การแก้ไข, การปรับปรุง) จะถูกบันทึกไว้ งานภายใน, การอัปเดตเอกสาร และการรีแฟกเตอร์มักถูกข้ามไป อัตราทั่วไปของเรา: 30-50 รายการบันทึกการเปลี่ยนแปลง ต่อ 100 commit&lt;/p&gt;
&lt;h2 id=&quot;การจัดเก็บข้อมูล-ledger-แบบเพิ่มได้อย่างเดียว&quot;&gt;การจัดเก็บข้อมูล: Ledger แบบเพิ่มได้อย่างเดียว&lt;/h2&gt;
&lt;p&gt;ระบบการขุดค้นใช้ ledger แบบ JSONL ที่เพิ่มได้อย่างเดียวเพื่อการทำงานหลาย agent โดยไม่มีความขัดแย้ง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;รูปแบบ JSONL พร้อม &lt;code&gt;merge=union&lt;/code&gt; ใน &lt;code&gt;.gitattributes&lt;/code&gt; หมายความว่า agent หลายตัวสามารถจำแนก commit พร้อมกันได้โดยไม่มีความขัดแย้งจากการผสาน แต่ละบรรทัดเป็นอิสระจากกัน&lt;/p&gt;
&lt;h2 id=&quot;เกณฑ์การตรวจสอบ&quot;&gt;เกณฑ์การตรวจสอบ&lt;/h2&gt;
&lt;p&gt;ก่อนทุกเซสชันการขุดค้น เรารันการตรวจสอบ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้ตรวจสอบ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ความถูกต้องของรูปแบบ SHA&lt;/li&gt;
&lt;li&gt;การปฏิบัติตามรูปแบบ ID การตัดสินใจ&lt;/li&gt;
&lt;li&gt;ไม่มีรายการซ้ำสำหรับ SHA เดียวกัน&lt;/li&gt;
&lt;li&gt;การตัดสินใจที่ถูกอ้างอิงมีอยู่จริง&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;หลังจากการจำแนก เราตรวจสอบอีกครั้งก่อน commit การเปลี่ยนแปลง&lt;/p&gt;
&lt;h2 id=&quot;เหตุใดสิ่งนี้จึงสำคัญ&quot;&gt;เหตุใดสิ่งนี้จึงสำคัญ&lt;/h2&gt;
&lt;p&gt;ลูปป้อนกลับที่เราสร้างขึ้นแก้ปัญหาหลายอย่าง:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับสมาชิกทีมใหม่:&lt;/strong&gt; แทนที่จะถามว่า “ทำไมเราถึงทำ X” พวกเขาสามารถค้นหารีจิสทรีการตัดสินใจได้ บริบทถูกเก็บรักษาไว้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับ AI agent:&lt;/strong&gt; พวกมันไม่ได้ทำงานในสุญญากาศ พวกมันสามารถคิวรีความรู้องค์กรก่อนให้คำแนะนำได้ เมื่อถูกขอให้เพิ่ม pipeline stage ใหม่ พวกมันสามารถค้นพบรูปแบบ DuckDB และทำตามได้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับความสอดคล้องเชิงสถาปัตยกรรม:&lt;/strong&gt; การตัดสินใจชัดเจนและค้นหาได้ เมื่อมีคนเสนอวิธีที่ขัดแย้งกับการตัดสินใจที่มีอยู่ ระบบสามารถแสดงความขัดแย้งนั้นได้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับการสร้างบันทึกการเปลี่ยนแปลง:&lt;/strong&gt; บันทึกการปล่อยใช้งานไม่ใช่การรีบทำนาทีสุดท้าย มันคือผลพลอยได้จากการจำแนกอย่างต่อเนื่องระหว่างการพัฒนา&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;สำหรับการออนบอร์ด:&lt;/strong&gt; agent ใหม่รับช่วงบริบททั้งหมดของโค้ดเบส พวกมันไม่ได้แค่เห็นโค้ด — พวกมันเห็นการตัดสินใจที่หล่อหลอมมันด้วย&lt;/p&gt;
&lt;h2 id=&quot;สถานะปัจจุบัน&quot;&gt;สถานะปัจจุบัน&lt;/h2&gt;
&lt;p&gt;ณ วันนี้:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15,637 commit&lt;/strong&gt; ผ่านการประมวลผลใน pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 การตัดสินใจเชิงสถาปัตยกรรม&lt;/strong&gt; ถูกดึงและบันทึกแล้ว&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6,799 รายการบันทึกการเปลี่ยนแปลง&lt;/strong&gt; ถูกบันทึกแล้ว&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ความครอบคลุม 100%&lt;/strong&gt; ข้ามทั้งสองโดเมน&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ทุก commit ตั้งแต่เราเริ่มต้นถูกจำแนกแล้ว ความทรงจำองค์กรสมบูรณ์และค้นหาได้&lt;/p&gt;
&lt;h2 id=&quot;เริ่มต้นใช้งาน&quot;&gt;เริ่มต้นใช้งาน&lt;/h2&gt;
&lt;p&gt;หากคุณต้องการนำสิ่งที่คล้ายกันไปใช้จริง:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;เริ่มด้วย conventional commit&lt;/strong&gt; pipeline การขุดค้นทำงานได้ดีที่สุดเมื่อ commit มีคำนำหน้าที่มีโครงสร้าง (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;นิยามโดเมนของคุณ&lt;/strong&gt; เราใช้โดเมนอย่าง &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt; สิ่งเหล่านี้จัดระเบียบการตัดสินใจตามพื้นที่&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;สร้างนิสัยการจำแนก&lt;/strong&gt; การขุดค้นทำงานได้เมื่อทีมจำแนก commit อย่างสม่ำเสมอ การประมวลผลเป็นชุดด้วยความช่วยเหลือของ LLM ช่วยให้ขยายสเกลได้&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ทำให้คิวรีการตัดสินใจได้&lt;/strong&gt; คุณค่าจะทวีคูณเมื่อ agent สามารถค้นหาการตัดสินใจผ่าน CLI ได้ จัดโครงสร้างผลลัพธ์ของคุณให้เครื่องอ่านได้&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ปิดวงจร&lt;/strong&gt; การตัดสินใจควรมีอิทธิพลต่องานในอนาคต รวมการอ้างอิงการตัดสินใจไว้ในคำสั่งของ agent และรายการตรวจสอบการรีวิวโค้ด&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;เป้าหมายไม่ใช่เอกสารที่สมบูรณ์แบบ แต่คือการทำให้ &lt;em&gt;เหตุผล&lt;/em&gt; เบื้องหลังการเปลี่ยนแปลงเข้าถึงได้ทั้งมนุษย์และ AI ทั้งวันนี้และหกเดือนจากนี้ เมื่อการเปลี่ยนแปลงกลายเป็นความทรงจำองค์กร ทีมจะต่อยอดจากรูปแบบที่วางไว้แล้ว แทนที่จะคิดค้นมันขึ้นมาใหม่&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;เวิร์กโฟลว์การขุดค้นเป็นส่วนหนึ่งของเอนจินออร์เคสเตรชันของเรา โดยเฉพาะโมดูลเอนจินบริบทในแพ็กเกจออร์เคสเตรชันของเรา&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>การขุดค้น Skill: จาก 3,500 รายการที่เข้าข่ายสู่ 466 ความสามารถ</title><link>https://maguyva.ai/th/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/th/blog/skill-mining-3500-and-counting</guid><description>เราคัดกรอง skill ที่เข้าข่าย 3,500 รายการ และรับเข้าใช้งาน 466 รายการ ลูปการขุดค้นและนำเข้าอย่างเป็นระบบ เพื่อสร้างคลัง skill ของ AI agent ที่สอดคล้องกันในระดับใหญ่</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ตัวเลขในบทความนี้สะท้อนระบบ ณ วันที่เผยแพร่ (มกราคม 2026) ดู&lt;a href=&quot;https://maguyva.ai/th/team&quot;&gt;หน้าทีม&lt;/a&gt;ของเราสำหรับตัวเลขปัจจุบัน&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;ปัญหา-skill-3500-รายการ&quot;&gt;ปัญหา Skill 3,500 รายการ&lt;/h2&gt;
&lt;p&gt;เมื่อเราเริ่มสร้างระบบประสาน agent เราเจอความท้าทายที่น่าสนใจ: มี skill ที่เป็นไปได้หลายพันรายการกระจายอยู่ทั่วระบบนิเวศ AI GitHub รีโพซิทอรี, เอกสาร vendor, โปรเจกต์ชุมชน, รูปแบบภายใน — skill มีอยู่ทุกที่ แต่อันไหนสำคัญ? อันไหนทำงานได้จริง? และคุณจะดูแลคลัง skill ที่สอดคล้องกันซึ่ง agent ใช้งานได้จริงได้อย่างไร?&lt;/p&gt;
&lt;p&gt;คำตอบของเรา: ลูปการขุดค้นและนำเข้าอย่างเป็นระบบ&lt;/p&gt;
&lt;h2 id=&quot;ตัวเลขวันนี้&quot;&gt;ตัวเลขวันนี้&lt;/h2&gt;
&lt;p&gt;เพียงสามเดือนเศษหลังจาก Anthropic เปิดตัว Agent Skills เมื่อวันที่ 16 ตุลาคม 2025 นี่คือจุดที่เรายืนอยู่เมื่อบทความนี้เผยแพร่ เมื่อวันที่ 27 มกราคม 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;เมตริก&lt;/th&gt;
&lt;th&gt;จำนวน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;รายการที่เข้าข่ายที่ระบุแล้ว&lt;/td&gt;
&lt;td&gt;3,500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill ที่รับเข้าใช้งาน&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill จาก Vendor&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill ภายใน&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor ที่ใช้งานอยู่&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token เฉลี่ยต่อ Skill&lt;/td&gt;
&lt;td&gt;2,834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เครื่องมือที่ถูกอ้างอิง&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;แท็กที่ไม่ซ้ำกัน&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;เราได้รีวิว skill รายการที่เข้าข่ายไปแล้วกว่า 3,500 รายการ เรารับเข้าใช้งาน 466 รายการ นั่นคืออัตราการรับเข้า 13% — และเราตั้งใจคัดเลือกอย่างเข้มงวดเช่นนี้&lt;/p&gt;
&lt;h2 id=&quot;ระบบชั้นความรู้&quot;&gt;ระบบชั้นความรู้&lt;/h2&gt;
&lt;p&gt;skill แต่ละตัวมีคุณภาพและขอบเขตต่างกัน เราจัดระเบียบพวกมันเป็นห้าชั้นความรู้ (K0-K4) แต่ละชั้นแทนขอบเขตการใช้งานที่ต่างกัน:&lt;/p&gt;
&lt;h3 id=&quot;k0-รากฐาน-สากล&quot;&gt;K0: รากฐาน (สากล)&lt;/h3&gt;
&lt;p&gt;Skill ที่ agent ทุกตัวควรมี สิ่งเหล่านี้แทนความสามารถ “นักคิดที่ดี” ที่ทำงานได้ทุกที่&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Skill ระดับ K0 พกพาได้ไปยังโปรเจกต์ใดก็ตาม โดเมนใดก็ตาม สแตกใดก็ตาม พวกมันเข้ารหัสรูปแบบทางปัญญาสากล&lt;/p&gt;
&lt;h3 id=&quot;k1-อัตลักษณ์-สาขาวิชาชีพ&quot;&gt;K1: อัตลักษณ์ (สาขาวิชาชีพ)&lt;/h3&gt;
&lt;p&gt;Skill แบบ “วิศวกรที่ดี” หรือ “นักวิจัยที่ดี” ที่ใช้ได้ข้ามโปรเจกต์ภายในสาขาวิชาชีพหนึ่ง&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-โดเมน-ความเชี่ยวชาญเฉพาะเรื่อง&quot;&gt;K2: โดเมน (ความเชี่ยวชาญเฉพาะเรื่อง)&lt;/h3&gt;
&lt;p&gt;Skill แบบ “ผู้เชี่ยวชาญฐานข้อมูลที่ดี” หรือ “วิศวกรความปลอดภัยที่ดี” ที่พกพาได้ภายในสาขาหนึ่ง&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stacks-เทคโนโลยี&quot;&gt;K3: Stacks (เทคโนโลยี)&lt;/h3&gt;
&lt;p&gt;Skill แบบ “ผู้ใช้ Supabase ที่ดี” หรือ “นักพัฒนา Cloudflare ที่ดี” สำหรับเทคโนโลยีสแตกเฉพาะ&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-โปรเจกต์-องค์กร&quot;&gt;K4: โปรเจกต์ (องค์กร)&lt;/h3&gt;
&lt;p&gt;Skill เฉพาะสำหรับองค์กรและเวิร์กโฟลว์ของเรา&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ลูปการขุดค้น&quot;&gt;ลูปการขุดค้น&lt;/h2&gt;
&lt;h3 id=&quot;เฟส-1-การค้นพบ&quot;&gt;เฟส 1: การค้นพบ&lt;/h3&gt;
&lt;p&gt;Skill มาจากทุกที่:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;คลัง Vendor&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase และผู้ร่วมพัฒนาจากชุมชนเผยแพร่ชุด skill เราติดตามแหล่งต้นทาง vendor มากกว่า 25 แหล่ง&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;โปรเจกต์ชุมชน&lt;/strong&gt;: GitHub เต็มไปด้วยเทมเพลตของ Claude Code, รูปแบบ agent และคำนิยามเวิร์กโฟลว์&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;รูปแบบภายใน&lt;/strong&gt;: เมื่อทีมของเราแก้ปัญหา รูปแบบก็ปรากฏขึ้น สิ่งเหล่านี้ถูกทำให้เป็นทางการเป็น skill&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การขุดเอกสาร&lt;/strong&gt;: เอกสารทางเทคนิคมักมี skill โดยนัยอยู่ — ขั้นตอน, รายการตรวจสอบ, ต้นไม้การตัดสินใจ&lt;/p&gt;
&lt;p&gt;การค้นพบเป็นไปอย่างต่อเนื่อง เราใช้ skill แบ็กล็อกเพื่อติดตามรายการที่เข้าข่ายก่อนการประเมินอย่างเป็นทางการ&lt;/p&gt;
&lt;h3 id=&quot;เฟส-2-การประเมิน&quot;&gt;เฟส 2: การประเมิน&lt;/h3&gt;
&lt;p&gt;skill ทุกตัวที่เข้าข่ายได้รับการประเมินด้วยเกณฑ์เดียวกัน:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;เกณฑ์ผลิตภัณฑ์ทั้งห้าต้องผ่านทั้งหมด นี่คือเหตุผลที่รายการที่เข้าข่าย 87% ถูกปฏิเสธ&lt;/p&gt;
&lt;p&gt;จากนั้นskill ทุกตัวที่เข้าข่ายจะผ่านการรีวิวความน่าเชื่อถือแยกต่างหาก เราไม่ถือว่า vendor รีโพซิทอรีที่เป็นทางการ ผู้ดูแลชุมชนที่มีชื่อเสียง และ GitHub รีโพสุ่มๆ เป็นแหล่งความจริงที่เท่าเทียมกัน&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;vendor ที่เชื่อถือได้ได้รับการรีวิวที่มาที่ไปที่เบากว่า แต่ก็ไม่ได้ผ่านโดยอัตโนมัติ แหล่งที่มาที่ไม่น่าเชื่อถือหรือไม่รู้จักจะได้รับการตรวจสอบด้วยมือที่ลึกกว่า และเราจะไม่รันสคริปต์ที่ถูกรวมมาจนกว่ามันจะถูกอ่าน กำหนดขอบเขต และจำแนกว่าปลอดภัยแล้ว&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การวิเคราะห์ช่องว่าง&lt;/strong&gt;: ก่อนรับเข้าใช้งาน เราค้นหาในรีจิสทรีของเรา:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ถ้าเรามีมันอยู่แล้ว เราก็ไม่ต้องการมันอีก ถ้าเรามีอะไรที่ใกล้เคียง เราอาจรวมมันเข้าด้วยกันแทนที่จะรับเข้าใช้งาน&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การให้คะแนนความลึกและมาตรฐาน&lt;/strong&gt;: เรายังให้คะแนนว่ารายการที่เข้าข่ายใช้โมเดล agent-skill อย่างเต็มที่แค่ไหน &lt;code&gt;SKILL.md&lt;/code&gt; เดี่ยวๆ ยังคงมีประโยชน์ได้ แต่ skill ที่ลึกกว่าจะมีคุณค่ามากกว่าเมื่อมันแยกคำสั่งออกจากเอกสารอ้างอิง, สคริปต์ และทรัพยากร ในแบบที่ &lt;code&gt;agentskills.io&lt;/code&gt; สนับสนุน&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ดาว GitHub สามารถยกระดับคะแนนความน่าเชื่อถือได้เล็กน้อย แต่มันไม่เคยช่วยกู้ skill ที่ตื้นหรือไม่ปลอดภัยได้ รีโพที่มีดาวสูงพร้อม &lt;code&gt;SKILL.md&lt;/code&gt; ที่คลุมเครือหนึ่งอันและสคริปต์ที่ตรวจสอบการทำงานได้ยาก จะได้คะแนนต่ำกว่ารีโพที่เล็กกว่าซึ่งมีคำอธิบายที่แม่นยำ &lt;code&gt;references/&lt;/code&gt; ที่คัดสรรมาอย่างดี และสคริปต์ช่วยงานขนาดเล็กที่รับผิดชอบงานเดียวที่ใช้ประโยชน์จากความสามารถของ skill เต็มรูปแบบจริงๆ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การวิเคราะห์เชิงโครงสร้าง&lt;/strong&gt;: เราตรวจสอบคุณภาพ skill:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;หากรายการที่เข้าข่ายมีสคริปต์ การรีวิวนั้นจะเข้มงวดขึ้น skill ที่ดีไม่ใช่แค่มีประโยชน์ มันต้องอ่านเข้าใจได้ มีขอบเขต และปลอดภัยที่จะมอบให้ agent ตัวกรองความปลอดภัยนั้นเพียงอย่างเดียวก็ตัดรายการที่เข้าข่ายที่น่าสนใจในด้านอื่นๆ ออกไปจำนวนมาก&lt;/p&gt;
&lt;h3 id=&quot;เฟส-3-การนำเข้า&quot;&gt;เฟส 3: การนำเข้า&lt;/h3&gt;
&lt;p&gt;เมื่อ skill ผ่านการประเมิน มันเข้าสู่รีจิสทรี แต่ skill ไม่เคยถูกรับเข้าใช้งานโดยไม่มีการเปลี่ยนแปลง พวกมันถูกปรับให้เข้ากับระบบของเรา&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การปรับเปลี่ยนตอนรับเข้าใช้งาน&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;การนอร์มัลไลซ์ Metadata&lt;/strong&gt;: ทุก skill ได้รับ frontmatter schema ของเรา&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การกำหนดชั้น K&lt;/strong&gt;: skill ถูกวางในชั้นความรู้ที่เหมาะสม&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การเสริมแท็ก&lt;/strong&gt;: มีการเพิ่มแท็กเพื่อการค้นพบ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การประกาศเครื่องมือ&lt;/strong&gt;: เครื่องมือที่อนุญาตถูกประกาศอย่างชัดเจน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การจัดวางส่วน&lt;/strong&gt;: เนื้อหาถูกจัดโครงสร้างใหม่ให้ตรงกับเทมเพลตของเรา&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;skill YAML ทั่วไปหลังการนำเข้า:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;เฟส-4-การกำหนดขอบเขต&quot;&gt;เฟส 4: การกำหนดขอบเขต&lt;/h3&gt;
&lt;p&gt;Skill ถูกกำหนดให้กับขอบเขต — หมวดหมู่ที่ตัดสินว่า agent ตัวไหนโหลด skill ตัวไหน:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;agent ประกาศขอบเขตของตัวเอง และ skill จะถูกกำหนดโดยอัตโนมัติ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;เฟส-5-การสร้างไฟล์ที่ใช้งานได้จริง&quot;&gt;เฟส 5: การสร้างไฟล์ที่ใช้งานได้จริง&lt;/h3&gt;
&lt;p&gt;Skill ไม่ได้อาศัยอยู่เป็น YAML ในโปรดักชัน พวกมันถูกเรนเดอร์เป็นไฟล์ SKILL.md ที่ Claude Code โหลดได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;คำสั่งนี้:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;อ่านคำนิยาม skill YAML ทั้งหมด&lt;/li&gt;
&lt;li&gt;เรนเดอร์พวกมันผ่าน Jinja เทมเพลต&lt;/li&gt;
&lt;li&gt;เขียนไฟล์ SKILL.md ไปยัง &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;จัดระเบียบตามชั้น K (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;โครงสร้างผลลัพธ์สุดท้าย:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;รูปแบบขอบเขตแบบแฝง&quot;&gt;รูปแบบขอบเขตแบบแฝง&lt;/h2&gt;
&lt;p&gt;หนึ่งในรูปแบบที่ทรงพลังที่สุดของเราคือ skill แบบ “รับเข้าแต่ไม่โหลด” เราเรียกสิ่งเหล่านี้ว่าขอบเขตแฝง&lt;/p&gt;
&lt;p&gt;พิจารณา skill การคำนวณทางวิทยาศาสตร์จาก k-dense-scientific รีโพซิทอรี เรารับเข้าใช้งาน skill มากกว่า 120 รายการครอบคลุมชีวสารสนเทศศาสตร์, เคมี, การประมวลผลควอนตัม และสารสนเทศศาสตร์คลินิก แต่ agent ส่วนใหญ่ของเราไม่ต้องการการจำลองการเข้าจับกันของโมเลกุล หรือการวิเคราะห์การแสดงออกของยีน&lt;/p&gt;
&lt;p&gt;แทนที่จะโหลด skill ทั้ง 120 รายการเข้าไปในทุก agent (ทำให้หน้าต่างบริบทบวม) เรา:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;รับเข้าใช้งาน&lt;/strong&gt; skill พร้อมขอบเขตที่ระบุ (เช่น &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;ปล่อยให้มัน&lt;strong&gt;แฝงอยู่&lt;/strong&gt; — ลงทะเบียนแต่ไม่โหลด&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เปิดใช้งาน&lt;/strong&gt; เฉพาะเมื่อ agent ประกาศขอบเขตนั้น&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;รูปแบบนี้ทำให้เรามี skill 466 รายการในรีจิสทรี ในขณะที่ agent ทั่วไปโหลดเพียง 40-60 รายการที่เกี่ยวข้อง&lt;/p&gt;
&lt;h2 id=&quot;ประเภท-skill&quot;&gt;ประเภท Skill&lt;/h2&gt;
&lt;p&gt;Skill มาในสามรูปแบบทางปัญญา:&lt;/p&gt;
&lt;h3 id=&quot;เวิร์กโฟลว์&quot;&gt;เวิร์กโฟลว์&lt;/h3&gt;
&lt;p&gt;ขั้นตอนตามลำดับ: “1. ทำ X, 2. จากนั้นทำ Y, 3. สุดท้ายทำ Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;วินัย&quot;&gt;วินัย&lt;/h3&gt;
&lt;p&gt;ข้อจำกัดเชิงพฤติกรรม: “ทำ X เสมอ”, “ห้ามทำ Y”, “ควรเลือก Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;รายการตรวจสอบ&quot;&gt;รายการตรวจสอบ&lt;/h3&gt;
&lt;p&gt;เกณฑ์การตรวจสอบ: “ยืนยัน X”, “ตรวจสอบ Y”, “เช็ค Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;เกณฑ์คุณภาพ&quot;&gt;เกณฑ์คุณภาพ&lt;/h2&gt;
&lt;p&gt;ทุก skill ต้องผ่านการตรวจสอบก่อนถูกปล่อยออกมา:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;คำอธิบายต้องมี 50-400 ตัวอักษรพร้อมวลีกระตุ้น (“ใช้เมื่อ…”, “เมื่อคุณต้องการ…”) เพื่อให้ Claude Code รู้ว่าจะแนะนำมันเมื่อไหร่&lt;/p&gt;
&lt;p&gt;เราตรวจสอบอย่างต่อเนื่อง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ระบบนิเวศ-vendor&quot;&gt;ระบบนิเวศ Vendor&lt;/h2&gt;
&lt;p&gt;skill 373 รายการจาก vendor ของเรามาจาก:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ผู้ให้บริการ&lt;/th&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;โดเมน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;บริการคลาวด์&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;การสร้างเอกสาร&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;การประมวลผลแบบเอดจ์&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;ฐานข้อมูล&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;การคำนวณทางวิทยาศาสตร์&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;วิทยาการข้อมูล&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;ระบบอัตโนมัติของเบราว์เซอร์&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;แต่ละแหล่งต้นทาง vendor ถูกประกาศใน metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;เมื่อ &lt;code&gt;orkestra sync&lt;/code&gt; รัน skill ของ vendor จะถูก symlink เข้าไปใน &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; พร้อม namespace ของผู้ให้บริการ&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่เราเรียนรู้&quot;&gt;สิ่งที่เราเรียนรู้&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ความเลือกสรรคุ้มค่า&lt;/strong&gt; มันน่าดึงดูดที่จะรับเข้าใช้งานทุกอย่างที่ดูมีประโยชน์ แต่ skill แต่ละอันมีต้นทุนเป็น token ด้วยค่าเฉลี่ย 2,834 token ต่อ skill การโหลดสิ่งที่เกินจำเป็นทำให้บริบทเต็มอย่างรวดเร็ว อัตราการรับเข้าใช้งาน 13% ของเราทำให้ agent ยังคงกระชับ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;โครงสร้างเปิดให้ค้นพบ&lt;/strong&gt; ระบบชั้น K ไม่ใช่แค่การจัดระเบียบ — มันคือเรื่องของการพกพาได้ skill ระดับ K0 นำกลับมาใช้ที่ไหนก็ได้ skill ระดับ K4 ตั้งใจให้เจาะจงเฉพาะโปรเจกต์ ความชัดเจนนี้ช่วยทั้งมนุษย์และ agent หาสิ่งที่ต้องการได้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ขอบเขตแฝงขยายสเกลได้&lt;/strong&gt; คุณสามารถรับเข้าใช้งาน skill หลายร้อยรายการโดยไม่ต้องโหลดทั้งหมด ขอบเขตให้คุณสร้างรีจิสทรีที่ครอบคลุม ในขณะที่ยังรักษาหน้าต่างบริบทของ agent แต่ละตัวให้จัดการได้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การปรับเปลี่ยนตอนรับเข้าใช้งานเป็นสิ่งจำเป็น&lt;/strong&gt; skill vendor แบบดิบแทบไม่เคยเข้ากับระบบของคุณเลย กระบวนการนำเข้า — การเพิ่ม metadata, การกำหนดชั้น, การเสริมแท็ก — ทำให้ skill ภายนอกทำงานภายในได้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การขุดค้นเป็นไปอย่างต่อเนื่อง&lt;/strong&gt; ตัวเลข 3,500 ยังคงเติบโตต่อไป vendor รีโพใหม่ปรากฏขึ้น รูปแบบชุมชนเกิดขึ้น เวิร์กโฟลว์ภายในตกผลึก ลูปไม่เคยหยุด&lt;/p&gt;
&lt;h2 id=&quot;ต่อไปคืออะไร&quot;&gt;ต่อไปคืออะไร&lt;/h2&gt;
&lt;p&gt;เรากำลังทำงานเกี่ยวกับการปรับปรุงหลายอย่าง:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;การตรวจจับช่องว่างอัตโนมัติ&lt;/strong&gt;: แจ้งเตือนเมื่อความล้มเหลวทั่วไปของ agent สามารถแก้ไขได้ด้วย skill ที่ยังไม่ได้รับเข้าใช้งาน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เวิร์กโฟลว์การเลิกใช้ skill&lt;/strong&gt;: กระบวนการที่เป็นทางการสำหรับการปลดระวาง skill ที่ถูกแทนที่หรือไม่ได้ใช้&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การพึ่งพาข้าม Skill&lt;/strong&gt;: การประกาศข้อกำหนดเบื้องต้นของ skill อย่างชัดเจน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;การวิเคราะห์การใช้งาน&lt;/strong&gt;: ติดตามว่า skill ไหนที่ agent เรียกใช้จริงเทียบกับแค่โหลด&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ลูปการขุดค้น skill คือโครงสร้างพื้นฐาน มันไม่ได้หรูหรา แต่มันคือสิ่งที่ทำให้ agent 41 ตัวทำงานสอดคล้องกันด้วยความสามารถ 466 รายการ ในขณะที่ยังอยู่ในขีดจำกัดของบริบท&lt;/p&gt;
&lt;p&gt;นั่นคือเรื่องราวว่า 3,500 กลายเป็น 466 ได้อย่างไร ไม่ใช่ด้วยการเพิกเฉยต่อ 3,000 รายการ — แต่ด้วยการประเมินอย่างเป็นระบบและรับเข้าใช้งานเฉพาะสิ่งที่ใช้ได้ผล&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;อยากเห็นระบบ skill ทำงานจริงไหม ดูที่ &lt;code&gt;uv run orkestra skills list&lt;/code&gt; เพื่อสำรวจรีจิสทรีปัจจุบันของเรา&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>การเปิดเผยแบบค่อยเป็นค่อยไป: หน้าต่าง CLI สู่ระบบ Agent</title><link>https://maguyva.ai/th/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/th/blog/progressive-disclosure-cli-into-agents</guid><description>ระบบ agent นั้นมองการทำงานภายในได้ยากโดยค่าเริ่มต้น การเปิดเผยแบบค่อยเป็นค่อยไปมอบมุมมอง CLI แบบเป็นชั้นให้ผู้ควบคุม ตั้งแต่การตรวจสถานะอย่างรวดเร็วไปจนถึงรายละเอียดภายในของ agent และร่องรอยการตัดสินใจ</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ตัวเลขในบทความนี้สะท้อนระบบ ณ วันที่เผยแพร่ (มกราคม 2026) ดู&lt;a href=&quot;https://maguyva.ai/th/team&quot;&gt;หน้าทีม&lt;/a&gt;ของเราสำหรับตัวเลขปัจจุบัน&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ระบบ agent มีรูปแบบการทำงานที่ทำให้มองภายในได้ยาก พวกมันตัดสินใจ เรียกใช้เครื่องมือ และประสานงานข้ามผู้เชี่ยวชาญนับสิบคน แต่เมื่อมีบางอย่างผิดพลาด — หรือเมื่อคุณแค่อยากเข้าใจว่าเกิดอะไรขึ้น — คุณจะมองที่ไหน?&lt;/p&gt;
&lt;p&gt;คำตอบคือการเปิดเผยแบบค่อยเป็นค่อยไป: อินเทอร์เฟซแบบเป็นชั้นที่เผยความซับซ้อนพอดีกับที่คุณต้องการ ในเวลาที่คุณต้องการมันพอดี&lt;/p&gt;
&lt;h2 id=&quot;ปัญหาการมองไม่เห็นการทำงานภายใน&quot;&gt;ปัญหาการมองไม่เห็นการทำงานภายใน&lt;/h2&gt;
&lt;p&gt;ระบบประสาน agent สมัยใหม่อาจมี:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;agent ผู้เชี่ยวชาญ 40+ ตัว แต่ละตัวมีความสามารถที่แตกต่างกัน&lt;/li&gt;
&lt;li&gt;skill 700+ รายการครอบคลุมทั้งระบบอัตโนมัติภายในและการผสานรวมกับ vendor&lt;/li&gt;
&lt;li&gt;การตัดสินใจเชิงสถาปัตยกรรม 470+ รายการที่หล่อหลอมพฤติกรรม&lt;/li&gt;
&lt;li&gt;เซิร์ฟเวอร์เครื่องมือ MCP หลายสิบตัวที่ให้ความสามารถภายนอก&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ความซับซ้อนนี้ตั้งใจ agent ต้องการเข้าถึงบริบทที่หลากหลาย — ความรู้โดเมน, โค้ดอินเทลลิเจนซ์, สคีมาฐานข้อมูล — เพื่อตัดสินใจได้ดี แต่ความหลากหลายเดียวกันนั้นสร้างปัญหาการมองเห็น&lt;/p&gt;
&lt;p&gt;คุณจะรู้ได้อย่างไรว่า agent ตัวไหนจัดการการย้ายฐานข้อมูล? การตัดสินใจอะไรหล่อหลอมพฤติกรรมการจัดอันดับของระบบค้นหา? เครื่องมือใดที่ที่ปรึกษาสถาปัตยกรรมเข้าถึงได้?&lt;/p&gt;
&lt;p&gt;หากไม่มีการเข้าถึงที่มีโครงสร้าง คุณจะเหลือแค่การอ่านซอร์สโค้ดหรือหวังว่าเอกสารจะเป็นปัจจุบัน&lt;/p&gt;
&lt;h2 id=&quot;การเปิดเผยแบบค่อยเป็นค่อยไปในฐานะสถาปัตยกรรม&quot;&gt;การเปิดเผยแบบค่อยเป็นค่อยไปในฐานะสถาปัตยกรรม&lt;/h2&gt;
&lt;p&gt;การเปิดเผยแบบค่อยเป็นค่อยไปไม่ใช่แค่รูปแบบ UI มันคือหลักการสถาปัตยกรรม: จัดระเบียบข้อมูลเป็นชั้นๆ แต่ละชั้นลึกกว่าชั้นก่อนหน้า เพื่อให้ผู้ใช้หยุดที่ระดับที่ตอบคำถามของตัวเองได้&lt;/p&gt;
&lt;p&gt;สำหรับระบบ agent สิ่งนี้แปลงเป็นคำสั่ง CLI ที่ระดับความลึกเพิ่มขึ้น:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ระดับ&lt;/th&gt;
&lt;th&gt;คำสั่ง&lt;/th&gt;
&lt;th&gt;คำถามที่ตอบ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ทุกอย่างสุขภาพดีไหม?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;agent อะไรมีอยู่?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;agent นี้ทำอะไร?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ทำไมมันถึงทำงานแบบนี้?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;เครื่องมือ MCP ของ Maguyva&lt;/td&gt;
&lt;td&gt;แสดงโค้ดให้ฉันดู&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;แต่ละระดับตอบคำถามติดตามผลตามธรรมชาติ คุณแทบไม่ต้องกระโดดตรงไปที่ระดับ 5 เลย&lt;/p&gt;
&lt;h2 id=&quot;ระดับ-1-สุขภาพระบบ&quot;&gt;ระดับ 1: สุขภาพระบบ&lt;/h2&gt;
&lt;p&gt;คำถามแรกมักเป็น: ทุกอย่างทำงานอยู่ไหม?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;หนึ่งคำสั่ง สี่ตัวเลข พอที่จะรู้ว่าระบบถูกตั้งค่าและรีจิสทรีถูกเติมข้อมูลแล้ว&lt;/p&gt;
&lt;p&gt;หากจำนวน agent ลดลงอย่างไม่คาดคิด หรือ skill โหลดไม่สำเร็จ คุณจะเห็นมันที่นี่เป็นที่แรก ไม่ต้องขุดล็อก&lt;/p&gt;
&lt;h2 id=&quot;ระดับ-2-รายการ-agent&quot;&gt;ระดับ 2: รายการ Agent&lt;/h2&gt;
&lt;p&gt;เมื่อคุณรู้ว่าระบบสุขภาพดีแล้ว คำถามถัดไปคือ: มีอะไรบ้าง?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้คืนข้อมูลที่มีโครงสร้าง — ชื่อ agent, คำอธิบาย, โมเดลที่กำหนดให้เลือกใช้, ความครอบคลุมโดเมน ผลลัพธ์เป็น JSON โดยค่าเริ่มต้น ทำให้ง่ายต่อการต่อเข้ากับ &lt;code&gt;jq&lt;/code&gt; เพื่อกรอง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ต้องการ agent ที่จัดการงานฐานข้อมูล? คำสั่ง search ช่วยจำกัดให้แคบลง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้สแกนชื่อ, คำอธิบาย และความสามารถ คุณเจอผู้เชี่ยวชาญที่ถูกต้องโดยไม่ต้องอ่านคำนิยาม agent 40 ตัว&lt;/p&gt;
&lt;h2 id=&quot;ระดับ-3-เจาะลึก-agent&quot;&gt;ระดับ 3: เจาะลึก Agent&lt;/h2&gt;
&lt;p&gt;เจอ agent ที่ดูเกี่ยวข้องแล้ว? คำสั่ง &lt;code&gt;info&lt;/code&gt; เผยทุกอย่าง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ผลลัพธ์รวมถึง:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: ชื่อ, หมวดหมู่, โมเดลที่กำหนดให้เลือกใช้, คำอธิบาย&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domains&lt;/strong&gt;: โดเมนความรู้ไหนที่ agent นี้ครอบคลุม&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: ลักษณะนิสัย (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;คู่มือเครื่องมือ&lt;/strong&gt;: เอกสารเครื่องมือไหนที่ถูกเพิ่มเข้าในบริบท&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เครื่องมือ&lt;/strong&gt;: รายการเครื่องมือ MCP ทั้งหมดที่ agent นี้เข้าถึงได้&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;นี่คือตัวอย่างสิ่งที่คุณเห็น:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้บอกคุณอย่างชัดเจนว่า agent ทำอะไรได้บ้าง ไม่ต้องดูซอร์สโค้ด&lt;/p&gt;
&lt;h2 id=&quot;ระดับ-4-สืบย้อนที่มาของการตัดสินใจ&quot;&gt;ระดับ 4: สืบย้อนที่มาของการตัดสินใจ&lt;/h2&gt;
&lt;p&gt;agent ปฏิบัติตามการตัดสินใจที่บันทึกไว้ เมื่อคุณต้องการเข้าใจ &lt;em&gt;ทำไม&lt;/em&gt; บางอย่างถึงทำงานแบบเฉพาะ รีจิสทรีการตัดสินใจคือแหล่งความจริง&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้คืนการตัดสินใจเชิงสถาปัตยกรรมที่ตรงกัน:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;แต่ละการตัดสินใจมีที่มาที่ไปครบถ้วน — ตัดสินใจเมื่อใด ทำไม ข้อแลกเปลี่ยนอะไรถูกพิจารณา commit ไหนนำไปใช้จริง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;นี่คือเอกสารเชิงสถาปัตยกรรมที่ทันสมัยอยู่เสมอ เพราะมันถูกขุดมาจาก commit ไม่ใช่ดูแลด้วยมือ&lt;/p&gt;
&lt;h2 id=&quot;ระดับ-5-โค้ดอินเทลลิเจนซ์-โดยตรง&quot;&gt;ระดับ 5: โค้ดอินเทลลิเจนซ์ โดยตรง&lt;/h2&gt;
&lt;p&gt;เมื่อคุณต้องการเห็นการอิมพลีเมนต์จริง — ไม่ใช่แค่ metadata เกี่ยวกับมัน — เครื่องมือ MCP ของ Maguyva ให้การเข้าถึงโดยตรง&lt;/p&gt;
&lt;p&gt;จากภายในเซสชัน agent:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้ส่งผ่านอัตโนมัติข้าม semantic, text และ AST search เพื่อหาโค้ดที่เกี่ยวข้องสำหรับสัญลักษณ์เฉพาะ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สำหรับการวิเคราะห์ dependency:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งเหล่านี้ไม่ใช่แค่เครื่องมือที่ใช้แทน grep พวกมันรับรู้ graph มีดัชนีเชิงความหมาย และผสานรวมกับโค้ดอินเทลลิเจนซ์เดียวกันที่ขับเคลื่อนตัว agent เอง&lt;/p&gt;
&lt;h2 id=&quot;การค้นหาแบบรวมข้ามรีจิสทรี&quot;&gt;การค้นหาแบบรวมข้ามรีจิสทรี&lt;/h2&gt;
&lt;p&gt;บางครั้งคุณไม่รู้ว่ารีจิสทรีไหนมีคำตอบ การค้นหาแบบรวมครอบคลุมทุกอย่าง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 ผลลัพธ์ที่ตรงกันจากรีจิสทรีทั้งห้า สรุปบอกคุณว่าจะเจาะลึกที่ไหน ลบ &lt;code&gt;--summary&lt;/code&gt; ออกเพื่อผลลัพธ์ที่ละเอียด หรือเพิ่ม &lt;code&gt;--limit 5&lt;/code&gt; เพื่อให้ผลลัพธ์จัดการได้ง่าย&lt;/p&gt;
&lt;h2 id=&quot;เหตุใดสิ่งนี้จึงสำคัญ&quot;&gt;เหตุใดสิ่งนี้จึงสำคัญ&lt;/h2&gt;
&lt;p&gt;การเปิดเผยแบบค่อยเป็นค่อยไปไม่ใช่แค่เรื่องความสะดวก มันเปลี่ยนวิธีที่คุณโต้ตอบกับระบบที่ซับซ้อน&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การดีบักกลายเป็นเรื่องจัดการได้&lt;/strong&gt; เมื่อ agent ตัดสินใจอย่างไม่คาดคิด คุณไม่ต้อง grep ผ่านล็อก คุณตรวจสอบเครื่องมือที่มันเข้าถึงได้ (&lt;code&gt;agents info&lt;/code&gt;) การตัดสินใจอะไรหล่อหลอมพฤติกรรมของมัน (&lt;code&gt;decisions search&lt;/code&gt;) และตามรอยการอิมพลีเมนต์ถ้าจำเป็น (&lt;code&gt;intelligent_search&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;การออนบอร์ดเร็วขึ้น&lt;/strong&gt; สมาชิกทีมใหม่ไม่ต้องอ่านโค้ดเบสทั้งหมด พวกเขาเริ่มด้วย &lt;code&gt;system status&lt;/code&gt; สำรวจด้วย &lt;code&gt;agents list&lt;/code&gt; และเจาะลึกเฉพาะเมื่อพวกเขาเจอบางอย่างที่ไม่เข้าใจ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;เอกสารทันสมัยอยู่เสมอ&lt;/strong&gt; เพราะ CLI อ่านจากรีจิสทรีเดียวกับที่ตั้งค่า agent ผลลัพธ์จึงถูกต้องเสมอ ไม่มีการเบี่ยงเบนระหว่างสิ่งที่เอกสารบอกกับสิ่งที่ระบบทำ&lt;/p&gt;
&lt;h2 id=&quot;cli-ในฐานะอินเทอร์เฟซ&quot;&gt;CLI ในฐานะอินเทอร์เฟซ&lt;/h2&gt;
&lt;p&gt;เราสามารถสร้างแดชบอร์ดเว็บได้ เราสามารถเขียนเอกสารอย่างละเอียดได้ แต่แทนที่จะทำอย่างนั้น เราสร้าง CLI ที่อ่านจากแหล่งความจริง&lt;/p&gt;
&lt;p&gt;CLI มีข้อได้เปรียบ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ประกอบได้&lt;/strong&gt;: ต่อผลลัพธ์ผ่าน &lt;code&gt;jq&lt;/code&gt; ผสานรวมกับสคริปต์&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เขียนสคริปต์ได้&lt;/strong&gt;: ทำการตรวจสอบอัตโนมัติ สร้างรายงาน&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เร็ว&lt;/strong&gt;: ไม่มีการโหลดหน้า ไม่มีขั้นตอน authentication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;แม่นยำ&lt;/strong&gt;: อ่านการตั้งค่าจริง ไม่ใช่ตัวแทนที่แคชไว้&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;สำหรับระบบที่ความถูกต้องสำคัญกว่าความสวยงาม CLI ชนะ&lt;/p&gt;
&lt;h2 id=&quot;การสร้างการเปิดเผยแบบค่อยเป็นค่อยไปของคุณเอง&quot;&gt;การสร้างการเปิดเผยแบบค่อยเป็นค่อยไปของคุณเอง&lt;/h2&gt;
&lt;p&gt;หากคุณกำลังสร้างระบบ agent ให้พิจารณาว่าผู้ใช้จะตรวจสอบมันอย่างไร:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;เริ่มด้วยการตรวจสุขภาพ&lt;/strong&gt; หนึ่งคำสั่งที่บอกคุณว่าสิ่งต่างๆ ทำงานอยู่หรือไม่&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;มอบมุมมองรายการ&lt;/strong&gt; แสดงรายการสิ่งที่มีอยู่ก่อนอธิบายว่ามันทำอะไร&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เปิดใช้การคิวรีแบบเจาะจง&lt;/strong&gt; การค้นหาชนะการเรียกดูในระดับใหญ่&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เปิดเผยที่มาที่ไป&lt;/strong&gt; ให้ผู้ใช้ตามรอยการตัดสินใจไปยังต้นกำเนิดของมันได้&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;เชื่อมต่อกับโค้ดอินเทลลิเจนซ์&lt;/strong&gt; ท้ายที่สุด ผู้ใช้ต้องเห็นการอิมพลีเมนต์&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;แต่ละชั้นตอบคำถามติดตามผล สร้างพวกมันตามลำดับความถี่ — ผู้ใช้ส่วนใหญ่หยุดที่ชั้น 2 หรือ 3 มีเพียงผู้ใช้ขั้นสูงเท่านั้นที่ไปถึงชั้น 5&lt;/p&gt;
&lt;p&gt;เป้าหมายไม่ใช่การเปิดเผยทุกอย่าง มันคือการเปิดเผยสิ่งที่จำเป็นพอดี ในเวลาที่จำเป็นพอดี นั่นคือการเปิดเผยแบบค่อยเป็นค่อยไปที่นำไปใช้กับสถาปัตยกรรม agent&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: ยึดโยง AI Agent ไว้กับความเป็นจริง</title><link>https://maguyva.ai/th/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/th/blog/ground-truths-anchoring-ai-to-reality</guid><description>AI agent หลอนได้อย่างมั่นใจ Ground Truths คือข้อเท็จจริงที่มีเวอร์ชันและขอบเขตชัดเจน ซึ่งยึดโยงพฤติกรรมของ agent ไว้กับความเป็นจริง นี่คือวิธีที่เราสร้างและบังคับใช้มัน</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ตัวเลขในบทความนี้สะท้อนระบบ ณ วันที่เผยแพร่ (มกราคม 2026) ดู&lt;a href=&quot;https://maguyva.ai/th/team&quot;&gt;หน้าทีม&lt;/a&gt;ของเราสำหรับตัวเลขปัจจุบัน&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI agent มีความสามารถอย่างน่าทึ่ง มันให้เหตุผล สังเคราะห์ และสร้างสรรค์ได้ แต่มันมีจุดอ่อนพื้นฐาน: มันสร้างเรื่องขึ้นมาเอง ไม่ได้ตั้งใจร้าย แต่ทำอย่างมั่นใจ agent อาจสร้าง API พารามิเตอร์ที่ไม่มีอยู่จริง อ้างอิงการตั้งค่าที่ไม่เคยถูกนิยาม หรือใช้รูปแบบจากข้อมูลฝึกของมัน ที่ขัดแย้งกับสถาปัตยกรรมจริงของคุณ&lt;/p&gt;
&lt;p&gt;แนวทางบรรเทาปัญหาที่ใช้กันทั่วไปคือ “ให้บริบทกับ agent มากขึ้น” แต่บริบทอาจขัดแย้งกันเองได้ เอกสารเบี่ยงเบนไปจากการอิมพลีเมนต์จริง คอมเมนต์โกหกได้ แม้แต่โค้ดก็ทำให้เข้าใจผิดได้เมื่ออ่านโดยไม่เข้าใจเจตนา&lt;/p&gt;
&lt;p&gt;เราต้องการสิ่งที่ชัดเจนกว่านั้น สิ่งที่ไม่สามารถถูกมองข้ามหรือตีความผิดได้ สิ่งที่จะยึดโยง agent ไว้กับความเป็นจริงที่ตรวจสอบได้&lt;/p&gt;
&lt;p&gt;เราเรียกมันว่า Ground Truths&lt;/p&gt;
&lt;h2 id=&quot;ground-truth-คืออะไร&quot;&gt;Ground Truth คืออะไร?&lt;/h2&gt;
&lt;p&gt;ground truth คือข้อความข้อเท็จจริงที่ชัดเจนและมีเวอร์ชัน ซึ่ง agent ต้องเคารพ มันไม่ใช่เอกสาร มันไม่ใช่คอมเมนต์ มันคือเอนทิตีชั้นหนึ่งในระบบที่มี:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ตัวระบุที่ไม่ซ้ำกัน&lt;/strong&gt; (เช่น &lt;code&gt;GT-MAG-015&lt;/code&gt; หรือ &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;สถานะวงจรชีวิต&lt;/strong&gt; (current, tentative หรือ deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ขอบเขต&lt;/strong&gt; (ทั้งแพลตฟอร์ม, เฉพาะแพ็กเกจ หรือผูกกับโดเมน)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;หลักฐาน&lt;/strong&gt; (path ของไฟล์, URL หรือการอ้างอิงที่พิสูจน์ข้อความนั้น)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;คำแนะนำสำหรับ agent&lt;/strong&gt; (คำสั่ง do/avoid ที่ชัดเจน)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;นี่คือตัวอย่างจากแพลตฟอร์มโค้ดอินเทลลิเจนซ์ Maguyva ของเรา:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;นี่ไม่ใช่ร้อยแก้ว มันคือสัญญา เมื่อ agent พบ ground truth นี้ มันจะรู้ว่า:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ค่าเริ่มต้นเป็นแบบกำหนดแน่นอน (ผลลัพธ์ว่างเปล่า ไม่ใช่การเดาจากการจับคู่โดยประมาณ)&lt;/li&gt;
&lt;li&gt;มีพารามิเตอร์เฉพาะ (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) พร้อมพฤติกรรมที่นิยามไว้&lt;/li&gt;
&lt;li&gt;มีหลักฐานอยู่ในไฟล์เฉพาะที่สามารถตรวจสอบได้&lt;/li&gt;
&lt;li&gt;ข้อความถูกยืนยันในวันที่ระบุ&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;โครงสร้างของ-ground-truth-รีจิสทรี&quot;&gt;โครงสร้างของ Ground Truth รีจิสทรี&lt;/h2&gt;
&lt;p&gt;ground truth อาศัยอยู่ใน YAML รีจิสทรี ภายใต้ &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt; แต่ละแพ็กเกจ หรือโดเมนสามารถมีรีจิสทรีของตัวเองได้ โครงสร้างคือ:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;รีจิสทรีประกอบด้วย metadata เกี่ยวกับตัวชุดเอง, การตั้งค่าการเรนเดอร์สำหรับสร้างเอกสาร และข้อความเอง แต่ละข้อความปฏิบัติตาม schema ที่เข้มงวดซึ่งตรวจสอบด้วย Pydantic โมเดล:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;agent-เข้าถึง-ground-truth-ได้อย่างไร&quot;&gt;Agent เข้าถึง Ground Truth ได้อย่างไร&lt;/h2&gt;
&lt;p&gt;ground truth ถูกเปิดผ่านหลายช่องทาง:&lt;/p&gt;
&lt;h3 id=&quot;1-เอกสารที่เรนเดอร์แล้ว&quot;&gt;1. เอกสารที่เรนเดอร์แล้ว&lt;/h3&gt;
&lt;p&gt;คำสั่ง &lt;code&gt;orkestra sync&lt;/code&gt; แปลง YAML รีจิสทรีให้เป็น markdown ที่อ่านได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้สร้างไฟล์ &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; ที่ถูกรวมเข้าในบริบทของ agent ผลลัพธ์ที่เรนเดอร์แล้วจะจัดกลุ่มข้อความตามสถานะและหมวดหมู่:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-การค้นหาด้วย-cli&quot;&gt;2. การค้นหาด้วย CLI&lt;/h3&gt;
&lt;p&gt;agent ที่เข้าถึง shell ได้สามารถค้นหา ground truth แบบโปรแกรมได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ฟังก์ชันค้นหาให้คะแนนการจับคู่ข้ามหลายฟิลด์ด้วยน้ำหนักถ่วง:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-การประกอบบริบท&quot;&gt;3. การประกอบบริบท&lt;/h3&gt;
&lt;p&gt;เมื่อ agent ถูกเรนเดอร์จากคำนิยาม YAML บริบทของมันสามารถอ้างอิง ground truth รีจิสทรีได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้ทำให้แน่ใจว่า ground truth ที่เกี่ยวข้องถูกโหลดก่อนที่ agent จะเริ่มทำงาน&lt;/p&gt;
&lt;h2 id=&quot;หมวดหมู่ของ-ground-truth&quot;&gt;หมวดหมู่ของ Ground Truth&lt;/h2&gt;
&lt;p&gt;เมื่อพิจารณารีจิสทรีทั้งหมดของเรา ground truth จะรวมกลุ่มเป็นรูปแบบหลายอย่าง:&lt;/p&gt;
&lt;h3 id=&quot;หลักการผลิตภัณฑ์&quot;&gt;หลักการผลิตภัณฑ์&lt;/h3&gt;
&lt;p&gt;ข้อจำกัดว่าผลิตภัณฑ์คืออะไรและไม่ใช่อะไร:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyva เป็นแบบอ่านอย่างเดียวต่อรีโพซิทอรีของผู้ใช้ สินทรัพย์เดียวที่สร้างขึ้นใหม่ไม่ได้คือแคชเอ็มเบดดิ้งที่ต้องชำระเงิน” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;ขอบเขตสถาปัตยกรรม&quot;&gt;ขอบเขตสถาปัตยกรรม&lt;/h3&gt;
&lt;p&gt;ความรับผิดชอบอยู่ที่ไหนและเพราะเหตุใด:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“ขอบเขตระหว่าง pipeline กับ Maguyva ตั้งใจไว้แบบนี้: pipeline นำกลับมาใช้ใหม่ได้, Maguyva เก็บตรรกะเฉพาะโค้ด และ CQRS แยกการเขียนของสเตจออกจากการอ่านของเซิร์ฟเวอร์” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;กฎป้องกันการหลอน&quot;&gt;กฎป้องกันการหลอน&lt;/h3&gt;
&lt;p&gt;คำสั่งที่ชัดเจนซึ่งรักษาให้สัญญาเครื่องมือเป็นแบบกำหนดแน่นอนแทนการอนุมาน:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“การจับคู่สัญลักษณ์แบบโดยประมาณเป็นแบบเลือกเปิดใช้เองผ่าน &lt;code&gt;find_similar=true&lt;/code&gt; พฤติกรรมเริ่มต้นคืนผลลัพธ์ว่างเปล่าสำหรับสัญลักษณ์ที่ไม่มีอยู่จริง &lt;code&gt;exact_match=true&lt;/code&gt; บังคับให้จับคู่แบบเข้มงวดและปิดทางเลือกสำรองที่ใช้การจับคู่โดยประมาณทั้งหมด” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;เกณฑ์คุณภาพ&quot;&gt;เกณฑ์คุณภาพ&lt;/h3&gt;
&lt;p&gt;มาตรฐานที่ต้องรักษาไว้:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“การเปลี่ยนแปลงโครงสร้างพื้นฐานที่ใช้ร่วมกัน (post_filters.py, ตัวดึงความสัมพันธ์, ตัวจัดการที่ใช้ร่วมกัน) ต้องได้รับการตรวจสอบกับ &lt;em&gt;ทุก&lt;/em&gt; ภาษาที่รองรับผ่านการสร้าง full manifest ก่อน commit การตรวจสอบภาษาเดียวไม่เพียงพอสำหรับโค้ดที่ใช้ร่วมกัน” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;รูปแบบโค้ด&quot;&gt;รูปแบบโค้ด&lt;/h3&gt;
&lt;p&gt;ข้อกำหนดการอิมพลีเมนต์:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“ใช้ &lt;code&gt;asyncio.to_thread()&lt;/code&gt; สำหรับงานที่หนัก CPU ในบริบท async รูปแบบ &lt;code&gt;loop.run_in_executor()&lt;/code&gt; ที่เลิกใช้แล้วไม่ควรถูกใช้ในโค้ดใหม่” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;วงจรชีวิตของ-ground-truth&quot;&gt;วงจรชีวิตของ Ground Truth&lt;/h2&gt;
&lt;p&gt;ground truth ไม่คงที่ มันวิวัฒนาการผ่านวงจรชีวิตที่นิยามไว้:&lt;/p&gt;
&lt;h3 id=&quot;tentative&quot;&gt;Tentative&lt;/h3&gt;
&lt;p&gt;ความจริงที่เสนอไว้ภายใต้การประเมิน ข้อความถูกบันทึกไว้แต่อาจเปลี่ยนแปลงได้:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;current&quot;&gt;Current&lt;/h3&gt;
&lt;p&gt;ความจริงที่ยืนยันแล้วซึ่ง agent ต้องเคารพ หลักฐานได้รับการตรวจสอบแล้ว:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;deprecated&quot;&gt;Deprecated&lt;/h3&gt;
&lt;p&gt;ความจริงที่ไม่ใช้แล้ว ถูกเก็บไว้เพื่ออ้างอิงทางประวัติศาสตร์พร้อมตัวชี้ไปยังสิ่งที่มาแทนที่:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;เหตุใดจึงไม่ใช้แค่เอกสาร&quot;&gt;เหตุใดจึงไม่ใช้แค่เอกสาร?&lt;/h2&gt;
&lt;p&gt;เอกสารรับใช้จุดประสงค์ที่ต่างกัน มันอธิบาย มันสอน มันคลุมเครือได้ ใช้คำอย่าง “โดยทั่วไป” หรือ “มักจะ” ได้&lt;/p&gt;
&lt;p&gt;ground truth คลุมเครือไม่ได้ มันคือการยืนยัน มันเป็นจริงหรือไม่เป็นจริง&lt;/p&gt;
&lt;p&gt;พิจารณาความแตกต่าง:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;เอกสาร:&lt;/strong&gt; “API มักจะคืนผลลัพธ์ว่างเปล่าเมื่อไม่พบสัญลักษณ์ แม้ว่าการจับคู่แบบโดยประมาณอาจถูกเปิดใช้ในการตั้งค่าบางแบบ”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; “พฤติกรรมเริ่มต้นคืนผลลัพธ์ว่างเปล่าสำหรับสัญลักษณ์ที่ไม่มีอยู่จริง &lt;code&gt;exact_match=true&lt;/code&gt; บังคับให้จับคู่แบบเข้มงวดและปิดทางเลือกสำรองที่ใช้การจับคู่โดยประมาณทั้งหมด”&lt;/p&gt;
&lt;p&gt;อย่างแรกมีประโยชน์สำหรับมนุษย์ที่เรียนรู้ระบบ อย่างที่สองสามารถนำไปปฏิบัติได้สำหรับ agent ที่กำลังตัดสินใจ&lt;/p&gt;
&lt;h2 id=&quot;คำแนะนำสำหรับ-agent-สิ่งที่ควรทำและควรหลีกเลี่ยง&quot;&gt;คำแนะนำสำหรับ Agent: สิ่งที่ควรทำและควรหลีกเลี่ยง&lt;/h2&gt;
&lt;p&gt;ground truth บางอย่างมีคำแนะนำสำหรับ agent ที่ชัดเจน:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้ขจัดความคลุมเครือ agent ที่อ่านสิ่งนี้จะรู้ไม่เพียงแค่ว่าอะไรเป็นจริง แต่ยังรู้ว่าความจริงนั้นหมายความว่าต้องทำอะไร&lt;/p&gt;
&lt;h2 id=&quot;การยืนยันและการบำรุงรักษา&quot;&gt;การยืนยันและการบำรุงรักษา&lt;/h2&gt;
&lt;p&gt;ground truth ต้องการการบำรุงรักษา เราติดตาม:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: เวลาที่มีการยืนยันว่าข้อความยังคงเป็นจริง&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: ไฟล์ที่พิสูจน์ข้อความ (สามารถตรวจสอบว่ามีอยู่จริงได้)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: ความจริงมาจากไหน (การตรวจสอบด้วย CLI, การรีวิวสถาปัตยกรรม, บทเรียนหลังเหตุการณ์)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ground truth ที่มีวันยืนยันเก่าหรือลิงก์หลักฐานที่เสีย คือสัญญาณให้ตรวจสอบ ข้อเท็จจริงนั้นอาจยังใช้ได้และต้องยืนยันซ้ำ หรืออาจเปลี่ยนไปแล้วและต้องอัปเดต&lt;/p&gt;
&lt;h2 id=&quot;ตัวอย่างจริงจากโปรดักชัน&quot;&gt;ตัวอย่างจริงจากโปรดักชัน&lt;/h2&gt;
&lt;h3 id=&quot;ขอบเขตความปลอดภัย&quot;&gt;ขอบเขตความปลอดภัย&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ground truth นี้ป้องกัน “การปรับปรุงความปลอดภัย” ที่เข้าใจผิดประเภทหนึ่ง ซึ่งจะทำลายผลิตภัณฑ์&lt;/p&gt;
&lt;h3 id=&quot;ความแม่นยำ-ณ-เวลาแตกโครงสร้าง&quot;&gt;ความแม่นยำ ณ เวลาแตกโครงสร้าง&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้มาจากประสบการณ์ที่เจ็บปวด agent เคยแพตช์แพ็กภาษาที่ล้มเหลวด้วยการเพิ่มตัวกรองที่ทำงานเฉพาะในวาลิเดเตอร์ที่ทำให้ชุดทดสอบดูเขียวขึ้น ในขณะที่ตัวสกัด Maguyva ตัวจริงยังคงปล่อย edge ที่ผิดอยู่ กฎนี้บังคับให้การแก้ไขกลับไปยังเส้นทางจริง: การตั้งค่า YAML, คิวรี หรือตัวจัดการ&lt;/p&gt;
&lt;h3 id=&quot;การกรองหลายชั้น&quot;&gt;การกรองหลายชั้น&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;สิ่งนี้ป้องกัน agent จากการเพิ่มตัวกรองในจุดที่ผิด ซึ่งเป็นความผิดพลาดทั่วไปที่เคยทำให้ความแม่นยำถดถอย&lt;/p&gt;
&lt;h2 id=&quot;การผสานรวมกับระบบออร์เคสเตรชัน&quot;&gt;การผสานรวมกับระบบออร์เคสเตรชัน&lt;/h2&gt;
&lt;p&gt;ground truth คือชั้นหนึ่งของระบบบริบทที่กว้างกว่า:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;การตัดสินใจเชิงสถาปัตยกรรม (ADR)&lt;/strong&gt; - บันทึกว่าทำไมเราจึงเลือกวิธี A แทน B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truths&lt;/strong&gt; - ระบุว่าอะไรเป็นจริงแน่นอนในตอนนี้&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;รูปแบบโดเมน&lt;/strong&gt; - อธิบายวิธีทำสิ่งต่างๆ ให้ถูกต้อง&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-Patterns&lt;/strong&gt; - อธิบายสิ่งที่ควรหลีกเลี่ยงและเพราะเหตุใด&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;agent ที่ทำงานในระบบสามารถเข้าถึงทั้งสี่อย่างได้ ground truth มอบจุดยึดข้อเท็จจริง ในขณะที่การตัดสินใจอธิบายประวัติศาสตร์ รูปแบบชี้นำการอิมพลีเมนต์ และ Anti-Patterns เตือนถึงข้อผิดพลาด&lt;/p&gt;
&lt;h2 id=&quot;การวัดผลกระทบ&quot;&gt;การวัดผลกระทบ&lt;/h2&gt;
&lt;p&gt;นับตั้งแต่นำ ground truth มาใช้ เราได้สังเกตเห็น:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;วงจร “แก้ไขสิ่งที่หลอนขึ้นมา” น้อยลง&lt;/li&gt;
&lt;li&gt;การตัดสินใจของ agent มั่นใจมากขึ้นเมื่อข้อเท็จจริงชัดเจน&lt;/li&gt;
&lt;li&gt;การรีวิว PR ที่ดีขึ้นเพราะความคาดหวังชัดเจน&lt;/li&gt;
&lt;li&gt;เวลาออนบอร์ด agent ใหม่ลดลง (รวมถึงสมาชิกทีมที่เป็นมนุษย์)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;การลงทุนในการบำรุงรักษา ground truth คุ้มค่าในการลดการดีบักและทำให้ขอบเขตระบบชัดเจนขึ้น&lt;/p&gt;
&lt;h2 id=&quot;เริ่มต้นใช้งาน&quot;&gt;เริ่มต้นใช้งาน&lt;/h2&gt;
&lt;p&gt;ในการเพิ่ม ground truth ให้ระบบของคุณ:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;สร้าง &lt;code&gt;ground_truths.yaml&lt;/code&gt; ในไดเรกทอรี &lt;code&gt;ai_assets/reference/&lt;/code&gt; ของแพ็กเกจของคุณ&lt;/li&gt;
&lt;li&gt;นิยาม metadata และการตั้งค่าการเรนเดอร์&lt;/li&gt;
&lt;li&gt;เพิ่มข้อความตาม schema&lt;/li&gt;
&lt;li&gt;รัน &lt;code&gt;uv run orkestra sync&lt;/code&gt; เพื่อสร้างเอกสาร&lt;/li&gt;
&lt;li&gt;รวมรีจิสทรีเข้าในการประกอบบริบทของ agent&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;เริ่มด้วยข้อเท็จจริงที่ก่อความสับสนมากที่สุด หรือข้อจำกัดที่ถูกละเมิดบ่อยที่สุด นั่นคือ ground truth ที่มีคุณค่าสูงสุดของคุณ&lt;/p&gt;
&lt;h2 id=&quot;บทสรุป&quot;&gt;บทสรุป&lt;/h2&gt;
&lt;p&gt;AI agent จะหลอน นั่นคือธรรมชาติของมัน แต่เราสามารถสร้างสภาพแวดล้อมที่การหลอนถูกจำกัดได้ ที่ข้อเท็จจริงบางอย่างต่อรองไม่ได้ ที่ agent สามารถตรวจสอบสมมติฐานของตัวเองกับความเป็นจริงที่ยืนยันแล้วได้&lt;/p&gt;
&lt;p&gt;ground truth ไม่ใช่ทางออกที่สมบูรณ์ มันต้องการการบำรุงรักษา มันสามารถล้าสมัยได้ มันเพิ่มภาระให้กระบวนการพัฒนา&lt;/p&gt;
&lt;p&gt;แต่มันมอบสิ่งที่มีคุณค่า: คำศัพท์ร่วมของข้อเท็จจริงที่ทั้งมนุษย์และ agent สามารถไว้วางใจได้ ในโลกที่ agent เข้ามามีส่วนร่วมในการพัฒนาซอฟต์แวร์มากขึ้นเรื่อยๆ รากฐานที่ใช้ร่วมกันนั้นกลายเป็นสิ่งจำเป็น&lt;/p&gt;
&lt;p&gt;ทางเลือกอื่นคือวงจรไม่รู้จบของ agent ที่ทำผิดพลาดอย่างมั่นใจ และมนุษย์คอยแก้ไข ground truth ทำลายวงจรนั้นด้วยการทำให้การแก้ไขชัดเจนและคงทน&lt;/p&gt;
&lt;p&gt;agent ของคุณสมควรรู้ว่าอะไรเป็นจริง บอกพวกมัน&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: การประสานงาน AI Agent ในระดับใหญ่</title><link>https://maguyva.ai/th/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/th/blog/orkestra-agent-orchestration</guid><description>ออร์เคสเตรเตอร์เดียวจัดสรรงานให้ AI agent ผู้เชี่ยวชาญ แต่ละตัวมี skill และความทรงจำที่แตกต่างกัน นี่คือวิธีที่ Orkestra ประสาน agent 46 ตัว และ skill 466 รายการในโปรดักชัน</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ตัวเลขในบทความนี้สะท้อนระบบ ณ วันที่เผยแพร่ (มกราคม 2026) ดู&lt;a href=&quot;https://maguyva.ai/th/team&quot;&gt;หน้าทีม&lt;/a&gt;ของเราสำหรับตัวเลขปัจจุบัน&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;เมื่อเราเริ่มสร้างด้วย Claude Code เราเจอปัญหาที่ทุกทีมที่ใช้ผู้ช่วยเขียนโค้ด AI ต้องเจอในที่สุด: agent ตัวเดียวทำทุกอย่างได้ดีไม่ได้&lt;/p&gt;
&lt;p&gt;คุณพรอมต์ agent ให้เป็นผู้เชี่ยวชาญฐานข้อมูลได้ หรือผู้ตรวจสอบความปลอดภัย หรือวิศวกร frontend แต่ทันทีที่คุณขอให้มันเป็นทั้งสามอย่างพร้อมกัน คุณภาพจะแย่ลง บริบทจางลง คำสั่งขัดแย้งกัน agent กลายเป็นผู้รู้ทั่วไปที่ปานกลางในทุกเรื่อง&lt;/p&gt;
&lt;p&gt;เราจึงสร้าง Orkestra&lt;/p&gt;
&lt;h2 id=&quot;orkestra-คืออะไร&quot;&gt;Orkestra คืออะไร?&lt;/h2&gt;
&lt;p&gt;Orkestra คือระบบประสานงาน agent สำหรับ Claude Code และเครื่องมือเขียนโค้ด AI ที่คล้ายกัน มันประสานงาน agent เฉพาะทางหลายตัว แต่ละตัวมีความเชี่ยวชาญที่แตกต่างกัน ภายใต้ออร์เคสเตรเตอร์เดียวที่จัดสรรงานไปยังผู้เชี่ยวชาญที่ถูกต้อง&lt;/p&gt;
&lt;p&gt;ลองนึกภาพมันเป็นเอเจนซี่จัดหาบุคลากรสำหรับ AI agent ออร์เคสเตรเตอร์รับงาน ระบุว่าผู้เชี่ยวชาญคนไหนควรจัดการมัน และมอบหมายพร้อมบริบทที่ถูกต้อง เมื่องานเสร็จ ผลลัพธ์จะไหลกลับไปยังออร์เคสเตรเตอร์เพื่อสังเคราะห์&lt;/p&gt;
&lt;p&gt;ตัวเลขบอกเรื่องราว:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;องค์ประกอบ&lt;/th&gt;
&lt;th&gt;จำนวน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agent ผู้เชี่ยวชาญ&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill ที่นำกลับมาใช้ใหม่ได้&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ต้นแบบ Identity&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mindset&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;สไตล์การสื่อสาร&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;โดเมนความรู้&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;ระบบตัวละคร-dd-สำหรับ-agent&quot;&gt;ระบบตัวละคร: D&amp;amp;D สำหรับ Agent&lt;/h2&gt;
&lt;p&gt;ข้อมูลเชิงลึกหลักเบื้องหลัง Orkestra คือพฤติกรรมของ agent เกิดขึ้นจากพื้นฐานที่ประกอบกันได้สามอย่าง:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity&lt;/strong&gt; นิยาม &lt;em&gt;สิ่งที่&lt;/em&gt; agent เป็น สถาปนิกออกแบบโครงสร้างระบบ นักดีบักตามรอยความล้มเหลวไปยังต้นตอ ผู้พิทักษ์ดูแลให้ปฏิบัติตามข้อกำหนดและรักษาขอบเขตความปลอดภัย เรามีต้นแบบ identity 27 แบบที่ผสมกันได้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; นิยาม &lt;em&gt;วิธีที่&lt;/em&gt; agent คิด mindset เชิงวิเคราะห์ยึดการยืนยันไว้กับหลักฐานและวัดความไม่แน่นอน mindset ที่ตั้งข้อสงสัยอย่างมีเหตุผล ตั้งคำถามต่อสมมติฐานและหาหลักฐานที่หักล้าง mindset เชิงสำรวจโอบรับความคลุมเครือและลองหลายวิธี&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Style&lt;/strong&gt; นิยาม &lt;em&gt;วิธีที่&lt;/em&gt; agent สื่อสาร สไตล์เชิงเทคนิครวมค่าที่แน่นอนและอ้างอิงไฟล์เฉพาะ สไตล์กระชับตัดสิ่งฟุ่มเฟือยออกและนำด้วยคำตอบ สไตล์การทูตสร้างสมดุลระหว่างความซื่อสัตย์กับความมีไหวพริบ&lt;/p&gt;
&lt;p&gt;agent หนึ่งผสมพื้นฐานเหล่านี้เข้าด้วยกัน:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;องค์ประกอบนี้สร้าง agent ที่ออกแบบระบบ (architect), เชื่อมโยงความรู้ข้ามโดเมน (knowledge-architect), กำหนดทิศทางเชิงกลยุทธ์ (strategist), คิดด้วยหลักฐานและข้อมูล (analytical) และสื่อสารโดยไม่มีสิ่งฟุ่มเฟือย (concise)&lt;/p&gt;
&lt;p&gt;จุดเด่นคือจำนวนรูปแบบที่เกิดจากการผสมองค์ประกอบ identity 27 แบบ คูณด้วย mindset 11 แบบ คูณด้วยสไตล์ 10 แบบ ให้บุคลิกภาพ agent ที่เป็นไปได้เกือบ 3,000 แบบ แต่คุณนิยามเฉพาะการผสมที่สำคัญต่องานของคุณเท่านั้น&lt;/p&gt;
&lt;h2 id=&quot;skill-โมดูลความสามารถที่นำกลับมาใช้ใหม่ได้&quot;&gt;Skill: โมดูลความสามารถที่นำกลับมาใช้ใหม่ได้&lt;/h2&gt;
&lt;p&gt;Skill คือความรู้และเวิร์กโฟลว์ที่ agent สามารถเรียกใช้ได้ พวกมันทำตามระบบแบ่งชั้นตามขอบเขต:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ชั้น&lt;/th&gt;
&lt;th&gt;ชื่อ&lt;/th&gt;
&lt;th&gt;ขอบเขต&lt;/th&gt;
&lt;th&gt;ตัวอย่าง&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Foundations&lt;/td&gt;
&lt;td&gt;วิธีการสากล&lt;/td&gt;
&lt;td&gt;วินัยแบบ test-first, การเสร็จงานตามหลักฐาน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identities&lt;/td&gt;
&lt;td&gt;เวิร์กโฟลว์ตามบทบาท&lt;/td&gt;
&lt;td&gt;มาตรฐานอินเทอร์เฟซ CLI, playbook ประสิทธิภาพ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domains&lt;/td&gt;
&lt;td&gt;ความรู้เฉพาะโดเมน&lt;/td&gt;
&lt;td&gt;รูปแบบการย้ายฐานข้อมูล, การตรวจสอบ authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stacks&lt;/td&gt;
&lt;td&gt;เฉพาะเทคโนโลยี&lt;/td&gt;
&lt;td&gt;การดีพลอย Cloudflare, การทำงานของ Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;เฉพาะโค้ดเบสนี้&lt;/td&gt;
&lt;td&gt;เวิร์กโฟลว์และข้อตกลงเฉพาะโปรเจกต์&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skill ถูกโหลดเมื่อจำเป็น agent เห็นชื่อและคำอธิบายของ skill ตอนเริ่มต้น แต่เนื้อหา skill เต็มรูปแบบจะโหลดเมื่อถูกกระตุ้นเท่านั้น สิ่งนี้ทำให้บริบทกระชับในขณะที่ทำให้ skill หลายร้อยรายการค้นพบได้&lt;/p&gt;
&lt;p&gt;แต่ละ skill รวมถึง:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เงื่อนไขกระตุ้นที่ชัดเจน (“ใช้เมื่อย้าย schema ฐานข้อมูล”)&lt;/li&gt;
&lt;li&gt;คำแนะนำทีละขั้นตอน&lt;/li&gt;
&lt;li&gt;เครื่องมือที่อนุญาตสำหรับเวิร์กโฟลว์&lt;/li&gt;
&lt;li&gt;เกณฑ์ความสำเร็จและเส้นทางการกู้คืนความล้มเหลว&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;skill 466 รายการในรีจิสทรีของเราครอบคลุมทุกอย่างตั้งแต่การแยก git worktree ไปจนถึงเวิร์กโฟลว์การวิจัยเว็บไปจนถึงการตรวจสอบสุขภาพการดีพลอย&lt;/p&gt;
&lt;h2 id=&quot;เหตุใดออร์เคสเตรชันจึงสำคัญ&quot;&gt;เหตุใดออร์เคสเตรชันจึงสำคัญ&lt;/h2&gt;
&lt;p&gt;สถาปัตยกรรม agent เดี่ยวชนกำแพงอย่างรวดเร็ว:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;บริบทเจือจาง&lt;/strong&gt; หน้าต่างบริบท 200,000 token ฟังดูใหญ่จนกว่าคุณจะโหลด schema ฐานข้อมูล, เอกสาร API, test fixture และความรู้โดเมน ผู้เชี่ยวชาญสามารถทำงานกับบริบทที่เจาะจงได้&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;คำสั่งขัดแย้งกัน&lt;/strong&gt; การบอก agent ให้ “ละเอียดถี่ถ้วนแต่รวดเร็ว” และ “ตรวจสอบทุกอย่างแต่อย่าทำเกินความจำเป็น” สร้างความตึงเครียด ผู้เชี่ยวชาญแก้ปัญหานี้ด้วยการมีขอบเขตที่ชัดเจน&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ความลึกของความเชี่ยวชาญ&lt;/strong&gt; agent ผู้รู้ทั่วไปรู้เล็กน้อยเกี่ยวกับทุกเรื่อง agent ผู้เชี่ยวชาญที่ประกอบด้วย identity และ skill ที่ถูกต้อง รู้โดเมนของตัวเองอย่างลึกซึ้ง&lt;/p&gt;
&lt;p&gt;Orkestra ใช้การออร์เคสเตรชันแบบชั้นเดียว: ออร์เคสเตรเตอร์เดียวประสานผู้เชี่ยวชาญหลายตัว ผู้เชี่ยวชาญไม่สามารถสร้างผู้เชี่ยวชาญย่อยได้ สิ่งนี้ป้องกันการระเบิดของความซับซ้อน ในขณะที่ยังเปิดให้ทำงานคู่ขนานได้&lt;/p&gt;
&lt;p&gt;ออร์เคสเตรเตอร์เข้าถึงความจุที่มีประสิทธิผลได้ 2.2 ล้าน token: หน้าต่างบริบท 200,000 ของตัวเอง บวกกับเอเจนต์ย่อยคู่ขนาน 10 ตัวที่มี 200,000 แต่ละตัว งานที่จะทำให้ agent เดี่ยวหมดแรงสามารถรันได้อย่างสบายๆ ทั่วทั้งทีม&lt;/p&gt;
&lt;h2 id=&quot;pipeline-การเรนเดอร์&quot;&gt;Pipeline การเรนเดอร์&lt;/h2&gt;
&lt;p&gt;คำนิยาม agent อาศัยอยู่ใน YAML Claude Code อ่าน Markdown Orkestra เชื่อมช่องว่างนี้ด้วย pipeline การเรนเดอร์แบบกำหนดแน่นอน:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ผู้ควบคุมแก้ไข YAML ต้นทาง รัน &lt;code&gt;orkestra sync&lt;/code&gt; Markdown ที่เรนเดอร์แล้วจะปรากฏใน &lt;code&gt;.claude/agents/&lt;/code&gt; Claude Code รับการเปลี่ยนแปลงนั้นไป&lt;/p&gt;
&lt;p&gt;การแยกนี้รับใช้ผู้ใช้ที่แตกต่างกัน:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML ต้นทาง&lt;/strong&gt; รวม metadata วงจรชีวิต, แท็ก, กฎการตรวจสอบ และหมายเหตุการเลิกใช้สำหรับเครื่องมือ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown ที่เรนเดอร์แล้ว&lt;/strong&gt; รวมเฉพาะสิ่งที่โมเดลต้องการ: คำอธิบาย, เครื่องมือ, skill และคำแนะนำเชิงพฤติกรรม&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pipeline ประกอบ identity, mindset, style และ skill เข้าเป็นพรอมต์เดียวที่สอดคล้องกัน agent แบบ architect-analytical-concise จะได้พรอมต์ระบบที่ต่างจาก agent แบบ debugger-skeptical-technical มาก แม้ว่าพวกมันจะแชร์ skill พื้นฐานบางอย่างร่วมกันก็ตาม&lt;/p&gt;
&lt;h2 id=&quot;ความรู้โดเมน-รูปแบบสี่ไฟล์&quot;&gt;ความรู้โดเมน: รูปแบบสี่ไฟล์&lt;/h2&gt;
&lt;p&gt;ทุกโดเมนความรู้ทำตามโครงสร้างที่สอดคล้องกัน:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;โครงสร้างนี้รับใช้การโหลดบริบทของ agent agent ที่ทำงานด้าน authentication โหลด &lt;code&gt;authentication/patterns.md&lt;/code&gt; เพื่อคำแนะนำ และ &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; เพื่อหลีกเลี่ยงข้อผิดพลาดที่รู้จักแล้ว ไฟล์เหล่านี้ถูกกำหนดขนาดให้เหมาะกับการโหลดบริบทอย่างมีประสิทธิภาพ: เจาะจงพอที่จะมีประโยชน์ ครอบคลุมพอที่จะน่าเชื่อถือ&lt;/p&gt;
&lt;p&gt;เรารักษาโดเมนระดับบนสุด 21 โดเมน รวมถึงการวิเคราะห์ข้อมูล, authentication, data science, โครงสร้างพื้นฐาน, การเรียนรู้ของเครื่อง, ประสิทธิภาพ, ความปลอดภัย และอื่นๆ แต่ละโดเมนสามารถมีโดเมนย่อยเพื่อความละเอียดที่ลึกกว่าได้&lt;/p&gt;
&lt;h2 id=&quot;values-ระบบปฏิบัติการ&quot;&gt;Values: ระบบปฏิบัติการ&lt;/h2&gt;
&lt;p&gt;agent ทุกตัวแชร์ชั้นค่านิยมพื้นฐานที่นิยามว่าพวกมันทำงานอย่างไร:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ความเรียบง่ายมาก่อน&lt;/strong&gt; ใช้วิธีแก้ปัญหาที่ง่ายที่สุดที่ใช้ได้ผล เพิ่มความซับซ้อนเฉพาะเมื่อมีเหตุผลรองรับ&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;แก้ที่ต้นตอ&lt;/strong&gt; อย่าแพตช์รอบความล้มเหลว ถ้า pipeline ล้มเหลว ดีบัก pipeline ถ้า test ล้มเหลว แก้โค้ดหรือแก้ test&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ยึดหลักฐาน&lt;/strong&gt; ระบุการอ้างว่า “ยืนยันแล้ว” (พร้อม benchmark) หรือ “ประมาณการ” (พร้อมสมมติฐาน) รูปแบบที่ตรวจพบ ไม่เท่ากับปัญหาที่ยืนยันแล้ว&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;เศรษฐศาสตร์บริบท&lt;/strong&gt; เครื่องมือ MCP มีต้นทุน 0.1% ของบริบท การอ่านไฟล์มีต้นทุน 2% ต่อครั้ง ใช้ความเชี่ยวชาญโดเมนก่อนสำรวจโค้ด&lt;/p&gt;
&lt;p&gt;ค่านิยมเหล่านี้ถูกถ่ายทอดไปยังผู้เชี่ยวชาญทุกตัวผ่าน pipeline การเรนเดอร์ โครงสร้างการประกอบ agent ทำให้ไม่สามารถหลีกเลี่ยงค่านิยมเหล่านี้ได้&lt;/p&gt;
&lt;h2 id=&quot;cli-ชั้นควบคุม&quot;&gt;CLI: ชั้นควบคุม&lt;/h2&gt;
&lt;p&gt;Orkestra มาพร้อม CLI สำหรับจัดการระบบนิเวศ agent:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CLI คือแหล่งความจริงว่า agent อะไรมีอยู่ พวกมันมี skill อะไร และระบบสุขภาพดีหรือไม่ มันรันการตรวจสอบก่อนซิงค์เพื่อจับปัญหาแต่เนิ่นๆ&lt;/p&gt;
&lt;h2 id=&quot;ข้อพิจารณาด้าน-open-source&quot;&gt;ข้อพิจารณาด้าน Open Source&lt;/h2&gt;
&lt;p&gt;เราสร้าง Orkestra เพื่อแก้ปัญหาของเราเอง: การประสาน AI agent ในระดับใหญ่สำหรับโค้ดเบสที่ซับซ้อน รูปแบบที่เราค้นพบไม่ได้เจาะจง แค่โดเมนของเรา&lt;/p&gt;
&lt;p&gt;ระบบประกอบตัวละคร (identity + mindset + style) ใช้ได้กับทีมใดก็ตามที่นิยามบุคลิกภาพ agent&lt;/p&gt;
&lt;p&gt;ระบบชั้น skill (K0-K4) มอบโมเดลทางความคิดสำหรับจัดระเบียบความสามารถที่นำกลับมาใช้ใหม่ได้ตามขอบเขต&lt;/p&gt;
&lt;p&gt;รูปแบบ pipeline การเรนเดอร์ (YAML ต้นทาง + เทมเพลต + ไฟล์ที่สร้างขึ้น) แยกความรับผิดชอบระหว่างเครื่องมือกับการใช้งานของโมเดล&lt;/p&gt;
&lt;p&gt;โมเดลออร์เคสเตรชันแบบชั้นเดียว (ผู้ประสานหนึ่งตัว ผู้เชี่ยวชาญหลายตัว) หลีกเลี่ยงความซับซ้อนในขณะที่เปิดให้ทำงานคู่ขนานได้&lt;/p&gt;
&lt;p&gt;Orkestra จะกลายเป็น open source หรือไม่ขึ้นอยู่กับว่ารูปแบบเหล่านี้มีคุณค่าสำหรับคนอื่นที่สร้างด้วย Claude Code หรือไม่ หากคุณกำลังชนกำแพงที่เราอธิบาย สถาปัตยกรรมนี้อาจช่วยได้&lt;/p&gt;
&lt;h2 id=&quot;สิ่งที่เราเรียนรู้&quot;&gt;สิ่งที่เราเรียนรู้&lt;/h2&gt;
&lt;p&gt;การสร้าง Orkestra สอนเราว่าออร์เคสเตรชันไม่ใช่เรื่องของการทำให้ agent ฉลาดขึ้น มันคือการทำให้พวกมันโฟกัสมากขึ้น&lt;/p&gt;
&lt;p&gt;agent เดี่ยวที่มีคำสั่งสมบูรณ์แบบก็ยังหมดบริบทได้ agent เดี่ยวที่มี skill ทั้งหมดก็ยังสับสนว่าจะใช้อันไหน agent เดี่ยวที่พยายามเป็นทุกอย่าง สร้างผลลัพธ์ปานกลางในทุกที่&lt;/p&gt;
&lt;p&gt;ผู้เชี่ยวชาญสี่สิบคน แต่ละคนเก่งในโดเมนของตัวเอง ประสานโดยออร์เคสเตรเตอร์ที่รู้ว่าเมื่อไหร่ควรมอบหมาย: นั่นคือวิธีที่เราส่งมอบงาน&lt;/p&gt;
&lt;p&gt;ตัวเลขสำคัญน้อยกว่าสถาปัตยกรรม คุณอาจต้องการ agent ห้าตัวหรือห้าสิบตัว หลักการยังคงเดิม: การประกอบเหนือความสามารถ ความเชี่ยวชาญเฉพาะทางเหนือความเป็นผู้รู้ทั่วไป การประสานงานเหนือการลุยเดี่ยว&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra ขับเคลื่อนระบบนิเวศ agent เบื้องหลัง Maguyva แพลตฟอร์มโค้ดอินเทลลิเจนซ์ของเรา อยากเรียนรู้เพิ่มเติมไหม ติดต่อทีมของเรา&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>