Asosiy kontentga o‘tish
AI qo‘llanmalari

One API’ni joylashtirish va ishlatish bo‘yicha qo‘llanma: yagona OpenAI API orqali turli yirik modellarni ulash

Ushbu qo‘llanmada One API’ni joylashtirish, model kanallarini qo‘shish, kirish tokenlarini yaratish va OpenAI bilan mos interfeys orqali turli yirik modellardan foydalanish, shuningdek ma’lumotlar bazasi, kesh, yuklamani muvozanatlash va bir nechta serverda joylashtirish masalalari tushuntiriladi.

One API’ni joylashtirish va ishlatish: yagona OpenAI API orqali turli modellarni ulash

One API nima

One API — ochiq kodli katta til modellari API'larini boshqarish va retranslyatsiya qilish tizimi. U turli model provayderlarining interfeyslarini standart OpenAI API formatiga birlashtiradi, shuning uchun mijozlar bir xil API Base va kirish tokeni orqali bir nechta yuqori darajadagi kanallarga murojaat qilishi mumkin.

Loyiha OpenAI va 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 va boshqa ko‘plab xizmatlarni qo‘llab-quvvatlaydi.

Muvofiqlik eslatmasi: One API'dan foydalanishda OpenAI foydalanish shartlari hamda amaldagi qonun va me'yoriy hujjatlarga rioya qilish shart. Uni noqonuniy maqsadlarda ishlatish taqiqlanadi. Xitoy hududidagi jamoatchilikka ro‘yxatdan o‘tkazilmagan generativ sun'iy intellekt xizmatlarini taqdim etmang.

Asosiy funksiyalar

  • Yagona interfeys: OpenAI bilan mos API formati orqali turli katta til modellaridan foydalanish.

  • Bir nechta kanal va yuklamani muvozanatlash: bir nechta yuqori darajadagi kanallarni sozlash; kanal ko‘rsatilmaganda yuklama avtomatik muvozanatlanadi.

  • Oqimli chiqish: stream rejimini qo‘llab-quvvatlaydi va matnni yozuv mashinkasi uslubida ko‘rsatish imkonini beradi.

  • Tokenlarni boshqarish: amal qilish muddati, limit, ruxsat etilgan IP diapazoni va foydalanish mumkin bo‘lgan modellarni belgilash mumkin.

  • Kanal boshqaruvi: kanallarni ommaviy yaratish, modellar ro‘yxati, kanal guruhlari va model mosligini sozlashni qo‘llab-quvvatlaydi.

  • Limit va hisob-kitob: limit tafsilotlari, foydalanuvchi guruhlari, kanal guruhlari, ko‘paytirish koeffitsiyenti va dollar limitini ko‘rsatishni qo‘llab-quvvatlaydi.

  • Ishonchlilik: xatolik yuz berganda avtomatik qayta urinish, ko‘p mashinali joylashtirish, Redis keshi va ma'lumotlar bazasiga ulanishni sozlashni qo‘llab-quvvatlaydi.

  • Boshqaruvni kengaytirish: tizim kirish tokeni orqali boshqaruv API'siga murojaat qilish va manba kodini o‘zgartirmasdan boshqaruv imkoniyatlarini kengaytirish mumkin.

  • Foydalanuvchi tizimi: elektron pochta, Feishu, GitHub va WeChat rasmiy akkaunti orqali kirish va ro‘yxatdan o‘tishni qo‘llab-quvvatlaydi.

  • Interfeysni sozlash: tizim nomi, Logo, kolontitul, bosh sahifa, biz haqimizda sahifasi va mavzuni sozlash mumkin.

Docker yordamida tezkor joylashtirish

Ma'lumotlar katalogini tayyorlash

SQLite tezkor sinov yoki kam parallel so‘rovli joylashtirish uchun mos. Avval yozish mumkin bo‘lgan ma'lumotlar katalogini tayyorlang; ma'lumotlar bazasi va jurnallar shu katalogda saqlanadi.

mkdir -p /home/ubuntu/data/one-api

One API'ni ishga tushirish

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 parametrining chap tomonidagi port xost portidir, uni zaruratga ko‘ra o‘zgartirish mumkin. Ishga tushirgandan so‘ng http://localhost:3000/ manziliga kiring.

Dastlabki foydalanuvchi nomi root, dastlabki parol esa 123456.

Muhim: root hisobiga birinchi marta kirgandan so‘ng standart parolni darhol o‘zgartiring.

Agar Docker Hub tasvirini yuklab bo‘lmasa, justsong/one-api o‘rniga ghcr.io/songquanpeng/one-api dan foydalanish mumkin. Agar konteyner ishga tushmasa, loyiha muammolari qaydlariga asoslanib --privileged=true parametrini qo‘shib ko‘ring.

MySQL yordamida joylashtirish

Parallel so‘rovlar soni katta bo‘lsa, README SQL_DSN ni sozlashni va SQLite'dan foydalanishni davom ettirmaslikni aniq tavsiya qiladi. oneapi ma'lumotlar bazasini oldindan yaratish kerak, ammo jadvallar dastur tomonidan avtomatik yaratiladi.

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

Foydalanuvchi nomi, parol, manzil va portni haqiqiy ma'lumotlar bazasi parametrlariga almashtiring. Agar MySQL xostda ishlayotgan bo‘lsa, tarmoq muhitiga qarab --network="host" parametrini qo‘shish mumkin; bu konteynerga xostdagi ma'lumotlar bazasiga ulanish imkonini beradi.

Docker Compose'dan foydalanish

Repozitariy Docker Compose orqali ishga tushirish usulini ham taqdim etadi. Hozirgi ko‘rsatmalarda MySQL ishlatiladi va ma'lumotlar ./data/mysql katalogida saqlanadi.

docker-compose up -d
docker-compose ps

Manba kodidan qo‘lda joylashtirish

O‘zingiz qurmoqchi bo‘lsangiz, Node.js, npm va Go muhitlarini tayyorlang, so‘ng avval frontend, keyin backend'ni quring.

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

Qurish tugagach, bajarish huquqini qo‘shing va xizmatni ishga tushiring:

chmod u+x one-api
./one-api --port 3000 --log-dir ./logs

--port tinglanadigan portni belgilaydi, standart qiymati 3000; --log-dir jurnal katalogini belgilaydi. Versiyani ko‘rish uchun --version, yordamni ko‘rish uchun esa --help parametridan foydalanish mumkin.

Asosiy sozlamalarni yakunlash

  1. One API boshqaruv sahifasini oching, root hisobiga kiring va standart parolni o‘zgartiring.

  2. Kanal sahifasiga o‘ting, tegishli provayder turini tanlang va yuqori darajadagi API Key'ni qo‘shing.

  3. Yuqori darajadagi xizmat imkoniyatlariga ko‘ra kanal qo‘llab-quvvatlaydigan modellar ro‘yxati va guruhlarini sozlang.

  4. Token sahifasiga o‘ting va mijoz foydalanishi uchun kirish tokenini yarating.

  5. Zaruratga ko‘ra token uchun limit, amal qilish muddati, ruxsat etilgan IP diapazoni va foydalanish mumkin bo‘lgan modellarni belgilang.

One API o‘rnatilgandan keyin darhol foydalanishga tayyor. Boshqa sozlamalarni boshqaruv interfeysi, muhit o‘zgaruvchilari, .env fayli yoki buyruq satri parametrlari orqali amalga oshirish mumkin. .env dan foydalanganda repozitariydagi .env.example fayliga murojaat qilib, uni .env nomi bilan qayta nomlang.

OpenAI bilan mos interfeys orqali foydalanish

Mijoz API Base'ni One API joylashtirilgan manzilga, API Key'ni esa hozirgina yaratilgan One API tokeniga o‘rnatishi kerak. Base URL formati mijozga bog‘liq; OpenAI rasmiy kutubxonasi uchun README quyidagi konfiguratsiyani beradi:

OPENAI_API_KEY="sk-xxxxxx"
OPENAI_API_BASE="https://<HOST>:<PORT>/v1"

So‘rov avval One API'ga keladi, so‘ng One API uni OpenAI, Azure yoki boshqa model kanallariga uzatadi. Interfeys formatlari farq qiladigan yuqori darajadagi xizmatlar uchun One API retranslyatsiya talab qiladigan so‘rov va javob tanasini o‘zgartirishni amalga oshiradi.

Mavjud mijozlar bilan ishlatish

OpenAI interfeysining maxsus manzilini qo‘llab-quvvatlaydigan mijozlarning aksariyatini ulash mumkin. ChatGPT Next Web misolida avval mijoz konteynerini ishga tushiring:

docker run --name chat-next-web -d -p 3001:3000 yidadaa/chatgpt-next-web

Keyin mijoz sahifasida One API interfeys manzili va One API tokenini kiriting. Port One API foydalanayotgan 3000 porti bilan to‘qnashmasligi kerak.

ChatGPT Web'ni ham muhit o‘zgaruvchilari orqali One API'ga ulash mumkin:

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

Namuna domeni va tokenini o‘zingizning konfiguratsiyangizga almashtiring.

Kengaytirilgan sozlash usullari

Kanalni belgilash yoki yuklamani muvozanatlashni yoqish

Standart holatda kanali ko‘rsatilmagan so‘rovlar mavjud kanallar o‘rtasida muvozanatlanadi. Administrator yaratgan tokenlarga kanal identifikatorini qo‘shib, joriy so‘rovni muayyan kanal orqali qayta ishlashga majburlash mumkin:

Authorization: Bearer ONE_API_KEY-CHANNEL_ID

Oddiy foydalanuvchilar yaratgan tokenlar orqali kanal ID'sini shu tarzda belgilab bo‘lmaydi.

Model moslashidan ehtiyotkorlik bilan foydalanish

Model moslashi foydalanuvchi so‘ragan modelni boshqa modelga yo‘naltirishi mumkin. Biroq README zarurat bo‘lmasa model moslashini sozlamaslikni tavsiya qiladi, chunki yoqilgandan so‘ng so‘rov tanasi to‘g‘ridan-to‘g‘ri uzatilmaydi, qayta tuziladi; rasmiy qo‘llab-quvvatlanmaydigan ayrim maydonlar muvaffaqiyatli uzatilmasligi mumkin.

Redis keshidan foydalanish

REDIS_CONN_STRING sozlangandan so‘ng One API Redis'dan kesh sifatida foydalanadi:

REDIS_CONN_STRING=redis://default:redispw@localhost:49153

Agar ma'lumotlar bazasiga murojaat qilish kechikishi juda past bo‘lsa, Redis'ni yoqish shart emas, chunki kesh ma'lumotlar sinxronizatsiyasining kechikishiga olib kelishi mumkin. Sentinel yoki klaster rejimida bu o‘zgaruvchiga tugunlar ro‘yxatini berish, shuningdek REDIS_PASSWORD va REDIS_MASTER_NAME bilan birga ishlatish mumkin.

Ma'lumotlar bazasi ulanishini optimallashtirish

Ma'lumotlar bazasi ulanishini quyidagi muhit o‘zgaruvchilari orqali sozlash mumkin:

  • SQL_MAX_IDLE_CONNS: maksimal bo‘sh ulanishlar soni, standart qiymati 100.

  • SQL_MAX_OPEN_CONNS: maksimal ochiq ulanishlar soni, standart qiymati 1000.

  • SQL_CONN_MAX_LIFETIME: ulanishning maksimal ishlash muddati, standart qiymati 60 daqiqa.

  • BATCH_UPDATE_ENABLED=true: ma'lumotlar bazasida ommaviy yangilashlarni birlashtirishni yoqadi; bu ulanishlar soni haddan tashqari ko‘payishini kamaytirishi mumkin, ammo limit yangilanishlarini kechiktiradi.

  • BATCH_UPDATE_INTERVAL=5: ommaviy yangilashlarni birlashtirish oralig‘ini soniyalarda belgilaydi.

Agar Error 1040: Too many connections xatosi yuz bersa, SQL_MAX_OPEN_CONNS qiymatini mos ravishda kamaytiring yoki ommaviy yangilashni yoqish imkoniyatini baholang.

Seans, taym-aut va proksi sozlamalari

  • SESSION_SECRET: doimiy seans kalitini belgilaydi; qayta ishga tushirilgandan so‘ng tizimga kirgan foydalanuvchilarning Cookie fayllari amalda qoladi.

  • RELAY_TIMEOUT: retranslyatsiya so‘rovining taym-autini soniyalarda belgilaydi.

  • RELAY_PROXY: retranslyatsiya so‘rovlarini yuqori darajadagi API'ga ko‘rsatilgan proksi orqali yuboradi.

  • USER_CONTENT_REQUEST_TIMEOUT: foydalanuvchi yuklagan kontentni yuklab olish taym-autini belgilaydi.

  • USER_CONTENT_REQUEST_PROXY: rasmlar kabi foydalanuvchi yuklagan kontentni yuklab olish proksisini sozlaydi.

Kanal monitoringini sozlash

Kanal balansini muntazam yangilash va kanal mavjudligini tekshirish mumkin:

CHANNEL_UPDATE_FREQUENCY=1440
CHANNEL_TEST_FREQUENCY=1440
POLLING_INTERVAL=5

Dastlabki ikki o‘zgaruvchining birligi daqiqa, POLLING_INTERVAL birligi esa soniya bo‘lib, paketli amallar paytida so‘rovlar oralig‘ini boshqaradi.

Bir nechta serverli joylashtirishni sozlash

Bir nechta serverli joylashtirishda mahalliy SQLite’dan foydalanishni davom ettirib bo‘lmaydi. Barcha tugunlar bitta MySQL ma’lumotlar bazasiga ulanishi va sessiya sozlamalarini bir xil saqlashi kerak.

  1. Barcha serverlarda bir xil SESSION_SECRET qiymatini o‘rnating.

  2. Barcha serverlarni SQL_DSN orqali bitta MySQL ma’lumotlar bazasiga ulang.

  3. Slave serverlarda NODE_TYPE=slave qiymatini o‘rnating; u o‘rnatilmasa, server master sifatida ishlaydi.

  4. Sozlamalarni ma’lumotlar bazasidan muntazam sinxronlash uchun SYNC_FREQUENCY dan foydalaning.

  5. Slave serverlarda sahifa so‘rovlarini master serverga yo‘naltirish uchun FRONTEND_BASE_URL ni o‘rnatish mumkin.

  6. Kesh amal qilish muddati davomida ma’lumotlar bazasiga murojaatlarni kamaytirish uchun har bir slave serverda Redis’ni joylashtirib, REDIS_CONN_STRING ni o‘rnatish mumkin.

  7. Agar master serverning ma’lumotlar bazasiga murojaat kechikishi yuqori bo‘lsa, Redis va muntazam sinxronlashni yoqish ham ko‘rib chiqilishi kerak.

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:49153

Nginx va HTTPS’ni sozlash

Ishlab chiqarish muhitida One API uchun Nginx’dan teskari proksi sifatida foydalanish mumkin. Javob berish vaqti uzoqroq bo‘lgan modellar uchun o‘qish vaqt tugashini mos ravishda oshiring.

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’da HTTPS sertifikatini olish va sozlash uchun Certbot’dan foydalanish mumkin:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
sudo service nginx restart

Keng tarqalgan muammolarni bartaraf etish

  • Limit yetarli emasligi haqida xabar: Hisob limiti bilan bir qatorda tokenning o‘ziga o‘rnatilgan limitni ham tekshiring.

  • Mavjud kanal yo‘qligi haqida xabar: Foydalanuvchi guruhini, kanal guruhini va kanal qo‘llab-quvvatlaydigan modellar ro‘yxatini tekshiring.

  • Joriy guruh yuklamasi to‘yingan: Odatda bu yuqori darajadagi kanal 429 qaytarganini anglatadi.

  • Mijoz Failed to fetch xatosini ko‘rsatadi: Interfeys manzili, API Key va HTTPS sozlamalarini tekshiring; HTTPS sahifasidagi HTTP so‘rovlari brauzer tomonidan bloklanishi mumkin.

  • Kanal testi invalid character xatosini qaytaradi: Yuqori darajadagi server haqiqiy JSON o‘rniga HTML qaytargan bo‘lishi mumkin; joylashtirish serverining IP manzili yoki proksi tuguni ham Cloudflare tomonidan bloklangan bo‘lishi mumkin.

  • Yangilashdan keyin ma’lumotlar yo‘qolishidan xavotir: Oddiy yangilash natijasida MySQL ma’lumotlari yo‘qolmaydi; SQLite’da one-api.db ni saqlab qolish uchun ma’lumotlar hajmi to‘g‘ri ulangan bo‘lishi kerak.

Xulosa

One API bir nechta model yetkazib beruvchilarini OpenAI bilan mos chaqiruv usuliga birlashtirish, shuningdek kanallar, tokenlar, limitlar va foydalanuvchilarni markazlashgan holda boshqarish uchun mos keladi. Shaxsiy yoki past parallelizmli holatlarda Docker va SQLite’dan boshlash mumkin; yuqori parallelizm va bir nechta serverli muhitda umumiy ma’lumotlar bazasidan foydalanish, kechikishga qarab Redis’ni ehtiyotkorlik bilan joriy etish kerak. Ishga tushirishdan oldin standart parolni o‘zgartiring, HTTPS’ni sozlang, ma’lumotlarni saqlab qolishni ta’minlang hamda xizmat tegishli shartlar va qonun-qoidalarga muvofiqligiga ishonch hosil qiling.

Loyiha MIT litsenziyasi asosida ochiq manbali, biroq README sahifaning pastki qismida mualliflik ko‘rsatkichi va loyiha havolasini saqlashni talab qiladi; mualliflik ko‘rsatkichini olib tashlash uchun avval ruxsat olish kerak. Batafsil ma’lumotni One API GitHub ombori orqali ko‘rishingiz mumkin.