วิธีเปลี่ยนไฟล์เอกสารเทคนิคให้เป็นทักษะสำหรับ AI Agent
เรียนรู้วิธีแปลงไฟล์ PDF หรือ EPUB ให้เป็นทักษะสำหรับ Coding Agent โดยใช้เครื่องมือแปลงไฟล์แบบ Open Source ครอบคลุมการจัดการ Token Budget การรันแบบ Headless และเงื่อนไขลิขสิทธิ์
การเปลี่ยนหนังสือทางเทคนิคให้เป็นทักษะของเอเจนต์: สิ่งที่คุณจะได้รับ
ในการเปลี่ยนหนังสือทางเทคนิคให้เป็นทักษะของเอเจนต์ คุณเพียงแค่ชี้ตัวแปลง (converter) ไปยังไฟล์ PDF, EPUB, ไฟล์ที่ส่งออกจาก DOCX หรือโฟลเดอร์เอกสารภายในที่คุณมีอยู่แล้ว ตัวแปลงจะเขียนไดเรกทอรีทักษะขึ้นมา โดยประกอบด้วยไฟล์หลักหนึ่งไฟล์ที่เก็บเฟรมเวิร์กที่ระบุไว้พร้อมดัชนีของบทต่างๆ และไฟล์แยกหนึ่งไฟล์ต่อหนึ่งบท ซึ่งเอเจนต์จะอ่านเฉพาะเมื่อคำถามของคุณเรียกใช้เท่านั้น ตัวหนังสือจะไม่ถูกนำเข้าไปอยู่ใน context window แต่ตัวดัชนีจะถูกนำเข้าไปแทน
งานนี้เป็นงานที่ตรงกันข้ามกับ การเขียนทักษะของเอเจนต์ตั้งแต่เริ่มต้น ซึ่งคุณต้องเขียนขั้นตอนที่คุณรู้อยู่แล้วลงไป แต่ในกรณีนี้ ความรู้มีอยู่แล้วแต่ไม่มีใครเข้าถึงได้ เช่น ไฟล์ PDF ของผู้จำหน่ายที่มีความยาว 800 หน้า หรือคู่มือที่ไม่มีใครเปิดอ่านเลยตั้งแต่คนที่เขียนมันลาออกไป งานนี้จึงเป็นการบีบอัดและทำดัชนี หากคำว่าทักษะเป็นเรื่องใหม่สำหรับคุณ โปรดอ่าน ทักษะของเอเจนต์คืออะไร ก่อน
ตัวแปลงที่ใช้ในที่นี้คือ book-to-skill ซึ่งเป็นทักษะที่ได้รับอนุญาตแบบ MIT และทำงานบนเครื่องของคุณเอง แท็กปัจจุบัน ณ เดือนสิงหาคม 2026 คือ v1.4.0 โครงสร้างที่ได้มีความสำคัญมากกว่าตัวเครื่องมือเอง และส่วนสุดท้ายก่อนถึง FAQ จะแสดงวิธีสร้างโครงสร้างเดียวกันนี้ด้วยตนเอง
เหตุใดงบประมาณโทเค็นจึงเป็นหัวใจสำคัญของการออกแบบ
การนำหนังสือทั้งเล่มใส่ลงใน context window จะทำให้เสียค่าใช้จ่ายเต็มจำนวนในทุกบทสนทนาที่ต้องใช้งานหนังสือเล่มนั้น ในขณะที่ทักษะ (skill) จะเสียค่าใช้จ่ายสำหรับไฟล์ entry file เพียงครั้งเดียว บวกกับเนื้อหาในบทที่คำถามนั้นอ้างถึงจริงเท่านั้น โครงการนี้จึงกำหนดงบประมาณสำหรับแต่ละไฟล์ที่สร้างขึ้น
The data behind this chart
[
{
"label": "SKILL.md entry file",
"tokens": "4,000"
},
{
"label": "One chapter file",
"tokens": "1,000"
},
{
"label": "glossary.md",
"tokens": "1,500"
},
{
"label": "patterns.md",
"tokens": "2,000"
},
{
"label": "cheatsheet.md",
"tokens": "1,000"
}
]ไฟล์ entry file ซึ่งก็คือ SKILL.md ถูกจำกัดไว้ที่ 4,000 โทเค็น โดยจะบรรจุชื่อเฟรมเวิร์กและดัชนีของบทต่างๆ ไว้ ไฟล์แต่ละบทมีความยาวประมาณ 1,000 โทเค็นและจะถูกเก็บไว้ในดิสก์จนกว่าจะมีการเรียกใช้งาน ไฟล์สนับสนุนอื่นๆ ก็มีลักษณะคล้ายกัน คือ 1,500 โทเค็นสำหรับ glossary.md, 2,000 สำหรับ patterns.md และ 1,000 สำหรับ cheatsheet.md
งบประมาณเหล่านี้สอดคล้องกับวิธีการที่ Claude Code ใช้ context จริงๆ โดย description ของทักษะจะอยู่ในรายการทักษะเพื่อให้โมเดลทราบว่าทักษะนั้นมีอยู่จริง ส่วนเนื้อหาหลักจะถูกโหลดเมื่อมีการเรียกใช้ทักษะ และเมื่อโหลดแล้วจะคงอยู่ใน context ตลอดช่วงเวลาที่เหลือของเซสชัน ดังนั้นทุกบรรทัดใน entry file จึงเป็นค่าใช้จ่ายที่เกิดขึ้นซ้ำๆ ส่วนไฟล์สนับสนุนจะถูกโหลดเฉพาะเมื่อเอเจนต์อ่านไฟล์เหล่านั้น ซึ่งเป็นเหตุผลว่าทำไมไฟล์แยกรายบทจึงมีต้นทุนต่ำ
มีข้อจำกัดที่เข้มงวดกว่านั้นอยู่เบื้องหลังตัวเลขของ entry file เมื่อระบบ auto-compaction สรุปบทสนทนาที่ยาว Claude Code จะแนบการเรียกใช้ทักษะล่าสุดของแต่ละทักษะกลับเข้าไปหลังบทสรุป และเก็บโทเค็น 5,000 แรกของแต่ละทักษะไว้ ภายใต้งบประมาณรวม 25,000 โทเค็นสำหรับทุกทักษะที่ถูกแนบกลับมา หาก entry file มีขนาดไม่เกิน 5,000 โทเค็น มันจะคงอยู่ครบถ้วนหลังจากการบีบอัด แต่ถ้า entry file มีขนาด 20,000 โทเค็น มันจะถูกดึงกลับมาเพียงหนึ่งในสี่ส่วนแรกเท่านั้น และไม่มีระบบใดแจ้งให้คุณทราบว่าส่วนที่เหลืออีกสามส่วนหายไปไหน
นี่คือหลักการของการเปิดเผยข้อมูลแบบค่อยเป็นค่อยไป (progressive disclosure): ดัชนีขนาดเล็กที่คุ้มค่าต่อการเก็บไว้เสมอ และเนื้อหาจำนวนมากที่ถูกเก็บไว้หลังประตูที่เอเจนต์จะเปิดออกเมื่อจำเป็นเท่านั้น วิธีที่ Claude Code จัดการ context window อธิบายรายละเอียดส่วนที่เหลือของการคำนวณนี้
ติดตั้งตัวแปลงบน VPS ของคุณโดยระบุเวอร์ชันที่แน่นอน
ทักษะนี้เป็น git repository ให้โคลนลงในไดเรกทอรี skills ของเอเจนต์ที่คุณใช้งาน ชื่อของไดเรกทอรีจะกลายเป็นคำสั่ง slash ดังนั้นเส้นทางการโคลนจึงไม่ใช่เรื่องของความชอบส่วนบุคคล
git clone --depth 1 --branch v1.4.0 \
https://github.com/virgiliojr94/book-to-skill.git \
~/.claude/skills/book-to-skill--branch รองรับการระบุ tag ดังนั้นคำสั่งนี้จะตรวจสอบ v1.4.0 และจะไม่ดึงเวอร์ชันที่ใหม่กว่านั้น การระบุเวอร์ชันที่แน่นอนเป็นสิ่งสำคัญเนื่องจากทักษะคือชุดคำสั่งที่เอเจนต์ของคุณปฏิบัติตาม และการเปลี่ยนแปลงที่ไม่ได้ตรวจสอบในคำสั่งเหล่านั้นถือเป็นการเปลี่ยนแปลงสิ่งที่ทำงานบนเซิร์ฟเวอร์ของคุณ GitHub Copilot CLI จะอ่าน ~/.copilot/skills/ แทน ส่วน Amp จะอ่าน ~/.agents/skills/
นอกจากนี้ยังมีวิธีการติดตั้งแบบบรรทัดเดียวคือ npx skills add virgiliojr94/book-to-skill ซึ่งจะดึงเวอร์ชันล่าสุดมาให้ ใช้คำสั่งนี้เพื่อทดลองใช้เครื่องมือ แต่ให้ใช้การโคลนแบบระบุเวอร์ชันสำหรับสิ่งที่คุณต้องใช้งานซ้ำ
ตอนนี้ให้ตรวจสอบว่าเครื่องมีตัวแยกข้อมูล (extractor) ใดบ้าง:
cd ~/.claude/skills/book-to-skill
python3 scripts/extract.py --check--check จะรายงานว่ามีตัวแยกข้อมูลใดติดตั้งอยู่บ้างและแสดงคำสั่งติดตั้งสำหรับตัวที่ยังขาดอยู่ แพ็กเกจนี้ต้องการ Python 3.9 หรือใหม่กว่า
หาก /book-to-skill ไม่ปรากฏในรายการเติมคำอัตโนมัติหลังจากโคลนเสร็จ ให้รีสตาร์ทเอเจนต์ของคุณ Claude Code จะเฝ้าติดตามไดเรกทอรีทักษะที่มีอยู่ตั้งแต่เริ่มเซสชัน ดังนั้น ~/.claude/skills/ ที่คุณเพิ่งสร้างขึ้นเมื่อสองนาทีก่อนจึงยังไม่ถูกเฝ้าติดตาม
คุณจำเป็นต้องใช้ extractor ตัวไหนบ้าง?
ไม่มีสิ่งใดที่จำเป็นต้องใช้เกินไปกว่า Python เนื่องจากทุกรูปแบบไฟล์มีตัวสำรองในไลบรารีมาตรฐานอยู่แล้ว อย่างไรก็ตาม ตัวสำรองเหล่านี้มีประสิทธิภาพต่ำกว่า และบนเซิร์ฟเวอร์ขนาดเล็ก การติดตั้ง extractor ที่ไม่ได้ใช้งานจะทำให้เสียเวลาโดยเปล่าประโยชน์
pdftotextจากแพ็กเกจpoppler-utilsใช้จัดการไฟล์ PDF ที่มีข้อความจำนวนมากและทำงานได้เกือบจะทันที ติดตั้งด้วยsudo apt install poppler-utilspypdfและpdfminer.sixเป็นตัวสำรองของ Python สำหรับไฟล์ PDFdoclingใช้สำหรับ PDF ทางเทคนิคที่เน้นตารางและรายการโค้ด โปรเจกต์นี้วัดความเร็วไว้ที่ประมาณ 1.5 วินาทีต่อหน้าebooklibร่วมกับbeautifulsoup4ใช้สำหรับอ่านไฟล์ EPUB อย่างถูกต้อง หากไม่มีตัวเลือกเหล่านี้ เครื่องมือจะเปลี่ยนไปใช้ตัวอ่านzipfileในไลบรารีมาตรฐานแทนpython-docxใช้สำหรับอ่านไฟล์ DOCX และstriprtfใช้สำหรับอ่านไฟล์ RTFebook-convertของ Calibre จำเป็นสำหรับไฟล์ MOBI และ AZWocrmypdfใช้ทำ OCR (การรู้จำอักขระด้วยแสง) สำหรับหนังสือที่สแกนมาซึ่งไม่มีเลเยอร์ข้อความเลย
บน Ubuntu 24.04 การใช้ pip3 install pypdf แบบปกติจะหยุดทำงานพร้อมข้อความนี้:
error: externally-managed-environmentนี่ไม่ใช่ความผิดพลาดของ pip แต่ Ubuntu และ Debian กำหนดให้ Python ของระบบถูกจัดการโดย apt ดังนั้น pip จึงปฏิเสธที่จะเขียนไฟล์ลงในนั้น มีสองวิธีแก้ไขที่ได้ผล วิธีแรกคือ sudo apt install poppler-utils ซึ่งเป็นการติดตั้งแบบไบนารีและไม่จำเป็นต้องใช้ pip เลย ส่วนวิธีที่สองคือ pdftotext ซึ่งสามารถจัดการไฟล์ PDF ที่เป็นข้อความทั่วไปได้ด้วยตัวเอง สำหรับ extractor ของ Python ให้สร้าง virtual environment และเริ่มการทำงานของ agent จากภายในนั้น เพื่อให้ python3 ที่ skill เรียกใช้เป็นตัว interpreter ที่มีแพ็กเกจติดตั้งอยู่
python3 -m venv ~/.venvs/book-to-skill
source ~/.venvs/book-to-skill/bin/activate
pip install "$HOME/.claude/skills/book-to-skill[pdf,epub,docx]"
clauderepository ได้ประกาศส่วนเสริมไว้คือ pdf, epub, docx, rtf, technical และ all โดยที่ technical คือ docling หน้าการติดตั้งของโปรเจกต์ยังแสดง pip install "book-to-skill[pdf,epub,docx]" ไว้ด้วย แต่ชื่อดังกล่าวไม่ได้ถูกเผยแพร่บน PyPI ณ เดือนสิงหาคม 2026 ดังนั้นให้ติดตั้งจาก checkout ของคุณเองตามวิธีข้างต้น
ละเว้น docling ไว้ก่อนจนกว่าจะมีหนังสือที่จำเป็นต้องใช้ เนื่องจากมันจะดึง stack ของ machine learning เข้ามาด้วย ดังนั้นควรตรวจสอบพื้นที่ดิสก์ว่างบนแผนบริการขนาดเล็กก่อนทำการติดตั้ง
การรันคำสั่งผ่านโฟลเดอร์เอกสาร รวมถึงการรันแบบ headless
คำสั่งนี้รองรับการระบุไฟล์, โฟลเดอร์, glob ที่อยู่ในเครื่องหมายคำพูด หรือหลายพาธพร้อมกัน ตามด้วยชื่อ skill ที่เป็นตัวเลือกเสริม ข้อมูลทุกอย่างที่คุณใส่ไว้ในไดเรกทอรีเดียวสามารถใช้งานได้ รวมถึงชุด RFC (Request for Comments ซึ่งเป็นเอกสารที่กำหนดมาตรฐานโปรโตคอลอินเทอร์เน็ต)
/book-to-skill ~/library/platform-docs/ platform-handbook
/book-to-skill "~/books/*.epub" my-library
/book-to-skill ~/papers/paper1.pdf ~/notes/export.txt unified-researchให้ใส่เครื่องหมายคำพูดครอบ glob เพื่อป้องกันไม่ให้ shell ขยายค่าก่อนที่ skill จะได้รับข้อมูล การชี้คำสั่งไปยังไดเรกทอรี skill ที่มีอยู่แล้วจะเป็นการรวมแหล่งข้อมูลใหม่เข้ากับ skill นั้น แทนที่จะสร้าง skill ใหม่ขึ้นมาอีกชุด
การรันแบบโต้ตอบ (interactive) จะมีคำถามให้คุณตอบ เช่น เนื้อหาเป็นเชิงเทคนิคหรือเน้นข้อความ ซึ่งจะใช้ตัดสินใจเลือกตัวดึงข้อมูล (extractor) คุณต้องการความลึกระดับอ้างอิงหรือระดับการศึกษา ซึ่งจะใช้ตัดสินใจเรื่องงบประมาณต่อบท (per-chapter budget) คุณต้องการตั้งชื่อ skill ว่าอะไร และต้องการให้เก็บไว้ใน root ของ skill ใด นอกจากนี้ระบบจะแสดงการประมาณการจำนวน token และเวลาที่ใช้ก่อนเริ่มสร้างงาน และรอให้คุณยืนยัน
การรันแบบ headless จะไม่มีผู้ตอบคำถามเหล่านี้ การเรียกใช้ skill โดยผู้ใช้สามารถทำได้ใน claude -p: ให้ใส่ slash command ลงใน prompt string แล้ว Claude Code จะขยายค่าคำสั่งนั้นก่อนเริ่มการรัน ดังนั้นให้ตอบคำถามทั้งหมดไว้ใน prompt เดียวกัน
claude -p "/book-to-skill ~/library/platform-docs/ platform-handbook
The sources are technical. Use reference depth. Write the skill to
~/.claude/skills/. Do not publish it to GitHub. Proceed without asking me." \
--allowedTools "Bash,Read,Write,Edit"--allowedTools จะทำการอนุมัติเครื่องมือที่จำเป็นสำหรับการรันล่วงหน้า เพราะหากมีการแจ้งเตือนขอสิทธิ์ในขณะที่ไม่มี terminal เชื่อมต่ออยู่ การรันนั้นจะไม่เสร็จสิ้น การเพิ่ม --output-format json จะทำให้ผลลัพธ์แสดง total_cost_usd ซึ่งเป็นการประมาณการที่ฝั่งไคลเอนต์ ไม่ใช่ยอดเรียกเก็บเงินจริงของคุณ
กระบวนการดึงข้อมูลจะรวบรวมทุกแหล่งข้อมูลไว้ในไดเรกทอรีทำงานชั่วคราวภายใต้ /tmp ก่อนที่โมเดลจะอ่านข้อมูล และขั้นตอนสุดท้ายของการรันจะลบไดเรกทอรีดังกล่าวทิ้ง แหล่งข้อมูลใดที่ดึงข้อมูลไม่สำเร็จจะถูกข้ามไปเพื่อให้การประมวลผลแบบกลุ่ม (batch) ดำเนินต่อไปได้ ซึ่งหมายความว่าการรันอาจรายงานว่าสำเร็จแม้ว่าจะอ่านไฟล์ได้น้อยกว่าจำนวนที่คุณระบุไว้ ให้เปรียบเทียบรายการไฟล์ในรายงานฉบับสุดท้ายกับสิ่งที่อยู่ในโฟลเดอร์ หากบทใดหายไป มักเกิดจากแหล่งข้อมูลนั้นไม่ถูกอ่าน
ควรใช้เซิร์ฟเวอร์ที่คุณมั่นใจในการมอบสิทธิ์ให้ agent ในการรันงาน การรัน Claude Code อย่างปลอดภัยบน VPS ครอบคลุมรายละเอียดด้านการจัดการสิทธิ์ในส่วนนี้
ตำแหน่งที่ไฟล์ผลลัพธ์จะถูกจัดเก็บเพื่อให้ coding agent ของคุณค้นพบ
ทักษะที่สร้างขึ้นจะถูกจัดเก็บไว้ในรูทของทักษะ ซึ่งมีอยู่สองตำแหน่งที่สำคัญ:
~/.claude/skills/<skill-name>/เป็นตำแหน่งส่วนบุคคลและสามารถใช้งานได้ในทุกโปรเจกต์บนเครื่องนั้น.claude/skills/<skill-name>/จะอยู่ใน repository และถูกย้ายไปพร้อมกับ repository นั้น
ภายในตำแหน่งใดตำแหน่งหนึ่ง คุณจะพบ SKILL.md ซึ่งเป็นไดเรกทอรี chapters/ ที่มีไฟล์หนึ่งไฟล์ต่อหนึ่งบท รวมถึงไฟล์สนับสนุนอื่นๆ ชื่อของไดเรกทอรีคือคำสั่ง ดังนั้น ~/.claude/skills/platform-handbook/ จะให้ผลลัพธ์เป็น /platform-handbook และคุณสามารถตามด้วยหัวข้อหรือคำถามทั่วไปได้
ให้เลือกรูทโดยพิจารณาจากสิทธิ์การใช้งานแทนความสะดวก ทักษะที่สร้างจากหนังสือที่คุณซื้อควรอยู่ในไดเรกทอรีส่วนบุคคล ส่วนทักษะที่สร้างจากเอกสารที่ทีมของคุณเขียนเองควรอยู่ใน repository ซึ่งจะทำให้ การแชร์ทักษะเดียวข้ามหลาย repository กลายเป็นปัญหาถัดไปที่ต้องแก้ไข
ต้นทุนอย่างหนึ่งจะเพิ่มขึ้นตามจำนวนทักษะที่คุณเพิ่มเข้าไป คำอธิบายของแต่ละทักษะจะถูกเก็บไว้ในรายการทักษะเพื่อให้โมเดลตัดสินใจเลือกใช้งานได้ ข้อความคำอธิบายรวมจะถูกตัดทอนที่ 1,536 ตัวอักษรต่อรายการ และรายการโดยรวมจะมีงบประมาณจำกัด ทักษะจากหนังสือ 10 เล่มหมายถึงคำอธิบาย 10 รายการที่ต้องแย่งพื้นที่กัน สำหรับทักษะที่คุณเรียกใช้ด้วยชื่อเป็นประจำ ให้เพิ่มหนึ่งบรรทัดลงใน frontmatter ที่สร้างขึ้น:
---
name: platform-handbook
description: Frameworks and chapter index from the internal platform handbook.
disable-model-invocation: true
---ด้วย disable-model-invocation: true คำอธิบายจะถูกแยกออกจากบริบทโดยสิ้นเชิง และทักษะจะยังคงโหลดเต็มรูปแบบเมื่อคุณพิมพ์ /platform-handbook คุณจะสูญเสียการค้นพบอัตโนมัติ แต่จะได้หน้าต่างบริบทที่สะอาดขึ้น
การอนุญาตใช้งาน: MIT ครอบคลุมเฉพาะตัวแปลง ไม่ใช่ตัวหนังสือ
โปรดทำความเข้าใจในประเด็นนี้ให้ชัดเจน เนื่องจากความผิดพลาดในส่วนนี้ไม่ใช่ปัญหาทางเทคนิค
- สัญญาอนุญาต MIT ครอบคลุมเฉพาะโค้ดของตัวแปลงและนิยามทักษะ (skill definition) เท่านั้น โดยไม่ได้ระบุถึงเอกสารที่คุณนำมาประมวลผล
- การรันตัวแปลงกับหนังสือที่คุณซื้อมาบนฮาร์ดแวร์ที่คุณควบคุม ถือเป็นการจดบันทึกจากสำเนาส่วนตัวของคุณ
- การเผยแพร่ผลลัพธ์ถือเป็นการแจกจ่าย และสัญญาอนุญาต MIT ของเครื่องมือนี้ไม่ได้มอบสิทธิ์ให้คุณแจกจ่ายสิ่งที่ดัดแปลงมาจากหนังสือของผู้อื่น
- ผลลัพธ์ที่ได้ถือเป็นงานดัดแปลง (derivative work) โครงสร้างและเนื้อหาสำคัญในแต่ละบทยังคงถูกกำหนดโดยแหล่งที่มา และงานดัดแปลงยังคงอยู่ภายใต้ลิขสิทธิ์ของแหล่งที่มานั้น
- ทักษะที่สร้างขึ้นจากเนื้อหาที่คุณไม่สามารถแจกจ่ายต่อได้ จะต้องอยู่บนเครื่องที่สร้างมันขึ้นมาเท่านั้น ห้ามนำไปไว้ใน repository สาธารณะ หรือตลาดกลางสำหรับทีม
- คุณสามารถเผยแพร่ได้ก็ต่อเมื่อแหล่งที่มาเป็นของคุณหรือมีสัญญาอนุญาตแบบเปิด เช่น เอกสารที่ทีมของคุณเขียนขึ้นเอง หรือมาตรฐานที่เงื่อนไขอนุญาตให้แจกจ่ายต่อได้
เครื่องมือนี้ถูกสร้างขึ้นโดยคำนึงถึงประเด็นดังกล่าว โดยไม่มีการจัดส่งเนื้อหาหนังสือใดๆ การสกัดข้อมูลจะทำงานในเครื่อง (locally) และขั้นตอนการเผยแพร่จะถามถึงระดับการมองเห็นของ repository เป็นคำถามแยกต่างหาก ซึ่งต้องระบุคำว่า public หรือ private โดยตรงแทนการคาดเดา ให้ถือว่าคำถามนั้นเป็นการตัดสินใจเรื่องสัญญาอนุญาต เพราะนั่นคือสิ่งที่มันเป็น
คู่มือภายในองค์กรมีปัญหาอีกประการหนึ่ง คือมักจะมีข้อมูลรับรอง (credentials) แฝงอยู่มากกว่าที่ใครจะยอมรับ และตัวแปลงจะเปลี่ยนไฟล์ PDF ที่ไม่มีใครเปิดอ่านให้กลายเป็นไฟล์ที่เอเจนต์ของคุณอ่านได้ตามต้องการ โปรดตรวจสอบไฟล์ที่สร้างขึ้นก่อนทำการ commit และดูที่ การเก็บความลับให้พ้นจาก AI agents ของคุณ
การแปลงข้อมูลหนึ่งครั้งมีค่าใช้จ่ายเท่าใด
ตัวเลขด้านล่างนี้เป็นการวัดผลที่โครงการเผยแพร่เอง ไม่ใช่การวัดผลของเรา
The data behind this chart
[
{
"label": "Think Python 2",
"cost_usd": 0.88
},
{
"label": "Working Backwards",
"cost_usd": 0.96
},
{
"label": "Pro Git",
"cost_usd": 1.23
},
{
"label": "Moby-Dick",
"cost_usd": 1.42
}
]จากการวัดผลหนังสือจำนวน 4 เล่มของโครงการ การแปลงข้อมูลหนึ่งครั้งมีค่าใช้จ่ายอยู่ระหว่าง 0.88 ถึง 1.42 ดอลลาร์สหรัฐ โดย Pro Git มีค่าใช้จ่ายอยู่ที่ 1.23 ตัวเลขเหล่านี้วัดผลบน Claude Sonnet 4.5 โดยใช้จำนวน token จาก tiktoken ผ่าน cl100k_base และได้รับการเผยแพร่ใน docs/performance.md ของโครงการ ณ เดือนสิงหาคม 2026 ตัวเลขของคุณจะเปลี่ยนแปลงไปตามโมเดลและราคาที่คุณใช้งาน
นอกจากนี้ โครงการยังระบุว่าการตอบคำถามหนึ่งข้อโดยใช้ทักษะ (skill) จะใช้จำนวน token น้อยกว่าการคัดลอกเนื้อหาทั้งเล่มลงในบริบท (context) ถึง 24 ถึง 51 เท่า โปรดมองว่านี่เป็นแนวโน้มของการประหยัดค่าใช้จ่ายมากกว่าจะเป็นการรับประกัน เนื่องจากผลลัพธ์ขึ้นอยู่กับหนังสือและคำถามนั้นๆ อย่างไรก็ตาม ประเด็นเชิงโครงสร้างยังคงเดิม คือการแปลงข้อมูลจะจ่ายเพียงครั้งเดียว ในขณะที่การ dump ข้อมูลลงในบริบทจะต้องจ่ายซ้ำทุกครั้งที่มีการสนทนาที่จำเป็นต้องใช้หนังสือเล่มนั้น
ทำไมไม่ใช้วิธีแปะไฟล์ PDF หรือสร้างดัชนี RAG?
การแปะเนื้อหาใช้งานได้จริง และเป็นคำตอบที่เหมาะสมสำหรับคำถามเดียวเกี่ยวกับเอกสารหนึ่งฉบับ แต่วิธีนี้จะไม่เหมาะสมอีกต่อไปเมื่อคุณต้องใช้หนังสือเล่มเดิมทั้งในวันอังคารและวันศุกร์ เพราะคุณต้องเสียค่าใช้จ่ายตามขนาดเต็มของข้อมูลทุกครั้งที่ใช้งาน
การดึงข้อมูลหรือ RAG (retrieval augmented generation) จะทำการค้นหาในขณะที่มีการสอบถามและส่งคืนข้อความที่ตรงกับคำค้นหาของคุณ วิธีนี้มีประสิทธิภาพสูงเมื่อคุณต้องการประโยคที่ถูกต้องแม่นยำ แต่จะด้อยประสิทธิภาพเมื่อสิ่งที่เป็นประโยชน์คือกรอบแนวคิดที่กระจายอยู่ทั่วทั้งบท เนื่องจากไม่มีข้อความส่วนใดส่วนหนึ่งที่ครอบคลุมเนื้อหาทั้งหมดได้ การสร้าง Skill จะทำหน้าที่สกัดข้อมูลดังกล่าวเพียงครั้งเดียวในขั้นตอนการแปลงข้อมูล และจัดเก็บเป็นโครงสร้างแทนที่จะเก็บเป็นข้อความดิบ
ข้อจำกัดที่ต้องยอมรับคือ Skill ที่ถูกสร้างขึ้นเป็นสรุปแบบสูญเสียข้อมูล (lossy summary) ที่เขียนโดยโมเดล มันเป็นเพียงเครื่องมือช่วยศึกษา และแหล่งข้อมูลต้นฉบับยังคงเป็นสิ่งที่สำคัญที่สุด ในกรณีที่ถ้อยคำที่ถูกต้องแม่นยำมีผลทางกฎหมายหรือระเบียบปฏิบัติ ให้เก็บไฟล์ PDF ไว้และอ้างอิงจากไฟล์นั้นโดยตรง การเปรียบเทียบ Skill กับ MCP servers และไฟล์กฎ จะครอบคลุมถึงสถานการณ์ที่แต่ละแนวทางเหมาะสมที่สุด
รูปแบบความล้มเหลวและข้อความที่คุณจะพบ
ไฟล์ PDF ที่สแกนมาไม่แสดงผลลัพธ์ใดๆ ตัวดึงข้อมูลจะตรวจสอบหน้าแรกๆ ว่ามีเลเยอร์ข้อความหรือไม่ หากไม่มีจะหยุดทำงานพร้อมแสดงคำอธิบาย แทนที่จะประมวลผลไฟล์รูปภาพจำนวน 400 หน้าให้เสียเวลา ให้รัน ocrmypdf input.pdf output.pdf ก่อน แล้วจึงส่งไฟล์ผลลัพธ์ที่ได้เข้าไป
pip ปฏิเสธการติดตั้ง error: externally-managed-environment บน Ubuntu 24.04 คือการที่ apt ปกป้องระบบ Python ให้ใช้ virtual environment ตามที่ระบุไว้ข้างต้น หรือติดตั้ง poppler-utils แล้วข้ามการใช้ pip ไปเลย
การแบ่งบทผิดพลาด ระบบตรวจจับบทจะมองหาหัวข้อที่ชัดเจน เช่น Chapter 7 และรูปแบบภาษาอื่นๆ ของคำดังกล่าว หนังสือที่ใช้เพียงชื่อหัวข้อธรรมดาหรือเลขโรมันจะทำให้การแบ่งส่วนผิดพลาด วิธีแก้ไขคือระบุตำแหน่งเริ่มต้นของบทให้โปรแกรมทราบ แทนที่จะคาดหวังให้ระบบเดาเอง
คำสั่งไม่ปรากฏ หาก /book-to-skill ไม่แสดงใน autocomplete หมายความว่าไดเรกทอรี skills ถูกสร้างขึ้นหลังจากที่คุณเริ่ม session นี้ ให้รีสตาร์ท agent
Docling ใช้เวลานานเกินไป ด้วยความเร็วประมาณ 1.5 วินาทีต่อหน้า หนังสือเล่มยาวอาจใช้เวลาประมวลผลนานหลายนาที ซึ่งบนเซิร์ฟเวอร์ที่ใช้งานร่วมกัน การประมวลผลนี้จะแย่งทรัพยากรกับบริการอื่นที่คุณโฮสต์อยู่ ให้ตอบว่า "text-heavy" เมื่อระบบถามถึงประเภทเนื้อหา หรือส่งค่า --mode text เมื่อคุณรัน scripts/extract.py ด้วยตนเอง --mode technical คือตัวเลือกที่ใช้เลือก docling
แหล่งข้อมูลหายไปโดยไม่มีการแจ้งเตือน ไฟล์ที่ไม่สามารถอ่านได้จะถูกข้ามไปเพื่อให้การประมวลผลแบบกลุ่มทำงานจนจบ จากนั้นระบบจะรายงานว่าสำเร็จโดยประมวลผลแหล่งข้อมูลจำนวนน้อยกว่าที่คุณส่งให้ และจุดเดียวที่จะเห็นความผิดปกตินี้คือในรายการไฟล์ (file inventory) ในรายงานฉบับสุดท้าย
ประยุกต์ใช้รูปแบบเดียวกันด้วยตนเอง
เครื่องมือนี้เป็นเพียงความสะดวกสบาย โครงสร้างต่างหากคือส่วนที่นำไปปรับใช้ได้จริง และโปรแกรมแก้ไขข้อความ (text editor) สามารถใช้สร้างโครงสร้างนี้สำหรับเอกสารอ้างอิงใดๆ ที่คุณมี
- เขียนไฟล์รายการหลัก (entry file) หนึ่งไฟล์และเก็บไว้ใกล้กับโทเค็น 4,000 ที่ตัวแปลงข้อมูลกำหนดเป้าหมายไว้ ใส่แนวคิดที่ตั้งชื่อไว้ลงในไฟล์พร้อมกับคำจำกัดความที่แม่นยำ รวมถึงดัชนีที่ระบุรายการไฟล์รายละเอียดทั้งหมดและหัวข้อที่ไฟล์เหล่านั้นบรรจุอยู่
- แบ่งเนื้อหาออกเป็นไฟล์ที่มีขนาดประมาณ 1,000 โทเค็น โดยให้หนึ่งไฟล์ต่อหนึ่งหัวข้อ และตั้งชื่อไฟล์ให้สื่อถึงเนื้อหาภายในอย่างชัดเจน
- อธิบายไฟล์เหล่านั้นแต่ละไฟล์จากไฟล์รายการหลัก โดยระบุไว้ในประโยคที่บอกว่าควรเปิดอ่านเมื่อใด
ขั้นตอนที่ 3 คือขั้นตอนที่ผู้คนมักข้ามไป และเป็นขั้นตอนที่ทำให้รูปแบบนี้ใช้งานได้จริง ตัวแทน (agent) จะเลือกไฟล์ที่จะเปิดโดยการอ่านจากดัชนี ดังนั้นไฟล์ที่ไม่มีการอธิบายไว้ในดัชนีจะเป็นไฟล์ที่ตัวแทนไม่เคยเปิดอ่าน ดัชนีคือตัวผลิตภัณฑ์ ส่วนไฟล์บทต่างๆ คือที่จัดเก็บข้อมูล
รักษาไฟล์รายการหลักให้อยู่ภายในงบประมาณการบีบอัดข้อมูล (compaction budget) แล้วโครงสร้างทั้งหมดจะคงอยู่ได้ตลอดเซสชันที่ยาวนาน กฎข้อนี้ใช้ได้ไม่ว่าไฟล์เหล่านั้นจะถูกสร้างโดยตัวแปลงข้อมูลหรือสร้างโดยตัวคุณเองก็ตาม
FAQ
ฉันสามารถเผยแพร่ skill ที่สร้างจากหนังสือที่ซื้อมาได้หรือไม่?
ไม่ได้ เว้นแต่ว่าใบอนุญาตของหนังสือเล่มนั้นจะอนุญาตให้แจกจ่ายต่อได้ ใบอนุญาต MIT ของตัวแปลงครอบคลุมเฉพาะโค้ดของตัวแปลงเท่านั้น ไม่รวมถึงเนื้อหาที่คุณป้อนเข้าไป และ skill ที่สร้างขึ้นถือเป็นงานดัดแปลงจากหนังสือเล่มนั้น ให้เก็บไว้ใน ~/.claude/skills/ บนเครื่องของคุณเอง การเผยแพร่สามารถทำได้สำหรับเอกสารที่คุณเขียนขึ้นเองหรือแหล่งข้อมูลที่ได้รับอนุญาตแบบเปิดเท่านั้น และเครื่องมือจะถามถึงการมองเห็นของ repository เป็นคำถามแยกต่างหาก โดยยอมรับเฉพาะ public หรือ private เท่านั้น เพื่อให้มั่นใจว่าการตัดสินใจนั้นเป็นไปโดยเจตนา
ฉันจำเป็นต้องใช้ docling หรือแค่ pdftotext ก็เพียงพอแล้ว?
pdftotext จาก poppler-utils เพียงพอสำหรับเนื้อหาที่เป็นข้อความและทำงานได้เกือบจะทันที ให้ติดตั้ง docling เมื่อคุณค่าของหนังสืออยู่ที่ตารางและรายการโค้ด เพราะตัวดึงข้อความธรรมดาจะตัดส่วนเหล่านั้นทิ้งไป สิ่งที่ต้องแลกคือความเร็ว โดยโปรเจกต์วัดประสิทธิภาพของ docling ไว้ที่ประมาณ 1.5 วินาทีต่อหน้า ดังนั้นคู่มือขนาด 300 หน้าจะใช้เวลาประมวลผลของ CPU บน VPS นานหลายนาที
ทำไม pip ถึงแจ้งเตือน externally-managed-environment บน VPS ของฉัน?
Ubuntu 24.04 และ Debian เวอร์ชันปัจจุบันกำหนดให้ Python ของระบบถูกจัดการโดย apt ดังนั้น pip จึงปฏิเสธการติดตั้งลงในระบบและแสดงข้อความ error: externally-managed-environment ให้สร้าง virtual environment ด้วย python3 -m venv ~/.venvs/book-to-skill จากนั้นเปิดใช้งาน ติดตั้งตัวดึงข้อมูลในนั้น แล้วจึงเริ่ม agent ของคุณจาก shell เดียวกันนี้ ตัว skill จะเรียกใช้ python3 ดังนั้นมันจะใช้ interpreter ตัวใดก็ตามที่อยู่ใน PATH ของคุณ ซึ่งในขณะนี้คือตัวที่อยู่ใน virtual environment
ทำไม skill ที่ฉันสร้างขึ้นถึงไม่แสดงเป็น slash command?
มีสาเหตุสองประการ ชื่อคำสั่งมาจากชื่อไดเรกทอรี ดังนั้น skill จะต้องอยู่ใน ~/.claude/skills/<name>/SKILL.md หรือ .claude/skills/<name>/SKILL.md โดยที่ SKILL.md ต้องสะกดให้ถูกต้องตามนั้น หาก path ถูกต้องแล้ว ให้รีสตาร์ท agent ตัว Claude Code จะตรวจพบการแก้ไขภายในไดเรกทอรี skill ที่มันเฝ้าดูอยู่แล้ว แต่ไดเรกทอรี skills ที่ถูกสร้างขึ้นหลังจากเริ่ม session จะไม่ถูกเฝ้าดูเลย