ชี้ NextChat ไปที่ custom OpenAI-compatible endpoint

Updated 2026-07-29

NextChat override API host ของมันด้วย environment variable BASE_URL ตัวเดียวบน server deploy หรือ custom endpoint ในแอปที่ Settings บน client เพิ่ม id ในแคตตาล็อกผ่าน CUSTOM_MODELS ด้วย suffix @OpenAI แล้ว Claude, Gemini และ DeepSeek จะปรากฏใน model picker เดียวกันภายใต้ key เดียว

คำตอบสั้น ๆ: BASE_URL, key เดียว และรายการโมเดล

บน server deploy (Vercel, Docker หรือ bare Node) สาม environment variable ทำงานทั้งหมด BASE_URL override ว่า API request ไปที่ไหน README อธิบายมันว่า "override openai api request base url" โดยมีค่าเริ่มต้นเป็น https://api.openai.com และค่าที่ใส่ไม่มี /v1 เพราะ NextChat เติม request path เอง OPENAI_API_KEY พก gateway key CUSTOM_MODELS ควบคุม model picker: บวกเพิ่มโมเดล ลบซ่อนโมเดล -all ล้างรายการเริ่มต้น และ name=displayName เปลี่ยนชื่อ entry รายละเอียดที่ทำให้ id หลาย vendor ทำงานคือ provider suffix NextChat มี client code path แยกกันสำหรับหลาย vendor ดังนั้น id ของ claude เปล่า ๆ ที่เพิ่มใน CUSTOM_MODELS อาจปรากฏบน path ของ Anthropic ซึ่งต้องการ key และรูปแบบ request ต่างกัน การเติม @OpenAI ต่อท้าย id อย่าง +claude-sonnet-4-6@OpenAI จะ pin โมเดลไว้ที่ path แบบ OpenAI-compatible ดังนั้น request จะไปที่ BASE_URL ของคุณในรูปแบบ chat-completions มาตรฐานไม่ว่า vendor ไหนเทรนโมเดล

BASE_URL=https://api.apisrouter.com        # no /v1
OPENAI_API_KEY=sk-APIsRouter-...
CUSTOM_MODELS=-all,+claude-sonnet-4-6@OpenAI,+gpt-5.5@OpenAI,+deepseek-v4-pro@OpenAI
DEFAULT_MODEL=claude-sonnet-4-6

NextChat resolve endpoint ของมันอย่างไร

NextChat (ChatGPTNextWeb บน GitHub มีดาวประมาณ 88K) คือหนึ่งใน chat frontend ที่ถูก deploy มากที่สุดที่มีอยู่: web app แบบเบา พร้อมการ deploy บน Vercel แบบคลิกเดียว บวก client แบบ packaged สำหรับ iOS, macOS, Android, Windows และ Linux ความนิยมของมันมาจากกลไกเดียวกับที่หน้านี้ใช้พอดี ทุกอย่างเป็นพื้นผิวการตั้งค่า และ endpoint ก็แค่การตั้งค่าอีกอย่างหนึ่ง มีพื้นผิวสองแบบแบบนั้น server deploy อ่าน environment variable ตอน build และ boot: BASE_URL ตัดสิน host, OPENAI_API_KEY ทำ authentication และ CUSTOM_MODELS จัด picker ให้ผู้ใช้ทุกคนของ deployment นั้น client และ web UI ยังเปิด path ในแอปเพิ่มเติม: Settings, Model Provider, เลือก OpenAI แล้วกรอกฟิลด์ endpoint กับ key และลิสต์ id เพิ่มเติมในฟิลด์ custom model names path ในแอปเก็บค่าไว้ในเครื่องต่ออุปกรณ์ ซึ่งทำให้มันเป็นพื้นผิวที่ถูกต้องสำหรับ client ส่วนตัว ในขณะที่ env var คือพื้นผิวที่ถูกต้องสำหรับ deployment ที่คนอื่นใช้ ไม่ว่าทางไหน request ที่ออกจาก NextChat เป็น chat completion มาตรฐานเทียบกับ endpoint ของคุณโดยมี model id เป็นสตริงธรรมดา ด้วย gateway หลาย vendor อยู่หลัง BASE_URL deployment เดียวกันเสิร์ฟ Claude สำหรับคำตอบยาว, id ของ Gemini ที่เร็วสำหรับคำถามด่วน และ DeepSeek หรือ GLM สำหรับ traffic สองภาษา ทั้งหมดผ่าน key เดียว

ตั้งค่าแบบเต็ม: server deploy หรือการตั้งค่าในแอป

สำหรับ deploy บน Vercel ตั้งตัวแปรใน environment settings ของโปรเจกต์แล้ว redeploy; Vercel bake ค่า env เข้าไปตอน build ดังนั้นการแก้ตัวแปรโดยไม่ redeploy ไม่เปลี่ยนอะไรเลย สำหรับ Docker ส่งตัวแปรเดียวกันด้วย flag -e หรือ env file ตัวแปร CODE คุ้มค่าที่จะตั้งบน deployment สาธารณะใด ๆ มันกั้นการเข้าถึงด้วยรหัสผ่านเพื่อไม่ให้คนแปลกหน้าใช้ key ของคุณ path ในแอปไม่ต้อง deploy อะไรเลย ใน Settings เลือก provider OpenAI แทนที่ endpoint ด้วย https://api.apisrouter.com วาง key แล้วเพิ่ม id ในฟิลด์ custom model names ด้วย syntax เดียวกับ env variable นี่คือวิธีที่ client บน desktop และ mobile ทำงานกับ gateway และยังเป็นวิธีที่เร็วที่สุดในการทดสอบค่าก่อนจะยืนยันลงใน server deploy DEFAULT_MODEL เลือกว่าแชทใหม่เริ่มด้วยอะไร ซึ่งสำคัญกว่าที่ฟังดูบน deployment ที่แชร์กัน: ผู้ใช้ส่วนใหญ่ไม่เคยเปลี่ยนโมเดลเลย ดังนั้น id เริ่มต้นคือที่ที่ค่าใช้จ่ายส่วนใหญ่ลงไป ตั้งมันอย่างตั้งใจให้เป็นโมเดลที่คุณต้องการให้แบก traffic ทั่วไป

docker run -d -p 3000:3000 \
  -e BASE_URL=https://api.apisrouter.com \
  -e OPENAI_API_KEY=$APISROUTER_API_KEY \
  -e CUSTOM_MODELS="-all,+claude-sonnet-4-6@OpenAI,+claude-haiku-4-5-20251001@OpenAI,+gemini-3.5-flash@OpenAI" \
  -e DEFAULT_MODEL=claude-haiku-4-5-20251001 \
  -e CODE=your-access-password \
  yidadaa/chatgpt-next-web

เลือกโมเดลสำหรับ picker

เพราะ picker ทั้งหมดคิดเงินผ่าน key เดียว loop การปรับแต่งเป็นแบบสังเกตการณ์: รันหนึ่งสัปดาห์ อ่าน usage ต่อโมเดลใน console แล้วปรับ CUSTOM_MODELS รอบสิ่งที่คนคลิกจริง ๆ มากกว่าสิ่งที่คุณคาดการณ์ไว้

  • เริ่มรายการด้วย -all picker เดิมคือเมนูยาวที่มีแค่ของ OpenAI การล้างมันแล้วเพิ่ม id ที่ตั้งใจสี่ห้าตัวให้ผู้ใช้ picker ที่ทุกตัวเลือกคือสิ่งที่คุณตั้งราคาไว้
  • โมเดลเริ่มต้นแบกทั้ง deployment claude-haiku-4-5-20251001 หรือ gemini-3.5-flash เป็น DEFAULT_MODEL ทำให้เทิร์นส่วนใหญ่ที่เป็นแชทเบา ๆ เร็วและไม่แพง โดยมี id ที่แข็งแกร่งกว่าอยู่แค่คลิกเดียว
  • งานยาวสมควรได้ตำแหน่ง frontier claude-sonnet-4-6 และ gpt-5.5 คือตัวเลือกที่ผู้ใช้เอื้อมหาเมื่อร่างหรือการวิเคราะห์มีความสำคัญ
  • deployment สองภาษาควรมี deepseek-v4-pro หรือ glm-5.2 ด้วย NextChat มีฐานผู้ใช้พูดภาษาจีนขนาดใหญ่มาก และ id เหล่านั้นเข้ากับ traffic นั้นโดยธรรมชาติ
  • การเปลี่ยนชื่อคือเอกสารฟรี: entry สไตล์ claude-sonnet-4-6=Sonnet (writing) ทำให้ picker อธิบายตัวเองได้สำหรับผู้ใช้ที่ไม่ใช่สายเทคนิค

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

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

โมเดลราคาทางการราคาของเรา
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M
GLM-5.2$1.14 / $4.00 per M$1.10 / $4.00 per M

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

ความผิดพลาดเรื่อง /v1 วิ่งกลับทิศจากเครื่องมือส่วนใหญ่ NextChat เติม request path ต่อ BASE_URL เอง ดังนั้นค่าที่ใส่ไม่ควรมี /v1; การวาง https://api.apisrouter.com/v1 จะทำให้ path ซ้ำกันจน 404 เครื่องมืออย่าง LibreChat คาดหวังให้มี /v1 อยู่ใน base URL ซึ่งเป็นเหตุผลพอดีที่คนพกความเคยชินผิดไปทั้งสองทิศทาง id ของ Claude ที่ error เรื่อง key หรือ header คือ suffix @OpenAI ที่ขาดหาย ถ้าไม่มีมัน NextChat อาจ route id ผ่าน path native ของ Anthropic ซึ่งไม่เคยอ่าน BASE_URL ของ gateway คุณเลยและคาดหวัง authentication แบบ vendor pin ทุก id ของ gateway ด้วย @OpenAI แล้ว request ทั้งหมดจะไปทาง path ที่เข้ากันได้ การแก้ env ที่ไม่เปลี่ยนอะไรเลยคือปัญหา redeploy บน Vercel ตัวแปรถูกอ่านตอน build; บน Docker container ต้องสร้างใหม่ การตั้งค่าในแอปกลับกัน มีผลทันทีแต่แค่บนอุปกรณ์นั้น ซึ่งเป็นอีกครึ่งของความสับสนเดียวกัน CODE กับ OPENAI_API_KEY สลับกันบ่อยเกินคาด CODE คือรหัสผ่านเข้าถึงที่ผู้ใช้พิมพ์ใน UI; key คือสิ่งที่ server ใช้จ่าย ถ้าผู้ใช้รายงานหน้า unauthorized ก่อนแชทใด ๆ เกิดขึ้น นั่นคือ CODE; ถ้าแชทล้มเหลวเทียบกับ endpoint นั่นคือ key

ใครที่ route NextChat ผ่าน gateway

  • คนที่รัน deployment ส่วนตัวบน Vercel ที่ต้องการ key เดียวที่มิเตอร์ได้อยู่เบื้องหลังแทน subscription ต่อ vendor
  • ทีมเล็กที่แชร์ NextChat instance ใช้ CODE เพื่อควบคุมการเข้าถึงและ gateway key เดียวเพื่อให้ usage log เป็นรายงานต้นทุนไปในตัว
  • ผู้ใช้ client บน desktop และ mobile ที่ชี้ endpoint ในแอปไปที่ gateway เพื่อเข้าถึง Claude, Gemini และ DeepSeek จาก picker เดียวบนทุกอุปกรณ์
  • ผู้ใช้สองภาษาที่ผสม id ของ GLM และ DeepSeek กับ Claude และ GPT ใน deployment เดียว ซึ่ง silo ของ provider ดั้งเดิมทำให้ทำยาก
  • นักพัฒนาที่ไม่มีสิทธิ์เข้าถึงระบบเก็บเงินของ vendor รายหนึ่ง การเข้าถึงแบบเติมเงินโดยไม่ต้องใช้บัตรตัดการพึ่งพาการสมัครต่อ provider ออกไป

ตรวจสอบ endpoint และ debug การแชทแรก

พิสูจน์ endpoint ก่อน deploy: ลิสต์โมเดลด้วย key แล้วยืนยันว่าทุก id ที่คุณวางแผนจะใส่ใน CUSTOM_MODELS ปรากฏ สะกดตรงเป๊ะ id ถูกส่งต่อเป็นสตริง ดังนั้น output ของ /v1/models คือการสะกดที่เชื่อถือได้ จากนั้น deploy แล้วส่งข้อความหนึ่งข้อความต่อโมเดลใน picker 404 ในทุกอย่างคือความผิดพลาดเรื่อง /v1 ใน BASE_URL 401 คือ key ผิดหรือไม่มีอยู่ใน environment ที่ build ใช้จริง error บน id ของ Claude เท่านั้นคือ suffix @OpenAI ที่ขาดหาย picker ที่แสดงโมเดลที่คุณไม่เคยเพิ่มหมายความว่า CUSTOM_MODELS ไม่มี -all นำหน้า หรือตัวแปรไปไม่ถึง build เมื่อแชทไหลลื่นแล้ว console ของ APIsRouter แสดงโมเดลต่อ request, จำนวน token และค่าใช้จ่าย สำหรับ deployment ที่มีผู้ใช้มากกว่าหนึ่งคน มุมมองนั้นตอบคำถามที่แอดมิน NextChat ทุกคนถามในที่สุด: โมเดลไหนกำลังกินยอดคงเหลืออย่างเงียบ ๆ ด้วยข้อมูลแทนที่จะเป็นการเดา

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

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

BASE_URL ของ NextChat ควรมี /v1 ไหม?

ไม่ควรมี NextChat เติม request path เอง ดังนั้นตั้ง BASE_URL=https://api.apisrouter.com โดยไม่มี /v1 การใส่มันจะทำให้ path ซ้ำกันจน 404 นี่คือธรรมเนียมตรงข้ามกับเครื่องมืออย่าง LibreChat ที่คาดหวังให้มี /v1 อยู่ใน base URL

ฉันจะเพิ่มโมเดล Claude หรือ Gemini ให้ NextChat ผ่าน endpoint เดียวอย่างไร?

เพิ่มมันใน CUSTOM_MODELS ด้วย suffix @OpenAI เช่น +claude-sonnet-4-6@OpenAI suffix นี้ pin id ไว้ที่ request path แบบ OpenAI-compatible ดังนั้นมันไปที่ BASE_URL ของคุณ แทนที่จะเป็น client path native ของ Anthropic หรือ Google ของ NextChat

environment variable กับการตั้งค่าในแอปต่างกันอย่างไร?

Environment variable ตั้งค่า server deployment ให้ผู้ใช้ทุกคนและต้อง redeploy เพื่อเปลี่ยน custom endpoint ในแอปที่ Settings เก็บค่าไว้ในเครื่องต่ออุปกรณ์และมีผลทันที ซึ่งเหมาะกับ client บน desktop และ mobile ส่วนตัว

ฉันจะเอารายการโมเดล OpenAI เริ่มต้นออกจาก picker อย่างไร?

เริ่ม CUSTOM_MODELS ด้วย -all แล้วเพิ่ม id อย่างชัดเจน: CUSTOM_MODELS=-all,+claude-sonnet-4-6@OpenAI,+gpt-5.5@OpenAI ผู้ใช้จะเห็นแค่โมเดลที่คุณลิสต์และตั้งราคาไว้อย่างตั้งใจเท่านั้น

ตัวแปร CODE ทำอะไร?

มันตั้งรหัสผ่านการเข้าถึงหนึ่งตัวหรือมากกว่าให้ deployment ผู้เยี่ยมชมต้องกรอกรหัสก่อนแชท ซึ่งป้องกันไม่ให้ URL Vercel สาธารณะใช้ key ของคุณ ไม่เกี่ยวกับ API key เอง

ทำไมการเปลี่ยน environment variable ไม่มีผลอะไร?

NextChat อ่านค่า env ตอน build หรือตอน container เริ่ม บน Vercel แก้ตัวแปรแล้ว redeploy; บน Docker สร้าง container ใหม่ มีแค่การตั้งค่าในแอปเท่านั้นที่มีผลโดยไม่ต้อง restart และมันอยู่ต่ออุปกรณ์