
One API کیا ہے
One API ایک اوپن سورس بڑے ماڈل کی API مینجمنٹ اور ریلے سسٹم ہے۔ یہ مختلف ماڈل فراہم کنندگان کے انٹرفیسز کو معیاری OpenAI API فارمیٹ میں یکساں کرتا ہے، تاکہ کلائنٹس ایک ہی API Base اور رسائی ٹوکن استعمال کرکے متعدد اپ اسٹریم چینلز کو کال کر سکیں۔
یہ منصوبہ OpenAI اور Azure OpenAI، Anthropic Claude، Google Gemini، Mistral، Doubao، Wenxin Yiyan، Tongyi Qianwen، iFlytek Spark، ChatGLM، Tencent Hunyuan، Moonshot AI، DeepSeek، Ollama، Cohere، Groq، Cloudflare Workers AI، xAI اور دیگر متعدد سروسز کو سپورٹ کرتا ہے۔
تعمیلی یاددہانی: One API استعمال کرتے وقت OpenAI کی شرائطِ استعمال اور قابل اطلاق قوانین و ضوابط کی پابندی ضروری ہے، اور اسے غیر قانونی مقاصد کے لیے استعمال نہیں کیا جا سکتا۔ چین کے علاقے کے عوام کو بغیر رجسٹریشن کے جنریٹو مصنوعی ذہانت کی خدمات فراہم نہ کریں۔
بنیادی خصوصیات
یکساں انٹرفیس: OpenAI سے مطابقت رکھنے والے API فارمیٹ کے ذریعے مختلف بڑے ماڈلز تک رسائی حاصل کریں۔
متعدد چینلز اور لوڈ بیلنسنگ: متعدد اپ اسٹریم چینلز ترتیب دیں؛ چینل متعین نہ ہونے کی صورت میں خودکار لوڈ بیلنسنگ کی جاتی ہے۔
اسٹریمنگ آؤٹ پٹ: stream موڈ سپورٹ کرتا ہے، جس سے ٹائپ رائٹر طرز کا جواب ممکن ہوتا ہے۔
ٹوکن مینجمنٹ: میعاد ختم ہونے کا وقت، کوٹہ، مجاز IP رینج اور قابل رسائی ماڈلز مقرر کیے جا سکتے ہیں۔
چینل مینجمنٹ: چینلز کی بیچ تخلیق، ماڈل فہرستوں، چینل گروپس اور ماڈل میپنگ کی ترتیب سپورٹ کرتا ہے۔
کوٹہ اور بلنگ: کوٹہ کی تفصیلات، صارف گروپس، چینل گروپس، ملٹی پلائرز اور امریکی ڈالر میں کوٹہ ڈسپلے سپورٹ کرتا ہے۔
قابل اعتماد کارکردگی: ناکامی کی صورت میں خودکار دوبارہ کوشش، متعدد مشینوں پر تعیناتی، Redis کیش اور ڈیٹابیس کنکشن کی ترتیب سپورٹ کرتا ہے۔
انتظامی توسیع: سسٹم رسائی ٹوکن کے ذریعے مینجمنٹ API کو کال کیا جا سکتا ہے، اور سورس کوڈ میں ترمیم کے بغیر انتظامی صلاحیتوں کو بڑھایا جا سکتا ہے۔
صارف نظام: ای میل، Feishu، GitHub اور WeChat آفیشل اکاؤنٹ سمیت لاگ اِن اور رجسٹریشن کے طریقے سپورٹ کرتا ہے۔
انٹرفیس حسب ضرورت: سسٹم کا نام، Logo، فوٹر، ہوم پیج، تعارفی صفحہ اور تھیم حسب ضرورت بنائے جا سکتے ہیں۔
Docker کے ذریعے فوری تعیناتی
ڈیٹا ڈائریکٹری تیار کریں
SQLite فوری تجربے یا کم ہم وقت کنکشن والی تعیناتی کے لیے موزوں ہے۔ پہلے ایک قابل تحریر ڈیٹا ڈائریکٹری تیار کریں؛ ڈیٹابیس اور لاگز اسی ڈائریکٹری میں محفوظ ہوں گے۔
mkdir -p /home/ubuntu/data/one-apiOne API شروع کریں
docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api-p 3000:3000 میں بائیں جانب والا پورٹ میزبان مشین کا پورٹ ہے، جسے ضرورت کے مطابق تبدیل کیا جا سکتا ہے۔ شروع ہونے کے بعد http://localhost:3000/ کھولیں۔
ابتدائی صارف نام root اور ابتدائی پاس ورڈ 123456 ہے۔
اہم: پہلی بار root سے لاگ اِن کرنے کے بعد ڈیفالٹ پاس ورڈ فوراً تبدیل کریں۔
اگر Docker Hub کی امیج حاصل نہ ہو سکے تو justsong/one-api کو ghcr.io/songquanpeng/one-api سے تبدیل کریں۔ اگر کنٹینر شروع نہ ہو تو منصوبے کے مسائل کے ریکارڈ کے مطابق --privileged=true شامل کرنے کی کوشش کی جا سکتی ہے۔
MySQL کے ذریعے تعیناتی
زیادہ ہم وقت کنکشن کی صورت میں README واضح طور پر SQL_DSN مقرر کرنے اور SQLite کا استعمال جاری نہ رکھنے کی تجویز دیتا ہے۔ oneapi ڈیٹابیس پہلے سے بنانا ضروری ہے، لیکن ڈیٹا ٹیبلز پروگرام خودکار طور پر بنائے گا۔
docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-apiصارف نام، پاس ورڈ، پتا اور پورٹ کو حقیقی ڈیٹابیس پیرامیٹرز سے تبدیل کریں۔ اگر MySQL میزبان مشین پر چل رہا ہو تو نیٹ ورک کے ماحول کے مطابق --network="host" شامل کیا جا سکتا ہے، تاکہ کنٹینر میزبان مشین کے ڈیٹابیس تک رسائی حاصل کر سکے۔
Docker Compose استعمال کریں
ریپوزٹری Docker Compose کے ذریعے آغاز کا طریقہ فراہم کرتی ہے۔ موجودہ ہدایات میں MySQL استعمال کیا گیا ہے اور ڈیٹا ./data/mysql ڈائریکٹری میں محفوظ کیا جاتا ہے۔
docker-compose up -d
docker-compose psسورس کوڈ سے دستی تعیناتی
اگر خود تعمیر کرنا ہو تو Node.js، npm اور Go کا ماحول تیار کریں، پھر فرنٹ اینڈ اور بیک اینڈ کو بالترتیب بنائیں۔
git clone https://github.com/songquanpeng/one-api.git
cd one-api/web/default
npm install
npm run build
cd ../..
go mod download
go build -ldflags "-s -w" -o one-apiتعمیر مکمل ہونے کے بعد عمل درآمد کی اجازت دے کر سروس شروع کریں:
chmod u+x one-api
./one-api --port 3000 --log-dir ./logs--port سننے والا پورٹ متعین کرتا ہے، جس کی ڈیفالٹ قدر 3000 ہے؛ --log-dir لاگ ڈائریکٹری متعین کرتا ہے۔ ورژن دیکھنے کے لیے --version اور مدد دیکھنے کے لیے --help بھی استعمال کیا جا سکتا ہے۔
بنیادی ترتیب مکمل کریں
One API کا انتظامی صفحہ کھولیں، root اکاؤنٹ سے لاگ اِن کریں اور ڈیفالٹ پاس ورڈ تبدیل کریں۔
چینلز کے صفحے پر جائیں، متعلقہ فراہم کنندہ کی قسم منتخب کریں اور اپ اسٹریم API Key شامل کریں۔
اپ اسٹریم کی صلاحیت کے مطابق چینل کے معاون ماڈلز کی فہرست اور گروپس مقرر کریں۔
ٹوکنز کے صفحے پر جائیں اور کلائنٹس کے لیے رسائی ٹوکن بنائیں۔
ضرورت کے مطابق ٹوکن کے لیے کوٹہ، میعاد، مجاز IP رینج اور قابل رسائی ماڈلز مقرر کریں۔
One API بنیادی طور پر فوری استعمال کے لیے تیار ہے۔ دیگر ترتیبات انتظامی انٹرفیس، ماحول کے متغیرات، .env فائل یا کمانڈ لائن پیرامیٹرز کے ذریعے مکمل کی جا سکتی ہیں۔ .env استعمال کرتے وقت ریپوزٹری میں موجود .env.example دیکھیں اور اسے .env کے نام سے تبدیل کریں۔
OpenAI سے مطابقت رکھنے والے انٹرفیس کے ذریعے استعمال
کلائنٹ میں API Base کو اپنی One API تعیناتی کے پتے پر اور API Key کو ابھی بنائے گئے One API ٹوکن پر مقرر کریں۔ Base URL کا فارمیٹ کلائنٹ پر منحصر ہے؛ OpenAI کی سرکاری لائبریری کے لیے README میں درج ترتیب اس طرح ہے:
OPENAI_API_KEY="sk-xxxxxx"
OPENAI_API_BASE="https://<HOST>:<PORT>/v1"درخواست پہلے One API تک پہنچے گی، پھر One API اسے OpenAI، Azure یا دیگر ماڈل چینلز کو بھیجے گا۔ مختلف انٹرفیس فارمیٹ رکھنے والے اپ اسٹریم کے لیے One API ریلے کے مطلوبہ درخواست باڈی اور جوابی باڈی کی تبدیلی سنبھالتا ہے۔
موجودہ کلائنٹس کے ساتھ استعمال
زیادہ تر وہ کلائنٹس جو حسب ضرورت OpenAI انٹرفیس پتے کو سپورٹ کرتے ہیں، مربوط کیے جا سکتے ہیں۔ مثال کے طور پر ChatGPT Next Web کے لیے پہلے کلائنٹ کنٹینر چلائیں:
docker run --name chat-next-web -d -p 3001:3000 yidadaa/chatgpt-next-webپھر کلائنٹ کے صفحے میں One API انٹرفیس کا پتا اور One API ٹوکن درج کریں۔ پورٹ کو One API کے زیر استعمال 3000 سے متصادم ہونے سے بچائیں۔
ChatGPT Web بھی ماحول کے متغیرات کے ذریعے One API سے منسلک کیا جا سکتا ہے:
docker run --name chatgpt-web -d -p 3002:3002 -e OPENAI_API_BASE_URL=https://openai.example.com -e OPENAI_API_KEY=sk-xxx chenzhaoyu94/chatgpt-webمثالی ڈومین اور ٹوکن کو اپنی ترتیب سے تبدیل کریں۔
اعلیٰ درجے کی ترتیب کی تجاویز
چینل متعین کریں یا لوڈ بیلنسنگ فعال کریں
ڈیفالٹ طور پر، چینل متعین نہ کرنے والی درخواستیں متعدد دستیاب چینلز کے درمیان لوڈ بیلنس کی جاتی ہیں۔ منتظم کے بنائے ہوئے ٹوکن میں ٹوکن کے بعد چینل ID شامل کی جا سکتی ہے، تاکہ موجودہ درخواست کو مخصوص چینل کے ذریعے لازماً ہینڈل کیا جائے:
Authorization: Bearer ONE_API_KEY-CHANNEL_IDعام صارف کے بنائے ہوئے ٹوکن اس طریقے سے چینل ID متعین نہیں کر سکتے۔
ماڈل میپنگ احتیاط سے استعمال کریں
ماڈل میپنگ صارف کی درخواست میں موجود ماڈل کو کسی دوسرے ماڈل کی طرف بھیج سکتی ہے۔ تاہم README یاددہانی کراتا ہے کہ ضرورت نہ ہو تو ماڈل میپنگ مقرر نہ کریں، کیونکہ فعال ہونے کے بعد درخواست کی باڈی براہ راست منتقل ہونے کے بجائے دوبارہ بنائی جاتی ہے، اور بعض ایسے فیلڈز جو ابھی باضابطہ طور پر سپورٹ نہیں ہوتے، کامیابی سے منتقل نہیں ہو سکتے۔
Redis کیش استعمال کریں
REDIS_CONN_STRING مقرر کرنے کے بعد One API Redis کو کیش کے طور پر استعمال کرے گا:
REDIS_CONN_STRING=redis://default:redispw@localhost:49153اگر ڈیٹابیس تک رسائی کی تاخیر بہت کم ہو تو Redis فعال کرنے کی ضرورت نہیں، کیونکہ کیش ڈیٹا کی ہم زمانی میں تاخیر پیدا کر سکتا ہے۔ Sentinel یا کلسٹر موڈ میں اس متغیر کو نوڈز کی فہرست پر مقرر کیا جا سکتا ہے، اور اسے REDIS_PASSWORD اور REDIS_MASTER_NAME کے ساتھ استعمال کیا جا سکتا ہے۔
ڈیٹابیس کنکشن بہتر بنائیں
ڈیٹابیس کنکشن درج ذیل ماحول کے متغیرات کے ذریعے ایڈجسٹ کیے جا سکتے ہیں:
SQL_MAX_IDLE_CONNS: زیادہ سے زیادہ غیر فعال کنکشنز کی تعداد، ڈیفالٹ100۔SQL_MAX_OPEN_CONNS: زیادہ سے زیادہ کھلے کنکشنز کی تعداد، ڈیفالٹ1000۔SQL_CONN_MAX_LIFETIME: کنکشن کی زیادہ سے زیادہ مدت، ڈیفالٹ60منٹ۔BATCH_UPDATE_ENABLED=true: ڈیٹابیس بیچ اپ ڈیٹ ایگریگیشن فعال کرتا ہے؛ اس سے بہت زیادہ کنکشنز کا مسئلہ کم ہو سکتا ہے، لیکن کوٹہ اپ ڈیٹ میں تاخیر ہوگی۔BATCH_UPDATE_INTERVAL=5: بیچ اپ ڈیٹ ایگریگیشن کا وقفہ مقرر کرتا ہے، اکائی سیکنڈ ہے۔
اگر Error 1040: Too many connections ظاہر ہو تو SQL_MAX_OPEN_CONNS کو مناسب حد تک کم کریں، اور بیچ اپ ڈیٹ فعال کرنے کا بھی جائزہ لیا جا سکتا ہے۔
سیشن، ٹائم آؤٹ اور پراکسی ترتیب دیں
SESSION_SECRET: مستقل سیشن کلید مقرر کرتا ہے، تاکہ دوبارہ شروع ہونے کے بعد بھی لاگ اِن صارفین کی Cookie مؤثر رہے۔RELAY_TIMEOUT: ریلے درخواست کا ٹائم آؤٹ مقرر کرتا ہے، اکائی سیکنڈ ہے۔RELAY_PROXY: ریلے درخواستوں کو مخصوص پراکسی کے ذریعے اپ اسٹریم API تک پہنچاتا ہے۔USER_CONTENT_REQUEST_TIMEOUT: صارف کے اپ لوڈ کردہ مواد کو ڈاؤن لوڈ کرنے کا ٹائم آؤٹ مقرر کرتا ہے۔USER_CONTENT_REQUEST_PROXY: تصاویر جیسے صارف کے اپ لوڈ کردہ مواد کے لیے ڈاؤن لوڈ پراکسی ترتیب دیتا ہے۔
چینل مانیٹرنگ ترتیب دیں
چینل کا بیلنس باقاعدگی سے اپ ڈیٹ کیا جا سکتا ہے اور چینل کی دستیابی جانچی جا سکتی ہے:
CHANNEL_UPDATE_FREQUENCY=1440
CHANNEL_TEST_FREQUENCY=1440
POLLING_INTERVAL=5پہلے دو متغیرات کی اکائی منٹ ہے، جبکہ POLLING_INTERVAL کی اکائی سیکنڈ ہے، جو بیچ آپریشنز کے دوران درخواستوں کے وقفے کو کنٹرول کرنے کے لیے استعمال ہوتا ہے۔
متعدد مشینوں کی تعیناتی کی تشکیل
متعدد مشینوں کی تعیناتی مقامی SQLite پر انحصار جاری نہیں رکھ سکتی۔ تمام نوڈز کو ایک ہی MySQL ڈیٹا بیس سے منسلک ہونا چاہیے اور سیشن کی تشکیل یکساں رکھنی چاہیے۔
تمام سرورز پر ایک ہی
SESSION_SECRETمقرر کریں۔تمام سرورز
SQL_DSNکے ذریعے ایک ہی MySQL ڈیٹا بیس سے منسلک ہوں۔غلام سرورز پر
NODE_TYPE=slaveمقرر کریں؛ مقرر نہ ہونے کی صورت میں بنیادی سرور فرض کیا جائے گا۔ڈیٹا بیس سے تشکیل کو باقاعدگی سے ہم وقت ساز کرنے کے لیے
SYNC_FREQUENCYاستعمال کریں۔غلام سرورز
FRONTEND_BASE_URLمقرر کر سکتے ہیں تاکہ صفحے کی درخواستیں بنیادی سرور پر ری ڈائریکٹ کی جائیں۔ہر غلام سرور پر Redis تعینات کرکے
REDIS_CONN_STRINGمقرر کیا جا سکتا ہے، جس سے کیش کی مدت کے دوران ڈیٹا بیس تک رسائی کم ہو جاتی ہے۔اگر بنیادی سرور کی ڈیٹا بیس تک رسائی میں تاخیر زیادہ ہو تو Redis فعال کرنے اور باقاعدہ ہم وقتی پر بھی غور کرنا چاہیے۔
SESSION_SECRET=random_string
SQL_DSN=root:123456@tcp(database:3306)/oneapi
NODE_TYPE=slave
SYNC_FREQUENCY=60
FRONTEND_BASE_URL=https://openai.example.com
REDIS_CONN_STRING=redis://default:redispw@localhost:49153Nginx اور HTTPS کی تشکیل
پروڈکشن ماحول میں One API کے لیے Nginx کو ریورس پراکسی کے طور پر استعمال کیا جا سکتا ہے۔ زیادہ جوابی وقت رکھنے والے ماڈلز کے لیے پڑھنے کا ٹائم آؤٹ مناسب طور پر بڑھائیں۔
server {
server_name openai.example.com;
location / {
client_max_body_size 64m;
proxy_http_version 1.1;
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_read_timeout 300s;
}
}Ubuntu پر HTTPS حاصل کرنے اور اسے تشکیل دینے کے لیے Certbot استعمال کیا جا سکتا ہے:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
sudo service nginx restartعام مسائل کی جانچ
ناکافی کوٹے کا پیغام: اکاؤنٹ کے کوٹے کے علاوہ ٹوکن کی اپنی کوٹے کی حد بھی جانچیں۔
کوئی دستیاب چینل نہیں کا پیغام: صارف گروپ، چینل گروپ اور چینل کے معاون ماڈلز کی فہرست جانچیں۔
موجودہ گروپ کا بوجھ بھر چکا ہے: عموماً اس کا مطلب ہے کہ اپ اسٹریم چینل نے 429 واپس کیا ہے۔
کلائنٹ کا Failed to fetch پیغام: انٹرفیس ایڈریس، API Key اور HTTPS کی تشکیل جانچیں؛ HTTPS صفحے میں موجود HTTP درخواستوں کو براؤزر روک سکتا ہے۔
چینل ٹیسٹ کا جواب invalid character: اپ اسٹریم کا جواب درست JSON کے بجائے HTML ہو سکتا ہے، اور تعیناتی سرور کا IP یا پراکسی نوڈ بھی Cloudflare کی جانب سے مسدود ہو سکتا ہے۔
اپ گریڈ کے بعد ڈیٹا ضائع ہونے کا خدشہ: معمول کی اپ گریڈ کے باعث MySQL ڈیٹا ضائع نہیں ہوتا؛ SQLite کے لیے ڈیٹا والیوم درست طور پر ماؤنٹ کرنا ضروری ہے تاکہ
one-api.dbبرقرار رہے۔
اختتامیہ
One API متعدد ماڈل فراہم کنندگان کو OpenAI سے مطابقت رکھنے والے طریقۂ استعمال میں یکجا کرنے اور چینلز، ٹوکنز، کوٹے اور صارفین کا مرکزی انتظام کرنے کے لیے موزوں ہے۔ ذاتی یا کم ہم وقتی والے حالات میں Docker اور SQLite سے آغاز کیا جا سکتا ہے؛ زیادہ ہم وقتی اور متعدد مشینوں والے ماحول میں مشترکہ ڈیٹا بیس استعمال کریں اور تاخیر کے مطابق Redis کو احتیاط سے شامل کریں۔ استعمال سے پہلے طے شدہ پاس ورڈ تبدیل کریں، HTTPS تشکیل دیں، ڈیٹا کو مستقل بنائیں، اور یقینی بنائیں کہ سروس متعلقہ شرائط اور قوانین و ضوابط کے مطابق ہو۔
یہ منصوبہ MIT لائسنس کے تحت اوپن سورس ہے، تاہم README صفحے کے نچلے حصے میں انتساب اور منصوبے کا لنک برقرار رکھنے کا تقاضا کرتا ہے؛ انتساب ہٹانے کے لیے پہلے اجازت حاصل کرنا ضروری ہے۔ مزید معلومات کے لیے One API GitHub ذخیرے کو دیکھیں۔
