Yeqa uye kokuyinhloko
Izifundo ze-AI

Isifundo Sokufaka Nokusebenzisa i-One API: Xhuma Amamodeli Amaningi Olimi Amakhulu Nge-OpenAI API Ehlanganisiwe

Lesi sifundo sichaza indlela yokufaka i-One API, ukwengeza iziteshi zamamodeli, ukudala amathokheni okufinyelela, nokusebenzisa amamodeli amaningi olimi amakhulu ngesixhumi esibonakalayo esihambisana ne-OpenAI, kanye namaphuzu abalulekile esizindalwazi, kunqolobane, ekulinganiseni umthwalo nasekufakweni kumakhompyutha amaningi.

Isifundo sokufaka nokusebenzisa i-One API sokuxhuma amamodeli amaningi nge-OpenAI API

Yini i-One API

I-One API iwuhlelo oluvulekile lokuphatha nokudlulisa ama-API amamodeli amakhulu. Ihlanganisa izixhumi zabahlinzeki bamamodeli abahlukene zibe yifomethi ejwayelekile ye-OpenAI API, ukuze amaklayenti asebenzise i-API Base kanye nethokheni yokufinyelela efanayo ukubiza iziteshi eziningi ezingemuva.

Le phrojekthi isekela izinsizakalo eziningi, okuhlanganisa i-OpenAI ne-Azure OpenAI, i-Anthropic Claude, i-Google Gemini, i-Mistral, i-Doubao, i-Wenxin Yiyan, i-Tongyi Qianwen, i-IFlytek Spark, i-ChatGLM, i-Tencent Hunyuan, i-Moonshot AI, i-DeepSeek, i-Ollama, i-Cohere, i-Groq, i-Cloudflare Workers AI, ne-xAI.

Isikhumbuzi sokuhambisana nemithetho: Uma usebenzisa i-One API, kufanele uhambisane nemigomo yokusebenzisa i-OpenAI kanye nemithetho nemigomo esebenzayo, futhi ungayisebenzisi ngezinhloso ezingekho emthethweni. Ungahlinzeki umphakathi wase-China ngezinsizakalo zobuhlakani bokwenziwa obukhiqizayo ezingabhalisiwe.

Imisebenzi esemqoka

  • Isixhumi esihlanganisiwe: Finyelela amamodeli amakhulu ahlukene ngefomethi ye-API ehambisana ne-OpenAI.

  • Iziteshi eziningi nokulinganisa umthwalo: Lungiselela iziteshi eziningi ezingemuva; uma kungacaciswanga isiteshi, umthwalo ulinganiswa ngokuzenzakalelayo.

  • Okuphumayo okusakazwayo: Isekela imodi ye-stream, ukuze kwenziwe impendulo efana nokuthayipha.

  • Ukuphathwa kwamathokheni: Setha isikhathi sokuphelelwa yisikhathi, isabelo, ububanzi bama-IP avunyelwe, namamodeli avunyelwe.

  • Ukuphathwa kweziteshi: Isekela ukudala iziteshi ngobuningi, ukusetha uhlu lwamamodeli, ukuhlukanisa iziteshi, nokwenza imephu yamamodeli.

  • Izabelo nokukhokhisa: Isekela imininingwane yezabelo, amaqembu abasebenzisi, amaqembu eziteshi, iziphindaphindi, nokuboniswa kwezabelo ngamadola aseMelika.

  • Ukuthembeka: Isekela ukuzama futhi ngokuzenzakalelayo lapho kwehluleka, ukusatshalaliswa kumaseva amaningi, inqolobane ye-Redis, nokulungiselelwa kokuxhumana kwesizindalwazi.

  • Ukunwetshwa kokuphatha: Sebenzisa i-API yokuphatha ngethokheni yokufinyelela yesistimu ngaphandle kokushintsha ikhodi yomthombo.

  • Uhlelo lwabasebenzisi: Isekela ukubhalisa nokungena nge-imeyili, i-Feishu, i-GitHub, ne-akhawunti esemthethweni ye-WeChat.

  • Ukwenza ngokwezifiso isixhumi: Yenza ngokwezifiso igama lesistimu, ilogo, unyaweni, ikhasi lasekhaya, ikhasi elithi mayelana, netimu.

Ukusabalalisa ngokushesha usebenzisa i-Docker

Lungisa ifolda yedatha

I-SQLite ilungele ukuzama ngokushesha noma ukusatshalaliswa okunokuxhumana okumbalwa. Qala ngokulungisa ifolda yedatha ebhalekayo; isizindalwazi namalogi kuzogcinwa kule folda.

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

Qalisa i-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

Imbobo engakwesokunxele ku--p 3000:3000 iyimbobo yomshini osingethe; ungayishintsha njengoba kudingeka. Ngemva kokuqala, vakashela ku-http://localhost:3000/.

Igama lomsebenzisi lokuqala ngu-root, kanti iphasiwedi yokuqala ngu-123456.

Okubalulekile: Ngemva kokungena okokuqala nge-akhawunti ye-root, shintsha ngokushesha iphasiwedi ezenzakalelayo.

Uma isithombe se-Docker Hub singakwazi ukudonswa, ungashintsha justsong/one-api ube ghcr.io/songquanpeng/one-api. Uma isiqukathi sehluleka ukuqala, zama ukwengeza --privileged=true ngokusekelwe kumarekhodi ezinkinga zephrojekthi.

Ukusabalalisa usebenzisa i-MySQL

Uma umthamo wokuxhumana mkhulu, i-README incoma ngokusobala ukusetha i-SQL_DSN futhi ungasaqhubeki usebenzisa i-SQLite. Isizindalwazi se-oneapi kufanele sidalwe kusenesikhathi, kodwa amatafula edatha azokwakhiwa uhlelo ngokuzenzakalelayo.

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

Shintsha igama lomsebenzisi, iphasiwedi, ikheli nembobo kube ngamapharamitha wangempela esizindalwazi. Uma i-MySQL isebenza emshinini osingethe, ungangeza --network="host" ngokuya ngesimo senethiwekhi, ukuze isiqukathi sikwazi ukufinyelela esizindalwazini somshini osingethe.

Ukusebenzisa i-Docker Compose

Indawo yokugcina ikhodi ihlinzeka ngendlela yokuqalisa nge-Docker Compose. Incazelo yamanje isebenzisa i-MySQL futhi igcina idatha kufolda ye-./data/mysql.

docker-compose up -d
docker-compose ps

Ukusabalalisa ngesandla kusuka kukhodi yomthombo

Uma ufuna ukuzakhela ngokwakho, lungisa izindawo ze-Node.js, npm ne-Go, bese wakha ingxenye yangaphambili nengemuva ngokulandelana.

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

Ngemva kokuqeda ukwakha, engeza imvume yokusebenzisa bese uqala insizakalo:

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

--port isetshenziselwa ukucacisa imbobo yokulalela, futhi inani elizenzakalelayo ngu-3000; --log-dir isetshenziselwa ukucacisa ifolda yamalogi. Ungasebenzisa futhi --version ukubuka inguqulo, noma --help ukubuka usizo.

Qedela ukulungiselelwa okuyisisekelo

  1. Vula ikhasi lokuphatha le-One API, ngena nge-akhawunti ye-root bese ushintsha iphasiwedi ezenzakalelayo.

  2. Yiya ekhasini elithi Iziteshi, khetha uhlobo lomhlinzeki olufanele bese wengeza i-API Key yesiteshi esingemuva.

  3. Ngokuya ngamakhono esiteshi esingemuva, setha uhlu lwamamodeli namaqembu asekelwa yisiteshi.

  4. Yiya ekhasini elithi Amathokheni, udale ithokheni yokufinyelela ezosetshenziswa iklayenti.

  5. Ngokuya ngesidingo, sethela ithokheni isabelo, isikhathi sokusebenza, ububanzi bama-IP avunyelwe, namamodeli angafinyeleleka.

I-One API isebenza ngqo ngaphandle kokunye ukulungiselela. Okunye ukulungiselela kungenziwa ngesixhumi sokuphatha, okuguquguqukayo kwemvelo, ifayela le-.env, noma amapharamitha womugqa womyalo. Uma usebenzisa i-.env, ungabheka i-.env.example esendaweni yokugcina ikhodi bese uyiqamba kabusha ibe yi-.env.

Ukusebenzisa ngesixhumi esihambisana ne-OpenAI

Ikhasimende kufanele lisethe i-API Base ekhelini lokusabalalisa le-One API, bese lisetha i-API Key ibe yithokheni ye-One API osanda kuyidala. Ifomethi ethile ye-Base URL incike ekhasimendeni; kumtapo wolwazi osemthethweni we-OpenAI, i-README inikeza le fomethi yokulungiselela:

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

Isicelo sifika kuqala ku-One API, bese i-One API isidlulisela ku-OpenAI, Azure, noma kwezinye iziteshi zamamodeli. Eziteshini ezingemuva ezinamafomethi ezixhumi ahlukile, i-One API iphatha ukuguqulwa komzimba wesicelo nowempendulo okudingekayo ekudluliseni.

Ukusebenzisana namakhasimende akhona

Amakhasimende amaningi asekela amakheli ezixhumi ze-OpenAI enziwa ngokwezifiso angaxhunywa. Ngokwesibonelo se-ChatGPT Next Web, qala ngokuqalisa isiqukathi sekhasimende:

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

Bese ugcwalisa ikheli lesixhumi se-One API kanye nethokheni ye-One API ekhasini lekhasimende. Imbobo kufanele ingashayisani ne-3000 esetshenziswa yi-One API.

I-ChatGPT Web nayo ingaxhumeka ku-One API ngokuguquguquka kwemvelo:

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

Shintsha isizinda esiyisibonelo nethokheni kube ukulungiselela kwakho.

Amaqhinga okulungiselela okuthuthukile

Ukucacisa isiteshi noma ukunika amandla ukulinganisa umthwalo

Ngokuzenzakalelayo, izicelo ezingacacisi isiteshi zilinganisa umthwalo phakathi kweziteshi eziningi ezitholakalayo. Amathokheni adalwe umlawuli anganezelwa nge-ID yesiteshi ngemva kwethokheni, ukuze kuphoqelelwe ukuthi lesi sicelo siphathwe yisiteshi esithile:

Authorization: Bearer ONE_API_KEY-CHANNEL_ID

Amathokheni adalwe abasebenzisi abajwayelekile awakwazi ukucacisa i-ID yesiteshi ngale ndlela.

Sebenzisa imephu yamamodeli ngokuqaphela

Imephu yamamodeli ingaqondisa kabusha imodeli ecelwe umsebenzisi iye kwenye imodeli. Kodwa i-README ixwayisa ngokuthi ungayisethi imephu yamamodeli uma kungadingeki, ngoba uma isivuliwe umzimba wesicelo uzakhiwa kabusha esikhundleni sokudluliselwa ngqo, futhi ezinye izinkambu ezingakasekelwa ngokusemthethweni zingase zingadluliswa ngempumelelo.

Ukusebenzisa inqolobane ye-Redis

Ngemva kokusetha i-REDIS_CONN_STRING, i-One API izosebenzisa i-Redis njengenqolobane:

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

Uma ukubambezeleka kokufinyelela esizindalwazini kuphansi kakhulu, akudingekile ukunika amandla i-Redis, ngoba inqolobane ingabangela ukubambezeleka kokuvumelanisa idatha. Kumodi ye-sentinel noma ye-cluster, le nguquko ingasethwa ibe uhlu lwamanodi, ihambisane ne-REDIS_PASSWORD kanye ne-REDIS_MASTER_NAME.

Ukulungiselela ukuxhumana kwesizindalwazi

Ukuxhumana kwesizindalwazi kungalungiswa ngokusebenzisa lezi ziguquko zemvelo:

  • SQL_MAX_IDLE_CONNS: Inani eliphezulu lokuxhumana okungenzi lutho, elizenzakalelayo lingu-100.

  • SQL_MAX_OPEN_CONNS: Inani eliphezulu lokuxhumana okuvuliwe, elizenzakalelayo lingu-1000.

  • SQL_CONN_MAX_LIFETIME: Ubude besikhathi obukhulu bokuphila kokuxhumana, obuzenzakalelayo buyimizuzu engu-60.

  • BATCH_UPDATE_ENABLED=true: Nika amandla ukuhlanganiswa kokubuyekezwa kwenqwaba kwesizindalwazi. Lokhu kunganciphisa inani elikhulu lokuxhumana, kodwa kubangele ukubambezeleka ekubuyekezweni kwezabelo.

  • BATCH_UPDATE_INTERVAL=5: Setha isikhawu sokuhlanganisa ukubuyekezwa kwenqwaba, esikalwa ngamasekhondi.

Uma kuvela Error 1040: Too many connections, yehlisa ngokufanele SQL_MAX_OPEN_CONNS, futhi ungahlola ukuthi uyakunika yini amandla ukubuyekezwa kwenqwaba.

Ukulungiselela izikhathi, ukuphelelwa yisikhathi nama-proxy

  • SESSION_SECRET: Setha ukhiye wesikhathi ongashintshi; ngemva kokuqala kabusha, ama-Cookie abasebenzisi abangene ngemvume azohlala esebenza.

  • RELAY_TIMEOUT: Setha isikhathi sokuphelelwa yisikhathi sezicelo ezidluliswayo, esikalwa ngamasekhondi.

  • RELAY_PROXY: Yenza izicelo ezidluliswayo zifinyelele ku-API engemuva nge-proxy ecacisiwe.

  • USER_CONTENT_REQUEST_TIMEOUT: Setha isikhathi sokuphelelwa yisikhathi sokulanda okuqukethwe okulayishwe umsebenzisi.

  • USER_CONTENT_REQUEST_PROXY: Lungiselela i-proxy yokulanda okuqukethwe okulayishwe umsebenzisi, njengezithombe.

Ukulungiselela ukuqapha iziteshi

Ungabuyekeza ibhalansi yeziteshi ngezikhathi ezithile futhi uhlole ukutholakala kwazo:

CHANNEL_UPDATE_FREQUENCY=1440
CHANNEL_TEST_FREQUENCY=1440
POLLING_INTERVAL=5

Amayunithi eziguquko ezimbili zokuqala angamaminithi, kanti POLLING_INTERVAL iyimizuzwana, futhi isetshenziselwa ukulawula isikhawu phakathi kwezicelo ngesikhathi sokusebenza kwenqwaba.

Ukulungiselela Ukufakwa Kwamaseva Amaningi

Ukufakwa kwamaseva amaningi akukwazi ukuqhubeka kuncike ku-SQLite yasendaweni. Zonke izindawo kufanele zixhume kusizindalwazi esisodwa se-MySQL futhi zigcine ukulungiselelwa kweseshini okufanayo.

  1. Wonke amaseva kufanele asethele SESSION_SECRET inani elifanayo.

  2. Wonke amaseva kufanele axhume kusizindalwazi esisodwa se-MySQL esebenzisa SQL_DSN.

  3. Amaseva angaphansi kufanele asethele NODE_TYPE=slave; uma kungasethiwe, okuzenzakalelayo yiseva eyinhloko.

  4. Sebenzisa SYNC_FREQUENCY ukuze uvumelanise ukulungiselelwa kusizindalwazi ngezikhathi ezithile.

  5. Amaseva angaphansi angasetha FRONTEND_BASE_URL ukuze aqondise kabusha izicelo zamakhasi kuseva eyinhloko.

  6. Ungafaka i-Redis kuseva ngayinye engaphansi bese usetha REDIS_CONN_STRING ukuze unciphise ukufinyelela kusizindalwazi ngesikhathi sokusebenza kwe-cache.

  7. Uma ukubambezeleka kokufinyelela kwesizindalwazi kuseva eyinhloko kuphezulu, kufanele futhi ucabange ukunika amandla i-Redis nokuvumelanisa ngezikhathi ezithile.

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

Ukulungiselela i-Nginx ne-HTTPS

Endaweni yokukhiqiza ungasebenzisa i-Nginx njengommeleli ohlehlayo we-One API. Kumamodeli anesikhathi eside sokuphendula, kufanele ukhuphule ngokufanele isikhathi sokuvala sokufunda.

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

Ku-Ubuntu ungasebenzisa i-Certbot ukufaka nokulungiselela i-HTTPS:

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

Ukuxazulula Izinkinga Ezivamile

  • Umlayezo uthi isabelo asanele: Ngaphezu kwesabelo se-akhawunti, hlola nomkhawulo wesabelo sethokheni uqobo.

  • Umlayezo uthi azikho iziteshi ezitholakalayo: Hlola iqembu lomsebenzisi, iqembu lesiteshi, kanye nohlu lwamamodeli asekelwa yisiteshi.

  • Umthwalo weqembu lamanje usugcwele: Ngokuvamile lokhu kusho ukuthi isiteshi esiphezulu sibuyise u-429.

  • Iklayenti libonisa ukuthi Failed to fetch: Hlola ikheli lesixhumi esibonakalayo, i-API Key, nokulungiselelwa kwe-HTTPS; izicelo ze-HTTP ekhasini le-HTTPS zingase zivinjwe isiphequluli.

  • Ukuhlolwa kwesiteshi kubuyisa invalid character: Impendulo evela phezulu kungenzeka ibe yi-HTML esikhundleni se-JSON esemthethweni, futhi ikheli le-IP leseva yokufaka noma inodi yommeleli kungenzeka ivinjwe yi-Cloudflare.

  • Ukhathazekile ngokulahleka kwedatha ngemva kokuthuthukisa: Idatha ye-MySQL ayilahleki ngenxa yokuthuthukisa okuvamile; ku-SQLite kufanele ukhweze ivolumu yedatha ngendlela efanele ukuze kugcinwe one-api.db.

Isiphetho

One API ilungele ukuhlanganisa abahlinzeki bamamodeli abaningi ibe yindlela yokubiza ehambisana ne-OpenAI, futhi ilawule iziteshi, amathokheni, izabelo nabasebenzisi endaweni eyodwa. Ezimo zomuntu siqu noma ezinomthwalo omncane, ungaqala nge-Docker ne-SQLite; ezindaweni ezinomthwalo omkhulu nezamaseva amaningi, kufanele usebenzise isizindalwazi esabiwe futhi wethule i-Redis ngokucophelela kuye ngokubambezeleka. Ngaphambi kokuyisebenzisa, shintsha amaphasiwedi azenzakalelayo, lungiselela i-HTTPS, gcina idatha ngokuphikelelayo, futhi uqinisekise ukuthi isevisi ihambisana nemigomo nemithetho efanele.

Iphrojekthi ikhishwa ngaphansi kwelayisensi ye-MIT, kodwa i-README idinga ukuthi kugcinwe igama lomnikazi kanye nesixhumanisi sephrojekthi ezansi kwekhasi; uma udinga ukususa igama lomnikazi, kufanele uqale uthole imvume. Ukuze uthole olunye ulwazi, bheka indawo yokugcina ye-One API ku-GitHub.