เพิ่มโมเดลจากแคตตาล็อก cloud ให้ Jan โดยไม่ทิ้ง local-first

Updated 2026-07-29

Jan ถูกออกแบบให้รันโมเดลบนเครื่องของคุณ และการตั้งค่า Model Providers ของมันรับ OpenAI-compatible endpoint ใดก็ได้สำหรับวันที่ local ไม่พอ: เพิ่ม provider ตั้ง Base URL เป็น https://api.apisrouter.com/v1 วาง key เดียว แล้ว id ของ Claude, GPT, Gemini และ DeepSeek จะมาเข้าแถวกับโมเดล local ของคุณ

คำตอบสั้น ๆ: provider เดียวใน Settings

เปิด Settings ของ Jan แล้วไปที่ Model Providers คลิกปุ่มบวกข้าง ๆ รายการ provider เพื่อเพิ่ม custom provider ตั้งชื่อ (APIsRouter) และบน build ล่าสุดให้เลือก OpenAI API format เมื่อ dialog ถาม (Jan v0.8.1 เพิ่มตัวเลือก format แบบ OpenAI-or-Anthropic; สำหรับ gateway ให้เลือก OpenAI) จากนั้นกรอกสองฟิลด์ที่สำคัญ: Base URL https://api.apisrouter.com/v1 และ API key ของคุณ เพิ่มโมเดลที่คุณต้องการตาม id: เอกสารของ Jan ระบุชัดเจนว่าฟิลด์ id ต้องตรงกับชื่อโมเดลที่ endpoint เสิร์ฟ ดังนั้นให้คัดลอก id จากรายการแคตตาล็อก (claude-sonnet-4-6, gpt-5.4-mini, gemini-3.5-flash) แทนที่จะพิมพ์จากความจำ บันทึกแล้ว id จะปรากฏใน model selector เคียงข้างสิ่งที่คุณรันบนเครื่อง label เปลี่ยนไปมาระหว่างรุ่น (เวอร์ชันเก่ากว่าเรียกส่วนนี้ว่า Remote Engines) ดังนั้นให้ยึด provider, format, URL, key, models เป็นโครงที่คงที่

Name:        APIsRouter
API Format:  OpenAI          (v0.8.1+ selector)
Base URL:    https://api.apisrouter.com/v1
API Key:     sk-YOUR-APISROUTER-KEY

Models: add ids that match the endpoint, e.g.
  claude-sonnet-4-6, gpt-5.4-mini, gemini-3.5-flash

Jan ปฏิบัติต่อ remote provider อย่างไร

Jan (menloresearch บน GitHub มีดาวประมาณ 44K) คือ desktop client แบบ local-first: โมเดล download มาที่เครื่องของคุณ รันผ่าน llama.cpp และทำงานออฟไลน์ได้ โดยแอปยังเปิด OpenAI-compatible server ของตัวเองที่ http://127.0.0.1:1337/v1 ให้เครื่องมืออื่นใช้ด้วย remote provider คือช่องทางที่สองที่ตั้งใจไว้ สำหรับโมเดลที่ใหญ่เกินจะรันบนเครื่อง หรืองานที่คุ้มค่ากับคุณภาพระดับ frontier custom provider แบบ OpenAI format คือคำอธิบาย endpoint แบบธรรมดา: base URL, key, model id ที่ประกาศไว้ บทสนทนากับ id เหล่านั้นออกไปเป็น chat-completions request มาตรฐานโดยมี id เป็น model string ดังนั้น gateway หลาย vendor ต้องการแค่ entry เดียว Claude สำหรับงานเขียนที่ต้องพิถีพิถัน DeepSeek สำหรับสรุปปริมาณมาก Gemini สำหรับความเร็ว key เดียวอยู่เบื้องหลังทั้งหมด ความเข้ากันเชิงปรัชญาดีกว่าที่ฟังดูตอนแรก ผู้ใช้ local-first มักตั้งใจเรื่องสิ่งที่ออกจากเครื่อง และ gateway ทำให้ช่องทางระยะไกลตั้งใจเท่ากัน: endpoint เดียวที่ต้อง firewall, usage log เดียวที่ต้องอ่าน ยอดคงเหลือเดียวที่ขยับก็ต่อเมื่อคุณเลือกส่งอะไรออกไป ไม่มีอะไรเกี่ยวกับช่องทาง local เปลี่ยนแปลง โมเดลที่ download มาแล้วยังทำงานออฟไลน์เหมือนเดิมทุกประการ

การประกาศโมเดล: สัญญาเรื่อง id

Jan ไม่ดึงแคตตาล็อกของ custom endpoint ให้คุณ; โมเดลที่คุณประกาศคือโมเดลที่คุณได้ และ id คือสัญญา การสะกดที่เชื่อถือได้มาจากรายการ /v1/models ของ gateway รวม version suffix ด้วย id ที่ประกาศแล้วเพี้ยนไปจากรายการจะเกิด error not-found ก็ต่อเมื่อโมเดลนั้นถูกเลือก ซึ่งอ่านเหมือน provider ที่กระตุกจนกว่าคุณจะเทียบสตริงกัน ประกาศอย่างตั้งใจ picker แบบ local-first ทำงานได้ดีที่สุดเมื่อแถวระยะไกลมีน้อยและมีจุดประสงค์: id ที่เร็วหนึ่งตัวสำหรับเทิร์นระยะไกลทั่วไป (gpt-5.4-mini หรือ claude-haiku-4-5-20251001) id ระดับ frontier หนึ่งตัวสำหรับงานที่คุ้มค่าออกจากเครื่อง (claude-sonnet-4-6) และผู้เชี่ยวชาญเฉพาะทางที่งานของคุณสมควรได้ (deepseek-v4-flash สำหรับสรุปหลายภาษาที่ยาว, gemini-3.5-flash เมื่อ latency คือฟีเจอร์) แต่ละแถวเพิ่มทีหลังได้ง่าย แคตตาล็อกที่วางทับทั้งหมดคือความรกที่คุณต้อง scroll ผ่านทุกวัน ถ้าคุณใช้ local API server ของ Jan เพื่อเสิร์ฟเครื่องมืออื่นด้วย ให้แยก mental model ให้ชัด: server นั้นคือ Jan ที่เป็น provider ที่ 127.0.0.1:1337/v1; custom provider entry คือ Jan ที่เป็น client ทั้งสองแยกอิสระจากกัน และการตั้งค่าอันหนึ่งไม่มีผลกับอีกอันเลย

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50
# declare these ids verbatim in the provider's model list

เลือกว่าบทสนทนาไหนออกจากเครื่อง

เพราะการใช้งานระยะไกลเป็นแบบเติมเงินล่วงหน้าและมิเตอร์ต่อ key ต้นทุนของช่องทางระยะไกลคือตัวเลขที่คุณอ่าน ไม่ใช่ subscription ที่คุณเดา รันหนึ่งเดือนตามสัดส่วนจริงของคุณ แล้ว usage log จะบอกว่าการออกจากเครื่องมีค่าใช้จ่ายเท่าไหร่จริง ๆ ต่อโมเดล ต่อวัน

  • เทิร์นระยะไกลทั่วไป คำถามเร็ว ๆ การเขียนใหม่ การแปล ควรอยู่ในระดับเร็ว: gpt-5.4-mini และ claude-haiku-4-5-20251001 ตอบเร็วและทำให้ยอดคงเหลือแทบไม่ขยับ
  • claude-sonnet-4-6 คือขั้นที่สูงขึ้นสำหรับงานที่โมเดล local แบกไม่ไหวชัดเจน: การร่างยาวและพิถีพิถัน การรีวิวโค้ดที่ละเอียดอ่อน การวิเคราะห์ที่คุณจะส่งต่อ
  • gemini-3.5-flash สมควรได้แถวของมันด้วยเรื่อง latency สำหรับเทิร์นโต้ตอบสั้น ๆ มันรู้สึกใกล้เคียงความไวของโมเดล local ที่สุด
  • deepseek-v4-flash คือตัวเลือกปริมาณสำหรับสรุปเอกสารยาวที่คุณจะไม่ป้อนให้โมเดล local ตัวเล็ก
  • เก็บเนื้อหาส่วนตัวไว้บนโมเดล local ทั้งหมด การแบ่งระหว่างช่องทางคือประเด็นสำคัญของการรัน Jan ตั้งแต่แรก

จ่ายตามการใช้งาน · ถูกกว่าราคาทางการ

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

โมเดลราคาทางการราคาของเรา
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
GPT-5.4 mini$0.75 / $4.50 per M$0.60 / $3.60 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M
DeepSeek V4 Flash$0.14 / $0.28 per M$0.10 / $0.30 per M

รูปแบบความล้มเหลวเฉพาะของ Jan

error not-found บนโมเดลใดตัวหนึ่งคือปัญหาสัญญาเรื่อง id: id ที่ประกาศไว้ไม่ตรงกับการสะกดของ endpoint เทียบกับ output ของ /v1/models ทีละตัวอักษร Authentication failure ในทุก request คือฟิลด์ key provider ที่บันทึกได้แต่ไม่เคยตอบมักมีปัญหา Base URL: ต้องมี suffix /v1 เพราะ Jan เติม route path อย่าง /chat/completions ต่อท้าย base ที่คุณให้ และ segment ที่ซ้ำหรือขาดหายจะทำให้ 404 ถ้า provider ถูกสร้างบน build เก่ากว่า ให้เช็ก API format: v0.8.1 เพิ่มตัวเลือก OpenAI-or-Anthropic และ gateway entry ที่ตั้งเป็น Anthropic format โดยบังเอิญจะพูดผิดภาษากับ endpoint /v1/chat/completions และจำไว้ว่าคุณกำลัง debug ช่องทางไหน ความล้มเหลวของโมเดล local (VRAM, quantization, การตั้งค่า llama.cpp) กับความล้มเหลวระยะไกล (URL, key, id) แชร์หน้าต่างแชทกันแต่ไม่มีอะไรร่วมกันอีก model selector แสดงว่าบทสนทนาที่ล้มเหลวอยู่ช่องทางไหนก่อนที่คุณจะดึงเส้นด้ายผิด

ใครที่เพิ่มช่องทาง gateway ให้ Jan

  • ผู้ใช้ local-first ที่บางครั้งต้องการคุณภาพระดับ frontier และต้องการช่องทางนาน ๆ ครั้งนั้นบนยอดคงเหลือแบบเติมเงินล่วงหน้ามากกว่า subscription vendor
  • นักพัฒนาบนเครื่องที่รันโมเดล local ขนาดใหญ่ได้ไม่ดี ใช้ Jan เป็น interface และ gateway เป็นตัวรับภาระหนัก
  • ผู้ใช้ที่ตั้งใจเรื่องความเป็นส่วนตัวที่ต้องการ remote endpoint เดียวให้คิดตาม, firewall และตรวจสอบ แทนที่จะเป็นหนึ่งอันต่อ vendor
  • คนที่เปรียบเทียบ output ระหว่าง local กับ cloud บนงานจริง ที่ผู้เข้าแข่งขันระยะไกลเป็นแค่แถวที่ประกาศไว้ ไม่ใช่บัญชีใหม่
  • นักพัฒนาที่ไม่มีสิทธิ์เข้าถึงระบบเก็บเงินของ vendor รายหนึ่ง การเข้าถึงแบบเติมเงินโดยไม่ต้องใช้บัตรตัดการพึ่งพาการสมัครต่อ provider ออกไป

ตรวจสอบ endpoint และ debug เทิร์นระยะไกลแรก

Curl รายการโมเดลและ chat completion หนึ่งครั้งก่อน; เมื่อทั้งสองผ่าน ที่เหลือทั้งหมดอยู่ใน provider entry สิ่งนี้ยังให้การสะกด id เป๊ะ ๆ ที่คุณต้องประกาศด้วย ข้างใน Jan ส่งข้อความสั้น ๆ หนึ่งครั้งบน remote id ที่เร็ว Authentication error คือ key; not-found คือ id; ความเงียบหรือ 404 คือรูปร่างของ Base URL ถ้าช่องทางระยะไกลทำงานได้แต่รู้สึกช้าบน id ระดับ frontier นั่นคือ latency ของโมเดล ไม่ใช่ปัญหาการตั้งค่า reasoning model ใช้เวลาของมันในเทิร์นยาว ๆ เมื่อเทิร์นระยะไกลไหลลื่นแล้ว console ของ APIsRouter แสดงโมเดลต่อ request, จำนวน token และค่าใช้จ่าย สำหรับผู้ใช้ local-first log นี้อ่านสนุกเป็นพิเศษ: มันคือบันทึกครบถ้วนของทุกอย่างที่เคยออกจากเครื่อง ต่อโมเดล ต่อวัน โดยช่องทาง local มีส่วนร่วมในนั้นเป็นศูนย์

curl -s https://api.apisrouter.com/v1/chat/completions \
  -H "Authorization: Bearer $APISROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.4-mini",
       "messages":[{"role":"user","content":"ping"}]}'

คำถามที่พบบ่อย

ฉันจะเพิ่ม custom OpenAI-compatible provider ให้ Jan อย่างไร?

Settings, Model Providers แล้วปุ่มบวกเพื่อเพิ่ม provider ตั้งชื่อ เลือก OpenAI API format บน build ที่ถาม (v0.8.1+) ตั้ง Base URL https://api.apisrouter.com/v1 วาง key ของคุณ แล้วประกาศ model id ที่ตรงกับรายการของ endpoint

ทำไมโมเดลที่ฉันประกาศไว้คืนค่า not-found?

Jan ส่ง id ที่ประกาศไว้ตรงตัวเป็น model string และเอกสารของมันต้องการให้ id ตรงกับชื่อโมเดลของ endpoint เป๊ะ ๆ ดึงรายการ /v1/models แล้วคัดลอกการสะกด รวม version suffix แทนการพิมพ์ id จากความจำ

การเพิ่ม remote provider เปลี่ยนวิธีที่โมเดล local ทำงานไหม?

ไม่เปลี่ยน โมเดล local ยังรันบนเครื่องผ่าน llama.cpp รวมถึงตอนออฟไลน์ provider entry เพิ่มช่องทางระยะไกลแยกให้ selector และบทสนทนาจะแตะเครือข่ายก็ต่อเมื่อคุณเลือก id ระยะไกล

Base URL ควรมี /v1 ไหม?

ใช่: https://api.apisrouter.com/v1 Jan เติม route อย่าง /chat/completions ต่อท้าย base ที่คุณตั้งค่าไว้ ดังนั้น /v1 ที่ขาดหายจะ 404 และที่ซ้ำก็ด้วยเช่นกัน ถ้า request ล้มเหลว อ่าน URL ที่ประกอบขึ้นใน error ก่อนแก้ไขอย่างอื่น

Jan เข้าถึง Claude และ Gemini ผ่าน provider entry เดียวได้ไหม?

ได้ ใน OpenAI format model id เดินทางเป็นสตริงธรรมดา ดังนั้น claude-sonnet-4-6, gemini-3.5-flash, gpt-5.4-mini และ deepseek-v4-flash ล้วนประกาศไว้ใต้ entry เดียวได้ คิดเงินผ่าน key เดียว และสลับได้ต่อบทสนทนา

นี่เหมือนกับ local API server ของ Jan ไหม?

ไม่เหมือน server ท้องถิ่นที่ 127.0.0.1:1337/v1 คือ Jan ที่เสิร์ฟโมเดล local ของมันให้เครื่องมืออื่น custom provider entry คือ Jan ที่บริโภค remote endpoint ทั้งสองเป็นฟีเจอร์อิสระที่บังเอิญแชร์ wire format แบบ OpenAI