Files
OmniRoute/docs/i18n/th/docs/guides/USER_GUIDE.md
Diego Rodrigues de Sa e Souza b637350680 fix(docs): re-sync the 65 documentation mirror sets; section-level docs pipeline; drift gate blocking (#13940)
1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors.

⚠️ base-red inherited: #12732
2026-09-17 02:55:31 -03:00

117 KiB
Raw Blame History

User Guide (ไทย)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


🌐 ภาษา: 🇺🇸 English | 🇪🇹 አማርኛ | 🇸🇦 العربية | 🇦🇿 Azərbaycan dili | 🇧🇬 Български | 🇧🇩 বাংলা | 🇨🇿 Čeština | 🇩🇰 Dansk | 🇩🇪 Deutsch | 🇬🇷 Ελληνικά | 🇪🇸 Español | 🇪🇪 Eesti | 🇮🇷 فارسی | 🇫🇮 Suomi | 🇫🇷 Français | 🇮🇪 Gaeilge | 🇮🇳 ગુજરાતી | 🇳🇬 Hausa | 🇮🇱 עברית | 🇮🇳 हिन्दी | 🇭🇷 Hrvatski | 🇭🇺 Magyar | 🇦🇲 Հայերեն | 🇮🇩 Bahasa Indonesia | 🇳🇬 Igbo | 🇮🇹 Italiano | 🇯🇵 日本語 | 🇬🇪 ქართული | 🇰🇭 ខ្មែរ | 🇮🇳 ಕನ್ನಡ | 🇰🇷 한국어 | 🇱🇹 Lietuvių | 🇱🇻 Latviešu | 🇮🇳 മലയാളം | 🇮🇳 मराठी | 🇲🇾 Bahasa Melayu | 🇲🇹 Malti | 🇲🇲 မြန်မာ | 🇳🇵 नेपाली | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇮🇳 ଓଡ଼ିଆ | 🇮🇳 ਪੰਜਾਬੀ | 🇵🇭 Filipino | 🇵🇱 Polski | 🇵🇹 Português (Portugal) | 🇧🇷 Português (Brasil) | 🇷🇴 Română | 🇷🇺 Русский | 🇱🇰 සිංහල | 🇸🇰 Slovenčina | 🇸🇮 Slovenščina | 🇷🇸 Српски | 🇸🇪 Svenska | 🇰🇪 Kiswahili | 🇮🇳 தமிழ் | 🇮🇳 తెలుగు | 🇹🇭 ไทย | 🇹🇷 Türkçe | 🇺🇦 Українська | 🇵🇰 اردو | 🇺🇿 Oʻzbekcha | 🇻🇳 Tiếng Việt | 🇳🇬 Yorùbá | 🇨🇳 中文 (简体) | 🇹🇼 中文 (繁體)

คู่มือฉบับสมบูรณ์สำหรับการกำหนดค่าผู้ให้บริการ การสร้างคอมโบ การผสานรวมเครื่องมือ CLI และการปรับใช้ OmniRoute


สารบัญ


💰 ภาพรวมราคา

ระดับ ผู้ให้บริการ ค่าใช้จ่าย การรีเซ็ตโควตา เหมาะที่สุดสำหรับ
💳 การสมัครสมาชิก Claude Code (Pro) $20/เดือน ทุก 5 ชม. + รายสัปดาห์ ผู้ที่สมัครสมาชิกอยู่แล้ว
Codex (Plus/Pro) $20-200/เดือน ทุก 5 ชม. + รายสัปดาห์ ผู้ใช้ OpenAI
GitHub Copilot $10-19/เดือน รายเดือน ผู้ใช้ GitHub
🔑 คีย์ API DeepSeek จ่ายตามการใช้งาน ไม่มี การให้เหตุผลราคาประหยัด
Groq จ่ายตามการใช้งาน ไม่มี การอนุมานที่รวดเร็วเป็นพิเศษ
xAI (Grok) จ่ายตามการใช้งาน ไม่มี การให้เหตุผลด้วย Grok 4
Mistral จ่ายตามการใช้งาน ไม่มี โมเดลที่โฮสต์ในสหภาพยุโรป
Perplexity จ่ายตามการใช้งาน ไม่มี การทำงานที่เสริมด้วยการค้นหา
Together AI จ่ายตามการใช้งาน ไม่มี โมเดลโอเพนซอร์ส
Fireworks AI จ่ายตามการใช้งาน ไม่มี การสร้างภาพ FLUX อย่างรวดเร็ว
Cerebras จ่ายตามการใช้งาน ไม่มี ความเร็วระดับเวเฟอร์สเกล
Cohere จ่ายตามการใช้งาน ไม่มี RAG ด้วย Command R+
NVIDIA NIM จ่ายตามการใช้งาน ไม่มี โมเดลระดับองค์กร
Baidu Qianfan จ่ายตามการใช้งาน ไม่มี โมเดล ERNIE
💰 ราคาประหยัด GLM-4.7 $0.6/1M ทุกวันเวลา 10:00 น. ตัวสำรองราคาประหยัด
MiniMax M2.1 $0.2/1M แบบต่อเนื่องทุก 5 ชั่วโมง ตัวเลือกที่ถูกที่สุด
Kimi K2 เหมาจ่าย $9/เดือน 10M โทเค็น/เดือน ค่าใช้จ่ายที่คาดการณ์ได้
🆓 ฟรี Qoder $0 เป็นไปตามข้อจำกัดของผู้ให้บริการ ตรวจสอบแค็ตตาล็อกปัจจุบัน
Kiro $0 ~50 เครดิต/เดือน ใช้ Claude ฟรี

🎯 กรณีการใช้งาน

กรณีที่ 1: "ฉันมีการสมัครสมาชิก Claude Pro"

ปัญหา: โควตาหมดอายุโดยไม่ได้ใช้งาน และติดข้อจำกัดอัตราการใช้งานระหว่างเขียนโค้ดหนัก

ชุดผสม: "maximize-claude"
  1. cc/claude-opus-4-7        (ใช้สิทธิ์การสมัครสมาชิกอย่างเต็มที่)
  2. glm/glm-4.7               (ตัวสำรองราคาประหยัดเมื่อโควตาหมด)
  3. if/qwen3.8-max-preview       (ตัวสำรองฉุกเฉินฟรี)

ค่าใช้จ่ายรายเดือน: $20 (ค่าสมัครสมาชิก) + ~$5 (ตัวสำรอง) = รวม $25
เทียบกับ $20 + การติดข้อจำกัด = ความหงุดหงิด

กรณีที่ 2: "ฉันไม่ต้องการเสียค่าใช้จ่ายเลย"

ปัญหา: ไม่สามารถจ่ายค่าสมัครสมาชิกได้ แต่ต้องการ AI สำหรับเขียนโค้ดที่เชื่อถือได้

ชุดผสม: "zero-cost"
  1. if/kimi-k2.7-code          (ระบุว่าเข้าถึงได้ฟรี แต่อาจมีข้อจำกัดอัตราการใช้งาน)
  2. kr/qwen3-coder-next        (ตัวสำรอง Kiro ฟรี)

ค่าใช้จ่ายรายเดือน: $0
คุณภาพ: ตรวจสอบโมเดล ข้อจำกัด ความเป็นส่วนตัว และ SLA ให้เหมาะกับเวิร์กโหลดของคุณ

กรณีที่ 3: "ฉันต้องการเขียนโค้ดได้ตลอด 24/7 โดยไม่สะดุด"

ปัญหา: มีเส้นตายและไม่สามารถยอมรับช่วงเวลาที่ระบบหยุดให้บริการได้

ชุดผสม: "always-on"
  1. cc/claude-opus-4-7        (คุณภาพดีที่สุด)
  2. cx/gpt-5.5                (การสมัครสมาชิกรายการที่สอง)
  3. glm/glm-4.7               (ราคาประหยัด รีเซ็ตทุกวัน)
  4. minimax/MiniMax-M2.1      (ถูกที่สุด รีเซ็ตทุก 5 ชม.)
  5. if/deepseek-v4-flash       (ระบุว่าเข้าถึงได้ฟรี แต่อาจมีข้อจำกัดอัตราการใช้งาน)

ผลลัพธ์: ตัวสำรอง 5 ชั้นช่วยเพิ่มความยืดหยุ่น แต่ไม่รับประกันความพร้อมใช้งานของบริการต้นทาง
ค่าใช้จ่ายรายเดือน: $20-200 (ค่าสมัครสมาชิก) + $10-20 (ตัวสำรอง)

กรณีที่ 4: "ฉันต้องการ AI ฟรีใน OpenClaw"

ปัญหา: ต้องการผู้ช่วย AI ในแอปรับส่งข้อความโดยไม่มีค่าใช้จ่ายใด ๆ

ชุดผสม: "openclaw-free"
  1. if/qwen3.8-max-preview     (ระบุว่าเข้าถึงได้ฟรี แต่อาจมีข้อจำกัดอัตราการใช้งาน)
  2. if/deepseek-v4-flash       (ระบุว่าเข้าถึงได้ฟรี แต่อาจมีข้อจำกัดอัตราการใช้งาน)
  3. if/kimi-k2.7-code          (ระบุว่าเข้าถึงได้ฟรี แต่อาจมีข้อจำกัดอัตราการใช้งาน)

ค่าใช้จ่ายรายเดือน: $0
เข้าถึงผ่าน: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...

📖 การตั้งค่าผู้ให้บริการ

หากต้องการเพิ่มการเชื่อมต่อด้วย API key จำนวนมากจากไฟล์ CSV หรือ JSON ให้ใช้ แดชบอร์ด → ผู้ให้บริการ → นำเข้าจากไฟล์ คอลัมน์เรียงตามตำแหน่ง (provider,name,apiKey,baseUrl,priority) โดย provider ต้องมีอยู่แล้วในฐานะผู้ให้บริการที่มีการจัดการหรือโหนดที่เข้ากันได้ ดู การนำเข้าผู้ให้บริการจากไฟล์ CSV หรือ JSON

🔐 ผู้ให้บริการแบบสมัครสมาชิก

Claude Code (Pro/Max)

แดชบอร์ด → ผู้ให้บริการ → เชื่อมต่อ Claude Code
→ เข้าสู่ระบบด้วย OAuth → รีเฟรชโทเค็นอัตโนมัติ
→ ติดตามโควตาแบบ 5 ชั่วโมง + รายสัปดาห์

โมเดล:
  cc/claude-opus-4-7
  cc/claude-sonnet-4-6
  cc/claude-haiku-4-5-20251001

เคล็ดลับระดับโปร: ใช้ Opus สำหรับงานที่ซับซ้อน และ Sonnet เมื่อต้องการความรวดเร็ว OmniRoute ติดตามโควตาแยกตามโมเดล!

เส้นทางที่เข้ากันได้กับ Claude และ Claude Code จะคงระดับความพยายามในการคิดแบบ max ไว้สำหรับโมเดล Opus และ Sonnet โมเดล Haiku ไม่รองรับระดับความพยายาม max ดังนั้น OmniRoute จะปรับลดคำขอนั้นเป็นงบประมาณการคิดระดับสูงก่อนส่งไปยังผู้ให้บริการต้นทาง

OpenAI Codex (Plus/Pro)

แดชบอร์ด → ผู้ให้บริการ → เชื่อมต่อ Codex
→ เข้าสู่ระบบด้วย OAuth (พอร์ต 1455)
→ รีเซ็ตทุก 5 ชั่วโมง + รายสัปดาห์

โมเดล:
  cx/gpt-5.5
  cx/gpt-5.4
  cx/gpt-5.3-codex
  cx/gpt-5.3-codex-spark

GitHub Copilot

แดชบอร์ด → ผู้ให้บริการ → เชื่อมต่อ GitHub
→ OAuth ผ่าน GitHub
→ รีเซ็ตรายเดือน (วันที่ 1 ของเดือน)

โมเดล:
  gh/gpt-5.5
  gh/gpt-5.4
  gh/claude-sonnet-4.6
  gh/claude-opus-4.7
  gh/gemini-3.1-pro-preview

💰 ผู้ให้บริการราคาประหยัด

GLM-4.7 (รีเซ็ตรายวัน, $0.6/1M)

  1. สมัครใช้งาน: Zhipu AI
  2. รับ API key จาก Coding Plan
  3. แดชบอร์ด → เพิ่ม API Key: ผู้ให้บริการ: glm, API Key: your-key

วิธีใช้: glm/glm-4.7เคล็ดลับระดับโปร: Coding Plan ให้โควตาเพิ่มเป็น 3 เท่าในราคาเพียง 1/7! รีเซ็ตทุกวันเวลา 10:00 น.

MiniMax M2.1 (รีเซ็ตทุก 5 ชม., $0.20/1M)

  1. สมัครใช้งาน: MiniMax
  2. รับ API key → แดชบอร์ด → เพิ่ม API Key

วิธีใช้: minimax/MiniMax-M2.1เคล็ดลับระดับโปร: ตัวเลือกที่ถูกที่สุดสำหรับบริบทยาว (1M โทเค็น)!

Kimi K2 (เหมาจ่าย $9/เดือน)

  1. สมัครสมาชิก: Moonshot AI
  2. รับ API key → แดชบอร์ด → เพิ่ม API Key

วิธีใช้: kimi/kimi-k2.5เคล็ดลับระดับโปร: จ่ายคงที่ $9/เดือน สำหรับ 10M โทเค็น = ต้นทุนจริง $0.90/1M!

Baidu Qianfan / ERNIE

  1. สมัครใช้งาน: Baidu AI Cloud Qianfan
  2. สร้าง Qianfan API key → แดชบอร์ด → เพิ่ม API Key: ผู้ให้บริการ: qianfan

วิธีใช้: qianfan/ernie-5.1, qianfan/ernie-x1.1 หรือ ID โมเดลอื่นของ Qianfan ที่เข้ากันได้กับ OpenAI

🆓 ผู้ให้บริการฟรี

ผู้ให้บริการฟรีที่ไม่ต้องยืนยันตัวตนจะมีสวิตช์อยู่ข้าง ไม่ต้องยืนยันตัวตน ในหน้าของผู้ให้บริการนั้น การปิดสวิตช์จะปิดใช้งานผู้ให้บริการดังกล่าว นำออกจากมุมมองผู้ให้บริการที่กำหนดค่าแล้ว/แบบกะทัดรัด และนำโมเดลของผู้ให้บริการออกจาก /v1/models

Qoder (9 โมเดลฟรี)

แดชบอร์ด → เชื่อมต่อ Qoder → เข้าสู่ระบบด้วย OAuth → การเข้าถึงขึ้นอยู่กับขีดจำกัดปัจจุบันของผู้ให้บริการ

โมเดล: if/qwen3.8-max-preview, if/qwen3.7-max, if/qwen3.7-plus, if/kimi-k3, if/kimi-k2.7-code, if/glm-5.2, if/deepseek-v4-pro, if/deepseek-v4-flash, if/minimax-m3

Kiro (Claude ฟรี)

แดชบอร์ด → เชื่อมต่อ Kiro → AWS Builder ID หรือ Google/GitHub → ~50 เครดิต/เดือน

โมเดล: kr/claude-sonnet-4.5, kr/claude-haiku-4.5

🎨 คอมโบ

คุณสามารถจัดลำดับการ์ดคอมโบใหม่ได้โดยตรงใน แดชบอร์ด → คอมโบ ด้วยการลากจุดจับบนการ์ดแต่ละใบ ลำดับจะถูกบันทึกไว้ใน SQLite และกู้คืนเมื่อโหลดใหม่

ตัวอย่างที่ 1: ใช้การสมัครสมาชิกให้คุ้มค่าสูงสุด → ตัวสำรองราคาถูก

แดชบอร์ด → คอมโบ → สร้างใหม่

ชื่อ: premium-coding
โมเดล:
  1. cc/claude-opus-4-7 (โมเดลหลักจากการสมัครสมาชิก)
  2. glm/glm-4.7 (ตัวสำรองราคาถูก, $0.6/1M)
  3. minimax/MiniMax-M2.7 (ตัวเลือกสำรองที่ถูกที่สุด, $0.3/1M)

ใช้ใน CLI: premium-coding

ตัวอย่างที่ 2: ใช้เฉพาะของฟรี (ไม่มีค่าใช้จ่าย)

ชื่อ: free-combo
โมเดล:
  1. if/kimi-k2.7-code (ระบุว่าเข้าถึงได้ฟรี แต่อาจมีข้อจำกัดจากผู้ให้บริการ)
  2. kr/qwen3-coder-next (ตัวสำรองฟรีจาก Kiro)

ค่าใช้จ่าย: ขณะนี้ระบุเป็น $0 แต่ข้อกำหนดและความพร้อมให้บริการอาจเปลี่ยนแปลงได้

🔧 การผสานรวม CLI

Cursor IDE

การใช้ Cursor เป็นไคลเอนต์ OmniRoute (กำหนดเส้นทางแชตของ Cursor ผ่าน OmniRoute):

การตั้งค่า → โมเดล → ขั้นสูง:
  OpenAI API Base URL: http://localhost:20128/v1
  OpenAI API Key: [จากแดชบอร์ด omniroute]
  โมเดล: cc/claude-opus-4-7

การใช้ OmniRoute เป็นผู้ให้บริการ Cursor (OmniRoute เรียกใช้ Cursor ต้นทาง): แนะนำให้ใช้ แดชบอร์ด → ผู้ให้บริการ → Cursor → เข้าสู่ระบบด้วย Cursor สำหรับ Docker โปรดดู docs/providers/CURSOR-DOCKER.md

Claude Code

แก้ไข ~/.claude/settings.json:

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:20128",
    "ANTHROPIC_AUTH_TOKEN": "your-omniroute-api-key"
  }
}

ใช้ปลายทางรากที่เข้ากันได้กับ Claude ที่นี่ อย่าเติม /v1 ต่อท้าย ANTHROPIC_BASE_URL

Codex CLI

export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-omniroute-api-key"
codex "your prompt"

OpenClaw

แก้ไข ~/.openclaw/openclaw.json:

{
  "agents": {
    "defaults": {
      "model": { "primary": "omniroute/if/kimi-k2.7-code" }
    }
  },
  "models": {
    "providers": {
      "omniroute": {
        "baseUrl": "http://localhost:20128/v1",
        "apiKey": "your-omniroute-api-key",
        "api": "openai-completions",
        "models": [{ "id": "if/kimi-k2.7-code", "name": "Kimi K2.7 Code" }]
      }
    }
  }
}

หรือใช้แดชบอร์ด: เครื่องมือ CLI → OpenClaw → กำหนดค่าอัตโนมัติ

Cline / Continue / RooCode

ผู้ให้บริการ: รองรับ OpenAI
Base URL: http://localhost:20128/v1
API Key: [จากแดชบอร์ด]
โมเดล: cc/claude-opus-4-7

🚀 การปรับใช้

การติดตั้ง npm แบบส่วนกลาง (แนะนำ)

npm install -g omniroute

# สร้างไดเรกทอรีการกำหนดค่า
mkdir -p ~/.omniroute

# สร้างไฟล์ .env (ดู .env.example)
cp .env.example ~/.omniroute/.env

# เริ่มต้นเซิร์ฟเวอร์
omniroute
# หรือใช้พอร์ตที่กำหนดเอง:
omniroute --port 3000

CLI จะโหลด .env จาก ~/.omniroute/.env หรือ ./.env โดยอัตโนมัติ

โหมดถาดระบบ

เริ่มต้น OmniRoute ในถาดระบบ:

omniroute serve --tray

คำสั่งจะสิ้นสุดการทำงานหลังจากเซิร์ฟเวอร์และถาดระบบพร้อมใช้งานแล้ว

เซิร์ฟเวอร์จะทำงานต่อไปโดยไม่ต้องเปิดเทอร์มินัลไว้

โหมดถาดระบบรองรับ macOS, Windows และเซสชัน Linux แบบกราฟิก โหมดถาดระบบจะไม่เปิดแดชบอร์ดโดยอัตโนมัติ

ใช้เมนูถาดระบบเพื่อดำเนินการต่อไปนี้:

  • เปิดแดชบอร์ด
  • เปิด /dashboard/logs
  • เปลี่ยนการตั้งค่าเริ่มต้นอัตโนมัติ
  • หยุด OmniRoute

อย่าใช้ --tray ร่วมกับตัวเลือกต่อไปนี้:

  • --daemon
  • --log
  • --no-recovery

โหมดเหล่านี้ต้องใช้การเป็นเจ้าของโปรเซสที่แตกต่างกัน

เปิดใช้งานการเริ่มต้นระบบเมื่อเข้าสู่ระบบเครื่องครั้งถัดไป:

omniroute autostart enable

การเริ่มต้นอัตโนมัติจะใช้โหมดถาดระบบบน macOS, Windows และเซสชัน Linux แบบกราฟิก ส่วน Linux แบบไม่มีส่วนติดต่อกราฟิกจะใช้บริการผู้ใช้ systemd ที่มีอยู่

ปิดใช้งานการเริ่มต้นระบบเมื่อเข้าสู่ระบบ:

omniroute autostart disable

การถอนการติดตั้ง

เมื่อคุณไม่ต้องการใช้ OmniRoute อีกต่อไป เรามีสคริปต์ด่วนสองรายการสำหรับการลบออกอย่างหมดจด:

คำสั่ง การดำเนินการ
npm run uninstall ลบแอประบบ แต่ เก็บฐานข้อมูลและการกำหนดค่าของคุณไว้ ใน ~/.omniroute
npm run uninstall:full ลบแอป และ ลบการกำหนดค่า คีย์ และฐานข้อมูลทั้งหมดอย่างถาวร

หมายเหตุ: หากต้องการเรียกใช้คำสั่งเหล่านี้ ให้ไปยังโฟลเดอร์โปรเจกต์ OmniRoute (หากคุณโคลนโปรเจกต์ไว้) แล้วเรียกใช้คำสั่งดังกล่าว หรือหากติดตั้งแบบส่วนกลาง คุณสามารถเรียกใช้ npm uninstall -g omniroute ได้โดยตรง

การปรับใช้บน VPS

git clone https://github.com/diegosouzapw/OmniRoute.git
cd OmniRoute && npm install && npm run build

export JWT_SECRET="your-secure-secret-change-this"
export INITIAL_PASSWORD="your-password"
export DATA_DIR="/var/lib/omniroute"
export PORT="20128"
export HOSTNAME="0.0.0.0"
export NODE_ENV="production"
export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
export API_KEY_SECRET="endpoint-proxy-api-key-secret"

npm run start
# หรือ: pm2 start npm --name omniroute -- start

การปรับใช้ด้วย PM2 (หน่วยความจำน้อย)

สำหรับเซิร์ฟเวอร์ที่มี RAM จำกัด ให้ใช้ตัวเลือกจำกัดหน่วยความจำ:

# พร้อมขีดจำกัด 512MB (ค่าเริ่มต้น)
pm2 start npm --name omniroute -- start

# หรือใช้ขีดจำกัดหน่วยความจำที่กำหนดเอง
OMNIROUTE_MEMORY_MB=512 pm2 start npm --name omniroute -- start

# หรือใช้ ecosystem.config.js
pm2 start ecosystem.config.js

สร้าง ecosystem.config.js:

module.exports = {
  apps: [
    {
      name: "omniroute",
      script: "npm",
      args: "start",
      env: {
        NODE_ENV: "production",
        OMNIROUTE_MEMORY_MB: "512",
        JWT_SECRET: "your-secret",
        INITIAL_PASSWORD: "your-password",
      },
      node_args: "--max-old-space-size=512",
      max_memory_restart: "300M",
    },
  ],
};

Docker

# สร้างอิมเมจ (ค่าเริ่มต้น = runner-cli ที่ติดตั้ง codex/claude/droid ไว้ล่วงหน้า)
docker build -t omniroute:cli .

# โหมดพกพา (แนะนำ)
docker run -d --name omniroute -p 20128:20128 --env-file ./.env -v omniroute-data:/app/data omniroute:cli

สำหรับโหมดที่ผสานรวมกับโฮสต์พร้อมไบนารี CLI โปรดดูส่วน Docker ในเอกสารหลัก

Void Linux (xbps-src)

ผู้ใช้ Void Linux สามารถจัดแพ็กเกจและติดตั้ง OmniRoute แบบเนทีฟได้โดยใช้เฟรมเวิร์กการคอมไพล์ข้ามแพลตฟอร์ม xbps-src ซึ่งจะทำให้การสร้าง Node.js แบบสแตนด์อโลนพร้อมกับไบนารีไบน์ดิงแบบเนทีฟของ better-sqlite3 ที่จำเป็นเป็นไปโดยอัตโนมัติ

ดูเทมเพลต xbps-src
# ไฟล์เทมเพลตสำหรับ 'omniroute'
pkgname=omniroute
version=3.8.0
revision=1
hostmakedepends="nodejs python3 make"
depends="openssl"
short_desc="Universal AI gateway with smart routing for multiple LLM providers"
maintainer="zenobit <zenobit@disroot.org>"
license="MIT"
homepage="https://github.com/diegosouzapw/OmniRoute"
distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"
checksum=009400afee90a9f32599d8fe734145cfd84098140b7287990183dde45ae2245b
system_accounts="_omniroute"
omniroute_homedir="/var/lib/omniroute"
export NODE_ENV=production
export npm_config_engine_strict=false
export npm_config_loglevel=error
export npm_config_fund=false
export npm_config_audit=false

do_build() {
	# กำหนดสถาปัตยกรรม CPU เป้าหมายสำหรับ node-gyp
	local _gyp_arch
	case "$XBPS_TARGET_MACHINE" in
		aarch64*) _gyp_arch=arm64 ;;
		armv7*|armv6*) _gyp_arch=arm ;;
		i686*) _gyp_arch=ia32 ;;
		*) _gyp_arch=x64 ;;
	esac

	# 1) ติดตั้งการขึ้นต่อกันทั้งหมด  ข้ามสคริปต์
	NODE_ENV=development npm ci --ignore-scripts

	# 2) สร้างบันเดิล Next.js แบบสแตนด์อโลน
	npm run build

	# 3) คัดลอกแอสเซ็ตแบบสแตติกไปยังสแตนด์อโลน
	cp -r .next/static .next/standalone/.next/static
	[ -d public ] && cp -r public .next/standalone/public || true

	# 4) คอมไพล์ไบนารีไบน์ดิงแบบเนทีฟของ better-sqlite3
	local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
	(cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")

	# 5) วางไบนารีไบน์ดิงที่คอมไพล์แล้วลงในบันเดิลสแตนด์อโลน
	local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release
	mkdir -p "$_bs3_release"
	cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"

	# 6) ลบบันเดิล sharp ที่เจาะจงตามสถาปัตยกรรม
	rm -rf .next/standalone/node_modules/@img

	# 7) คัดลอกการขึ้นต่อกันขณะรันไทม์ของ pino ที่การวิเคราะห์แบบสแตติกของ Next.js ไม่ได้นำมารวมไว้:
	for _mod in pino-abstract-transport split2 process-warning; do
		cp -r "node_modules/$_mod" .next/standalone/node_modules/
	done
}

do_check() {
	npm run test:unit
}

do_install() {
	vmkdir usr/lib/omniroute/.next
	vcopy .next/standalone/. usr/lib/omniroute/.next/standalone

	# ป้องกันไม่ให้ฮุกหลังการติดตั้งลบไดเรกทอรีเราเตอร์แอป Next.js ที่ว่างเปล่า
	for _d in \
		.next/standalone/.next/server/app/dashboard \
		.next/standalone/.next/server/app/dashboard/settings \
		.next/standalone/.next/server/app/dashboard/providers; do
		touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep"
	done

	cat > "${WRKDIR}/omniroute" <<'EOF'
#!/bin/sh
export PORT="${PORT:-20128}"
export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"
export APP_LOG_TO_FILE="${APP_LOG_TO_FILE:-false}"
mkdir -p "${DATA_DIR}"
exec node /usr/lib/omniroute/.next/standalone/server.js "$@"
EOF
	vbin "${WRKDIR}/omniroute"
}

post_install() {
	vlicense LICENSE
}

ตัวแปรสภาพแวดล้อม

ตัวแปร ค่าเริ่มต้น คำอธิบาย
JWT_SECRET omniroute-default-secret-change-me คีย์ลับสำหรับลงนาม JWT (ต้องเปลี่ยนในระบบที่ใช้งานจริง)
INITIAL_PASSWORD CHANGEME รหัสผ่านสำหรับการเข้าสู่ระบบครั้งแรก
DATA_DIR ~/.omniroute ไดเรกทอรีข้อมูล (ฐานข้อมูล ข้อมูลการใช้งาน และบันทึกเหตุการณ์)
PORT ค่าเริ่มต้นของเฟรมเวิร์ก พอร์ตของบริการ (20128 ในตัวอย่าง)
HOSTNAME ค่าเริ่มต้นของเฟรมเวิร์ก โฮสต์ที่ใช้รับการเชื่อมต่อ (Docker ใช้ค่าเริ่มต้นเป็น 0.0.0.0)
NODE_ENV ค่าเริ่มต้นของรันไทม์ ตั้งค่าเป็น production สำหรับการนำไปใช้งาน
NEXT_PUBLIC_BASE_URL http://localhost:20128 URL ฐานแบบสาธารณะที่แสดงต่อแดชบอร์ดและเปิดให้เซิร์ฟเวอร์ใช้งาน (ใช้แทน BASE_URL แบบเดิม)
NEXT_PUBLIC_CLOUD_URL https://omniroute.dev URL ฐานของปลายทางการซิงค์กับคลาวด์ (ใช้แทน CLOUD_URL แบบเดิม)
API_KEY_SECRET endpoint-proxy-api-key-secret คีย์ลับ HMAC สำหรับคีย์ API ที่สร้างขึ้น
REQUIRE_API_KEY false บังคับใช้คีย์ API แบบ Bearer กับ /v1/*
ALLOW_API_KEY_REVEAL false อนุญาตให้ผู้ใช้แดชบอร์ดที่ผ่านการยืนยันตัวตนเปิดดูค่าคีย์ API ที่จัดเก็บไว้แบบเต็มได้ตามต้องการ
PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES 70 ความถี่ในการรีเฟรชข้อมูล Provider Limits ที่แคชไว้จากฝั่งเซิร์ฟเวอร์ ปุ่มรีเฟรชใน UI ยังคงเรียกใช้การซิงค์ด้วยตนเอง
DISABLE_SQLITE_AUTO_BACKUP false ปิดใช้สแนปช็อต SQLite อัตโนมัติก่อนการเขียน/นำเข้า/กู้คืน โดยการสำรองข้อมูลด้วยตนเองยังคงใช้งานได้
APP_LOG_TO_FILE true เปิดใช้การบันทึกเหตุการณ์ของแอปพลิเคชันและการตรวจสอบลงดิสก์
AUTH_COOKIE_SECURE false บังคับใช้คุกกี้การยืนยันตัวตนแบบ Secure (เมื่ออยู่หลังพร็อกซีย้อนกลับ HTTPS)
CLOUDFLARED_BIN ไม่ได้ตั้งค่า ใช้ไบนารี cloudflared ที่มีอยู่แทนการดาวน์โหลดที่มีการจัดการ
CLOUDFLARED_PROTOCOL http2 การขนส่งสำหรับ Quick Tunnels ที่มีการจัดการ (http2, quic หรือ auto)
OMNIROUTE_MEMORY_MB 512 ขีดจำกัดฮีปของ Node.js หน่วยเป็น MB
PROMPT_CACHE_MAX_SIZE 50 จำนวนรายการสูงสุดในแคชพรอมต์
SEMANTIC_CACHE_MAX_SIZE 100 จำนวนรายการสูงสุดในแคชเชิงความหมาย

สำหรับข้อมูลอ้างอิงตัวแปรสภาพแวดล้อมทั้งหมด โปรดดู README


📊 โมเดลที่พร้อมใช้งาน

ดูโมเดลที่พร้อมใช้งานทั้งหมด

รายการด้านล่างได้รับการคัดสรรมาจาก open-sse/config/providerRegistry.ts สำหรับ v3.8.0 แค็ตตาล็อกบนคลาวด์ (Gemini, OpenRouter ฯลฯ) จะซิงค์แบบไดนามิก — หากต้องการดูแค็ตตาล็อกปัจจุบันทั้งหมด ให้เปิด แดชบอร์ด → ผู้ให้บริการ → [ผู้ให้บริการ] → โมเดลที่พร้อมใช้งาน หรือเรียก GET /api/models/catalog

หากรายการในตัวของผู้ให้บริการไม่เป็นปัจจุบัน ให้ใช้ นำเข้าจาก /models ในหน้านั้น (หรือเปิดใช้ ซิงค์อัตโนมัติ) เพื่อดึงแค็ตตาล็อกปัจจุบันจากต้นทาง การทำงานนี้ได้รับการตรวจสอบแล้วใน v3.8.50 สำหรับ LLM7.io (gemini-3.1-flash-lite) และ UncloseAI (solidrust/Hermes-3-Llama-3.1-8B-AWQ) ส่วนการเข้าถึง Pollinations แบบไม่ระบุตัวตนยังคงถูกจำกัดโดยต้นทางในระหว่างการทดสอบรอบเดียวกัน

Claude Code (cc/) — OAuth สำหรับ Pro/Max: cc/claude-opus-4-8, cc/claude-opus-4-7, cc/claude-opus-4-6, cc/claude-opus-4-5-20251101, cc/claude-sonnet-4-6, cc/claude-sonnet-4-5-20250929, cc/claude-haiku-4-5-20251001

Codex (cx/) — OAuth สำหรับ Plus/Pro: cx/gpt-5.5 (+ ระดับความพยายาม: gpt-5.5-xhigh, gpt-5.5-high, gpt-5.5-medium, gpt-5.5-low), cx/gpt-5.4, cx/gpt-5.4-mini, cx/gpt-5.3-codex, cx/gpt-5.3-codex-spark

GitHub Copilot (gh/) — OAuth: gh/gpt-5.5, gh/gpt-5.4, gh/gpt-5.4-mini, gh/gpt-5-mini, gh/gpt-5.3-codex, gh/claude-opus-4.7, gh/claude-opus-4.6, gh/claude-opus-4-5-20251101, gh/claude-sonnet-4.6, gh/claude-sonnet-4.5, gh/claude-haiku-4.5, gh/gemini-3.1-pro-preview, gh/gemini-3-flash-preview, gh/oswe-vscode-prime

Kiro (kr/) — OAuth ฟรี: ใช้แค็ตตาล็อกปัจจุบันที่แสดงใน แดชบอร์ด → ผู้ให้บริการ → Kiro → โมเดลที่พร้อมใช้งาน ความพร้อมใช้งานขึ้นอยู่กับบัญชีและแผนบริการ

Qoder (if/) — OAuth ฟรี: if/qwen3.8-max-preview, if/qwen3.7-max, if/qwen3.7-plus, if/kimi-k3, if/kimi-k2.7-code, if/glm-5.2, if/deepseek-v4-pro, if/deepseek-v4-flash, if/minimax-m3

GLM (glm/, glm-cn/, zai/, glmt/) — $0.20.6/1M: glm/glm-5.1, glm/glm-5, glm/glm-5-turbo, glm/glm-4.7, glm/glm-4.7-flash, glm/glm-4.6, glm/glm-4.6v, glm/glm-4.5, glm/glm-4.5v, glm/glm-4.5-air

MiniMax (minimax/, minimax-cn/) — $0.2/1M: minimax/MiniMax-M2.7, minimax/MiniMax-M2.7-highspeed, minimax/MiniMax-M2.5, minimax/MiniMax-M2.5-highspeed

Kimi (kimi/, kimi-coding/, kimi-coding-apikey/) — $9/เดือนแบบเหมาจ่ายหรือคิดตามการใช้งาน: kimi/kimi-k2.6, kimi/kimi-k2.5

DeepSeek (ds/) — คีย์ API: ds/deepseek-v4-pro, ds/deepseek-v4-flash

Groq (groq/) — เร็วเป็นพิเศษ: groq/llama-3.3-70b-versatile, groq/meta-llama/llama-4-maverick-17b-128e-instruct, groq/qwen/qwen3-32b, groq/openai/gpt-oss-120b

xAI (xai/) — Grok แบบเนทีฟ: xai/grok-4.3, xai/grok-4.20-multi-agent-0309, xai/grok-4.20-0309-reasoning, xai/grok-4.20-0309-non-reasoning

Mistral (mistral/) — โฮสต์ในสหภาพยุโรป: mistral/mistral-large-latest, mistral/mistral-medium-3-5, mistral/mistral-small-latest, mistral/devstral-latest, mistral/codestral-latest

Perplexity (pplx/) — เสริมด้วยการค้นหา: pplx/sonar-deep-research, pplx/sonar-reasoning-pro, pplx/sonar-pro, pplx/sonar

Together AI (together/) — โอเพนซอร์ส: together/meta-llama/Llama-3.3-70B-Instruct-Turbo-Free (ฟรี), together/meta-llama/Llama-Vision-Free, together/deepseek-ai/DeepSeek-R1-Distill-Llama-70B-Free, together/deepseek-ai/DeepSeek-R1, together/Qwen/Qwen3-235B-A22B, together/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8

Fireworks AI (fireworks/) — การอนุมานที่รวดเร็ว: fireworks/accounts/fireworks/models/kimi-k2p6, fireworks/accounts/fireworks/models/minimax-m2p7, fireworks/accounts/fireworks/models/qwen3p6-plus, fireworks/accounts/fireworks/models/glm-5p1, fireworks/accounts/fireworks/models/deepseek-v4-pro

Cerebras (cerebras/) — ระดับเวเฟอร์: cerebras/zai-glm-4.7, cerebras/gpt-oss-120b

Cohere (cohere/) — มุ่งเน้น RAG: cohere/command-a-reasoning-08-2025, cohere/command-a-vision-07-2025, cohere/command-a-03-2025, cohere/command-r-08-2024

NVIDIA NIM (nvidia/) — สำหรับองค์กร: nvidia/z-ai/glm-5.1, nvidia/minimaxai/minimax-m2.7, nvidia/google/gemma-4-31b-it, nvidia/mistralai/mistral-small-4-119b-2603, nvidia/mistralai/mistral-large-3-675b-instruct-2512, nvidia/qwen/qwen3.5-397b-a17b, nvidia/deepseek-ai/deepseek-v4-pro, nvidia/openai/gpt-oss-120b, nvidia/nvidia/nemotron-3-super-120b-a12b

Baidu Qianfan (qianfan/) — ERNIE: qianfan/ernie-5.1, qianfan/ernie-5.0-thinking-latest, qianfan/ernie-x1.1

Ollama Cloud (ollama-cloud/): ollama-cloud/deepseek-v4-pro, ollama-cloud/deepseek-v4-flash, ollama-cloud/kimi-k2.6, ollama-cloud/glm-5.1, ollama-cloud/minimax-m2.7, ollama-cloud/gemma4:31b, ollama-cloud/qwen3.5:397b

Gemini (Google Cloud gemini/): ซิงค์แบบเรียลไทม์จาก Google ตามคีย์ API — ไม่มีรายการแบบคงที่ เชื่อมต่อคีย์ใน แดชบอร์ด → ผู้ให้บริการ แล้วใช้ โมเดลที่พร้อมใช้งาน เพื่อนำเข้าแค็ตตาล็อกปัจจุบัน (เช่น gemini/gemini-3-pro, gemini/gemini-3-flash)

ผู้ให้บริการอื่นที่เข้ากันได้ (บางส่วน): cohere, databricks, snowflake, together, vertex, alibaba, alibaba-cn, bedrock (ผ่าน aws-bedrock), azure-ai, openrouter (แค็ตตาล็อกแบบส่งผ่าน), siliconflow, hyperbolic, huggingface, featherless-ai, cloudflare-ai, scaleway, deepinfra, vercel-ai-gateway, bazaarlink, friendliai, nous-research, reka, volcengine, ai21, gigachat แต่ละรายดูแลรายการโมเดลของตนเองใน providerRegistry.ts และสามารถซิงค์อัตโนมัติได้เมื่อผู้ให้บริการเปิดเผยเอนด์พอยต์ /models

หมายเหตุเกี่ยวกับรหัสโมเดล: OmniRoute ใช้รหัสแบบเนทีฟของผู้ให้บริการ (claude-opus-4-8, gpt-5.5, glm-5.1, MiniMax-M2.7, kimi-k2.5, grok-4.20-0309-reasoning) บางรหัสมีหมายเลขเวอร์ชันที่ใช้จุด เนื่องจาก API ต้นทางกำหนดไว้เช่นนั้น หากโมเดลไม่อยู่ในรายการข้างต้น ให้เรียกใช้ omniroute models --search <term> หรือเรียก GET /api/models/catalog เพื่อยืนยันความพร้อมใช้งาน


🧩 ฟีเจอร์ขั้นสูง

โมเดลแบบกำหนดเอง

เพิ่ม ID โมเดลใดๆ ให้กับผู้ให้บริการรายใดก็ได้ โดยไม่ต้องรอการอัปเดตแอป:

# ผ่าน API
curl -X POST http://localhost:20128/api/provider-models \
  -H "Content-Type: application/json" \
  -d '{"provider": "openai", "modelId": "gpt-5.2", "modelName": "GPT-5.2"}'

# แสดงรายการ: curl http://localhost:20128/api/provider-models?provider=openai
# ลบ: curl -X DELETE "http://localhost:20128/api/provider-models?provider=openai&model=gpt-5.2"

หรือใช้แดชบอร์ด: ผู้ให้บริการ → [ผู้ให้บริการ] → โมเดลแบบกำหนดเอง

หมายเหตุ:

  • ผู้ให้บริการ OpenRouter และผู้ให้บริการที่เข้ากันได้กับ OpenAI/Anthropic จะได้รับการจัดการจาก โมเดลที่พร้อมใช้งาน เท่านั้น การเพิ่มด้วยตนเอง การนำเข้า และการซิงค์อัตโนมัติทั้งหมดจะถูกรวมไว้ในรายการโมเดลที่พร้อมใช้งานเดียวกัน ดังนั้นจึงไม่มีส่วนโมเดลแบบกำหนดเองแยกต่างหากสำหรับผู้ให้บริการเหล่านั้น
  • ส่วน โมเดลแบบกำหนดเอง มีไว้สำหรับผู้ให้บริการที่ไม่มีระบบนำเข้าโมเดลที่พร้อมใช้งานแบบมีการจัดการ

การเชื่อมโยง OmniRoute หลายโหนด

สามารถเพิ่มเกตเวย์ OmniRoute อื่นเป็นผู้ให้บริการ แบบกำหนดเองที่เข้ากันได้กับ OpenAI ได้ โดยใช้ URL ฐาน /v1 ของโหนดปลายทางและคีย์ API เฉพาะที่มีสิทธิ์ขั้นต่ำซึ่งออกโดยโหนดนั้น

สำหรับสายโซ่แบบไปกลับหรือแบบหลายฮอป ให้เปิดใช้ตัวป้องกันลูปแบบเลือกเปิดบนทุกเกตเวย์:

# gateway-a
OMNIROUTE_INSTANCE_ID=gateway-a
OMNIROUTE_PEER_URLS=http://gateway-b:20128/v1
OMNIROUTE_PEER_MAX_HOPS=4
# gateway-b
OMNIROUTE_INSTANCE_ID=gateway-b
OMNIROUTE_PEER_URLS=http://gateway-a:20128/v1
OMNIROUTE_PEER_MAX_HOPS=4

เฉพาะคำขอที่ส่งไปยัง URL ของโหนดปลายทางซึ่งระบุไว้ในรายการอนุญาตอย่างชัดเจนเท่านั้นที่จะได้รับส่วนหัว X-OmniRoute-Peer-Trace เกตเวย์จะปฏิเสธ ID อินสแตนซ์ที่ซ้ำกันหรือเมื่อโควตาฮอปหมดลง ด้วย HTTP 508 Loop Detected ส่วนผู้ให้บริการต้นทางทั่วไปจะไม่ได้รับข้อมูลเมตาของโหนดปลายทาง

การเชื่อมโยงโหนดไม่ใช่การจำลองฐานข้อมูลหรือการทำโฮสต์เฟลโอเวอร์ แต่ละเกตเวย์จะเก็บสถานะ SQLite, แคช, ตัวนับอัตรา และเซสชันแยกจากกัน ใช้พร็อกซีย้อนกลับที่มีการตรวจสอบสถานะหรือระบบ เฟลโอเวอร์ฝั่งไคลเอ็นต์สำหรับความพร้อมใช้งานแบบแอ็กทีฟ/แพสซีฟหรือแอ็กทีฟ/แอ็กทีฟ และห้ามเมานต์ฐานข้อมูล SQLite หนึ่งฐาน เข้ากับอินสแตนซ์ OmniRoute หลายอินสแตนซ์ที่กำลังทำงานอยู่

เส้นทางเฉพาะสำหรับผู้ให้บริการ

ส่งคำขอไปยังผู้ให้บริการที่ระบุโดยตรง พร้อมการตรวจสอบความถูกต้องของโมเดล:

POST http://localhost:20128/v1/providers/openai/chat/completions
POST http://localhost:20128/v1/providers/openai/embeddings
POST http://localhost:20128/v1/providers/fireworks/images/generations

ระบบจะเพิ่มคำนำหน้าผู้ให้บริการโดยอัตโนมัติหากไม่มี โมเดลที่ไม่ตรงกันจะส่งคืน 400

การกำหนดค่าพร็อกซีเครือข่าย

# ตั้งค่าพร็อกซีส่วนกลาง
curl -X PUT http://localhost:20128/api/settings/proxy \
  -d '{"global": {"type":"http","host":"proxy.example.com","port":"8080"}}'

# พร็อกซีแยกตามผู้ให้บริการ
curl -X PUT http://localhost:20128/api/settings/proxy \
  -d '{"providers": {"openai": {"type":"socks5","host":"proxy.example.com","port":"1080"}}}'

# ทดสอบพร็อกซี
curl -X POST http://localhost:20128/api/settings/proxy/test \
  -d '{"proxy":{"type":"socks5","host":"proxy.example.com","port":"1080"}}'

ลำดับความสำคัญ: เฉพาะคีย์ → เฉพาะคอมโบ → เฉพาะผู้ให้บริการ → ส่วนกลาง → สภาพแวดล้อม

API แค็ตตาล็อกโมเดล

curl http://localhost:20128/api/models/catalog

ส่งคืนโมเดลที่จัดกลุ่มตามผู้ให้บริการพร้อมประเภท (chat, embedding, image)

การซิงค์ผ่านคลาวด์

  • ซิงค์ผู้ให้บริการ คอมโบ และการตั้งค่าระหว่างอุปกรณ์
  • ซิงค์เบื้องหลังโดยอัตโนมัติ พร้อมหมดเวลาและหยุดทันทีเมื่อล้มเหลว
  • ในระบบใช้งานจริง ควรใช้ NEXT_PUBLIC_BASE_URL/NEXT_PUBLIC_CLOUD_URL ฝั่งเซิร์ฟเวอร์

Cloudflare Quick Tunnel

  • พร้อมใช้งานใน แดชบอร์ด → เอนด์พอยต์ สำหรับ Docker และการติดตั้งแบบโฮสต์เองอื่นๆ
  • สร้าง URL ชั่วคราว https://*.trycloudflare.com ซึ่งส่งต่อไปยังเอนด์พอยต์ /v1 ปัจจุบันของคุณที่เข้ากันได้กับ OpenAI
  • การเปิดใช้ครั้งแรกจะติดตั้ง cloudflared เฉพาะเมื่อจำเป็น ส่วนการรีสตาร์ตในภายหลังจะใช้ไบนารีที่จัดการไว้เดิม
  • Quick Tunnel จะไม่ถูกกู้คืนโดยอัตโนมัติหลังจากรีสตาร์ต OmniRoute หรือคอนเทนเนอร์ ให้เปิดใช้อีกครั้งจากแดชบอร์ดเมื่อต้องการ
  • URL ของ Tunnel เป็นแบบชั่วคราวและจะเปลี่ยนทุกครั้งที่คุณหยุด/เริ่ม Tunnel
  • Quick Tunnel ที่มีการจัดการจะใช้การรับส่งข้อมูลแบบ HTTP/2 เป็นค่าเริ่มต้น เพื่อหลีกเลี่ยงคำเตือนเกี่ยวกับบัฟเฟอร์ QUIC UDP ที่รบกวนบันทึกในคอนเทนเนอร์ซึ่งมีทรัพยากรจำกัด
  • ตั้งค่า CLOUDFLARED_PROTOCOL=quic หรือ auto หากต้องการแทนที่ตัวเลือกการรับส่งข้อมูลที่มีการจัดการ
  • ตั้งค่า CLOUDFLARED_BIN หากต้องการใช้ไบนารี cloudflared ที่ติดตั้งไว้ล่วงหน้าแทนการดาวน์โหลดที่มีการจัดการ
  • แผง Cloudflare Quick Tunnel, Tailscale Funnel และ ngrok Tunnel สามารถแสดงหรือซ่อนได้ใน การตั้งค่า → รูปลักษณ์ การซ่อนแผงจะไม่หยุด Tunnel ที่กำลังทำงานอยู่

ความสามารถอัจฉริยะของเกตเวย์ LLM (ระยะที่ 9)

  • แคชเชิงความหมาย — แคชการตอบกลับแบบไม่สตรีมที่มี temperature=0 โดยอัตโนมัติ (ข้ามได้ด้วย X-OmniRoute-No-Cache: true)
  • การทำให้คำขอเป็นแบบ Idempotent — กำจัดคำขอซ้ำภายใน 5 วินาทีผ่านส่วนหัว Idempotency-Key หรือ X-Request-Id
  • การติดตามความคืบหน้า — เปิดรับเหตุการณ์ SSE event: progress ได้ตามต้องการผ่านส่วนหัว X-OmniRoute-Progress: true

พื้นที่ทดลองตัวแปล

เข้าถึงผ่าน แดชบอร์ด → ตัวแปล ใช้ดีบักและแสดงภาพวิธีที่ OmniRoute แปลคำขอ API ระหว่างผู้ให้บริการ

โหมด วัตถุประสงค์
พื้นที่ทดลอง เลือกรูปแบบต้นทาง/ปลายทาง วางคำขอ และดูผลลัพธ์ที่แปลแล้วได้ทันที
ตัวทดสอบแชต ส่งข้อความแชตจริงผ่านพร็อกซีและตรวจสอบวงจรคำขอ/การตอบกลับทั้งหมด
ชุดทดสอบ เรียกใช้การทดสอบแบบกลุ่มกับรูปแบบหลายชุดเพื่อยืนยันความถูกต้องของการแปล
การเฝ้าติดตามสด ดูการแปลแบบเรียลไทม์ขณะที่คำขอไหลผ่านพร็อกซี

กรณีการใช้งาน:

  • ดีบักสาเหตุที่ชุดไคลเอ็นต์/ผู้ให้บริการบางชุดทำงานล้มเหลว
  • ตรวจสอบว่าแท็กการคิด การเรียกใช้เครื่องมือ และพรอมต์ระบบได้รับการแปลอย่างถูกต้อง
  • เปรียบเทียบความแตกต่างของรูปแบบระหว่าง OpenAI, Claude, Gemini และรูปแบบ Responses API

กลยุทธ์การกำหนดเส้นทาง

กำหนดค่าผ่าน แดชบอร์ด → การตั้งค่า → การกำหนดเส้นทาง แดชบอร์ดแสดงกลยุทธ์ที่ใช้งานบ่อยที่สุด 6 แบบ ส่วนคอมโบและเราเตอร์อัตโนมัติรองรับกลยุทธ์ภายในที่หลากหลายกว่า

กลยุทธ์ที่แสดงบนแดชบอร์ด (การกำหนดเส้นทางระดับบัญชี):

กลยุทธ์ คำอธิบาย
ใช้บัญชีแรกจนเต็ม ใช้บัญชีตามลำดับความสำคัญ — บัญชีหลักจะจัดการคำขอทั้งหมดจนกว่าจะไม่พร้อมใช้งาน
วนรอบ หมุนเวียนผ่านทุกบัญชีโดยมีขีดจำกัดการยึดบัญชีที่กำหนดค่าได้ (ค่าเริ่มต้น: 3 การเรียกต่อบัญชี)
P2C (Power of Two Choices) สุ่มเลือก 2 บัญชีและกำหนดเส้นทางไปยังบัญชีที่มีสถานะดีกว่า — กระจายโหลดโดยคำนึงถึงสถานะความพร้อม
สุ่ม สุ่มเลือกบัญชีสำหรับแต่ละคำขอโดยใช้อัลกอริทึมสับเปลี่ยน Fisher-Yates
ใช้งานน้อยที่สุด กำหนดเส้นทางไปยังบัญชีที่มีประทับเวลา lastUsedAt เก่าที่สุด เพื่อกระจายทราฟฟิกอย่างสม่ำเสมอ
ปรับต้นทุนให้เหมาะสม กำหนดเส้นทางไปยังบัญชีที่มีค่าลำดับความสำคัญต่ำที่สุด เพื่อเลือกผู้ให้บริการที่มีต้นทุนต่ำที่สุด

กลยุทธ์คอมโบและอัตโนมัติขั้นสูง (กำหนดค่าได้สำหรับแต่ละคอมโบหรือผ่านคำนำหน้า auto/* — ดู AUTO-COMBO.md):

  • priority — ใช้ลำดับอย่างเคร่งครัดและไม่วนรอบ
  • weighted — แบ่งทราฟฟิกตามสัดส่วนด้วยค่าน้ำหนักของแต่ละโมเดล
  • fill-first — ใช้โมเดลแรกจนกว่าจะถึงขีดจำกัด
  • round-robin / strict-random / random
  • p2c (Power of Two Choices)
  • least-used และ cost-optimized
  • auto — เลือกจากผู้สมัครทั้งหมดโดยอิงคะแนน
  • lkgp (Last Known Good Provider) — ยึดผู้ให้บริการรายล่าสุดที่ทำงานสำเร็จ แล้วจึงสำรองไปใช้กฎ
  • context-optimized — เลือกโมเดลที่มีหน้าต่างบริบทว่างมากที่สุด
  • context-relay — เชื่อมต่อโมเดลที่รองรับบริบทยาวเป็นทอดๆ สำหรับรอบการสนทนาต่อเนื่อง

ส่วนหัวเซสชันแบบยึดติดจากภายนอก

สำหรับการรักษาความสัมพันธ์กับเซสชันภายนอก (เช่น เอเจนต์ Claude Code/Codex ที่อยู่หลังพร็อกซีย้อนกลับ) ให้ส่ง:

X-Session-Id: your-session-key

OmniRoute ยังยอมรับ x_session_id และส่งคืนคีย์เซสชันที่มีผลจริงใน X-OmniRoute-Session-Id

หากคุณใช้ Nginx และส่งส่วนหัวในรูปแบบขีดล่าง ให้เปิดใช้งาน:

underscores_in_headers on;

นามแฝงโมเดลแบบไวลด์การ์ด

สร้างรูปแบบไวลด์การ์ดเพื่อแมปชื่อโมเดลใหม่:

รูปแบบ: claude-sonnet-*     →  เป้าหมาย: cc/claude-sonnet-4-6
รูปแบบ: gpt-*               →  เป้าหมาย: gh/gpt-5.3-codex

ไวลด์การ์ดรองรับ * (อักขระใดๆ จำนวนเท่าใดก็ได้) และ ? (อักขระเดียว)

เชนสำรอง

กำหนดเชนสำรองส่วนกลางที่ใช้กับคำขอทั้งหมด:

เชน: production-fallback
  1. cc/claude-opus-4-7
  2. gh/gpt-5.3-codex
  3. glm/glm-4.7

ความยืดหยุ่นและเซอร์กิตเบรกเกอร์

กำหนดค่าผ่าน แดชบอร์ด → การตั้งค่า → ความยืดหยุ่น

OmniRoute ใช้กลไกความยืดหยุ่นระดับผู้ให้บริการซึ่งประกอบด้วย 5 ส่วน:

  1. คิวคำขอและการควบคุมจังหวะ — การควบคุมรูปแบบคำขอในระดับระบบ:

    • คำขอต่อนาที (RPM) — จำนวนคำขอสูงสุดต่อนาทีสำหรับแต่ละบัญชี
    • เวลาขั้นต่ำระหว่างคำขอ — ช่วงห่างขั้นต่ำเป็นมิลลิวินาทีระหว่างคำขอ
    • จำนวนคำขอพร้อมกันสูงสุด — จำนวนคำขอพร้อมกันสูงสุดต่อบัญชี
  2. ช่วงพักการเชื่อมต่อ — การกำหนดค่าตามประเภทการยืนยันตัวตนสำหรับการเชื่อมต่อหนึ่งรายการหลังเกิดความล้มเหลวที่ลองใหม่ได้:

    • ช่วงพักพื้นฐาน — ช่วงพักเริ่มต้นสำหรับความล้มเหลวจากต้นทางที่ลองใหม่ได้
    • ใช้คำแนะนำการลองใหม่จากต้นทาง — ปฏิบัติตาม Retry-After หรือคำแนะนำการรีเซ็ตที่เชื่อถือได้เมื่อมีการระบุ
    • จำนวนขั้นตอนถอยกลับสูงสุด — ระดับการถอยกลับแบบเอ็กซ์โพเนนเชียลสูงสุดสำหรับความล้มเหลวที่เกิดซ้ำ
  3. เซอร์กิตเบรกเกอร์ของผู้ให้บริการ — ติดตามความล้มเหลวของผู้ให้บริการตั้งแต่ต้นทางถึงปลายทาง ทำเครื่องหมายผู้ให้บริการว่าประสิทธิภาพลดลงเมื่อถึงเกณฑ์คำเตือนที่กำหนดค่าไว้ และเปิดเบรกเกอร์เมื่อถึงเกณฑ์ความล้มเหลวที่กำหนดค่าไว้:

    • เกณฑ์การลดระดับ — จำนวนความล้มเหลวต่อเนื่องของผู้ให้บริการก่อนเข้าสู่ DEGRADED
    • เกณฑ์ความล้มเหลว — จำนวนความล้มเหลวต่อเนื่องของผู้ให้บริการก่อนเข้าสู่ OPEN
    • ระยะหมดเวลาสำหรับการรีเซ็ต — ช่วงเวลาก่อนทดสอบผู้ให้บริการอีกครั้ง
    • CLOSED (ปกติ) — คำขอไหลผ่านตามปกติ
    • DEGRADED — คำขอยังคงไหลผ่านขณะที่ระบบติดตามความล้มเหลวที่เพิ่มสูงขึ้น
    • OPEN — ผู้ให้บริการถูกบล็อกชั่วคราวหลังเกิดความล้มเหลวซ้ำๆ
    • HALF_OPEN — กำลังทดสอบว่าผู้ให้บริการกู้คืนแล้วหรือไม่

    การจำกัดอัตรา 429 ที่มีขอบเขตระดับการเชื่อมต่อจะยังคงอยู่ใน ช่วงพักการเชื่อมต่อ และไม่นับรวมในเบรกเกอร์ของผู้ให้บริการ

    สถานะรันไทม์ของเบรกเกอร์ผู้ให้บริการจะแสดงเฉพาะบน แดชบอร์ด → สถานะระบบ เท่านั้น

  4. รอช่วงพัก — หากการเชื่อมต่อที่เป็นตัวเลือกทั้งหมดอยู่ในช่วงพัก OmniRoute สามารถรอจนกว่าช่วงพักที่สิ้นสุดเร็วที่สุดจะหมดลง แล้วลองคำขอเดิมของไคลเอนต์อีกครั้งโดยอัตโนมัติ

  5. การตรวจหาอัตราจำกัดโดยอัตโนมัติ — เมื่อผู้ให้บริการต้นทางส่งคืนช่วงเวลารอที่ชัดเจน คำแนะนำเหล่านั้นจะแทนที่ช่วงพักการเชื่อมต่อภายในเมื่อเปิดใช้งานการตั้งค่านี้

เคล็ดลับ: ใช้หน้า สถานะระบบ เพื่อตรวจสอบและรีเซ็ตเบรกเกอร์ผู้ให้บริการที่กำลังทำงานอยู่หลังเกิดเหตุขัดข้อง หน้าความยืดหยุ่นใช้สำหรับเปลี่ยนการกำหนดค่าเท่านั้น


การส่งออก / นำเข้าฐานข้อมูล

จัดการข้อมูลสำรองของฐานข้อมูลใน แดชบอร์ด → การตั้งค่า → ระบบและพื้นที่จัดเก็บข้อมูล

การดำเนินการ คำอธิบาย
ส่งออกฐานข้อมูล ดาวน์โหลดฐานข้อมูล SQLite ปัจจุบันเป็นไฟล์ .sqlite
ส่งออกทั้งหมด (.tar.gz) ดาวน์โหลดไฟล์สำรองแบบเต็ม ซึ่งประกอบด้วยฐานข้อมูล การตั้งค่า คอมโบ การเชื่อมต่อผู้ให้บริการ (ไม่รวมข้อมูลประจำตัว) และข้อมูลเมตาของคีย์ API
นำเข้าฐานข้อมูล อัปโหลดไฟล์ .sqlite เพื่อแทนที่ฐานข้อมูลปัจจุบัน ระบบจะสร้างข้อมูลสำรองก่อนนำเข้าโดยอัตโนมัติ เว้นแต่กำหนด DISABLE_SQLITE_AUTO_BACKUP=true
# API: ส่งออกฐานข้อมูล
curl -o backup.sqlite http://localhost:20128/api/db-backups/export

# API: ส่งออกทั้งหมด (ไฟล์เก็บถาวรแบบเต็ม)
curl -o backup.tar.gz http://localhost:20128/api/db-backups/exportAll

# API: นำเข้าฐานข้อมูล
curl -X POST http://localhost:20128/api/db-backups/import \
  -F "file=@backup.sqlite"

การตรวจสอบการนำเข้า: ไฟล์ที่นำเข้าจะได้รับการตรวจสอบความสมบูรณ์ (การตรวจสอบด้วย SQLite pragma), ตารางที่จำเป็น (provider_connections, provider_nodes, combos, api_keys) และขนาด (สูงสุด 100MB)

กรณีการใช้งาน:

  • ย้าย OmniRoute ระหว่างเครื่อง
  • สร้างข้อมูลสำรองภายนอกเพื่อการกู้คืนจากภัยพิบัติ
  • แชร์การกำหนดค่าระหว่างสมาชิกในทีม (ส่งออกทั้งหมด → แชร์ไฟล์เก็บถาวร)

แดชบอร์ดการตั้งค่า

หน้าการตั้งค่าแบ่งออกเป็น 7 แท็บ เพื่อให้นำทางได้ง่าย:

แท็บ เนื้อหา
ทั่วไป เครื่องมือจัดเก็บข้อมูลของระบบ ลักษณะการทำงานเริ่มต้น และการมองเห็นทันเนล Endpoint
รูปลักษณ์ การควบคุมธีม (สว่าง/มืด/ระบบ), การมองเห็นแถบด้านข้าง และตัวเลือกเปิด/ปิดแผงสำหรับการ์ดทันเนล Cloudflare/Tailscale/ngrok
AI งบประมาณการคิด (ส่งผ่าน / ตัดออกอัตโนมัติ / กำหนดเอง / ปรับตามสถานการณ์ — ดู THINKING_BUDGET.md), พรอมต์ระบบส่วนกลาง และสถิติแคชพรอมต์
ความปลอดภัย การตั้งค่าการเข้าสู่ระบบ/รหัสผ่าน, การควบคุมการเข้าถึง IP, การยืนยันตัวตน API สำหรับ /models, การบล็อกผู้ให้บริการ และการป้องกันการแทรกพรอมต์
การกำหนดเส้นทาง กลยุทธ์การกำหนดเส้นทางส่วนกลาง (เติมรายการแรก / วนรอบ / P2C / สุ่ม / ใช้น้อยที่สุด / ปรับต้นทุนให้เหมาะสม), นามแฝงโมเดลแบบไวลด์การ์ด, ลำดับการสำรอง และค่าเริ่มต้นของคอมโบ
ความยืดหยุ่น คิวคำขอ, ช่วงพักการเชื่อมต่อ, การกำหนดค่าตัวตัดวงจรของผู้ให้บริการ และลักษณะการรอให้ช่วงพักสิ้นสุด
ขั้นสูง การกำหนดค่าพร็อกซีส่วนกลาง (HTTP/SOCKS5) และการแทนที่พร็อกซีสำหรับผู้ให้บริการแต่ละราย

แท็บทั่วไปจะไม่แสดงหมายเหตุเกี่ยวกับการบันทึกและแคชแบบอ่านอย่างเดียวซ้ำอีกต่อไป การตั้งค่าการเก็บรักษาและ การปรับฐานข้อมูลให้เหมาะสมจะถูกบันทึกผ่าน /api/settings/database ส่วนการล้างแคชด้วยตนเองใช้ DELETE /api/cache จำนวนแถวสูงสุดของบันทึกคำขอและบันทึกพร็อกซีควบคุมโดย CALL_LOGS_TABLE_MAX_ROWS และ PROXY_LOGS_TABLE_MAX_ROWS


การจัดการต้นทุนและงบประมาณ

เข้าถึงผ่าน แดชบอร์ด → ต้นทุน

แท็บ วัตถุประสงค์
งบประมาณ กำหนดวงเงินการใช้จ่ายต่อคีย์ API พร้อมงบประมาณรายวัน/รายสัปดาห์/รายเดือนและการติดตามแบบเรียลไทม์
ราคา ดูและแก้ไขรายการราคาโมเดล — ต้นทุนต่อโทเค็นอินพุต/เอาต์พุต 1K สำหรับผู้ให้บริการแต่ละราย
# API: กำหนดงบประมาณ
curl -X POST http://localhost:20128/api/usage/budget \
  -H "Content-Type: application/json" \
  -d '{"keyId": "key-123", "limit": 50.00, "period": "monthly"}'

# API: ดูสถานะงบประมาณปัจจุบัน
curl http://localhost:20128/api/usage/budget

การติดตามต้นทุน: ทุกคำขอจะบันทึกการใช้โทเค็นและคำนวณต้นทุนโดยใช้ตารางราคา ดูรายละเอียดแยกตามผู้ให้บริการ โมเดล และคีย์ API ได้ที่ แดชบอร์ด → การใช้งาน


การถอดเสียงจากไฟล์เสียง

OmniRoute รองรับการถอดเสียงผ่าน Endpoint ที่เข้ากันได้กับ OpenAI:

POST /v1/audio/transcriptions
Authorization: Bearer your-api-key
Content-Type: multipart/form-data

# ตัวอย่างด้วย curl
curl -X POST http://localhost:20128/v1/audio/transcriptions \
  -H "Authorization: Bearer your-api-key" \
  -F "file=@audio.mp3" \
  -F "model=openai/whisper-1"

deepgram/nova-3 เป็นเส้นทางดั้งเดิมของ Deepgram และต้องใช้คีย์ API ของ Deepgram หากกำหนดค่าไว้เฉพาะ OpenRouter ให้ใช้ openrouter/deepgram/nova-3

ผู้ให้บริการ เสียงเป็นข้อความ (การถอดเสียง):

  • openai/ (เข้ากันได้กับ Whisper)
  • groq/ (Groq Whisper Turbo)
  • deepgram/ (ตระกูล Nova)
  • assemblyai/
  • nvidia/ (Parakeet, Canary)
  • huggingface/ (รุ่นย่อยของ Whisper)
  • qwen/

ผู้ให้บริการ ข้อความเป็นเสียงพูด (POST /v1/audio/speech):

  • openai/ (tts-1, tts-1-hd)
  • hyperbolic/
  • deepgram/ (Aura)
  • nvidia/ (Magpie TTS)
  • elevenlabs/
  • huggingface/
  • inworld/
  • cartesia/
  • playht/
  • kie/
  • aws-polly/
  • xiaomi-mimo/
  • coqui/, tortoise/
  • qwen/

รูปแบบเสียงที่รองรับสำหรับการถอดเสียง: mp3, wav, m4a, flac, ogg, webm รูปแบบเอาต์พุต TTS ขึ้นอยู่กับผู้ให้บริการ (mp3, wav, opus, pcm, mulaw)


กลยุทธ์การปรับสมดุลคอมโบ

กำหนดค่าการปรับสมดุลสำหรับแต่ละคอมโบได้ที่ แดชบอร์ด → คอมโบ → สร้าง/แก้ไข → กลยุทธ์

กลยุทธ์ คำอธิบาย
วนรอบ หมุนเวียนใช้งานโมเดลตามลำดับ
ตามลำดับความสำคัญ พยายามใช้โมเดลแรกเสมอ และสลับไปใช้โมเดลสำรองเมื่อเกิดข้อผิดพลาดเท่านั้น
สุ่ม เลือกโมเดลแบบสุ่มจากคอมโบสำหรับแต่ละคำขอ
ถ่วงน้ำหนัก กำหนดเส้นทางตามสัดส่วนของน้ำหนักที่กำหนดให้แต่ละโมเดล
ใช้งานน้อยที่สุด กำหนดเส้นทางไปยังโมเดลที่มีคำขอล่าสุดน้อยที่สุด (ใช้เมตริกของคอมโบ)
ปรับต้นทุนให้เหมาะสม กำหนดเส้นทางไปยังโมเดลที่พร้อมใช้งานและมีราคาถูกที่สุด (ใช้ตารางราคา)

สามารถตั้งค่าเริ่มต้นส่วนกลางของคอมโบได้ที่ แดชบอร์ด → การตั้งค่า → การกำหนดเส้นทาง → ค่าเริ่มต้นของคอมโบ โดยค่าเริ่มต้น ระยะหมดเวลาของเป้าหมายคอมโบจะสืบทอดระยะหมดเวลาของคำขอปัจจุบัน ใช้ ระยะหมดเวลาของเป้าหมาย (วินาที) ในค่าเริ่มต้นของคอมโบหรือในคอมโบแต่ละรายการ เฉพาะเมื่อต้องการให้ขีดจำกัดต่อเป้าหมายที่สั้นกว่า เรียกใช้การสลับไปยังเป้าหมายสำรองได้เร็วขึ้น

การเพิ่มประสิทธิภาพคอมโบแบบไร้เวลาแฝงต้องเปิดใช้งานเอง ปล่อยให้ การเพิ่มประสิทธิภาพแบบไร้เวลาแฝง ปิดอยู่เพื่อ ป้องกันไม่ให้ฟีเจอร์ด้านเวลาแฝงเหล่านี้แข่งกับเป้าหมายสำรอง ข้ามเป้าหมายตามประวัติ TTFT หรือบีบอัดคำขอสำรอง การเปิดใช้งานจะอนุญาตให้ใช้การส่งคำขอเผื่อที่กำหนดค่าไว้ การข้ามตามการคาดการณ์ TTFT และการบีบอัดการสลับไปยังเป้าหมายสำรองเชิงรุก เพื่อแลกความเที่ยงตรงของการกำหนดเส้นทาง/คำขอกับเวลาแฝงส่วนท้ายที่ลดลง

ปิดใช้งาน บัฟเฟอร์โทเค็นการให้เหตุผล เมื่อผู้ให้บริการต้นทางกำหนดขีดจำกัด max_tokens / maxOutputTokens อย่างเคร่งครัด เมื่อเปิดใช้งาน การกำหนดเส้นทางคอมโบจะเพิ่มพื้นที่สำรองสำหรับโมเดลการให้เหตุผล เฉพาะโมเดลที่ทราบขีดจำกัดเอาต์พุต และจะคงขีดจำกัดโทเค็นของไคลเอ็นต์ไว้โดยไม่เปลี่ยนแปลง หากค่าที่บัฟเฟอร์อย่างปลอดภัย จะเกินขีดจำกัดดังกล่าว หากขีดจำกัดของไคลเอ็นต์สูงกว่าขีดจำกัดที่ทราบอยู่แล้ว OmniRoute จะลดค่าให้เท่ากับขีดจำกัดนั้นก่อนส่งคำขอไปยังต้นทาง


แดชบอร์ดสถานะระบบ

เข้าถึงได้ผ่าน แดชบอร์ด → สถานะระบบ ภาพรวมสถานะระบบแบบเรียลไทม์พร้อมการ์ด 6 รายการ:

การ์ด สิ่งที่แสดง
สถานะระบบ เวลาทำงาน เวอร์ชัน การใช้หน่วยความจำ ไดเรกทอรีข้อมูล
สถานะผู้ให้บริการ สถานะรันไทม์ของตัวตัดวงจรผู้ให้บริการส่วนกลาง
ขีดจำกัดอัตรา ช่วงพักการเชื่อมต่อที่ใช้งานอยู่ต่อบัญชี พร้อมเวลาที่เหลือ
การล็อกที่ใช้งานอยู่ การล็อกเฉพาะโมเดลและการยกเว้นชั่วคราวที่ใช้งานอยู่
แคชลายเซ็น สถิติแคชการขจัดข้อมูลซ้ำ (คีย์ที่ใช้งานอยู่ อัตราการพบข้อมูลในแคช)
เทเลเมทรีเวลาแฝง การรวมค่าเวลาแฝง p50/p95/p99 ต่อผู้ให้บริการ

เคล็ดลับระดับมืออาชีพ: หน้าสถานะระบบจะรีเฟรชอัตโนมัติทุก 10 วินาที ใช้การ์ดตัวตัดวงจรเพื่อระบุว่าผู้ให้บริการรายใดกำลังประสบปัญหา


🤖 การกำหนดเส้นทางอัตโนมัติ (ไม่ต้องตั้งค่า)

OmniRoute มาพร้อมกับ เราเตอร์อัตโนมัติที่ขับเคลื่อนด้วยคะแนน ซึ่งเลือกโมเดลที่ดีที่สุดสำหรับแต่ละคำขอจากผู้ให้บริการที่เชื่อมต่อทั้งหมด โดยไม่ต้องดูแลคอมโบใดๆ เพียงส่งคำขอโดยใช้คำนำหน้า auto/* รายการใดรายการหนึ่ง แล้ว OmniRoute จะประกอบคอมโบเสมือนขึ้นทันที พร้อมให้คะแนนตัวเลือกโดยพิจารณาจากเวลาแฝง ต้นทุน อัตราความสำเร็จ ความเหมาะสมกับบริบท ความเหมาะสมของโมเดลต่องาน ความล้มเหลวล่าสุด โควตา และสถานะของเซอร์กิตเบรกเกอร์

คำนำหน้า ปรับให้เหมาะสมสำหรับ
auto ค่าเริ่มต้นแบบสมดุล (เวลาแฝง × ต้นทุน × อัตราความสำเร็จ)
auto/coding งานเขียนโค้ด: ให้ความสำคัญกับ Claude, GPT-5, GLM, Kimi, Qwen Coder และโมเดลเขียนโค้ดของ DeepSeek
auto/cheap ราคาต่อโทเค็นต่ำที่สุด โดยยอมรับเวลาแฝงที่สูงขึ้น
auto/fast เวลาแฝงต่ำที่สุด โดยไม่คำนึงถึงต้นทุน
auto/offline ผู้ให้บริการภายในเครื่องเท่านั้น (Ollama, vLLM, llama.cpp) — มีประโยชน์สำหรับระบบที่ตัดขาดจากเครือข่าย
auto/smart ให้ความสำคัญกับคุณภาพการให้เหตุผลเป็นอันดับแรก (Opus, GPT-5 xhigh, R1, การให้เหตุผลของ GLM 5.1)
auto/lkgp "ผู้ให้บริการล่าสุดที่ใช้งานได้" — ตรึงไว้กับผู้ให้บริการรายล่าสุดที่ทำงานสำเร็จ จากนั้นจึงย้อนกลับไปใช้กฎ

ตัวอย่าง:

curl -X POST http://localhost:20128/v1/chat/completions \
  -H "Authorization: Bearer $OMNIROUTE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "auto/coding",
    "messages": [{ "role": "user", "content": "ปรับโครงสร้างฟังก์ชัน Python นี้" }],
    "stream": true
  }'

เราเตอร์อัตโนมัติมีคำอธิบายฉบับสมบูรณ์อยู่ใน AUTO-COMBO.md ซึ่งรวมถึงวิธีปรับแต่งค่าน้ำหนักการให้คะแนน ขึ้นบัญชีดำผู้ให้บริการ และตรวจสอบการตัดสินใจกำหนดเส้นทางใน แดชบอร์ด → คอมโบอัตโนมัติ


🔌 การผสานรวม MCP และ A2A

OmniRoute เป็นทั้ง เซิร์ฟเวอร์ MCP (Model Context Protocol) และ เซิร์ฟเวอร์ A2A (Agent-to-Agent JSON-RPC 2.0) IDE หรือโฮสต์เอเจนต์ใดๆ ที่รองรับ MCP สามารถเรียกใช้เครื่องมือของ OmniRoute ได้โดยตรง โดยไม่ต้องมีแรปเปอร์เพิ่มเติม

การรับส่งข้อมูลของ MCP

  • SSE: http://localhost:20128/api/mcp/sse
  • HTTP แบบสตรีมได้: http://localhost:20128/api/mcp/stream
  • stdio: omniroute --mcp (สำหรับปลั๊กอิน IDE ที่ต้องการใช้ stdio)

เชื่อมต่อ Claude Desktop

แก้ไข ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) หรือไฟล์ที่เทียบเท่ากันบน Windows/Linux:

{
  "mcpServers": {
    "omniroute": {
      "command": "omniroute",
      "args": ["--mcp"]
    }
  }
}

เชื่อมต่อ Cursor / Continue / VS Code MCP

ใช้ URL ของ SSE http://localhost:20128/api/mcp/sse และคีย์ Bearer API ที่สร้างใน แดชบอร์ด → คีย์ API

ขอบเขตสิทธิ์

ปัจจุบัน MCP กำหนดขอบเขตสิทธิ์ที่มีชื่อไว้ 32 รายการ โดยคีย์ Bearer แต่ละคีย์สามารถจำกัดให้ใช้เฉพาะขอบเขตสิทธิ์ที่กำหนดได้ — ดูรายการขอบเขตสิทธิ์และเครื่องมือที่เป็นแหล่งอ้างอิงหลักได้ใน MCP-SERVER.md และดูสคีมา JSON-RPC ได้ใน A2A-SERVER.md


🧠 ระบบทักษะ

OmniRoute มี เฟรมเวิร์กทักษะ ที่ขยายความสามารถได้ (src/lib/skills/) เพื่อให้เอเจนต์และปลายทาง A2A สามารถเรียกใช้รูทีนเฉพาะด้านได้ (เช่น code-review, summarize, extract-facts, web-research)

  • UI มาร์เก็ตเพลส — เรียกดูและติดตั้งทักษะจาก แดชบอร์ด → ทักษะ
  • ขอบเขตต่อคีย์ — จำกัดว่า API key ใดสามารถเรียกใช้ทักษะใดได้บ้าง
  • ทักษะแบบกำหนดเอง — วางไฟล์ TypeScript ใน src/lib/a2a/skills/ ลงทะเบียนไฟล์ดังกล่าว แล้วทักษะนั้นจะพร้อมให้เรียกใช้ผ่าน A2A ได้ทันที

เอกสารอ้างอิงฉบับเต็ม: SKILLS.md


💾 ระบบหน่วยความจำ

OmniRoute จัดเก็บ หน่วยความจำการสนทนาระยะยาว พร้อมการค้นคืนแบบไฮบริด:

  • SQLite FTS5 สำหรับค้นหาด้วยคีย์เวิร์ดจากบทสนทนาที่ผ่านมา
  • ที่เก็บเวกเตอร์ Qdrant (ไม่บังคับ) สำหรับเรียกคืนข้อมูลตามความหมาย
  • การสกัดข้อเท็จจริงอัตโนมัติ — เอนทิตี ความชอบ และการตัดสินใจจะถูกสรุปหลังจากแต่ละเซสชันและจัดเก็บไว้ในตาราง memory_facts
  • หน่วยความจำจะถูกแยกขอบเขตตาม API key และตามเซสชัน

จัดการหน่วยความจำได้ใน แดชบอร์ด → หน่วยความจำ (ค้นหา แก้ไข ส่งออก ล้างข้อมูล) อินเทอร์เฟซ HTTP (/api/memory/*) ช่วยให้เอเจนต์ส่งและค้นหาข้อเท็จจริงผ่านโปรแกรมได้ — ดู MEMORY.md


🔔 Webhook

สมัครรับเหตุการณ์จาก OmniRoute เพื่อการตรวจสอบและระบบอัตโนมัติแบบเรียลไทม์

  • สร้าง webhook ใน แดชบอร์ด → Webhook พร้อม URL ปลายทางและข้อมูลลับสำหรับการลงนาม HMAC
  • เหตุการณ์ที่พร้อมใช้งาน: request.completed, request.failed, provider.unavailable, budget.exceeded, combo.switched, circuit_breaker.opened, circuit_breaker.closed
  • ทุกเพย์โหลดมี X-OmniRoute-Signature (HMAC-SHA256) สำหรับการตรวจสอบความถูกต้อง
  • การลองใหม่: 3 ครั้งโดยเพิ่มระยะเวลารอแบบทวีคูณ จากนั้นส่งไปยังคิวข้อความที่ไม่สามารถประมวลผลได้

สคีมาฉบับเต็มอยู่ใน WEBHOOKS.md


☁️ เอเจนต์บนคลาวด์

OmniRoute ทำงานร่วมกับเอเจนต์เขียนโค้ดบนคลาวด์ (OpenAI Codex Cloud, Devin, Jules, Antigravity) เพื่อให้คุณสามารถมอบหมายงานที่ใช้เวลานานจากแดชบอร์ดเดียวกับที่ใช้จัดการการกำหนดเส้นทางภายในเครื่องได้

  • สร้างงานใน แดชบอร์ด → เอเจนต์บนคลาวด์ หรือผ่าน POST /api/v1/agents/tasks
  • ติดตามสถานะ บันทึก และอาร์ติแฟกต์ของแต่ละงาน
  • ใช้ API key ของคุณเองสำหรับผู้ให้บริการแต่ละราย — ข้อมูลประจำตัวจะไม่ออกจากอินสแตนซ์ OmniRoute

เอกสารอ้างอิงฉบับเต็ม: CLOUD_AGENT.md


🛠️ การจัดการผ่านโปรแกรม

คุณสามารถจัดการทรัพยากรทั้งหมดของ OmniRoute (ผู้ให้บริการ คอมโบ คีย์ และการตั้งค่า) ผ่าน HTTP โดยใช้ Bearer key ที่มีขอบเขต manage

สร้างคีย์ใน แดชบอร์ด → API Key → คีย์ใหม่ → ขอบเขต: manage จากนั้น:

# แสดงรายการผู้ให้บริการ
curl http://localhost:20128/api/providers \
  -H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY"

# เพิ่มการเชื่อมต่อผู้ให้บริการ
curl -X POST http://localhost:20128/api/providers \
  -H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "provider": "openai", "apiKey": "sk-...", "name": "main" }'

# สร้างคอมโบ
curl -X POST http://localhost:20128/api/combos \
  -H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "premium", "strategy": "priority", "models": [{ "model": "cc/claude-opus-4-7" }, { "model": "glm/glm-5.1" }] }'

# แสดงรายการ/สร้าง API key
curl http://localhost:20128/api/keys -H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY"
curl -X POST http://localhost:20128/api/keys -H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY" \
  -d '{ "name": "ci-bot", "scopes": ["chat"] }'

ดูแค็ตตาล็อกปลายทางและสคีมาคำขอ/การตอบกลับทั้งหมดได้ใน API_REFERENCE.md


💻 CLI ภายใน

OmniRoute มาพร้อม CLI ภายใน (omniroute …) สำหรับการตั้งค่า การวินิจฉัย และการควบคุมขณะรันไทม์ ซึ่ง แยกจากหน้า "CLI Tools" ในแดชบอร์ด ที่ใช้กำหนดค่า CLI ของบุคคลที่สาม (Claude Code, Cursor, Codex, Cline, …) เพื่อให้สามารถสื่อสารกับ OmniRoute ได้

omniroute setup                    # วิซาร์ดแบบโต้ตอบ (รหัสผ่าน ผู้ให้บริการ คอมโบ)
omniroute setup --non-interactive  # เหมาะสำหรับ CI
omniroute doctor                   # การวินิจฉัยสถานะ (ไดเรกทอรีข้อมูล, DB, ผู้ให้บริการ, พอร์ต)
omniroute providers available      # แสดงรายการผู้ให้บริการที่รองรับ
omniroute providers list           # แสดงรายการการเชื่อมต่อที่กำหนดค่าไว้
omniroute providers test <id>      # ทดสอบการเชื่อมต่อผู้ให้บริการแบบสด
omniroute combos list              # แสดงรายการคอมโบ
omniroute combos switch <name>     # ตั้งค่าคอมโบเริ่มต้น
omniroute models                   # แสดงรายการโมเดลที่พร้อมใช้งาน (--json, --search)
omniroute keys add | list | remove # จัดการคีย์ API จากเทอร์มินัล
omniroute backup                   # สร้างสแนปช็อตการกำหนดค่า + DB
omniroute restore [<timestamp>]    # กู้คืนจากสแนปช็อต
omniroute health                   # สถานะโดยละเอียด (เบรกเกอร์, แคช, หน่วยความจำ)
omniroute quota                    # การใช้โควตาของผู้ให้บริการ
omniroute mcp status               # สถานะเซิร์ฟเวอร์ MCP
omniroute a2a status               # สถานะเซิร์ฟเวอร์ A2A
omniroute tunnel list|create|stop  # ทันเนล Cloudflare/Tailscale/ngrok
omniroute reset-password           # รีเซ็ตรหัสผ่านผู้ดูแลระบบ
omniroute --mcp                    # เริ่มเซิร์ฟเวอร์ MCP ผ่าน stdio
omniroute --port 3000              # เริ่มเซิร์ฟเวอร์บนพอร์ตที่กำหนดเอง

เคล็ดลับ: ใช้ omniroute doctor --json ร่วมกับเครื่องมือตรวจสอบของคุณเพื่อแจ้งเตือนเมื่อการเชื่อมต่อผู้ให้บริการมีปัญหา


🖥️ แอปพลิเคชันเดสก์ท็อป (Electron)

OmniRoute มีให้ใช้งานเป็นแอปพลิเคชันเดสก์ท็อปแบบเนทีฟสำหรับ Windows, macOS และ Linux

การติดตั้ง

# จากไดเรกทอรี electron:
cd electron
npm install

# โหมดการพัฒนา (เชื่อมต่อกับเซิร์ฟเวอร์สำหรับการพัฒนา Next.js ที่กำลังทำงานอยู่):
npm run dev

# โหมดโปรดักชัน (ใช้บิลด์แบบสแตนด์อโลน):
npm start

การสร้างตัวติดตั้ง

cd electron
npm run build          # แพลตฟอร์มปัจจุบัน
npm run build:win      # Windows (.exe NSIS)
npm run build:mac      # macOS (.dmg universal)
npm run build:linux    # Linux (.AppImage)

เอาต์พุต → electron/dist-electron/

คุณสมบัติหลัก

คุณสมบัติ คำอธิบาย
ความพร้อมของเซิร์ฟเวอร์ ตรวจสอบเซิร์ฟเวอร์เป็นระยะก่อนแสดงหน้าต่าง (ไม่มีหน้าจอว่าง)
ถาดระบบ ย่อไปยังถาดระบบ เปลี่ยนพอร์ต และออกจากเมนูถาดระบบ
การจัดการพอร์ต เปลี่ยนพอร์ตเซิร์ฟเวอร์จากถาดระบบ (รีสตาร์ตเซิร์ฟเวอร์โดยอัตโนมัติ)
นโยบายความปลอดภัยของเนื้อหา CSP แบบเข้มงวดผ่านส่วนหัวเซสชัน
อินสแตนซ์เดียว สามารถเรียกใช้แอปได้ครั้งละหนึ่งอินสแตนซ์เท่านั้น
โหมดออฟไลน์ เซิร์ฟเวอร์ Next.js ที่รวมมาด้วยสามารถทำงานได้โดยไม่ใช้อินเทอร์เน็ต

ตัวแปรสภาพแวดล้อม

ตัวแปร ค่าเริ่มต้น คำอธิบาย
OMNIROUTE_PORT 20128 พอร์ตเซิร์ฟเวอร์
OMNIROUTE_MEMORY_MB 512 ขีดจำกัดฮีปของ Node.js (6416384 MB)

📖 เอกสารฉบับเต็ม: electron/README.md