เพิ่ม custom OpenAI-compatible provider ให้ Zed
Updated 2026-07-29
Zed อ่าน custom provider ตรงจาก settings.json ประกาศ block language_models.openai_compatible โดยตั้ง api_url เป็น https://api.apisrouter.com/v1 ลิสต์ model id ที่คุณต้องการ แล้วทุกตัวจะปรากฏใน model picker ของ agent panel ภายใต้ key เดียว
คำตอบสั้น ๆ: block เดียวใน settings.json
Zed รองรับ custom OpenAI-compatible provider แบบ native เพิ่ม provider entry ใต้ language_models.openai_compatible ใน settings.json ตั้ง api_url เป็น https://api.apisrouter.com/v1 และประกาศแต่ละโมเดลที่คุณต้องการใต้ available_models พร้อมชื่อและขนาด context โมเดลจะปรากฏใน dropdown ของ agent panel ทันที API key ตั้งใจไม่ใส่ไว้ใน settings.json Zed เก็บมันไว้ใน system keychain เมื่อคุณกรอกผ่าน UI ของการตั้งค่า provider หรืออ่านจาก environment variable ที่มาจากชื่อ provider ของคุณ: provider ชื่อ apisrouter จะอ่าน APISROUTER_API_KEY environment variable มีความสำคัญเหนือกว่าค่าใน keychain
{
"language_models": {
"openai_compatible": {
"apisrouter": {
"api_url": "https://api.apisrouter.com/v1",
"available_models": [
{
"name": "claude-sonnet-4-6",
"display_name": "Claude Sonnet 4.6",
"max_tokens": 200000
}
]
}
}
}
}Zed แก้ปัญหา custom provider และโมเดลอย่างไร
Zed (zed-industries บน GitHub มีดาวราว 87K) คือ editor ประสิทธิภาพสูงที่มี agent panel ซึ่งวางแผน แก้ไขไฟล์ และรัน tool provider ประเภท openai_compatible ของมันพูดโปรโตคอล /v1/chat/completions มาตรฐาน ซึ่งตรงกับสิ่งที่ gateway หลาย vendor เสิร์ฟพอดี ไม่มี plugin หรือ extension ใดคั่นระหว่าง editor กับ endpoint provider key ที่คุณเลือก ("apisrouter" ข้างบน) ทำหน้าที่สองอย่าง มันตั้งชื่อ provider ใน settings ของ agent panel และมันสร้างชื่อ environment variable ที่ Zed จะเช็กหา key โดยแปลงเป็นตัวพิมพ์ใหญ่คั่นด้วย underscore พร้อม suffix _API_KEY กฎการตั้งชื่อนี้ควรจำไว้ก่อนจะ debug อะไรก็ตาม: เปลี่ยนชื่อ provider แล้วชื่อตัวแปรที่คาดหวังก็เปลี่ยนตามไปด้วย available_models คือ allowlist Zed ไม่สามารถ enumerate custom endpoint ได้เอง ดังนั้นมีแค่ id ที่คุณประกาศไว้เท่านั้นที่เลือกได้ แต่ละตัวเป็นสตริงที่ตรงเป๊ะ รวมถึง suffix เวอร์ชันใด ๆ เมื่อ endpoint หลัง api_url เสิร์ฟ id ของ Claude, GPT, Gemini และ Kimi เคียงข้างกัน provider block เดียวจะทำให้ picker ของ agent panel กลายเป็นสวิตช์บอร์ดข้าม vendor อยู่หลัง key เดียว ข้อสังเกตหนึ่งเรื่องขอบเขต: feature edit predictions ของ Zed ใช้โมเดลเฉพาะของตัวเองและตั้งค่าแยกต่างหาก custom provider ขับเคลื่อน agent panel กับ inline assistant ไม่ใช่ edit predictions
ตั้งค่าแบบเต็ม: โมเดล, ขนาด context และ capability
แต่ละ entry ใน available_models รับมากกว่าแค่ชื่อ max_tokens ประกาศ context window ของโมเดล และ max_output_tokens จำกัดความยาวการสร้างคำตอบ Zed ใช้ตัวเลขเหล่านี้จัดการ agent thread ยาว ๆ ดังนั้นการประกาศโมเดล long-context ด้วย max_tokens เล็กเกินไปจะเสียพื้นที่ของโมเดลไปเงียบ ๆ object capabilities บอก Zed ว่าโมเดลรองรับอะไร: ตั้ง tools เป็น true สำหรับอะไรก็ตามที่คุณวางแผนจะใช้ขับเคลื่อน agent panel และเปิด images เฉพาะโมเดลที่รับ input รูปภาพได้จริง สำหรับ key เส้นทางที่เชื่อถือได้บน desktop editor คือ UI ของการตั้งค่า provider ซึ่งเก็บค่าไว้ใน system keychain เส้นทาง environment variable ก็ใช้ได้เช่นกัน โดยมีข้อควรระวังหนึ่งข้อที่กล่าวถึงในส่วน debugging: แอปพลิเคชัน GUI ที่เปิดจาก dock ไม่ได้สืบทอด shell profile ของคุณ
{
"language_models": {
"openai_compatible": {
"apisrouter": {
"api_url": "https://api.apisrouter.com/v1",
"available_models": [
{
"name": "claude-sonnet-4-6",
"display_name": "Claude Sonnet 4.6",
"max_tokens": 200000,
"max_output_tokens": 64000,
"capabilities": { "tools": true, "images": false }
},
{
"name": "claude-opus-4-7",
"display_name": "Claude Opus 4.7",
"max_tokens": 200000,
"capabilities": { "tools": true }
},
{ "name": "gpt-5.5", "display_name": "GPT-5.5", "max_tokens": 200000 },
{ "name": "kimi-k2.7-code", "display_name": "Kimi K2.7 Code", "max_tokens": 200000 }
]
}
}
}
}เลือกโมเดลสำหรับ agent panel
เพราะทุกโมเดลที่ประกาศไว้อยู่ใน picker เดียวกัน workflow ที่ใช้ได้จริงคือเปรียบเทียบบนงานจริงแทนที่จะดูจาก benchmark: รันงานประเภทเดียวกันผ่านสองตัวเลือกคนละวัน แล้วให้ usage log ต่อ key ตั้งราคาให้แต่ละตัว การเปลี่ยนโมเดลใน Zed เป็นแค่การเลือกใน dropdown ดังนั้นต้นทุนของการทดลองคือศูนย์ในแง่การตั้งค่า
- agent panel แบกงาน engineering จริง: อ่านไฟล์, วางแผน edit หลายขั้นตอน, รัน tool ข้าม thread ยาว ๆ โมเดลเขียนโค้ดระดับ frontier (claude-sonnet-4-6, claude-opus-4-7, gpt-5.5) ควรอยู่ในช่องนี้
- id ที่ปรับจูนมาสำหรับโค้ดอย่าง kimi-k2.7-code คุ้มค่าที่จะประกาศไว้แม้ไม่ใช่ค่าเริ่มต้นของคุณ การสลับสำหรับ session ที่ refactor หนักเป็นแค่การเลือกใน picker ไม่ใช่การแก้ config
- โมเดล long-context อย่าง gemini-3.1-pro-preview คุ้มค่ากับตำแหน่งนี้เมื่อ thread ดึงไฟล์ขนาดใหญ่หรือ context ทั้งโมดูลเข้ามาในบทสนทนาเดียวเป็นประจำ
- inline assist มีอายุสั้นกว่า agent thread ดังนั้น id ระดับกลางที่เร็วจะทำให้การแปลงแบบครั้งเดียวคล่องตัว โดยไม่เผา token ระดับ frontier ไปกับการเขียนใหม่บรรทัดเดียว
จ่ายตามการใช้งาน · ถูกกว่าราคาทางการ
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 Opus 4.7 | $5.00 / $25.00 per M | $4.00 / $20.00 per M |
| GPT-5.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| Kimi K2.7 Code | $0.95 / $4.00 per M | $1.00 / $4.00 per M |
| Gemini 3.1 Pro Preview | $2.00 / $12.00 per M | $1.60 / $9.60 per M |
รูปแบบความล้มเหลวเฉพาะของ custom provider ใน Zed
key อยู่ใน settings.json แล้วแต่ไม่มีอะไรทำงาน Zed ไม่อ่าน API key จาก settings.json ตามการออกแบบ กรอก key ใน UI ของการตั้งค่า provider หรือ export environment variable ที่มาจากมัน key ที่วางไว้ใน JSON จะถูกเมิน environment variable ตั้งไว้แล้วแต่ Zed ยังขอ key อยู่ ชื่อตัวแปรมาจาก provider key แปลงเป็นตัวพิมพ์ใหญ่คั่นด้วย underscore พร้อม _API_KEY ต่อท้าย ดังนั้น provider ชื่อ apisrouter ต้องการ APISROUTER_API_KEY ไม่ใช่ OPENAI_API_KEY และบน macOS แอปที่เปิดจาก dock ไม่เคย source shell profile ของคุณ ดังนั้น export ใน profile จึงมองไม่เห็น เปิด Zed จาก terminal ด้วยคำสั่ง zed หรือใช้เส้นทาง keychain แล้วข้ามปัญหานี้ไปเลย โมเดลหายไปจาก picker available_models คือ allowlist id ที่คุณคิดว่ามีแต่ไม่เคยประกาศไว้ก็ไม่มีอยู่จริง id เป็นสตริงที่ต้องตรงเป๊ะ รวมถึง suffix เวอร์ชัน และรายการ /v1/models ของ gateway คือการสะกดที่ถูกต้องให้ก็อปมา agent ใช้ tool ไม่ได้ ถ้า object capabilities ของโมเดลบอกว่า tools เป็น false Zed จะไม่เสนอการใช้ tool กับมัน ประกาศ capabilities ให้ตรงกับสิ่งที่โมเดลรองรับจริง api_url ที่ไม่มี /v1 client ต่อ path ของ route อย่าง /chat/completions เข้ากับ base ที่คุณให้ ดังนั้น https://api.apisrouter.com/v1 ถูกต้อง ส่วน host เปล่า ๆ ไม่ถูกต้อง ความล้มเหลวแบบ 404 บน block ที่ดูถูกต้องทุกอย่างมักเป็นเรื่องนี้เกือบทุกครั้ง
ใครที่ใช้ Zed ผ่าน gateway
- นักพัฒนาที่ใช้ชีวิตอยู่ใน editor และต้องการ Claude, GPT และ Kimi ใน agent panel picker เดียว แทนที่จะดูแล credential provider แยกต่อ vendor
- วิศวกรที่เปรียบเทียบโมเดลเขียนโค้ดบนงาน edit จริง แต่ละตัวเลือกเป็นแค่ entry ที่ประกาศไว้และการเลือกใน dropdown หนึ่งครั้ง ไม่มีบัญชีใหม่ต่อการทดลอง
- ทีมที่ทำ secret เดียวให้เป็นมาตรฐาน APISROUTER_API_KEY ตัวเดียวใน onboarding docs แทนที่ checklist key ต่อ vendor และ usage ต่อ key แสดงว่าแต่ละที่นั่งใช้จ่ายเท่าไหร่
- ผู้ใช้ที่จับคู่ agent model ระดับ frontier กับ inline-assist model ที่เร็วจากคนละ vendor ซึ่ง config vendor เดียวทำไม่ได้
- นักพัฒนาที่ไม่มีทางเข้าถึงระบบเก็บเงินของ vendor รายใดรายหนึ่ง การเข้าถึงแบบเติมเงินโดยไม่ต้องใช้บัตรตัดการพึ่งพาการสมัครต่อ provider ออกไป
ตรวจสอบ endpoint และ debug thread แรก
ก่อนเริ่ม agent thread ให้ดูว่า gateway เสิร์ฟอะไรบ้าง id ที่ /v1/models คืนมาคือสตริงเป๊ะ ๆ ที่ available_models ของคุณต้องใช้ ความล้มเหลวใน thread แรกมีรูปแบบคงที่ 401 หมายความว่า key ที่ Zed resolve มาผิดหรือหายไป: เช็ก entry ใน keychain ที่การตั้งค่า provider หรือยืนยันว่า environment variable ที่ derive มาแล้วมองเห็นได้จาก process ของ Zed ไม่ใช่แค่จาก terminal ของคุณ error โมเดลไม่พบจาก gateway หมายความว่าชื่อที่ประกาศไม่ตรงกับ id ที่เสิร์ฟจริง รวมถึง suffix เวอร์ชัน ถ้า provider block ไม่ปรากฏใน settings เลย ตรวจสอบความถูกต้องของ JSON settings.json ยอมรับ comment ได้แต่ไม่ยอมรับ error เชิงโครงสร้าง เมื่อ request ไหลลื่นแล้ว console ของ APIsRouter แสดงโมเดลต่อ request, จำนวน token และค่าใช้จ่าย agent thread เป็นงานที่ context ยาวและหลายเทิร์น การเห็นว่า thread ไหนและโมเดลไหนกิน token เท่าไหร่คือวิธีตัดสินว่าโมเดลค่าเริ่มต้นของคุณคุ้มค่ากับตำแหน่งนั้นหรือไม่
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50คำถามที่พบบ่อย
Zed ใช้โมเดล Claude, GPT และ Kimi ผ่าน custom provider เดียวได้ไหม?
ได้ custom provider คือ api_url บวก allowlist ของ available_models เมื่อ endpoint เสิร์ฟหลาย vendor ให้ประกาศหนึ่ง entry ต่อ id แล้วทุกโมเดลที่ประกาศไว้จะปรากฏใน agent panel picker ภายใต้ provider และ key เดียวกัน สลับได้ต่อ thread
API key ของ custom provider ใน Zed ใส่ไว้ที่ไหน?
ไม่ใช่ใน settings.json กรอกมันใน UI ของการตั้งค่า provider ซึ่งเก็บไว้ใน system keychain หรือ export environment variable ที่มาจาก provider key ของคุณ: provider ชื่อ apisrouter จะอ่าน APISROUTER_API_KEY environment variable มีความสำคัญเหนือกว่าค่าใน keychain
ทำไม Zed ถึงเมิน API key ที่ฉัน export ไว้ใน shell profile?
แอป GUI ที่เปิดจาก dock ไม่เคย source shell profile ของคุณ ดังนั้น export จึงมองไม่เห็นสำหรับมัน เปิด Zed จาก terminal ด้วยคำสั่ง zed เพื่อให้มันสืบทอดตัวแปร หรือใช้ UI การตั้งค่าแล้วให้ keychain เก็บ key แทน
ทำไมโมเดลของฉันหายไปจาก agent panel picker?
โมเดลของ custom provider ต้องประกาศไว้อย่างชัดเจน Zed ไม่สามารถ enumerate custom endpoint ได้ เช็กว่า available_models มี id ตรงเป๊ะ รวมถึง suffix เวอร์ชัน และก็อปปี้ id จาก response ของ /v1/models ของ gateway แทนการพิมพ์จากความจำ
max_tokens และ max_output_tokens ใน available_models ควบคุมอะไร?
max_tokens ประกาศ context window ของโมเดล และ max_output_tokens จำกัดความยาวการสร้างคำตอบ Zed ใช้ค่าเหล่านี้จัดการ agent thread ยาว ๆ ดังนั้นตั้ง max_tokens ให้ตรงกับสิ่งที่โมเดลรองรับจริง การตั้งค่าต่ำเกินไปจะเสียพื้นที่ context ที่โมเดลมีจริง
custom provider เปลี่ยน edit predictions ของ Zed ไหม?
ไม่เปลี่ยน edit predictions รันบนโมเดลเฉพาะของ Zed เองและตั้งค่าแยกต่างหาก custom OpenAI-compatible provider ขับเคลื่อน agent panel และ inline assistant ซึ่งเป็นที่ที่ traffic /v1/chat/completions ไป