ติดตั้งใช้งานออฟไลน์
กลุ่มผู้อ่านเป้าหมาย: ผู้ดูแลระบบไอที (IT administrator) หรือผู้รับผิดชอบด้านเทคนิคที่ดูแลการติดตั้ง ส่วนผู้ใช้งานทั่วไปเพียงเปิด URL อินทราเน็ตที่ผู้ดูแลระบบจัดเตรียมไว้ก็พอ ไม่จำเป็นต้องอ่านเอกสารฉบับนี้
สถานการณ์ที่เหมาะสม: อินทราเน็ตขององค์กร เครือข่ายของหน่วยงานราชการ ระบบของธนาคารและสถาบันการเงิน สภาพแวดล้อมที่ต้องปฏิบัติตาม PDPA หรือกฎหมายคุ้มครองข้อมูลส่วนบุคคล สถานพยาบาลที่ดูแลข้อมูลผู้ป่วย เครือข่ายสถานศึกษา รวมถึงสภาพแวดล้อมอื่น ๆ ที่ ไม่สามารถหรือไม่สะดวกในการเข้าถึงอินเทอร์เน็ตภายนอก
ไม่มีแบ็กเอนด์ ไม่ต้องลงทะเบียน — ข้อมูลทั้งหมดเก็บไว้ในเบราว์เซอร์ของผู้ใช้แต่ละคน เมื่อติดตั้งเสร็จ ทีมงานในอินทราเน็ตเพียงเปิดเบราว์เซอร์ก็ใช้งานได้ทันที
วิธีการใช้งานของทีม
เวอร์ชันออฟไลน์เป็นเว็บไซต์แบบ static ล้วน เมื่อติดตั้งบนเซิร์ฟเวอร์อินทราเน็ตแล้ว สมาชิกในทีมเข้าถึง URL อินทราเน็ตผ่านเบราว์เซอร์ได้ทันที:
- ผู้ดูแลระบบ ติดตั้งเวอร์ชันออฟไลน์ลงบนเซิร์ฟเวอร์อินทราเน็ต (เช่น
http://192.168.1.100:3000) - สมาชิกในทีม เปิด URL ดังกล่าวบนเบราว์เซอร์ เพื่อเรียกดู ค้นหา และคัดลอก prompt ได้ทันที
- คอลเลกชันและ prompt ที่กำหนดเองของแต่ละคน เก็บไว้ในเบราว์เซอร์ของตนเอง แยกจากกันโดยสิ้นเชิง
- ไม่ต้องลงทะเบียนบัญชี ไม่ต้องติดตั้งซอฟต์แวร์ใด ๆ เปิดแล้วใช้ได้เลย
คลัง prompt (prompt ที่คัดสรร) เป็นข้อมูล static ที่ถูก bundle ตอนสร้าง build ดังนั้นผู้ใช้ทุกคนจะเห็นเนื้อหาเหมือนกัน ส่วนคอลเลกชัน, prompt ที่กำหนดเอง, การเรียงลำดับ และแท็กของผู้ใช้แต่ละคน จะเก็บไว้ใน localStorage ของเบราว์เซอร์ตนเอง แยกจากกันโดยอิสระ
ความแตกต่างกับเวอร์ชันออนไลน์
| ฟังก์ชัน | เวอร์ชันออนไลน์ | เวอร์ชันออฟไลน์ |
|---|---|---|
| เรียกดู / ค้นหา / กรอง prompt | ใช่ | ใช่ |
| คัดลอก prompt | ใช่ | ใช่ |
| จัดการคอลเลกชัน | เก็บที่เซิร์ฟเวอร์ | เก็บที่เบราว์เซอร์ |
| Prompt ที่กำหนดเอง | เก็บที่เซิร์ฟเวอร์ | เก็บที่เบราว์เซอร์ |
| คอลเลกชันของฉัน (ลากวางจัดเรียง, แท็ก) | ใช่ | ใช่ |
| รองรับหลายภาษา (18 ภาษา) | ใช่ | ใช่ |
| นำเข้า / ส่งออกข้อมูล | ใช่ | ใช่ (รูปแบบใช้ร่วมกันได้) |
| หน้ารายละเอียด prompt | ใช่ | ใช่ (ข้อมูล static, ไม่มีคอมเมนต์) |
| ลงทะเบียน / เข้าสู่ระบบ | ใช่ | ไม่ (ไม่ต้องมีบัญชี) |
| รายการ prompt ชุมชน / โหวต | ใช่ | ไม่ |
| คอมเมนต์และความคิดเห็น | ใช่ | ไม่ |
การจัดเก็บข้อมูล
ข้อมูลของผู้ใช้แต่ละคนถูกเก็บไว้ใน localStorage ของ เบราว์เซอร์ตนเอง โดยไม่เกี่ยวข้องกับเซิร์ฟเวอร์:
| ข้อมูล | คีย์ที่เก็บ | คำอธิบาย |
|---|---|---|
| รายการคอลเลกชัน | local_favorites | อาร์เรย์ของ ID prompt ที่รวบรวมไว้ |
| Prompt ที่กำหนดเอง | local_user_prompts | ข้อมูล prompt ที่ผู้ใช้สร้างขึ้น |
| ลำดับการแสดงผล | local_myspace_order | ลำดับการ์ดในคอลเลกชันของฉัน |
| แท็กที่กำหนดเอง | local_custom_tags | คำจำกัดความและการกำหนดแท็ก |
- พื้นที่จัดเก็บของเบราว์เซอร์มีขีดจำกัดประมาณ 5MB ซึ่งเพียงพอต่อการใช้งานทั่วไป
- การล้างข้อมูลเบราว์เซอร์จะทำให้ข้อมูลส่วนตัวสูญหาย — แนะนำให้สำรองข้อมูลเป็นประจำผ่าน "บัญชีของฉัน → การจัดการข้อมูล → ส่งออก"
- เมื่อเปลี่ยนเครื่องคอมพิวเตอร์หรือเบราว์เซอร์ ต้องนำเข้าข้อมูลใหม่
การติดตั้ง
เวอร์ชันออฟไลน์อยู่บน branch ที่ชื่อ offline หลังจากผู้ดูแลระบบติดตั้งเรียบร้อยแล้วครั้งเดียว สมาชิกในทีมก็ใช้งานได้โดยไม่ต้องดำเนินการอะไรเพิ่มเติม
ติดตั้งด้วย Docker (แนะนำ)
วิธีติดตั้งที่ง่ายที่สุด เพียงคำสั่งบรรทัดเดียวก็รันบนเซิร์ฟเวอร์อินทราเน็ตได้:
# ใช้ image เวอร์ชันออฟไลน์ที่สร้างไว้แล้ว
docker run -d -p 3000:3000 --name aishort-offline ghcr.io/rockbenben/chatgpt-shortcut:offline
# หรือใช้ Docker Hub
docker run -d -p 3000:3000 --name aishort-offline rockben/chatgpt-shortcut:offline
หลังติดตั้งเสร็จ สมาชิกในทีมเข้าใช้ผ่าน http://<IP-เซิร์ฟเวอร์>:3000 ได้ทันที
ใช้ docker-compose:
services:
aishort-offline:
container_name: aishort-offline
image: ghcr.io/rockbenben/chatgpt-shortcut:offline
ports:
- "3000:3000"
restart: unless-stopped
สร้างจาก source code
หากต้องการปรับแต่งเนื้อหา prompt หรือแก้ไขการตั้งค่า:
# Clone branch ออฟไลน์
git clone -b offline https://github.com/rockbenben/ChatGPT-Shortcut.git
cd ChatGPT-Shortcut
# ติดตั้ง dependencies
yarn
# พัฒนาในเครื่อง
yarn start
# Build เฉพาะภาษาเดียว (ภาษาไทย)
yarn build --locale th
# Build ทุกภาษา
yarn build
ผลลัพธ์จากการ build จะอยู่ในไดเรกทอรี build/ และสามารถนำไปติดตั้งบน static file server ใดก็ได้ (Nginx, Apache, Caddy ฯลฯ)
ตัวอย่างการตั้งค่า Nginx
server {
listen 3000;
server_name _;
root /path/to/build;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
ติดตั้งบนแพลตฟอร์ม
หากติดตั้งบน Vercel, Cloudflare Pages หรือแพลตฟอร์มอื่นที่คล้ายกัน เพียงเลือก branch offline ส่วนขั้นตอนอื่น ๆ เหมือนกับเวอร์ชันออนไลน์ ดูรายละเอียดเพิ่มเติมที่ การติดตั้งโปรเจกต์
นำเข้าและส่งออกข้อมูล
ส่งออก
ไปที่ "บัญชีของฉัน → การจัดการข้อมูล → ส่งออก" เพื่อบันทึกคอลเลกชันส่วนตัวและ prompt ที่กำหนดเองเป็นไฟล์ JSON
นำเข้า
รองรับการนำเข้าไฟล์ JSON รูปแบบดังต่อไปนี้:
- ไฟล์ที่ส่งออกจากเวอร์ชันออฟไลน์: กู้คืนคอลเลกชัน, prompt, ลำดับ และแท็กได้ครบถ้วน
- ไฟล์ที่ส่งออกจากเวอร์ชันออนไลน์: ระบบจะประมวลผลให้เข้ากันได้โดยอัตโนมัติ
- Prompt ของผู้ใช้ → รวมเข้ากับข้อมูลในเครื่อง (ตัดซ้ำตามชื่อเรื่อง)
- คอลเลกชันที่คัดสรร (card) → รวมเข้ากับคอลเลกชันในเครื่อง
- คอลเลกชันชุมชน (community) → แปลงเป็น prompt ที่กำหนดเองในเครื่องโดยอัตโนมัติ
- การเรียงลำดับ MySpace → กู้คืนในเครื่อง
- แท็กที่กำหนดเอง → เพิ่มต่อท้าย (ไม่เขียนทับของเดิม)
ย้ายข้อมูลจากเวอร์ชันออนไลน์
- ส่งออกข้อมูลจากหน้า "บัญชีของฉัน" บนเวอร์ชันออนไลน์ (aishort.top)
- นำเข้าไฟล์ JSON ดังกล่าวจาก "บัญชีของฉัน → การจัดการข้อมูล → นำเข้า" บนเวอร์ชันออฟไลน์
- คอลเลกชันชุมชนจะถูกแปลงเป็น prompt ในเครื่องโดยอัตโนมัติ ส่วนคอลเลกชันที่คัดสรรจะซิงค์ตามปกติ
คำถามที่พบบ่อย
หลังติดตั้งแล้วทีมงานใช้งานอย่างไร?
หลังผู้ดูแลระบบติดตั้งบนเซิร์ฟเวอร์อินทราเน็ตเรียบร้อยแล้ว เพียงแจ้ง URL การเข้าใช้งาน (เช่น http://192.168.1.100:3000) ให้ทีมงานทราบ แต่ละคนเปิดผ่านเบราว์เซอร์ ไม่ต้องติดตั้งโปรแกรม ไม่ต้องลงทะเบียน
ข้อมูลของแต่ละคนจะกระทบกันหรือไม่?
ไม่กระทบกัน คอลเลกชันและ prompt ที่กำหนดเองของแต่ละคนเก็บไว้ใน localStorage ของเบราว์เซอร์ตนเอง แยกจากกันโดยสิ้นเชิง บนเซิร์ฟเวอร์มีเพียงคลัง prompt ที่ใช้ร่วมกัน (อ่านอย่างเดียว)
ข้อมูลจะสูญหายหรือไม่?
การกระทำต่อไปนี้จะทำให้ข้อมูลส่วนตัวสูญหาย:
- ล้างข้อมูล/แคชของเบราว์เซอร์
- ใช้โหมดส่วนตัว/ไม่ระบุตัวตน
- เปลี่ยนเครื่องคอมพิวเตอร์หรือเบราว์เซอร์
แนะนำให้สำรองข้อมูลที่สำคัญเป็นประจำในรูปแบบไฟล์ JSON ผ่าน "บัญชีของฉัน → การจัดการข้อมูล → ส่งออก"
แชร์ prompt ที่กำหนดเองภายในทีมได้หรือไม่?
ทำได้ คนใดคนหนึ่งส่งออกเป็นไฟล์ JSON แล้วสมาชิกคนอื่นนำเข้าผ่าน "บัญชีของฉัน → การจัดการข้อมูล → นำเข้า" ก็ใช้ได้ ระบบจะตัดข้อมูลซ้ำให้อัตโนมัติ
อัปเดตคลัง prompt อย่างไร?
คลัง prompt เป็นข้อมูล static ที่ bundle ตอนสร้าง build วิธีอัปเดต:
- ผู้ดูแลระบบดึงโค้ดล่าสุดจาก branch
offline - Build และติดตั้งใหม่ (หรือดึง Docker image ล่าสุด)
- สมาชิกในทีมเพียงรีเฟรชเบราว์เซอร์ก็จะเห็นเนื้อหาใหม่ (ข้อมูลส่วนตัวไม่ได้รับผลกระทบ)
รูปแบบข้อมูลของเวอร์ชันออฟไลน์เข้ากันได้กับเวอร์ชันออนไลน์หรือไม่?
เข้ากันได้ รูปแบบ JSON ที่ส่งออกเหมือนกัน สามารถนำเข้าสองทิศทางระหว่างสองเวอร์ชันได้ ID ของ prompt จะแตกต่างกัน (เวอร์ชันออนไลน์ใช้ server-side ID ส่วนเวอร์ชันออฟไลน์ใช้ ID ที่อิงตาม timestamp) แต่การนำเข้าจะตัดข้อมูลซ้ำตามชื่อเรื่อง จึงไม่เกิดปัญหาขัดแย้งกัน