Ruka hadi maudhui makuu
Mafunzo ya AI

Mwongozo wa Usambazaji na Matumizi wa One API: Tumia OpenAI API Iliyounganishwa Kufikia Miundo Mbalimbali Mikubwa

Mwongozo huu unaeleza jinsi ya kusambaza One API, kuongeza njia za miundo, kuunda tokeni za ufikiaji na kuita miundo mbalimbali mikubwa kupitia kiolesura kinachooana na OpenAI, pamoja na mambo muhimu ya hifadhidata, akiba, usawazishaji wa mzigo na usambazaji kwenye mashine nyingi.

Mwongozo wa Usambazaji na Matumizi wa One API kwa Kufikia Miundo Mbalimbali Mikubwa

One API ni nini

One API ni mfumo wa chanzo huria wa kudhibiti na kupeleka upya API za miundo mikubwa ya lugha. Huunganisha miingiliano ya watoa huduma mbalimbali wa miundo katika muundo wa kawaida wa OpenAI API, hivyo wateja wanaweza kutumia API Base na tokeni ileile ya ufikiaji kuita vituo vingi vya juu.

Mradi huu unaunga mkono huduma mbalimbali, zikiwemo OpenAI na Azure OpenAI, Anthropic Claude, Google Gemini, Mistral, 豆包, 文心一言, 通义千问, 讯飞星火, ChatGLM, 腾讯混元, Moonshot AI, DeepSeek, Ollama, Cohere, Groq, Cloudflare Workers AI na xAI.

Ukumbusho wa uzingatiaji: Unapotumia One API, lazima uzingatie masharti ya matumizi ya OpenAI pamoja na sheria na kanuni zinazotumika, na usitumie kwa madhumuni yasiyo halali. Usitoe kwa umma katika maeneo ya China huduma za akili bandia zalishi ambazo hazijasajiliwa.

Vipengele vikuu

  • Kiolesura kilichounganishwa: Fikia miundo mbalimbali mikubwa ya lugha kupitia muundo wa API unaooana na OpenAI.

  • Vituo vingi na kusawazisha mzigo: Sanidi vituo vingi vya juu; kituo kisipotajwa, mzigo husawazishwa kiotomatiki.

  • Toleo la mtiririko: Inaauni hali ya stream kwa majibu ya mtindo wa mashine ya kuandika.

  • Udhibiti wa tokeni: Weka muda wa kuisha, kiasi, anwani za IP zinazoruhusiwa na miundo inayoruhusiwa kufikiwa.

  • Udhibiti wa vituo: Inaauni uundaji wa vituo kwa kundi, usanidi wa orodha za miundo, makundi ya vituo na upangaji wa miundo.

  • Kiasi na bili: Inaauni maelezo ya kiasi, makundi ya watumiaji, makundi ya vituo, vizidishi na kuonyesha kiasi kwa dola za Marekani.

  • Uaminifu: Inaauni kujaribu tena kiotomatiki baada ya kushindwa, usambazaji kwenye mashine nyingi, akiba ya Redis na usanidi wa muunganisho wa hifadhidata.

  • Upanuzi wa usimamizi: Tumia tokeni ya ufikiaji wa mfumo kuita API za usimamizi na kupanua uwezo wa usimamizi bila kurekebisha msimbo chanzo.

  • Mfumo wa watumiaji: Inaauni kuingia na kujisajili kupitia barua pepe, Feishu, GitHub na akaunti rasmi za WeChat.

  • Urekebishaji wa kiolesura: Rekebisha jina la mfumo, Logo, kijachini, ukurasa wa mwanzo, ukurasa wa kuhusu na mandhari.

Usambazaji wa haraka kwa Docker

Andaa saraka ya data

SQLite inafaa kwa majaribio ya haraka au usambazaji wenye idadi ndogo ya maombi kwa wakati mmoja. Kwanza andaa saraka ya data inayoweza kuandikwa; hifadhidata na kumbukumbu zitawekwa katika saraka hiyo.

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

Anzisha One 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

Porti iliyo upande wa kushoto wa -p 3000:3000 ni porti ya mashine mwenyeji na inaweza kubadilishwa inapohitajika. Baada ya kuanzisha, tembelea http://localhost:3000/.

Jina la awali la mtumiaji ni root, na nenosiri la awali ni 123456.

Muhimu: Baada ya kuingia kwa root mara ya kwanza, lazima ubadilishe nenosiri la awali mara moja.

Ikiwa picha ya Docker Hub haiwezi kupakuliwa, badilisha justsong/one-api kuwa ghcr.io/songquanpeng/one-api. Ikiwa kontena litashindwa kuanza, unaweza kujaribu kuongeza --privileged=true kulingana na rekodi za masuala ya mradi.

Usambazaji kwa MySQL

Kwa idadi kubwa ya maombi kwa wakati mmoja, README inapendekeza wazi kuweka SQL_DSN na kuacha kutumia SQLite. Hifadhidata oneapi lazima iundwe mapema, lakini majedwali ya data yataundwa kiotomatiki na programu.

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

Badilisha jina la mtumiaji, nenosiri, anwani na porti kwa vigezo halisi vya hifadhidata. Ikiwa MySQL inaendeshwa kwenye mashine mwenyeji, unaweza kuongeza --network="host" kulingana na mazingira ya mtandao ili kontena liweze kufikia hifadhidata ya mashine mwenyeji.

Tumia Docker Compose

Hifadhi ya msimbo hutoa njia ya kuanzisha kwa Docker Compose; kwa sasa maelezo yanatumia MySQL na kuhifadhi data katika saraka ya ./data/mysql.

docker-compose up -d
docker-compose ps

Usambazaji wa mikono kutoka kwenye msimbo chanzo

Ikiwa unahitaji kujenga mwenyewe, andaa mazingira ya Node.js, npm na Go, kisha jenga sehemu ya mbele na sehemu ya nyuma kwa mpangilio.

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

Baada ya kukamilisha ujenzi, ongeza ruhusa ya utekelezaji na uanzishe huduma:

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

--port hutumika kubainisha porti ya kusikiliza, na thamani ya awali ni 3000; --log-dir hutumika kubainisha saraka ya kumbukumbu. Unaweza pia kutumia --version kuangalia toleo au --help kuona msaada.

Kamilisha usanidi wa msingi

  1. Fungua ukurasa wa usimamizi wa One API, ingia kwa akaunti ya root na ubadilishe nenosiri la awali.

  2. Nenda kwenye ukurasa wa Vituo, chagua aina inayolingana ya mtoa huduma na uongeze API Key ya huduma ya juu.

  3. Weka orodha ya miundo na makundi yanayoungwa mkono na kituo kulingana na uwezo wa huduma ya juu.

  4. Nenda kwenye ukurasa wa Tokeni na uunde tokeni ya ufikiaji kwa matumizi ya mteja.

  5. Weka kwa tokeni kiasi, muda wa uhalali, anwani za IP zinazoruhusiwa na miundo inayoweza kufikiwa kulingana na mahitaji.

One API inaweza kutumika mara moja baada ya kusakinishwa. Mipangilio mingine inaweza kukamilishwa kupitia kiolesura cha usimamizi, vigezo vya mazingira, faili ya .env au vigezo vya mstari wa amri. Unapotumia .env, rejelea .env.example katika hifadhi ya msimbo na uipe jina upya kuwa .env.

Tumia kupitia kiolesura kinachoendana na OpenAI

Mteja anahitaji kuweka API Base kuwa anwani ya usambazaji wa One API, na API Key kuwa tokeni ya One API iliyoundwa awali. Muundo mahususi wa Base URL hutegemea mteja; kwa maktaba rasmi ya OpenAI, README hutoa usanidi ufuatao:

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

Ombi litafika kwanza kwenye One API, kisha One API italielekeza kwa OpenAI, Azure au kituo kingine cha modeli. Kwa huduma za juu ambazo miundo ya kiolesura hutofautiana, One API itashughulikia ubadilishaji wa mwili wa ombi na mwili wa jibu unaohitajika kwa uwasilishaji upya.

Kuunganisha na wateja waliopo

Wateja wengi wanaounga mkono anwani maalum ya kiolesura cha OpenAI wanaweza kuunganishwa. Kwa mfano, kwa ChatGPT Next Web, kwanza endesha kontena la mteja:

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

Kisha jaza anwani ya kiolesura cha One API na tokeni ya One API kwenye ukurasa wa mteja. Porti inapaswa kuepuka mgongano na 3000 inayotumiwa na One API.

ChatGPT Web pia inaweza kuunganishwa na One API kupitia vigezo vya mazingira:

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

Badilisha jina la kikoa la mfano na tokeni kwa usanidi wako mwenyewe.

Mbinu za usanidi wa hali ya juu

Bainisha kituo au wezesha kusawazisha mzigo

Kwa chaguo-msingi, maombi yasiyobainisha kituo husawazishwa mzigo kati ya vituo vingi vinavyopatikana. Tokeni zilizoundwa na wasimamizi zinaweza pia kuongezewa kitambulisho cha kituo baada ya tokeni ili kulazimisha ombi hilo kushughulikiwa na kituo maalum:

Authorization: Bearer ONE_API_KEY-CHANNEL_ID

Tokeni zilizoundwa na watumiaji wa kawaida haziwezi kubainisha kitambulisho cha kituo kwa njia hii.

Tumia upangaji wa miundo kwa tahadhari

Upangaji wa miundo unaweza kuelekeza upya modeli iliyoombwa na mtumiaji kwenda kwenye modeli nyingine. Hata hivyo, README inaonya kwamba usiweke upangaji wa miundo bila sababu ya lazima, kwa kuwa ukiwezeshwa mwili wa ombi utaundwa upya badala ya kupitishwa moja kwa moja, na baadhi ya sehemu ambazo bado hazijaungwa mkono rasmi huenda zisitumwe kwa mafanikio.

Tumia akiba ya Redis

Baada ya kuweka REDIS_CONN_STRING, One API itatumia Redis kama akiba:

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

Ikiwa muda wa kusubiri wa kufikia hifadhidata ni mdogo sana, hakuna haja ya kuwezesha Redis, kwa kuwa akiba inaweza kusababisha kuchelewa kwa ulandanishi wa data. Katika hali ya sentinel au klasta, unaweza kuweka mabadiliko haya kuwa orodha ya nodi na kuyatumia pamoja na REDIS_PASSWORD na REDIS_MASTER_NAME.

Boresha miunganisho ya hifadhidata

Miunganisho ya hifadhidata inaweza kurekebishwa kupitia vigezo vifuatavyo vya mazingira:

  • SQL_MAX_IDLE_CONNS: Idadi ya juu ya miunganisho isiyotumika, chaguo-msingi ni 100.

  • SQL_MAX_OPEN_CONNS: Idadi ya juu ya miunganisho iliyo wazi, chaguo-msingi ni 1000.

  • SQL_CONN_MAX_LIFETIME: Muda wa juu wa maisha ya muunganisho, chaguo-msingi ni dakika 60.

  • BATCH_UPDATE_ENABLED=true: Wezesha ujumuishaji wa masasisho ya kundi ya hifadhidata; inaweza kupunguza miunganisho mingi kupita kiasi, lakini itasababisha kuchelewa kwa masasisho ya kiasi.

  • BATCH_UPDATE_INTERVAL=5: Weka muda wa ujumuishaji wa masasisho ya kundi, kwa sekunde.

Ikiwa kosa Error 1040: Too many connections litatokea, punguza ipasavyo SQL_MAX_OPEN_CONNS; unaweza pia kutathmini iwapo kuwezesha masasisho ya kundi.

Sanidi vipindi, muda wa kuisha na proksi

  • SESSION_SECRET: Weka ufunguo thabiti wa kipindi ili vidakuzi vya watumiaji walioingia viendelee kuwa halali baada ya kuanzisha upya.

  • RELAY_TIMEOUT: Weka muda wa kuisha wa ombi la uwasilishaji upya, kwa sekunde.

  • RELAY_PROXY: Fanya maombi ya uwasilishaji upya yapitie proksi maalum yanapofikia API ya juu.

  • USER_CONTENT_REQUEST_TIMEOUT: Weka muda wa kuisha wa kupakua maudhui yaliyopakiwa na mtumiaji.

  • USER_CONTENT_REQUEST_PROXY: Sanidi proksi ya upakuaji kwa maudhui yaliyopakiwa na mtumiaji, kama vile picha.

Sanidi ufuatiliaji wa vituo

Unaweza kusasisha salio la vituo mara kwa mara na kujaribu upatikanaji wa vituo:

CHANNEL_UPDATE_FREQUENCY=1440
CHANNEL_TEST_FREQUENCY=1440
POLLING_INTERVAL=5

Vipengele viwili vya kwanza hupimwa kwa dakika, huku POLLING_INTERVAL ikipimwa kwa sekunde na kutumika kudhibiti muda kati ya maombi wakati wa uendeshaji wa kundi.

Kusanidi Usambazaji wa Seva Nyingi

Usambazaji wa seva nyingi hauwezi kuendelea kutegemea SQLite ya ndani. Nodi zote lazima ziunganishwe kwenye hifadhidata moja ya MySQL na zitumie usanidi unaofanana wa vipindi.

  1. Seva zote ziweke SESSION_SECRET inayofanana.

  2. Seva zote ziunganishwe kwenye hifadhidata moja ya MySQL kupitia SQL_DSN.

  3. Seva za chini ziweke NODE_TYPE=slave; isipo 설정wa, seva huchukuliwa kuwa seva kuu kwa chaguo-msingi.

  4. Tumia SYNC_FREQUENCY kusawazisha usanidi kutoka kwenye hifadhidata mara kwa mara.

  5. Seva za chini zinaweza kuweka FRONTEND_BASE_URL ili kuelekeza upya maombi ya kurasa kwenye seva kuu.

  6. Redis inaweza kusambazwa kwenye kila seva ya chini na REDIS_CONN_STRING ikawekwa ili kupunguza ufikiaji wa hifadhidata wakati akiba bado ni halali.

  7. Iwapo seva kuu ina ucheleweshaji mkubwa wa kufikia hifadhidata, inashauriwa pia kuwezesha Redis na usawazishaji wa mara kwa mara.

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

Kusanidi Nginx na HTTPS

Katika mazingira ya uzalishaji, Nginx inaweza kutumika kama seva mbadala ya One API. Kwa miundo yenye muda mrefu wa kujibu, ongeza muda wa kusubiri majibu ipasavyo.

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;
    }
}

Kwenye Ubuntu, Certbot inaweza kutumika kuomba na kusanidi HTTPS:

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

Utatuzi wa Matatizo ya Kawaida

  • Ujumbe wa salio lisilotosha: Mbali na salio la akaunti, kagua pia kikomo cha salio cha tokeni yenyewe.

  • Ujumbe wa kutokuwepo kwa kituo kinachopatikana: Kagua kikundi cha mtumiaji, kikundi cha vituo na orodha ya miundo inayoungwa mkono na kituo.

  • Mzigo wa kikundi cha sasa umefikia kiwango cha juu: Kwa kawaida hii inamaanisha kuwa kituo cha upande wa juu kimerejesha 429.

  • Mteja anaonyesha Failed to fetch: Kagua anwani ya kiolesura, API Key na usanidi wa HTTPS; maombi ya HTTP kwenye ukurasa wa HTTPS yanaweza kuzuiwa na kivinjari.

  • Jaribio la kituo linarudisha invalid character: Upande wa juu huenda ulirudisha HTML badala ya JSON halali; IP ya seva ya usambazaji au nodi ya proksi pia huenda imezuiwa na Cloudflare.

  • Wasiwasi wa kupoteza data baada ya kusasisha: Data ya MySQL haitapotea kutokana na sasisho la kawaida; kwa SQLite, lazima uambatishe kwa usahihi ujazo wa data ili kudumu kwa one-api.db.

Hitimisho

One API inafaa kwa kuunganisha wasambazaji wengi wa miundo kwenye njia ya matumizi inayoendana na OpenAI, huku ikisimamia vituo, tokeni, salio na watumiaji kwa pamoja. Kwa matumizi binafsi au yenye maombi machache kwa wakati mmoja, unaweza kuanza na Docker na SQLite; mazingira yenye maombi mengi kwa wakati mmoja na seva nyingi yanapaswa kutumia hifadhidata iliyoshirikiwa, na kuanzisha Redis kwa uangalifu kulingana na hali ya ucheleweshaji. Kabla ya kuanza kutumia mfumo, badilisha nenosiri chaguo-msingi, sanidi HTTPS, hifadhi data kwa kudumu, na uhakikishe kuwa huduma inatii masharti na sheria husika.

Mradi umetolewa kwa leseni ya MIT, lakini README inahitaji jina la mwandishi na kiungo cha mradi vihifadhiwe chini ya ukurasa; ili kuondoa jina la mwandishi, lazima kwanza upate idhini. Kwa maelezo zaidi, tazama hazina ya One API kwenye GitHub.