รัน second brain ของ Khoj บน custom OpenAI base URL

Updated 2026-07-29

Khoj มีเอกสารตั้งค่า OpenAI-proxy ด้วยสองพื้นผิว: environment variable OPENAI_BASE_URL ที่ seed โมเดลตอนรันครั้งแรก และ entry AI Model API ในหน้า admin พร้อมฟิลด์ Api Base Url ชี้อันใดอันหนึ่งไปที่ https://api.apisrouter.com/v1 แล้วแชท, agent และ automation จะรันบนโมเดลในแคตตาล็อกใดก็ได้

คำตอบสั้น ๆ: env var ตอนรันครั้งแรก หน้า admin เมื่อไหร่ก็ได้

compose file สำหรับ self-hosting ของ Khoj มีบรรทัด OPENAI_BASE_URL ที่ comment ไว้ ซึ่งตามคำของมันเองมีไว้สำหรับ OpenAI API compatible provider อื่น ๆ ตั้งค่าเป็น https://api.apisrouter.com/v1 พร้อม OPENAI_API_KEY ที่เก็บ gateway key ก่อนเริ่มต้นครั้งแรก แล้วการ initialize ของ Khoj จะทำสิ่งที่มีประโยชน์เป็นพิเศษ: มัน query รายการโมเดลของ endpoint แล้ว seed ตาราง chat-model ของมันด้วยทุก id ที่ endpoint เสิร์ฟ ดังนั้นแคตตาล็อกจะปรากฏใน model picker ของ Khoj โดยไม่ต้องกรอกด้วยมือ บน server ที่ initialize ไปแล้ว ให้ใช้หน้า admin แทน สร้าง entry AI Model API (ฟิลด์: Name, Api Key, Api Base Url) ชี้ไปที่ gateway จากนั้นสร้าง Chat Model entry ที่ Name คือ model id เป๊ะ ๆ โดยตั้ง Model Type เป็น Openai และเชื่อมกับ AI Model API นั้น ทั้งสองพื้นผิวมีเอกสารอยู่ในคู่มือ OpenAI-proxy ของ Khoj ที่ docs.khoj.dev

services:
  server:
    environment:
      - OPENAI_BASE_URL=https://api.apisrouter.com/v1
      - OPENAI_API_KEY=sk-YOUR-APISROUTER-KEY

Khoj ทำอะไรกับ chat model ของมัน

Khoj (khoj-ai บน GitHub มีดาวประมาณ 36K) คือ AI second brain แบบ self-hostable: มัน index โน้ตและเอกสารของคุณ (markdown, org-mode, PDF และอื่น ๆ) แล้วให้คุณแชทเหนือมัน รัน custom agent พร้อม persona และ tool ของตัวเอง จัดตาราง automation ที่ทำงานตาม cron และเริ่ม research run แบบหลายขั้นตอน มี hosted app อยู่ แต่ self-hosted server คือจุดที่ custom endpoint ใช้ได้ และเป็น deployment ที่หน้านี้อธิบาย ทุกฟีเจอร์ข้างต้นไหลผ่าน chat model ที่คุณเลือก การแชทเอกสารบรรจุ note chunk ที่ retrieve มาเข้าไปใน prompt agent เพิ่ม tool call และคำสั่ง persona automation รัน pipeline เดียวกันแบบไม่มีคนเฝ้า และ research mode ต่อการเรียกโมเดลหลายครั้งต่อคำถาม Model Type Openai บอก Khoj ให้พูด /v1/chat/completions กับ Api Base Url ของ entry AI Model API ที่เชื่อมไว้ ส่ง model Name ผ่านเป็นสตริงธรรมดา ซึ่งเป็นเหตุผลที่ id ของ Claude หรือ DeepSeek ทำงานได้ที่นั่นตราบใดที่ endpoint เสิร์ฟมัน search embedding เป็น subsystem คนละตัว Khoj embed เอกสารของคุณด้วยโมเดล sentence-transformers ท้องถิ่นเป็นค่าเริ่มต้น ดังนั้นการ index และ semantic search ยังทำงานต่อไปไม่ว่าคุณจะทำอะไรกับ chat endpoint การ route แชทผ่าน gateway ย้ายแค่บิลของ reasoning เท่านั้น

ตั้งค่าแบบเต็ม: entry ในหน้า admin ทีละขั้น

บน server ที่กำลังรัน การเชื่อมต่อทั้งหมดคือสามหน้าจอ admin แรก เพิ่ม AI Model API: เปิด /server/admin/database/aimodelapi/add ตั้งชื่อ วาง gateway key ลงใน Api Key และตั้ง Api Base Url เป็น https://api.apisrouter.com/v1 ที่สอง เพิ่ม chat model: ที่ /server/admin/database/chatmodel/add ตั้ง Name เป็น id ในแคตตาล็อกเป๊ะ ๆ (claude-sonnet-4-6, deepseek-v4-flash) ตั้ง Model Type เป็น Openai เชื่อมกับ entry Ai Model Api ที่คุณเพิ่งสร้าง และตั้ง Max prompt size ให้เข้ากับ context window ของโมเดล เอกสารแนะนำให้ปล่อย Tokenizer ว่างไว้สำหรับโมเดลประเภท OpenAI ทำซ้ำต่อโมเดลที่คุณต้องการใน picker ที่สาม เลือกโมเดล: ที่ /settings เลือก chat model ใหม่ของคุณเป็นค่าเริ่มต้น agent สามารถ override โมเดลต่อ agent ได้ ซึ่งเป็นวิธีที่ Khoj instance เดียวรัน id ที่เร็วสำหรับ automation ประจำวันและ id ระดับ frontier สำหรับ research

1) /server/admin/database/aimodelapi/add
   Name:         APIsRouter
   Api Key:      sk-YOUR-APISROUTER-KEY
   Api Base Url: https://api.apisrouter.com/v1

2) /server/admin/database/chatmodel/add
   Name:         claude-sonnet-4-6   (exact catalog id)
   Model Type:   Openai
   Ai Model Api: APIsRouter
   Max prompt size: 100000

3) /settings -> select the new chat model

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

เพราะ chat model เป็นแถวที่คุณเพิ่มเทียบกับ AI Model API เดียว การเก็บสอง-สาม id ไว้ใน picker ไม่มีค่าใช้จ่ายอะไร การตั้งค่าที่ใช้จริงคือค่าเริ่มต้นที่เร็วบวกขั้นระดับ frontier ทั้งคู่คิดเงินผ่าน key เดียวกัน ดังนั้น usage log จะแสดงว่าแต่ละระดับมีค่าใช้จ่ายจริงเท่าไหร่บนโน้ตของคุณ

  • การแชทเอกสารเป็นงานที่ input หนัก: note chunk ที่ retrieve มามีขนาดใหญ่กว่าคำตอบมาก ราคาต่อ input token ขับเคลื่อนต้นทุนต่อคำถาม ซึ่งเข้าทาง claude-haiku-4-5-20251001, deepseek-v4-flash หรือ gemini-3.5-flash สำหรับการเรียกคืนความจำทั่วไป
  • research mode คูณการเรียก คำถาม research หนึ่งข้อสามารถต่อเทิร์นโมเดลได้หลายครั้ง ดังนั้น id ที่คุณกำหนดตรงนั้นขยับบิลมากกว่าการตั้งค่าอื่นใด claude-sonnet-4-6 คือตัวเลือกที่สมดุล gpt-5.4 คือขั้นที่สูงขึ้น
  • automation ที่ตั้งเวลาไว้รันแบบไม่มีคนเฝ้า ตั้งราคามันเหมือน subscription: จำนวนการเรียกต่อวันคูณ token ต่อการเรียก ซึ่งตรงกับสิ่งที่ usage log ต่อ key รายงานเป๊ะ
  • ความรู้ส่วนตัวมีความขัดแย้งเยอะ (แผนเปลี่ยน โน้ตล้าสมัย) และโมเดลต่างกันในเรื่องความสามารถชี้ให้เห็นโน้ตที่ขัดแย้งแทนที่จะผสมมันเข้าด้วยกัน ทดสอบ id สองตัวบนชุดคำถามเดียวกันก่อนตัดสินใจ
  • Max prompt size เป็นค่าต่อ chat model ใน Khoj ดังนั้น id แบบ context ยาวจะคุ้มค่าก็ต่อเมื่อคุณยกฟิลด์นี้ให้ตรงกัน

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

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.4$2.50 / $15.00 per M$2.00 / $12.00 per M
DeepSeek V4 Flash$0.14 / $0.28 per M$0.10 / $0.30 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M

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

env var คือ seed ตอนรันครั้งแรก ไม่ใช่การตั้งค่าแบบสด OPENAI_BASE_URL ถูกอ่านตอน initialization เพื่อสร้าง entry provider และค้นพบโมเดล บน server ที่ initialize ไปแล้ว การแก้ compose file ไม่เปลี่ยนอะไรที่คุณเห็นได้ ใช้หน้า admin สำหรับการเปลี่ยนแปลงหลัง boot ครั้งแรก หรือ reset database ถ้าคุณต้องการ seed ใหม่จริง ๆ กับดัก placeholder-key: เมื่อ OPENAI_BASE_URL ถูกตั้งโดยไม่มี OPENAI_API_KEY Khoj จะกรอก key ด้วย placeholder เพื่อให้ local server อย่าง Ollama ทำงานได้ gateway ต้องการ key จริง ดังนั้นถ้าการ seed ตอนรันครั้งแรกเกิดขึ้นโดยไม่มีมัน แชทจะล้มเหลวด้วย authentication error จนกว่าคุณจะวาง key ลงใน entry AI Model API ในหน้า admin การค้นพบอัตโนมัติ seed ทุกอย่าง เพราะ initialization ลิสต์ทุกโมเดลที่ endpoint เสิร์ฟ gateway หลาย vendor จะ seed ตารางโมเดลที่ยาว ไม่เป็นอันตราย แต่คุ้มค่าที่จะตัดทอนในหน้า admin เพื่อให้ picker ยังใช้งานได้ Chat model Name ต้องเป๊ะ Khoj ส่งมันตรงตัว การพิมพ์ผิดปรากฏเป็น model-not-found ตอนข้อความแรก และ output ของ /v1/models ของ gateway คือการสะกดที่เชื่อถือได้ และถ้า semantic search เหนือโน้ตของคุณทำงานผิดปกติ นั่นคือ local embedding subsystem ไม่เกี่ยวกับ chat endpoint

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

  • self-hoster ที่ต้องการแชทระดับ frontier เหนือโน้ตของตัวเองโดยไม่ต้องมีบัญชี vendor ต่อตระกูลโมเดล key เดียวครอบคลุม id ของ Claude, GPT, DeepSeek และ Gemini
  • ผู้ใช้ที่รัน automation ตามตารางเวลาทุกวัน ที่ id เร็วทำให้ต้นทุนที่เกิดซ้ำคงที่และ usage log ทำให้เห็นชัด
  • การติดตั้งที่เน้นความเป็นส่วนตัว ที่เก็บ indexing และ embedding ไว้ local และเปิดเผยแค่ chat prompt ให้ endpoint เดียวที่ตรวจสอบได้
  • นักลองของที่เปรียบเทียบ chat model บน corpus ส่วนตัวเดียวกัน: ผู้เข้าแข่งขันทุกตัวเป็นแค่แถว chat model เดียวเทียบกับ AI Model API เดียวกัน
  • นักพัฒนาที่ไม่มีสิทธิ์เข้าถึงระบบเก็บเงินของ vendor รายหนึ่ง การเข้าถึงแบบเติมเงินโดยไม่ต้องใช้บัตรตัดการพึ่งพาการสมัครต่อ provider ออกไป

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

เช็ก gateway ก่อน: ลิสต์โมเดลด้วย key ของคุณและยืนยัน id ที่คุณวางแผนจะลงทะเบียน การค้นพบอัตโนมัติของ Khoj เองก็เรียกแบบเดียวกันตอน seed รันครั้งแรก ดังนั้นถ้า curl นี้ทำงาน การ seed ก็จะทำงานด้วย ความล้มเหลวจับกลุ่มได้ชัดเจน Authentication error หมายความว่า Api Key ใน entry AI Model API ผิด หรือยังเป็น placeholder ที่ seed ไว้ Model-not-found หมายความว่า chat model Name ไม่ตรงกับการสะกดในแคตตาล็อก คำตอบที่ตัดกลางมักหมายความว่า Max prompt size หรือเพดาน output ของโมเดลตั้งต่ำไปสำหรับบทสนทนา ปัญหา indexing และ search คือ local embedding pipeline และไม่เกี่ยวกับ endpoint เลย เมื่อแชทไหลลื่นแล้ว console ของ APIsRouter แสดงโมเดลต่อ request, จำนวน token และค่าใช้จ่าย automation และ research run คือจุดที่ต้นทุนของ second brain ซ่อนอยู่ และ usage ต่อ key คือวิธีที่คุณเห็นมันต่อฟีเจอร์แทนที่จะเป็นเซอร์ไพรส์รายเดือนครั้งเดียว

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

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

Khoj รองรับ OpenAI-compatible proxy หรือ gateway ไหม?

รองรับ ในรูปแบบที่มีเอกสาร: สร้าง entry AI Model API พร้อม Api Base Url ชี้ไปที่ endpoint แล้วเพิ่ม chat model ด้วย Model Type Openai compose file ยังเปิด OPENAI_BASE_URL สำหรับ seed ตอนรันครั้งแรกด้วย

Khoj แชทกับโมเดล Claude หรือ DeepSeek ผ่านสิ่งนี้ได้ไหม?

ได้ Model Type Openai ส่ง chat model Name เป็นสตริงธรรมดาผ่าน /v1/chat/completions ไปยัง Api Base Url id ใดก็ตามที่ gateway เสิร์ฟใช้ได้ รวมถึง id ของ Claude, DeepSeek, GLM และ Gemini

ทำไมการเปลี่ยน OPENAI_BASE_URL ใน docker-compose ไม่มีผลอะไร?

ตัวแปรนี้ seed provider และโมเดลตอน initialization ครั้งแรกเท่านั้น บน server ที่ initialize แล้ว ให้แก้ entry AI Model API ในหน้า admin แทน นั่นคือการตั้งค่าแบบสด

custom base URL มีผลต่อการค้นหาเอกสารของ Khoj ไหม?

ไม่มี Khoj embed และค้นหาเอกสารของคุณด้วยโมเดล sentence-transformers ท้องถิ่นเป็นค่าเริ่มต้น entry AI Model API ย้ายแค่แชท, agent, automation และ research เท่านั้น

Max prompt size บน entry chat model คืออะไร?

เพดานต่อโมเดลว่า Khoj บรรจุ prompt เข้าไปใน request ได้มากแค่ไหน ตั้งให้เข้ากับ context window ของโมเดล ตั้งต่ำไปจะตัดโน้ตที่ retrieve มา และ id แบบ context ยาวจะช่วยได้ก็ต่อเมื่อยกฟิลด์นี้ให้ตรงกัน

สิ่งนี้ใช้กับแอป Khoj ที่ hosted ไว้ไหม?

ไม่ใช้ custom endpoint เป็นฟีเจอร์สำหรับ self-hosting แอปที่ hosted จัดการโมเดลของตัวเองฝั่ง server พื้นผิวหน้า admin และ environment ที่นี่เป็นของ server ที่คุณรันเอง