🌐 Languages: 🇺🇸 English | 🇧🇷 Português (Brasil) | 🇪🇸 Español | 🇫🇷 Français | 🇮🇹 Italiano | 🇷🇺 Русский | 🇨🇳 中文 (简体) | 🇩🇪 Deutsch | 🇮🇳 हिन्दी | 🇹🇭 ไทย | 🇺🇦 Українська | 🇸🇦 العربية | 🇯🇵 日本語 | 🇻🇳 Tiếng Việt | 🇧🇬 Български | 🇩🇰 Dansk | 🇫🇮 Suomi | 🇮🇱 עברית | 🇭🇺 Magyar | 🇮🇩 Bahasa Indonesia | 🇰🇷 한국어 | 🇲🇾 Bahasa Melayu | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇵🇹 Português (Portugal) | 🇷🇴 Română | 🇵🇱 Polski | 🇸🇰 Slovenčina | 🇸🇪 Svenska | 🇵🇭 Filipino
ปัญหาและวิธีแก้ปัญหาทั่วไปสำหรับ OmniRoute
| ปัญหา | โซลูชั่น |
|---|---|
| การเข้าสู่ระบบครั้งแรกไม่ทำงาน | ทำเครื่องหมาย INITIAL_PASSWORD ใน .env (ค่าเริ่มต้น: 123456) |
| แดชบอร์ดเปิดบนพอร์ตผิด | ตั้งค่า PORT=20128 และ NEXT_PUBLIC_BASE_URL=http://localhost:20128 |
ไม่มีบันทึกคำขอภายใต้ logs/ |
ตั้งค่า ENABLE_REQUEST_LOGS=true |
| EACCES: การอนุญาตถูกปฏิเสธ | ตั้งค่า DATA_DIR=/path/to/writable/dir เพื่อแทนที่ ~/.omniroute |
| กลยุทธ์การกำหนดเส้นทางไม่บันทึก | อัปเดตเป็น v1.4.11+ (แก้ไข Zod schema สำหรับการคงอยู่ของการตั้งค่า) |
สาเหตุ: โควต้าของผู้ให้บริการหมดลง
แก้ไข:
- ตรวจสอบตัวติดตามโควต้าแดชบอร์ด
- ใช้คอมโบที่มีระดับทางเลือก
- เปลี่ยนไปใช้ระดับที่ถูกกว่า/ฟรี
สาเหตุ: โควต้าการสมัครใช้งานหมดลง
แก้ไข:
- เพิ่มทางเลือก:
cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking - ใช้ GLM/MiniMax เป็นข้อมูลสำรองราคาถูก
OmniRoute รีเฟรชโทเค็นอัตโนมัติ หากปัญหายังคงอยู่:
- แดชบอร์ด → ผู้ให้บริการ → เชื่อมต่อใหม่
- ลบและเพิ่มการเชื่อมต่อผู้ให้บริการอีกครั้ง
- ตรวจสอบ
BASE_URLชี้ไปยังอินสแตนซ์ที่ทำงานอยู่ของคุณ (เช่นhttp://localhost:20128) - ตรวจสอบ
CLOUD_URLชี้ไปยังจุดสิ้นสุดระบบคลาวด์ของคุณ (เช่นhttps://omniroute.dev) - เก็บค่า
NEXT_PUBLIC_*ให้สอดคล้องกับค่าฝั่งเซิร์ฟเวอร์
อาการ: Unexpected token 'd'... บนจุดปลายทางคลาวด์สำหรับการโทรที่ไม่ใช่การสตรีม
สาเหตุ: อัปสตรีมส่งคืนเพย์โหลด SSE ในขณะที่ไคลเอ็นต์คาดหวัง JSON
วิธีแก้ปัญหา: ใช้ stream=true สำหรับการโทรโดยตรงบนคลาวด์ รันไทม์ในเครื่องรวมถึงทางเลือก SSE → JSON
- สร้างคีย์ใหม่จากแดชบอร์ดในเครื่อง (
/api/keys) - เรียกใช้คลาวด์ซิงค์: เปิดใช้งานคลาวด์ → ซิงค์ทันที
- คีย์เก่า/ที่ไม่ได้ซิงค์ยังสามารถส่งคืน
401บนคลาวด์ได้
- ตรวจสอบฟิลด์รันไทม์:
curl http://localhost:20128/api/cli-tools/runtime/codex | jq - สำหรับโหมดพกพา: ใช้เป้าหมายรูปภาพ
runner-cli(CLI ที่รวมกลุ่ม) - สำหรับโหมดเมาต์โฮสต์: ตั้งค่า
CLI_EXTRA_PATHSและเมาต์ไดเร็กทอรี bin โฮสต์เป็นแบบอ่านอย่างเดียว - หาก
installed=trueและrunnable=false: พบไบนารีแต่ตรวจสุขภาพไม่สำเร็จ
curl -s http://localhost:20128/api/cli-tools/codex-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
curl -s http://localhost:20128/api/cli-tools/claude-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
curl -s http://localhost:20128/api/cli-tools/openclaw-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'- ตรวจสอบสถิติการใช้งานในแดชบอร์ด → การใช้งาน
- สลับโมเดลหลักเป็น GLM/MiniMax
- ใช้ Free Tier (Gemini CLI, iFlow) สำหรับงานที่ไม่สำคัญ
- กำหนดงบประมาณต้นทุนต่อคีย์ API: แดชบอร์ด → คีย์ API → งบประมาณ
ตั้งค่า ENABLE_REQUEST_LOGS=true ในไฟล์ .env ของคุณ บันทึกจะปรากฏภายใต้ไดเรกทอรี logs/
# Health dashboard
http://localhost:20128/dashboard/health
# API health check
curl http://localhost:20128/api/monitoring/health- สถานะหลัก:
${DATA_DIR}/db.json(ผู้ให้บริการ คอมโบ นามแฝง คีย์ การตั้งค่า) - การใช้งาน:
${DATA_DIR}/usage.json,${DATA_DIR}/log.txt,${DATA_DIR}/call_logs/ - บันทึกคำขอ:
<repo>/logs/...(เมื่อENABLE_REQUEST_LOGS=true)
เมื่อเซอร์กิตเบรกเกอร์ของผู้ให้บริการเปิดอยู่ คำขอจะถูกบล็อกจนกว่าคูลดาวน์จะหมดลง
แก้ไข:
- ไปที่ แดชบอร์ด → การตั้งค่า → ความยืดหยุ่น
- ตรวจสอบการ์ดเซอร์กิตเบรกเกอร์สำหรับผู้ให้บริการที่ได้รับผลกระทบ
- คลิก รีเซ็ตทั้งหมด เพื่อล้างเบรกเกอร์ทั้งหมด หรือรอให้คูลดาวน์หมดลง
- ตรวจสอบว่าผู้ให้บริการพร้อมใช้งานจริงก่อนที่จะรีเซ็ต
หากผู้ให้บริการเข้าสู่สถานะเปิดซ้ำๆ:
- ตรวจสอบ แดชบอร์ด → สุขภาพ → สุขภาพของผู้ให้บริการ เพื่อดูรูปแบบความล้มเหลว
- ไปที่ การตั้งค่า → ความยืดหยุ่น → โปรไฟล์ผู้ให้บริการ และเพิ่มเกณฑ์ความล้มเหลว
- ตรวจสอบว่าผู้ให้บริการได้เปลี่ยนแปลงขีดจำกัด API หรือต้องมีการตรวจสอบสิทธิ์อีกครั้งหรือไม่
- ตรวจสอบการวัดและส่งข้อมูลทางไกลเวลาแฝง — เวลาแฝงสูงอาจทำให้เกิดความล้มเหลวตามการหมดเวลา
- ตรวจสอบให้แน่ใจว่าคุณใช้คำนำหน้าที่ถูกต้อง:
deepgram/nova-3หรือassemblyai/best - ตรวจสอบว่าผู้ให้บริการเชื่อมต่ออยู่ใน Dashboard → Providers
- ตรวจสอบรูปแบบเสียงที่รองรับ:
mp3,wav,m4a,flac,ogg,webm - ตรวจสอบขนาดไฟล์อยู่ภายในขีดจำกัดของผู้ให้บริการ (โดยทั่วไปคือ <25MB)
- ตรวจสอบความถูกต้องของคีย์ API ของผู้ให้บริการในการ์ดผู้ให้บริการ
ใช้ แดชบอร์ด → ตัวแปล เพื่อแก้ไขปัญหาการแปลรูปแบบ:
| โหมด | เมื่อใดควรใช้ | | ---------------------- | ------------------------------------------------------------------------------------ | ------- | | สนามเด็กเล่น | เปรียบเทียบรูปแบบอินพุต/เอาต์พุตแบบเคียงข้างกัน — วางคำขอที่ล้มเหลวเพื่อดูว่าคำขอแปล | อย่างไร | | เครื่องมือทดสอบแชท | ส่งข้อความสดและตรวจสอบเพย์โหลดคำขอ/การตอบกลับทั้งหมด รวมถึงส่วนหัว | | ม้านั่งทดสอบ | เรียกใช้การทดสอบเป็นชุดระหว่างรูปแบบต่างๆ เพื่อดูว่าคำแปลใดเสียหาย | | ถ่ายทอดสด | ดูขั้นตอนคำขอแบบเรียลไทม์เพื่อตรวจจับปัญหาการแปลเป็นระยะๆ |
- แท็กการคิดไม่ปรากฏ — ตรวจสอบว่าผู้ให้บริการเป้าหมายสนับสนุนการคิดและการตั้งค่างบประมาณการคิดหรือไม่
- การเรียกเครื่องมือลดลง — การแปลรูปแบบบางรูปแบบอาจตัดช่องที่ไม่รองรับออก ตรวจสอบในโหมดสนามเด็กเล่น
- การแจ้งเตือนของระบบหายไป — ระบบแจ้งของ Claude และ Gemini แตกต่างกัน ตรวจสอบผลลัพธ์การแปล
- SDK ส่งคืนสตริงดิบแทนที่จะเป็นวัตถุ — แก้ไขในเวอร์ชัน 1.1.0: ตอนนี้ตัวล้างการตอบสนองจะตัดฟิลด์ที่ไม่ได้มาตรฐาน (
x_groq,usage_breakdownฯลฯ) ที่ทำให้การตรวจสอบ OpenAI SDK Pydantic ล้มเหลว - GLM/ERNIE ปฏิเสธบทบาท
system— แก้ไขในเวอร์ชัน 1.1.0: บทบาท Normalizer จะรวมข้อความระบบเข้ากับข้อความผู้ใช้โดยอัตโนมัติสำหรับรุ่นที่เข้ากันไม่ได้ developerไม่รู้จักบทบาท — แก้ไขใน v1.1.0: แปลงเป็นsystemโดยอัตโนมัติสำหรับผู้ให้บริการที่ไม่ใช่ OpenAIjson_schemaไม่ทำงานกับ Gemini — แก้ไขใน v1.1.0:response_formatตอนนี้ถูกแปลงเป็นresponseMimeType+responseSchemaของ Gemini แล้ว
- การจำกัดอัตราอัตโนมัติใช้กับผู้ให้บริการคีย์ API เท่านั้น (ไม่ใช่ OAuth/การสมัครสมาชิก)
- ตรวจสอบ การตั้งค่า → ความยืดหยุ่น → โปรไฟล์ผู้ให้บริการ ได้เปิดใช้งานการจำกัดอัตราอัตโนมัติแล้ว
- ตรวจสอบว่าผู้ให้บริการส่งคืนรหัสสถานะ
429หรือส่วนหัวRetry-Afterหรือไม่
โปรไฟล์ผู้ให้บริการรองรับการตั้งค่าเหล่านี้:
- ความล่าช้าพื้นฐาน — เวลารอเริ่มต้นหลังจากความล้มเหลวครั้งแรก (ค่าเริ่มต้น: 1 วินาที)
- ความล่าช้าสูงสุด — ขีดจำกัดเวลารอสูงสุด (ค่าเริ่มต้น: 30 วินาที)
- ตัวคูณ — จะต้องเพิ่มความล่าช้าเท่าใดต่อความล้มเหลวติดต่อกัน (ค่าเริ่มต้น: 2x)
เมื่อคำขอหลายรายการส่งถึงผู้ให้บริการที่จำกัดอัตรา OmniRoute จะใช้ mutex + การจำกัดอัตราอัตโนมัติเพื่อซีเรียลไลซ์คำขอและป้องกันความล้มเหลวแบบเรียงซ้อน นี่เป็นแบบอัตโนมัติสำหรับผู้ให้บริการคีย์ API
- ปัญหา GitHub: github.com/diegosouzapw/OmniRoute/issues
- สถาปัตยกรรม: ดู link สำหรับรายละเอียดภายใน
- การอ้างอิง API: ดู link สำหรับจุดสิ้นสุดทั้งหมด
- แดชบอร์ดสุขภาพ: ตรวจสอบ แดชบอร์ด → สุขภาพ เพื่อดูสถานะของระบบแบบเรียลไทม์
- นักแปล: ใช้ แดชบอร์ด → นักแปล เพื่อแก้ไขปัญหาเกี่ยวกับรูปแบบ