[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-golang-the-series-ep155-chunking-strategies-all--*":3,"academy-blog-translations-kuwn5pxt9jy8grn":89},{"data":4,"page":75,"perPage":75,"totalItems":75,"totalPages":75},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":83,"keywords":84,"locale":55,"published_at":85,"scheduled_at":71,"school_blog":79,"short_description":86,"status":77,"title":87,"updated":88,"updated_by":13,"slug":80,"views":82},"ภาพหน้าปกบทความ \"Golang The Series EP.155: Chunking Strategies เทคนิคตัดแบ่งข้อมูลส่งให้ AI\" แสดงตัวอย่างโค้ดภาษา Go ของฟังก์ชัน ChunkText สำหรับตัดแบ่งข้อความออกเป็นส่วนย่อยๆ ตามขนาดและระยะซ้อนทับที่กำหนด","sclblg987654321","school_blog_translations","\u003Cp>ยินดีต้อนรับเข้าสู่ \u003Cstrong>Golang The Series SS5: AI Awaken EP.155\u003C\u002Fstrong> ครับ! ในตอนที่แล้วเราได้ลุยวิธีสร้าง Collection บน Qdrant กันไปเรียบร้อยแล้ว คราวนี้ลองจินตนาการว่าคุณมีไฟล์คู่มือพนักงานหนา 100 หน้า หรือไฟล์สเปกสินค้า (Product Manual) ขนาดยาวเหยียดที่ต้องการนำมาทำระบบ \u003Cstrong>RAG (Retrieval-Augmented Generation)\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>คำถามคลาสสิกที่ Dev สาย AI มือใหม่มักจะถามกันเข้ามาบ่อยๆ ก็คือ:\u003C\u002Fp>\u003Cblockquote>\u003Cp>\u003Cem>\"เราจะจับข้อความทั้งหมดจากเอกสารนี้ โยนเข้ากระบวนการแปลง Embedding ทีเดียวเลยได้ไหม?\"\u003C\u002Fem>\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>คำตอบสั้นๆ คือ \u003Cstrong>\"ไม่ได้เด็ดขาดครับ\"\u003C\u002Fstrong> และนี่คือ 2 เหตุผลหลักที่สถาปัตยกรรมระบบ AI ทั่วไปไม่รองรับ:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>LLM Context Window Limits (ขีดจำกัดของโมเดล):\u003C\u002Fstrong> โมเดลภาษาขนาดใหญ่ (LLM) มีโควตาจำกัดจำนวน Token ที่รับได้ต่อหนึ่งคำขอ (Prompt) และตัวโมเดล Embedding เองก็มีขีดจำกัดในการรับข้อความเพื่อนำไปคำนวณมิติเวกเตอร์เช่นกัน\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Diluted Meaning (ปัญหาความหมายเจือจาง):\u003C\u002Fstrong> การฝืนแปลงข้อความยาวๆ 10-20 หน้าให้เหลือเวกเตอร์เพียงชุดเดียว จะทำให้ \"รายละเอียดเชิงลึก\" หรือคีย์เวิร์ดย่อยๆ ในเอกสารจางหายไป จน AI ไม่สามารถจับใจความสำคัญของเนื้อหาเฉพาะจุดได้เลย\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>นี่จึงเป็นเหตุผลสำคัญที่เราต้องรู้จักและเข้าใจเรื่อง \u003Cstrong>Chunking Strategies\u003C\u002Fstrong> หรือเทคนิคการตัดแบ่งข้อความขนาดใหญ่ออกเป็นชิ้นส่วนย่อยๆ ที่มีขนาดพอดี แต่ยังคงบริบท (Context) ไว้อย่างครบถ้วน\u003C\u002Fp>\u003Cp>ในบทความนี้เราจะมาเจาะลึกยุทธวิธีการแบ่งข้อความ พร้อมลุย \u003Cstrong>โค้ดภาษา Go (Golang)\u003C\u002Fstrong> สำหรับสร้าง Chunking Engine ประสิทธิภาพสูงกันครับ!\u003C\u002Fp>\u003Ch2>เจาะลึก 3 รูปแบบการทำ Chunking ที่นิยมใช้ในระบบ RAG\u003C\u002Fh2>\u003Cp>การแบ่งชิ้นส่วนข้อความในระบบ RAG ไม่ใช่เรื่องของการสุ่มหั่น แต่มีตั้งแต่แนวคิดพื้นฐานไปจนถึงการปรับแต่งแบบละเอียด เพื่อให้ AI เข้าใจบริบทได้ดีที่สุด โดยทั่วไปจะแบ่งออกเป็น 3 วิธีหลักๆ ดังนี้ครับ:\u003C\u002Fp>\u003Ch3>เลเวล 1: Character \u002F Token-based Chunking (ตัดตามความยาวคงที่)\u003C\u002Fh3>\u003Cp>วิธีนี้เบสิกที่สุดครับ คือการตั้งค่าดื้อๆ เลยว่าต้องการให้แต่ละชิ้นมีขนาดกี่ตัวอักษรหรือกี่ Token (เช่น กำหนดไว้ชิ้นละ 500 ตัวอักษร) พอนับครบปุ๊บ ระบบก็จะหั่นขาดตรงนั้นทันที\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>ข้อจำกัดที่ต้องระวัง:\u003C\u002Fstrong> ข้อมูลมักจะโดนตัดครึ่งประโยค ครึ่งคำ หรือหั่นคำไทยแยกออกจากกัน (เช่น คำว่า \"ประสิทธิภาพ\" อาจโดนหั่นเป็น \"ประสี\" อยู่ Chunk หนึ่ง และ \"ทธิภาพ\" ไปอยู่อีก Chunk หนึ่ง) ส่งผลให้ตอนแปลง Embedding ความหมายจะเพี้ยนทันที\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch3>เลเวล 2: Recursive Character Chunking (หั่นตามโครงสร้างเอกสาร)\u003C\u002Fh3>\u003Cp>ขยับความฉลาดขึ้นมาอีกขั้น วิธีนี้ระบบจะไม่หั่นสุ่มสี่สุมห้า แต่จะพยายามมองหา \u003Cstrong>\"จุดตัดตามธรรมชาติ\"\u003C\u002Fstrong> ของภาษาก่อน โดยไล่ลำดับความสำคัญจากใหญ่ไปเล็ก เช่น มองหาจุดขึ้นบรรทัดใหม่ (\u003Ccode>\\n\\n\u003C\u002Fcode> หรือ \u003Ccode>\\n\u003C\u002Fcode>) หรือช่องว่างที่เป็นจุดจบประโยคก่อน ถ้าชิ้นส่วนนั้นยังมีขนาดยาวเกินเกณฑ์ที่ตั้งไว้ ถึงจะยอมขยับไปหั่นตามจำนวนตัวอักษร วิธีนี้จะช่วยรักษาโครงสร้างและความหมายของประโยคไว้ได้เนียนกว่ามาก\u003C\u002Fp>\u003Ch3>เลเวล 3: Sliding Window &amp; Overlap (การตัดแบบคาบเกี่ยว\u002Fซ้อนทับ)\u003C\u002Fh3>\u003Cp>ไม่ว่าคุณจะเลือกใช้สองวิธีข้างต้นแบบไหน สิ่งสำคัญที่จะขาดไม่ได้เลยคือการตั้งค่า \u003Cstrong>Overlap\u003C\u002Fstrong> หรือการดึงเนื้อหาส่วนท้ายของ Chunk ก่อนหน้า มาเชื่อมต่อเป็นส่วนหัวของ Chunk ถัดไป\u003C\u002Fp>\u003Cblockquote>\u003Cp>\u003Cstrong>ตัวอย่างเช่น:\u003C\u002Fstrong> ถ้าเราตั้งค่า Chunk Size = 500 และ Overlap = 100 หมายความว่า ข้อความ 100 ตัวอักษรสุดท้ายของ Chunk ที่ 1 จะถูกยกไปเป็น 100 ตัวอักษรแรกของ Chunk ที่ 2 ด้วย การทำแบบนี้จะช่วยอุดรอยต่อ ไม่ให้ใจความสำคัญตรงจุดเชื่อมต้องขาดตอนไปครับ\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch2>Workshop: เขียน Go ทำ Sliding Window Chunking รองรับภาษาไทย\u003C\u002Fh2>\u003Cp>เรามาลองเขียนฟังก์ชันในภาษา Go เพื่อทำ Text Chunking โดยอิงตามหน่วยอักขระ (\u003Ccode>rune\u003C\u002Fcode>) เพื่อให้ระบบสามารถตัดแบ่งข้อความภาษาไทยได้อย่างแม่นยำ ไม่เกิดปัญหาอักขระต่างดาว พร้อมกับกำหนดค่าคาบเกี่ยว (Overlap) ไปพร้อมกันครับ\u003C\u002Fp>\u003Cp>Go\u003C\u002Fp>\u003Cpre>\u003Ccode>package main\r\n\r\nimport (\r\n\t\"fmt\"\r\n)\r\n\r\n\u002F\u002F ChunkText ทำการตัดแบ่งข้อความตามขนาดและจุดซ้อนทับที่กำหนด (คิดตามจำนวนอักขระ Rune)\r\nfunc ChunkText(text string, chunkSize int, overlap int) []string {\r\n\trunes := []rune(text)\r\n\tvar chunks []string\r\n\r\n\t\u002F\u002F ป้องกันปัญหา Edge Cases และ Infinite Loop\r\n\tif chunkSize &lt;= 0 {\r\n\t\treturn chunks\r\n\t}\r\n\tif overlap &gt;= chunkSize {\r\n\t\toverlap = chunkSize - 1 \u002F\u002F Overlap ต้องน้อยกว่า Chunk Size เสมอ\r\n\t}\r\n\r\n\tfor i := 0; i &lt; len(runes); {\r\n\t\tend := i + chunkSize\r\n\t\tif end &gt; len(runes) {\r\n\t\t\tend = len(runes)\r\n\t\t}\r\n\r\n\t\t\u002F\u002F ดึงชิ้นส่วนข้อความออกมาเก็บไว้\r\n\t\tchunks = append(chunks, string(runes[i:end]))\r\n\r\n\t\t\u002F\u002F หากตรวจสอบว่าประมวลผลถึงปลายทางข้อความแล้วให้จบการทำงาน\r\n\t\tif end == len(runes) {\r\n\t\t\tbreak\r\n\t\t}\r\n\r\n\t\t\u002F\u002F เลื่อนตำแหน่ง Index ถัดไป โดยถอยกลับมาเท่ากับระยะ Overlap เพื่อรักษาบริบทรอยต่อ\r\n\t\ti += (chunkSize - overlap)\r\n\t}\r\n\r\n\treturn chunks\r\n}\r\n\r\nfunc main() {\r\n\tlongText := \"ภาษา Go ออกแบบมาเพื่อจัดการ Concurrency ที่ยอดเยี่ยม ด้วยฟีเจอร์อย่าง Goroutines และ Channels \" +\r\n\t\t\"ทำให้สามารถประมวลผลงานขนาดใหญ่แบบขนานได้อย่างมีประสิทธิภาพสูงและกินทรัพยากรน้อยมาก \" +\r\n\t\t\"เหมาะอย่างยิ่งสำหรับการสร้างระบบ Data Pipeline ในยุคปัญญาประดิษฐ์และ AI-First Architecture\"\r\n\r\n\t\u002F\u002F สั่งหั่นชิ้นละ 50 ตัวอักษร โดยให้มีส่วนซ้อนทับกันพิกัดละ 15 ตัวอักษร\r\n\tchunks := ChunkText(longText, 50, 15)\r\n\r\n\tfor i, chunk := range chunks {\r\n\t\tfmt.Printf(\"🧩 Chunk %d: [%s]\\n\", i+1, chunk)\r\n\t}\r\n}\r\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>ทำไม Go ถึงเหมาะสำหรับสร้าง Chunking Engine?\u003C\u002Fh2>\u003Cp>เมื่อระบบ RAG ขยายสเกลใหญ่ขึ้น เอกสารที่ถูกส่งเข้ามาประมวลผลพร้อมกันอาจมีปริมาณมหาศาล (เช่น พนักงานอัปโหลดคู่มือองค์กรพร้อมกันหลายสิบคน) ประสิทธิภาพในระดับ System-level ของ Go จะเข้ามาช่วยจัดการปัญหานี้ได้ทันที:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>Goroutine Workers (Concurrency ทรงพลัง):\u003C\u002Fstrong> เราสามารถรับไฟล์ข้อความขนาดใหญ่เข้ามา แล้วใช้แนวคิด Worker Pool ของ Goroutines แยกย้ายกันไปหั่นซอย Chunk แบบคู่ขนาน (Concurrent) ได้ทันที โดยไม่บล็อกการทำงานของ Main Thread\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Memory Efficiency (จัดการหน่วยความจำดีเยี่ยม):\u003C\u002Fstrong> Go จัดการสไลซ์ของสตริง (String Slices) และ \u003Ccode>[]rune\u003C\u002Fcode> ได้อย่างคุ้มค่า มีกลไกการจองหน่วยความจำที่ต่ำมาก ทำให้เราประมวลผล Text ระดับหลายร้อย Megabytes ได้สบายๆ โดยไม่ต้องกังวลเรื่อง Performance Drop หรือปัญหา Memory Leak\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>🎯 ท้าให้ลอง (Daily Mission)\u003C\u002Fh2>\u003Cp>ลองคัดลอกซอร์สโค้ดด้านบนไปรันบนเครื่องของคุณ แล้วสังเกตผลลัพธ์ในแต่ละ Chunk ดูครับว่า ข้อความส่วนรอยต่อที่เป็น Overlap มีการซ้อนทับกันตามที่เราตั้งโจทย์ไว้จริงไหม?\u003C\u002Fp>\u003Cblockquote>\u003Cp>\u003Cstrong>💡 การบ้านชวนคิด:\u003C\u002Fstrong> จากโค้ดตัวอย่างด้านบน หากเราต้องการเปลี่ยนเงื่อนไขจากการนับจำนวนตัวอักษรตรงๆ ไปเป็นการสแกนหาช่องว่าง (Space) หรือตัวขึ้นบรรทัดใหม่ (\u003Ccode>\\n\u003C\u002Fcode>) เพื่อป้องกันไม่ให้คำภาษาไทยถูกหั่นครึ่งกลางคัน คุณคิดว่าเราควรเขียน Logic เพื่อค้นหาตำแหน่งปลายทาง (\u003Ccode>end\u003C\u002Fcode>) เพิ่มเติมอย่างไร? ลองฝึกสมองปรับปรุงโค้ดกันดูนะครับ!\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch2>❓ FAQ (คำถามที่พบบ่อยประจำตอน)\u003C\u002Fh2>\u003Ch3>ควรตั้งค่า Chunk Size และ Overlap เท่าไหร่ดีที่สุดสำหรับภาษาไทย?\u003C\u002Fh3>\u003Cp>ไม่มีตัวเลขที่ตายตัวครับ แต่จุดเริ่มต้นที่แนะนำ (Baseline) สำหรับโมเดลยอดนิยมอย่าง OpenAI Embedding คือการตั้งค่า \u003Cstrong>Chunk Size ประมาณ 400–800 ตัวอักษร (คิดเป็น Rune)\u003C\u002Fstrong> และตั้งค่า \u003Cstrong>Overlap ไว้ที่ประมาณ 10%–20% ของขนาด Chunk (ประมาณ 50–150 ตัวอักษร)\u003C\u002Fstrong> เพื่อช่วยรักษาความต่อเนื่องของบริบทในประโยคภาษาไทยครับ\u003C\u002Fp>\u003Ch3>ทำไมเราถึงต้องแปลง String ให้เป็นสไลซ์ของ \u003Ccode>[]rune\u003C\u002Fcode> ก่อนทำการ Chunking ในภาษา Go?\u003C\u002Fh3>\u003Cp>เพราะในภาษา Go ตัวสตริงปกติ (String) จะถูกเก็บและนับหน่วยความยาวตามขนาด \u003Cstrong>ไบต์ (Bytes)\u003C\u002Fstrong> ซึ่งอักขระภาษาไทยส่วนใหญ่บนสถาปัตยกรรม UTF-8 จะใช้พื้นที่ถึง 3 ไบต์ต่อหนึ่งตัวอักษร\u003C\u002Fp>\u003Cp>หากเราใช้ฟังก์ชันตัดสตริงแบบธรรมดา โค้ดจะเข้าไปหั่นกลางไบต์ ส่งผลให้อักขระไทยตัวนั้นเสียหาย แสดงผลเพี้ยน หรือกลายเป็นเครื่องหมายคำถามกล่องสี่เหลี่ยม () การแปลงเป็น \u003Cstrong>\u003Ccode>[]rune\u003C\u002Fcode>\u003C\u002Fstrong> จะบังคับให้ Go มองตำแหน่งตัวอักษรเป็นรายตัว (Code Point) ช่วยให้ตัดคำภาษาไทยได้อย่างถูกต้องสมบูรณ์ 100% ครับ\u003C\u002Fp>\u003Cdiv data-type=\"horizontalRule\">\u003Chr>\u003C\u002Fdiv>\u003Ch2>สรุป: Chunking ดี มีชัยไปกว่าครึ่ง 🎯\u003C\u002Fh2>\u003Cp>การออกแบบระบบ RAG ให้มีความแม่นยำและฉลาด ตอบคำถามได้ตรงประเด็น ไม่ได้ขึ้นอยู่กับความเทพของโมเดล LLM เพียงอย่างเดียว แต่เริ่มต้นตั้งแต่ \u003Cstrong>\"คุณภาพของข้อมูล\"\u003C\u002Fstrong> ที่เราป้อนเข้าไปครับ\u003C\u002Fp>\u003Cp>เทคนิคการทำ \u003Cstrong>Chunking Strategies\u003C\u002Fstrong> ร่วมกับการตั้งค่า \u003Cstrong>Overlap\u003C\u002Fstrong> ที่เหมาะสม จึงเป็นขั้นตอนสำคัญ (Data Pipeline) ที่เราจะมองข้ามไม่ได้เด็ดขาด เพราะถ้าเราหั่นข้อมูลไม่ดี ต่อให้ AI จะฉลาดแค่ไหนก็อาจจะตีความบริบทผิดเพี้ยนไปได้ และการเลือกใช้ภาษา Go ในการสร้าง Chunking Engine ก็ช่วยการันตีได้ว่า ระบบของคุณจะสามารถรองรับการสเกลและการประมวลผลไฟล์เอกสารมหาศาลได้อย่างรวดเร็วและประหยัดทรัพยากรที่สุดครับ\u003C\u002Fp>\u003Cp>\u003Cstrong>ในตอนต่อไป (EP.156) 🚀: \u003C\u002Fstrong>เมื่อเราหั่นเอกสารคลังความรู้ออกเป็น Chunk ที่สมบูรณ์และนำไปอัปโหลดเก็บใน Qdrant เรียบร้อยแล้ว เฟสถัดไปคือการดึงข้อมูลออกมาใช้งานจริง!\u003C\u002Fp>\u003Cp>ในตอนหน้า เราจะมาเจาะลึกระบบ \u003Cstrong>\"Semantic Search: การค้นหาข้อมูลตามความหมาย\"\u003C\u002Fstrong> เพื่อดูวิธีควานหาชิ้นส่วนข้อความที่ตรงใจผู้ใช้มากที่สุด โดยไม่ต้องพึ่งพาการ Match คีย์เวิร์ดแบบเดิมๆ แล้วพบกันในตอนต่อไปครับ!\u003C\u002Fp>\u003Cp>\u003Cstrong>ฝากกดติดตามพวกเราได้ที่ Superdev Academy\u003C\u002Fstrong> ในทุกช่องทางนะครับ!\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>🔵 Facebook: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\">\u003Cstrong>Superdev Academy Thailand\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(อัปเดตข่าวสารและบทความใหม่)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🎬 YouTube: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.youtube.com\u002F@SuperdevAcademy\">\u003Cstrong>Superdev Academy Channel\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(ติวเข้มแบบวิดีโอ)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>📸 Instagram: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevacademy\u002F\">\u003Cstrong>@superdevacademy\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(เกร็ดความรู้สั้นๆ และเบื้องหลังการทำงาน)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🎬 TikTok: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\">\u003Cstrong>@superdevacademy\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(Tips &amp; Tricks ฉบับย่อยง่าย)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🌐 Website: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"http:\u002F\u002Fsuperdevacademy.com\">\u003Cstrong>superdevacademy.com\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(คลังบทความและคอร์สเรียนฉบับเต็ม)\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003C\u002Fp>","291x7mvpm72r_m4q9fjdihg.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002F3bvwqxfru4t1c45\u002F291x7mvpm72r_m4q9fjdihg.png","2026-06-29 03:02:06.095Z","76qprkevbgfdps8",{"keywords":15,"locale":49,"school_blog":59},[16,23,28,33,37,41,45],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-05-11 04:12:12.008Z","bficy78v6muc3cs","Golang AI","2026-06-07 06:49:11.153Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:20:14.253Z","ah6lvy4x8qe08l5","Golang","2026-06-07 06:45:08.193Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:20:11.547Z","ey3puyme01a9bsw","Go","2026-06-07 06:45:07.798Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":34,"updated_by":13},"2026-06-29 03:00:15.775Z","oju9rhua7ndc8qo","Chunking คืออะไร",{"collectionId":17,"collectionName":18,"created":38,"created_by":13,"id":39,"name":40,"updated":38,"updated_by":13},"2026-06-11 16:14:22.575Z","gluay8aj98wheus","RAG",{"collectionId":17,"collectionName":18,"created":42,"created_by":13,"id":43,"name":44,"updated":42,"updated_by":13},"2026-06-29 03:00:24.149Z","4zujzpok7gf9j03","Overlap",{"collectionId":17,"collectionName":18,"created":46,"created_by":13,"id":47,"name":48,"updated":46,"updated_by":13},"2026-06-11 16:25:49.118Z","8gdef2395f0aey9","Data Pipeline",{"code":50,"collectionId":51,"collectionName":52,"created":53,"flag":54,"id":55,"is_default":56,"label":57,"updated":58},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":60,"collectionId":61,"collectionName":62,"created":63,"expand":64,"id":79,"slug":80,"updated":81,"views":82},"wqxt7ag2gn7xcmk","pbc_2105096300","school_blogs","2026-06-29 03:02:05.889Z",{"category":65},{"blogIds":66,"collectionId":67,"collectionName":68,"created":69,"created_by":13,"id":60,"image":70,"image_alt":71,"image_path":72,"label":73,"name":74,"priority":75,"publish_at":76,"scheduled_at":71,"status":77,"updated":78,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:33:53.210Z","59ty92ns80w_15oc1implw.png","","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fwqxt7ag2gn7xcmk\u002F59ty92ns80w_15oc1implw.png",{"en":74,"th":74},"Golang The Series",1,"2026-03-16 04:39:38.440Z","published","2026-06-07 06:45:03.856Z","kuwn5pxt9jy8grn","golang-the-series-ep155-chunking-strategies","2026-06-29 06:35:51.574Z",123,"3bvwqxfru4t1c45",[20,25,30,35,39,43,47],"2026-06-29 03:13:50.487Z","เรียนรู้เทคนิค Chunking Strategies และการตั้งค่า Overlap สำหรับระบบ RAG ด้วยภาษา Go (Golang) เพื่อตัดแบ่งข้อความภาษาไทยอย่างแม่นยำ ไม่ให้ AI แปลความหมายเพี้ยน","Golang The Series EP.155: Chunking Strategies เทคนิคตัดแบ่งข้อมูลส่งให้ AI","2026-06-29 03:13:50.491Z",{"th":80,"en":80}]