Mirage แปลง S3 · Google Drive · Slack ให้เป็นโฟลเดอร์เดียวกัน ให้ AI agent สั่งงานข้ามบริการด้วย grep กับ cp เดิม รองรับ backend ราว 50 ตัว
Mirage คือ virtual filesystem สำหรับ AI agent ที่รวม S3 · Google Drive · Slack · Gmail มาไว้เป็นโฟลเดอร์ชุดเดียว ต่อได้ราว 50 บริการ ส่วนศัพท์ที่ agent ต้องเรียนเพิ่ม คือศูนย์คำ เพราะมันสั่งงานด้วยคำสั่งไฟล์ชุดที่รู้จักอยู่แล้ว

Mirage ทำให้คำสั่ง grep ที่เราใช้ค้นคำในไฟล์บนเครื่องตัวเอง วิ่งเข้าไปค้นข้อความในห้องแชท Slack ได้ตรงๆ ตัวคำสั่งไม่ได้เปลี่ยนสักตัวอักษร สิ่งที่เปลี่ยนมีอย่างเดียวคือ path ที่ต่อท้ายมัน
มันเป็นโปรเจกต์โอเพนซอร์สของทีม strukto-ai ที่ทำตัวเป็น virtual filesystem หรือระบบไฟล์จำลอง หน้าที่ของมันคือแปลงหน้าตาบริการอื่นให้กลายเป็นโฟลเดอร์ แล้วพาทุกอันมาโผล่อยู่ในโครงสร้างโฟลเดอร์เดียวกัน
บริการที่นำมาเชื่อมต่อได้มีราว 50 ตัว ตั้งแต่ที่เก็บไฟล์บนคลาวด์อย่าง S3 · Google Drive ไปจนถึงกล่องอีเมลอย่าง Gmail ห้องแชทอย่าง Slack และที่เก็บข้อมูลอย่าง Redis
ตัวเลขบนหน้าโปรเจกต์ ณ วันที่เขียนอยู่ที่ 3.4k ดาว · 248 fork · ผู้ร่วมพัฒนา 25 คน เปิดโค้ดด้วยสัญญาอนุญาต Apache-2.0
เรื่องนี้จะสะกิดใจคนที่เริ่มต่อ AI agent เข้ากับงานจริง แล้วพบว่าตัวเชื่อมในมือเยอะขึ้นเรื่อยๆ จนเริ่มจำไม่ได้ว่าตัวไหนทำอะไร
หนึ่งบริการ หนึ่ง MCP พอครบสิบตัวก็เริ่มดูแลไม่ไหว
AI agent ไม่ได้เกิดมาพร้อมสิทธิ์เข้าถึงข้อมูลของเรา มันเห็นเฉพาะสิ่งที่มีคนยื่นให้ ตัวเชื่อมจึงเป็นงานแรกเสมอ และทางที่ใช้กันมีสองทางหลัก คือเขียนโค้ดเรียกชุดเครื่องมือสำหรับนักพัฒนาที่เรียกกันว่า SDK ของบริการนั้น กับหา MCP server ที่เป็นตัวเชื่อมสำเร็จรูปของบริการนั้นมาต่อ
งานของ MCP คือเป็นสะพานพา agent ออกไปเข้าถึงข้อมูลสดและลงมือทำกับโลกข้างนอก ต่างจาก Agent Skills ที่เป็นความรู้และสคริปต์อยู่ในเครื่อง ความต่างของสองอย่างนี้แยกไว้ละเอียดใน Agent Skills กับ MCP ทำคนละงานกัน ฝั่งผู้ให้บริการเองก็ทยอยทำตัวเชื่อมของตัวเองออกมา อย่าง LINE Bot MCP Server ที่ให้ AI สั่ง LINE OA ส่งข้อความ ก็ดูแลอยู่บริการเดียว
ปัญหาไม่ได้อยู่ที่ตัวไหนตัวหนึ่ง แต่อยู่ที่การสะสม พอมีสิบบริการก็แปลว่ามีของให้ดูแลสิบชุด แต่ละชุดมีชื่อฟังก์ชันของตัวเอง มีวิธีขอสิทธิ์ของตัวเอง และคืนข้อมูลกลับมาคนละรูปแบบ agent จึงต้องรู้จักวิธีคุยเป็นสิบแบบ ทั้งที่งานปลายทางอาจเป็นแค่การไปหยิบไฟล์มาหนึ่งไฟล์
สิ่งที่ Mirage เสนอคือตัดตรงนั้นทิ้ง แล้วให้ทุกบริการพูดภาษาเดียวกันหมด ภาษาที่ว่าคือระบบไฟล์
ทำไม Mirage ถึงเลือกโฟลเดอร์เป็นภาษากลางของ AI agent

โจทย์ที่ทีมนี้ตั้งไว้ตรงไปตรงมา ถ้าโมเดลอ่านคำสั่งจัดการไฟล์อย่าง grep · cp · find ออกอยู่แล้ว ก็ไม่ต้องสอนศัพท์ใหม่ให้มันอีก เอาบริการมาแต่งตัวให้อยู่ในรูปที่มันคุ้นแทน
การใช้งานจริงเริ่มจากสิ่งเดียว คือตารางที่บอกว่า path ไหนแทนบริการไหน ในโค้ดจะหน้าตาประมาณนี้
const ws = new Workspace({
'/data': new RAMResource(),
'/s3': new S3Resource({ bucket: 'logs' }),
'/slack': new SlackResource({ token: process.env.SLACK_BOT_TOKEN! }),
})
บรรทัดแรกจอง /data ไว้เป็นพื้นที่ทำงานชั่วคราวในหน่วยความจำ บรรทัดที่สองผูก /s3 เข้ากับถังเก็บไฟล์บนคลาวด์ชื่อ logs และบรรทัดที่สามผูก /slack เข้ากับ token ที่ใช้เข้าห้องแชทของ Slack
พอผูกเสร็จ Mirage จะไปดึงรายการของฝั่งบริการมาแสดงเป็นรายชื่อในโฟลเดอร์ ห้องแชทหนึ่งห้องกลายเป็นโฟลเดอร์หนึ่งโฟลเดอร์ อย่างห้อง general มีที่อยู่เป็น /slack/channels/general__C04QX/ ส่วนข้อความในห้องก็กลายเป็นของที่เปิดอ่านได้แบบเดียวกับไฟล์ ส่วนฝั่ง /s3 ก็เช่นกัน ไฟล์ในถังคลาวด์โผล่มาเป็นไฟล์ในโฟลเดอร์
สิ่งที่ agent เห็นตอนทำงานจึงเหลือโครงสร้างเดียว คือโฟลเดอร์กับไฟล์ ไม่มีคำว่าแชนแนล ไม่มีคำว่าบัคเก็ต ไม่มีชื่อฟังก์ชันของแต่ละเจ้าให้ต้องจำ
คำสั่งเดิมอย่าง grep กับ cp เปลี่ยนแค่ path ข้างหลัง
เอกสารของโปรเจกต์ยกตัวอย่างไว้สามบรรทัด ทั้งหมดเป็นคำสั่งที่คนทำงานกับไฟล์ใช้กันมานาน
await ws.execute('grep -r alert /slack/channels/general__C04QX/ | wc -l')
await ws.execute('cp /s3/report.csv /data/local.csv')
await ws.execute('wc -l $(find /s3/data -name "*.jsonl")')
บรรทัดแรกไล่หาคำว่า alert ทุกข้อความในห้องแชทนั้น แล้วส่งผลที่เจอต่อไปให้ตัวนับบรรทัด ได้ออกมาเป็นจำนวนข้อความที่มีคำนี้ เครื่องหมาย | ตรงกลางคือการต่อท่อส่งข้อมูล ผลของคำสั่งซ้ายจะส่งต่อไปเป็นข้อมูลตั้งต้นให้คำสั่งขวาทันที
บรรทัดที่สองก๊อปไฟล์รายงานจากคลาวด์ลงมาไว้ในโฟลเดอร์ทำงาน ส่วนบรรทัดที่สามไล่หาไฟล์นามสกุล jsonl ทั้งหมดในคลาวด์ แล้วนับจำนวนบรรทัดของทุกไฟล์ที่เจอ
คำสั่งพวกนี้ไม่ได้เก่งขึ้น มันแค่ไม่ต้องเปลี่ยน งานที่เมื่อก่อนต้องเรียก API ของ Slack แล้วมาเขียนโค้ดนับเอง ตอนนี้เป็นบรรทัดเดียวกับที่ใช้ค้นไฟล์ในเครื่อง และเพราะทุกอย่างเป็นไฟล์เหมือนกันหมด การต่อของจากคนละค่ายเข้าด้วยกันจึงเกิดในคำสั่งเดียว ไม่ต้องมีโค้ดกลางคอยแปลงข้อมูลจากฝั่งหนึ่งไปอีกฝั่ง
workspace ก๊อปได้ทั้งกล่อง กับแคชสองชั้นที่ตัดการยิงเน็ตซ้ำ

ตารางที่จับคู่ path กับบริการทั้งหมดอยู่รวมกันในสิ่งที่ Mirage เรียกว่า workspace มองมันเป็นกล่องงานหนึ่งใบที่รู้จักทุกทางเชื่อมของงานนั้นก็ได้ กล่องใบนี้คัดลอกได้ เก็บเป็นเวอร์ชันได้ หรือทำ snapshot บันทึกสถานะทั้งใบไว้ก็ได้ เอกสารระบุว่างานของ agent ย้ายข้ามเครื่องได้โดยไม่ต้องเริ่มใหม่หรือตั้งค่าระบบใหม่
mirage workspace snapshot demo demo.tar
mirage workspace load demo.tar --id demo-restoredผลของสองบรรทัดนี้คือกล่องงานทั้งใบกลายเป็นไฟล์เดียว หยิบไปเปิดที่เครื่องอื่นแล้วทำงานต่อจากจุดเดิม แทนที่จะต้องไล่ผูก token ทีละบริการใหม่ทั้งชุด
ของอีกชิ้นที่อยู่ในกล่องเดียวกันคือแคชสองชั้น ชั้นแรกคือ index cache ที่จำรายการไฟล์และข้อมูลกำกับเอาไว้ การเดินดูโฟลเดอร์ครั้งแรกจะยิงไปถามบริการต้นทางจริง ครั้งต่อไปหยิบจากรายการที่จำไว้จนกว่าจะหมดอายุ ค่าเริ่มต้นอยู่ที่ 10 นาที
ชั้นที่สองคือ file cache ที่เก็บตัวไฟล์ อ่านรอบแรกดึงมาจากต้นทาง รอบต่อไปอ่านจากแคช ค่าเริ่มต้นอยู่ที่ 512 MB ทั้งสองชั้นเริ่มต้นทำงานอยู่ในหน่วยความจำของโปรเซสตัวเอง ไม่ต้องตั้งค่าอะไรเพิ่ม และถ้าอยากให้หลายโปรเซสหรือหลายเครื่องใช้แคชก้อนเดียวกัน ก็ย้ายไปเก็บบน Redis ได้
ต่อกับ Claude Code · LangChain · Vercel AI SDK ได้ทางไหนบ้าง
เอกสารของโปรเจกต์แบ่งของที่ต่อได้ไว้สามกลุ่ม เลือกดูตามว่าตอนนี้เราทำงานอยู่ฝั่งไหน
- เขียนเองด้วย Python ต่อกับ OpenAI Agents SDK · LangChain · Pydantic AI · CAMEL · OpenHands · Agno
- เขียนเองด้วย TypeScript ต่อกับ Vercel AI SDK · OpenAI Agents SDK · LangChain · Mastra
- ใช้ผู้ช่วยเขียนโค้ดสำเร็จรูป ต่อกับ Claude Code · Codex · Grok Build · OpenCode · Pi
กลุ่มสุดท้ายคือกลุ่มที่คนทำงานทั่วไปน่าจะได้ใช้ก่อนเพื่อน เพราะไม่ต้องเขียนโค้ดเชื่อมเอง หน้าโปรเจกต์ระบุทางเข้าไว้สี่ทาง คือตัวเชื่อมสำเร็จที่ทำมาให้ตรงรุ่น ปลั๊กอินที่ติดตั้งเพิ่ม การต่อผ่าน MCP และการเชื่อมต่อไดรฟ์แบบ FUSE ทางสุดท้ายนี้ทำให้โฟลเดอร์พวกนี้โผล่ขึ้นมาในเครื่องจริงๆ จนโปรแกรมอื่นเปิดได้เหมือนไฟล์ธรรมดา
MCP ไม่ได้หายไปจากภาพ มันกลายเป็นหนึ่งในทางเข้า ส่วนของที่ลดลงคือจำนวนตัวเชื่อมที่ต้องดูแลอยู่หลังทางเข้านั้น
อีกเรื่องที่ทำให้เอาไปวางในระบบเดิมได้ง่ายคือ SDK ทั้งฝั่ง Python และ TypeScript รันอยู่ในโปรเซสเดียวกับแอปได้เลย ไม่ต้องแยกโปรเซสใหม่ขึ้นมารันต่างหาก
ติดตั้ง Mirage ด้วย uv หรือ npm แล้วสั่งงานจากบรรทัดคำสั่ง
ก่อนพิมพ์คำสั่งแรก เช็กเครื่องสามข้อ ฝั่ง Python ต้องเป็นเวอร์ชัน 3.11 ขึ้นไป ฝั่ง TypeScript ต้องมี Node.js เวอร์ชัน 20 ขึ้นไป และตัวเครื่องต้องเป็น macOS หรือ Linux ส่วนการเชื่อมต่อไดรฟ์แบบ FUSE จะใช้ได้ก็ต่อเมื่อแพลตฟอร์มนั้นรองรับ
ฝั่ง Python ติดตั้งบรรทัดเดียว ได้ทั้งไลบรารีและตัวสั่งงานผ่านบรรทัดคำสั่งมาพร้อมกัน
uv add mirage-aiฝั่ง TypeScript แยกเป็นสามแพ็กเกจตามที่จะเอาไปวางไว้ตรงไหน ตัวแรกสำหรับเซิร์ฟเวอร์และเครื่องมือบรรทัดคำสั่งบน Node.js ตัวที่สองสำหรับงานที่รันในเบราว์เซอร์ ส่วนตัวที่สามคือชุดตัวเชื่อมสำหรับเฟรมเวิร์กฝั่ง agent
npm install @struktoai/mirage-node
npm install @struktoai/mirage-browser
npm install @struktoai/mirage-agentsถ้าอยากลองแบบไม่แตะโค้ดเลย ติดตั้งเฉพาะตัวสั่งงานผ่านบรรทัดคำสั่งก็ได้
curl -fsSL https://strukto.ai/mirage/install.sh | shจากนั้นสร้างกล่องงานหนึ่งใบจากไฟล์ตั้งค่า แล้วสั่งงานแรกได้เลย
mirage workspace create ws.yaml --id demo
mirage execute --workspace_id demo --command "cp /s3/report.csv /data/report.csv"บรรทัดล่างคือคำสั่งก๊อปไฟล์ธรรมดา ต่างกันแค่ต้นทางอยู่บนคลาวด์
macOS กับ Linux เท่านั้น และอีกสองข้อที่ต้องเผื่อใจ
ข้อแรกคือเรื่องเครื่อง เอกสารระบุความต้องการไว้แค่ macOS กับ Linux ไม่ได้เขียนถึงระบบปฏิบัติการอื่นเอาไว้ ใครทำงานบนเครื่องนอกสองกลุ่มนี้จึงต้องหาทางอื่นเอง
ข้อที่สองคือเรื่องการอ่านไฟล์เฉพาะทาง Mirage ไม่ได้แถมตัวแปลงไฟล์แต่ละชนิดมาให้ตั้งแต่แรก ไฟล์ตารางขนาดใหญ่แบบ Parquet จะอ่านออกมาหน้าตาแบบไหน ขึ้นอยู่กับว่าเราลงทะเบียนคำสั่งไว้ยังไง ข้อนี้มองได้สองมุม ข้อดีคือแต่งได้ละเอียดถึงระดับว่าไฟล์ชนิดนี้บนบริการนี้ให้อ่านออกมาแบบไหน อย่าง PDF จะให้คืนออกมาเป็นข้อความที่แยกหน้าไว้แล้วก็ทำได้ ส่วนข้อที่ต้องเผื่อใจคือของพวกนี้ไม่ได้มีมาให้ตั้งแต่แรก ต้องมีคนเขียนมันขึ้นมาครั้งหนึ่ง
ข้อที่สามคือความใหม่ของตัวโปรเจกต์เอง ในหน้าโปรเจกต์มีอัปเดตทั้งหมด 4 release และตัวล่าสุดติดป้ายว่า Mirage 0.0.4 เลขชุดนี้บอกว่าโปรเจกต์ยังอยู่ช่วงเริ่มต้น เหมาะกับการเอาไปลองกับงานที่พังแล้วยังแก้ทัน มากกว่าจะยกไปวางกลางระบบที่หยุดไม่ได้
ก่อนจะต่อของชิ้นต่อไปเข้ากับ AI
คราวหน้าที่มีคนบอกว่าเครื่องมือตัวนี้ต่อกับ AI ได้ ลองถามกลับสั้นๆ ว่ามันมาพร้อมศัพท์ใหม่ที่ต้องสอนโมเดลกี่คำ
คำตอบข้อนั้นบอกต้นทุนระยะยาวได้ตรงกว่ารายการฟีเจอร์ทั้งหน้า เพราะฟีเจอร์เป็นของที่ได้มาตั้งแต่วันแรก ส่วนศัพท์ใหม่เป็นของที่ต้องคอยดูแลทุกครั้งที่ระบบขยับ
ที่มา: โปรเจกต์ strukto-ai/mirage บน GitHub
ชอบเรื่องแนวนี้ มีอีบุ๊คฟรีให้อ่านต่อ
สร้าง Claude Skill แบบไม่ต้องรู้โค้ด คู่มือสร้าง Claude Skill ของคุณเองด้วยการคุยกับ Claude Code เป็นภาษาไทย
กดสมัครแล้วเราจะส่งเทคนิค AI และของแจกใหม่ๆ ให้ทางอีเมล เลิกรับได้ตลอด
Claude Cowork · The Business Playbook

ฉบับภาษาไทย 15 บท เรียนรู้ผ่านโปรเจกต์จำลองต่อเนื่องทั้งเล่ม ตั้งแต่ตั้งค่า Workspace จัดการไฟล์ เชื่อมแอป ตั้งระบบอัตโนมัติ จนถึงสร้าง Plugin


