second brain خود در Khoj را روی یک base URL سفارشی OpenAI اجرا کنید.

Updated 2026-07-29

Khoj یک راه‌اندازی پروکسی OpenAI را با دو سطح مستند می‌کند: یک متغیر محیطی OPENAI_BASE_URL که مدل‌ها را در اولین اجرا seed می‌کند، و یک entry AI Model API در پنل ادمین با یک فیلد Api Base Url. هرکدام را به https://api.apisrouter.com/v1 اشاره دهید و چت، agent ها، و اتوماسیون‌ها روی هر مدل کاتالوگ اجرا می‌شوند.

پاسخ سریع: env var در اولین اجرا، پنل ادمین هر زمان.

فایل compose خودمیزبانی Khoj یک خط کامنت‌شده OPENAI_BASE_URL حمل می‌کند که به گفته خودش برای دیگر provider های سازگار با OpenAI API در نظر گرفته شده. آن را به https://api.apisrouter.com/v1 با OPENAI_API_KEY حامل یک کلید gateway قبل از اولین راه‌اندازی تنظیم کنید، و initialization خط Khoj کاری به‌طور غیرمعمول کمک‌کننده انجام می‌دهد: فهرست مدل endpoint را query می‌کند و جدول chat-model خود را با هر id ای که endpoint سرویس می‌دهد seed می‌کند، پس کاتالوگ بدون ورود دستی در انتخاب‌گر مدل Khoj ظاهر می‌شود. روی سروری که قبلاً initialize شده، به‌جای آن از پنل ادمین استفاده کنید. یک entry AI Model API بسازید (فیلدها: Name، Api Key، Api Base Url) اشاره‌کننده به gateway، سپس entry های Chat Model بسازید که Name آن‌ها id دقیق مدل باشد، با Model Type روی Openai و متصل به آن AI Model API. هر دو سطح در راهنمای OpenAI-proxy در docs.khoj.dev مستندند.

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

Khoj با مدل چت خود چه می‌کند.

Khoj (khoj-ai در GitHub، حدود ۳۶ هزار ستاره) یک second brain AI قابل‌self-host است: یادداشت‌ها و اسناد شما (markdown، org-mode، PDF، و بیشتر) را index می‌کند، سپس اجازه می‌دهد رویشان چت کنید، agent های سفارشی با persona و ابزارهای خودشان اجرا کنید، اتوماسیون‌هایی که روی یک cron شلیک می‌شوند زمان‌بندی کنید، و اجراهای پژوهش چندمرحله‌ای راه بیندازید. یک اپ میزبانی‌شده وجود دارد، اما سرور self-hosted جایی است که endpoint های سفارشی اعمال می‌شوند، و همان deployment ای است که این صفحه توصیف می‌کند. هرکدام از این ویژگی‌ها از طریق مدل چتی که انتخاب می‌کنید قیف می‌شود. چت اسناد chunk های یادداشت بازیابی‌شده را در prompt جا می‌کند، agent ها فراخوانی‌های ابزار و دستورالعمل‌های persona اضافه می‌کنند، اتوماسیون‌ها همان pipeline را بدون‌نظارت اجرا می‌کنند، و حالت پژوهش بسیاری فراخوانی مدل را به ازای هر سؤال زنجیر می‌کند. Model Type برابر Openai به Khoj می‌گوید /v1/chat/completions را به Api Base Url آن entry AI Model API متصل که فوروارد می‌کند، Name مدل را به‌عنوان رشته ساده فوروارد می‌کند، به همین دلیل یک id Claude یا DeepSeek آنجا کار می‌کند تا وقتی endpoint آن را سرویس دهد. embedding های جستجو یک زیرسیستم متفاوت‌اند. Khoj اسناد شما را به‌طور پیش‌فرض با یک مدل محلی sentence-transformers embed می‌کند، پس index کردن و جستجوی معنایی صرف‌نظر از کاری که با endpoint چت انجام می‌دهید کار می‌کنند. مسیردهی چت از طریق یک gateway فقط صورت‌حساب استدلال را جابه‌جا می‌کند.

راه‌اندازی کامل: entry های پنل ادمین گام‌به‌گام.

روی یک سرور در حال اجرا، کل یکپارچگی سه صفحه ادمین است. اول، AI Model API را اضافه کنید: /server/admin/database/aimodelapi/add را باز کنید، آن را نام‌گذاری کنید، کلید gateway را در Api Key بچسبانید، و Api Base Url را روی https://api.apisrouter.com/v1 تنظیم کنید. دوم، مدل‌های چت را اضافه کنید: در /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 مدل جا شود. مستندات توصیه می‌کنند Tokenizer را برای مدل‌های نوع OpenAI تنظیم‌نشده رها کنید. به ازای هر مدلی که می‌خواهید در انتخاب‌گر باشد تکرار کنید. سوم، مدل را انتخاب کنید: در /settings، مدل چت جدید خود را به‌عنوان پیش‌فرض انتخاب کنید. agent ها می‌توانند مدل را به ازای هر agent override کنند، که همین‌طور یک instance Khoj یک id سریع را برای اتوماسیون‌های روزانه و یک id frontier را برای پژوهش اجرا می‌کند.

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.

چون مدل‌های چت ردیف‌هایی هستند که در برابر یک AI Model API اضافه می‌کنید، نگه‌داری دو یا سه id در انتخاب‌گر هیچ هزینه‌ای ندارد. راه‌اندازی عملی یک پیش‌فرض سریع به‌علاوه یک تشدید frontier است، هر دو صورت‌حساب‌شده از طریق همان کلید تا usage log نشان دهد هر tier واقعاً روی یادداشت‌های شما چقدر هزینه دارد.

  • چت اسناد ورودی-سنگین است: chunk های یادداشت بازیابی‌شده پاسخ را کوچک می‌کنند. قیمت هر-token-ورودی هزینه هر-سؤال را هدایت می‌کند، که claude-haiku-4-5-20251001، deepseek-v4-flash، یا gemini-3.5-flash را برای یادآوری روزمره ترجیح می‌دهد.
  • حالت پژوهش فراخوانی‌ها را ضرب می‌کند. یک سؤال پژوهشی می‌تواند بسیاری نوبت مدل را زنجیر کند، پس id ای که آنجا اختصاص می‌دهید بیشتر از هر تنظیم دیگری صورت‌حساب را جابه‌جا می‌کند؛ claude-sonnet-4-6 انتخاب متعادل است، gpt-5.4 تشدید.
  • اتوماسیون‌های زمان‌بندی‌شده بدون‌نظارت اجرا می‌شوند. آن‌ها را مثل یک اشتراک قیمت‌گذاری کنید: فراخوانی به ازای هر روز ضرب token به ازای هر فراخوانی، دقیقاً همان چیزی که usage log هر-کلید گزارش می‌کند.
  • دانش شخصی سرشار از تناقض است (برنامه‌ها تغییر می‌کنند، یادداشت‌ها کهنه می‌شوند)، و مدل‌ها در اینکه چقدر خوب یادداشت‌های متناقض را پرچم می‌زنند به‌جای ترکیب‌کردن آن‌ها متفاوت‌اند؛ دو id را روی همان مجموعه سؤال تست کنید قبل از commit.
  • Max prompt size در Khoj به ازای هر مدل چت است، پس یک id long-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 و کشف مدل‌ها خوانده می‌شود؛ روی سروری که قبلاً initialize شده، ویرایش فایل compose چیز قابل‌مشاهده‌ای تغییر نمی‌دهد. برای تغییرات بعد از اولین راه‌اندازی از پنل ادمین استفاده کنید، یا اگر واقعاً یک seed تازه می‌خواهید database را reset کنید. تله کلید-placeholder: وقتی OPENAI_BASE_URL بدون OPENAI_API_KEY تنظیم شود، Khoj کلید را با یک placeholder پر می‌کند تا سرورهای محلی مثل Ollama کار کنند. یک gateway به یک کلید واقعی نیاز دارد، پس اگر seeding اولین-اجرا بدون یکی رخ داده باشد، چت‌ها با خطاهای authentication شکست می‌خورند تا کلید را در entry AI Model API در پنل ادمین بچسبانید. auto-discovery همه‌چیز را seed می‌کند. چون initialization هر مدلی که endpoint سرویس می‌دهد را فهرست می‌کند، یک gateway چند-vendor می‌تواند یک جدول مدل بلند seed کند. بی‌ضرر، اما ارزش هرس‌کردن در پنل ادمین را دارد تا انتخاب‌گر قابل‌استفاده بماند. Name مدل چت دقیق است. Khoj آن را عیناً فوروارد می‌کند؛ یک غلط‌تایپی در اولین پیام به‌عنوان model-not-found ظاهر می‌شود، و خروجی /v1/models گیت‌وی نگارش معتبر است. و اگر جستجوی معنایی روی یادداشت‌های شما بدرفتاری کند، آن زیرسیستم embedding محلی است، بی‌ربط به endpoint چت.

چه کسانی Khoj را از طریق یک gateway مسیردهی می‌کنند.

  • self-hoster هایی که چت مدل frontier روی یادداشت‌های خود را بدون یک حساب vendor به ازای هر خانواده مدل می‌خواهند؛ یک کلید id های Claude، GPT، DeepSeek، و Gemini را پوشش می‌دهد.
  • کاربرانی که اتوماسیون‌های زمان‌بندی‌شده روزانه اجرا می‌کنند، جایی که یک id سریع هزینه تکرارشونده را ثابت نگه می‌دارد و usage log آن را قابل‌مشاهده می‌کند.
  • راه‌اندازی‌های حریم‌خصوصی‌محور که index کردن و embedding را محلی نگه می‌دارند و فقط prompt های چت را به یک endpoint قابل‌audit افشا می‌کنند.
  • کسانی که مدل‌های چت را روی یک corpus شخصی یکسان مقایسه می‌کنند: هر کاندید یک ردیف chat-model در برابر همان AI Model API است.
  • توسعه‌دهندگان بدون دسترسی به صورت‌حساب یک vendor خاص. دسترسی مبتنی بر شارژ بدون الزام کارت وابستگی ثبت‌نام هر-provider را حذف می‌کند.

endpoint را تأیید کنید و اولین چت را عیب‌یابی کنید.

ابتدا gateway را چک کنید: مدل‌ها را با کلید خود فهرست کنید و id هایی که قصد ثبت دارید را تأیید کنید. auto-discovery خود Khoj همان فراخوانی را در طول seeding اولین-اجرا انجام می‌دهد، پس اگر این curl کار کند، seeding هم کار خواهد کرد. شکست‌ها تمیز موقعیت‌یابی می‌شوند. خطاهای authentication یعنی Api Key روی entry AI Model API اشتباه یا هنوز placeholder seed-شده است. model-not-found یعنی Name یک مدل چت با املای کاتالوگ مطابقت ندارد. پاسخ‌هایی که وسط پاسخ قطع می‌شوند معمولاً یعنی Max prompt size یا سقف خروجی مدل برای مکالمه خیلی پایین تنظیم شده. مشکلات index کردن و جستجو pipeline embedding محلی هستند و ربطی به endpoint ندارند. وقتی چت‌ها جاری شوند، کنسول APIsRouter مدل، شمارش token، و هزینه هر-درخواست را نشان می‌دهد. اتوماسیون‌ها و اجراهای پژوهش جایی هستند که هزینه‌های second-brain پنهان می‌شوند، و usage هر-کلید روشی است که آن‌ها را به ازای هر ویژگی می‌بینید به‌جای یک شگفتی ماهانه.

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

پرسش‌های پرتکرار

آیا Khoj از یک پروکسی یا gateway سازگار با OpenAI پشتیبانی می‌کند؟

بله، به‌عنوان یک راه‌اندازی مستند: یک entry AI Model API با یک Api Base Url اشاره‌کننده به endpoint بسازید، سپس مدل‌های چت را با Model Type برابر Openai اضافه کنید. فایل compose همچنین OPENAI_BASE_URL را برای seeding اولین-اجرا افشا می‌کند.

آیا Khoj می‌تواند از طریق این با مدل‌های Claude یا DeepSeek چت کند؟

بله. Model Type برابر Openai نام مدل چت را به‌عنوان رشته ساده روی /v1/chat/completions به Api Base Url فوروارد می‌کند. هر id ای که gateway سرویس می‌دهد کار می‌کند، شامل id های Claude، DeepSeek، GLM، و Gemini.

چرا تغییر OPENAI_BASE_URL در docker-compose هیچ اثری نداشت؟

این متغیر provider ها و مدل‌ها را فقط در طول initialization اولین-اجرا seed می‌کند. روی سروری که initialize شده، به‌جای آن entry AI Model API را در پنل ادمین ویرایش کنید؛ آن تنظیم زنده است.

آیا base URL سفارشی روی جستجوی اسناد Khoj اثر می‌گذارد؟

خیر. Khoj به‌طور پیش‌فرض اسناد شما را با یک مدل محلی sentence-transformers embed و جستجو می‌کند. entry AI Model API فقط چت، agent ها، اتوماسیون‌ها، و پژوهش را جابه‌جا می‌کند.

Max prompt size روی entry مدل چت چیست؟

یک سقف هر-مدل روی اینکه Khoj چقدر prompt در یک درخواست جا می‌کند. آن را طوری تنظیم کنید که در پنجره context مدل جا شود؛ خیلی پایین یادداشت‌های بازیابی‌شده را می‌تراشد، و یک id long-context فقط اگر این فیلد برای مطابقت بالا برود کمک می‌کند.

آیا این روی اپ میزبانی‌شده Khoj اعمال می‌شود؟

خیر، endpoint های سفارشی یک ویژگی self-hosting هستند. اپ میزبانی‌شده مدل‌های خودش را سمت-سرور مدیریت می‌کند؛ سطوح پنل-ادمین و محیط اینجا متعلق به سروری هستند که خودتان اجرا می‌کنید.