SSD Nodes Learn 🎉 VPS เริ่ม $5.50/เดือน
คู่มือ Matt Connorโดย Matt Connor

วิธีเปลี่ยนไฟล์เอกสารเทคนิคให้เป็นทักษะสำหรับ 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 เพียงครั้งเดียว บวกกับเนื้อหาในบทที่คำถามนั้นอ้างถึงจริงเท่านั้น โครงการนี้จึงกำหนดงบประมาณสำหรับแต่ละไฟล์ที่สร้างขึ้น

ChartDocumented token budget per generated file, book-to-skill v1.4.0
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-utils
  • pypdf และ pdfminer.six เป็นตัวสำรองของ Python สำหรับไฟล์ PDF
  • docling ใช้สำหรับ PDF ทางเทคนิคที่เน้นตารางและรายการโค้ด โปรเจกต์นี้วัดความเร็วไว้ที่ประมาณ 1.5 วินาทีต่อหน้า
  • ebooklib ร่วมกับ beautifulsoup4 ใช้สำหรับอ่านไฟล์ EPUB อย่างถูกต้อง หากไม่มีตัวเลือกเหล่านี้ เครื่องมือจะเปลี่ยนไปใช้ตัวอ่าน zipfile ในไลบรารีมาตรฐานแทน
  • python-docx ใช้สำหรับอ่านไฟล์ DOCX และ striprtf ใช้สำหรับอ่านไฟล์ RTF
  • ebook-convert ของ Calibre จำเป็นสำหรับไฟล์ MOBI และ AZW
  • ocrmypdf ใช้ทำ 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]"
claude

repository ได้ประกาศส่วนเสริมไว้คือ 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 ของคุณ

การแปลงข้อมูลหนึ่งครั้งมีค่าใช้จ่ายเท่าใด

ตัวเลขด้านล่างนี้เป็นการวัดผลที่โครงการเผยแพร่เอง ไม่ใช่การวัดผลของเรา

ChartCost to convert one full-length book, as published by the project
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) สามารถใช้สร้างโครงสร้างนี้สำหรับเอกสารอ้างอิงใดๆ ที่คุณมี

  1. เขียนไฟล์รายการหลัก (entry file) หนึ่งไฟล์และเก็บไว้ใกล้กับโทเค็น 4,000 ที่ตัวแปลงข้อมูลกำหนดเป้าหมายไว้ ใส่แนวคิดที่ตั้งชื่อไว้ลงในไฟล์พร้อมกับคำจำกัดความที่แม่นยำ รวมถึงดัชนีที่ระบุรายการไฟล์รายละเอียดทั้งหมดและหัวข้อที่ไฟล์เหล่านั้นบรรจุอยู่
  2. แบ่งเนื้อหาออกเป็นไฟล์ที่มีขนาดประมาณ 1,000 โทเค็น โดยให้หนึ่งไฟล์ต่อหนึ่งหัวข้อ และตั้งชื่อไฟล์ให้สื่อถึงเนื้อหาภายในอย่างชัดเจน
  3. อธิบายไฟล์เหล่านั้นแต่ละไฟล์จากไฟล์รายการหลัก โดยระบุไว้ในประโยคที่บอกว่าควรเปิดอ่านเมื่อใด

ขั้นตอนที่ 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 จะไม่ถูกเฝ้าดูเลย