মূল কনটেন্টে যান
এআই টিউটোরিয়াল

One API স্থাপন ও ব্যবহারের নির্দেশিকা: একীভূত OpenAI API দিয়ে একাধিক বড় ভাষা মডেল যুক্ত করুন

এই নির্দেশিকায় One API স্থাপন, মডেল চ্যানেল যোগ, অ্যাক্সেস টোকেন তৈরি এবং OpenAI-সামঞ্জস্যপূর্ণ ইন্টারফেসের মাধ্যমে একাধিক বড় ভাষা মডেল ব্যবহারের পদ্ধতি দেখানো হয়েছে। পাশাপাশি ডেটাবেস, ক্যাশ, লোড ব্যালান্সিং ও একাধিক মেশিনে স্থাপনের গুরুত্বপূর্ণ বিষয়গুলোও ব্যাখ্যা করা হয়েছে।

One API স্থাপন ও ব্যবহারের নির্দেশিকা: একীভূত OpenAI API দিয়ে একাধিক বড় ভাষা মডেল যুক্ত করুন

One API কী

One API হলো একটি ওপেন-সোর্স বৃহৎ মডেল API ব্যবস্থাপনা ও রিলে সিস্টেম। এটি বিভিন্ন মডেল সরবরাহকারীর ইন্টারফেসকে OpenAI API-এর মানসম্মত ফরম্যাটে একীভূত করে, যাতে ক্লায়েন্ট একই API Base ও অ্যাক্সেস টোকেন ব্যবহার করে একাধিক আপস্ট্রিম চ্যানেল কল করতে পারে।

প্রকল্পটি OpenAI ও Azure OpenAI, Anthropic Claude, Google Gemini, Mistral, 豆包, 文心一言, 通义千问, 讯飞星火, ChatGLM, 腾讯混元, Moonshot AI, DeepSeek, Ollama, Cohere, Groq, Cloudflare Workers AI, xAI-সহ বিভিন্ন পরিষেবা সমর্থন করে।

অনুবর্তিতা সংক্রান্ত সতর্কতা: One API ব্যবহারের সময় OpenAI-এর ব্যবহারের শর্তাবলি এবং প্রযোজ্য আইন ও বিধি অবশ্যই মেনে চলতে হবে। এটি অবৈধ কাজে ব্যবহার করা যাবে না। চীন অঞ্চলের জনসাধারণের জন্য নিবন্ধনবিহীন জেনারেটিভ কৃত্রিম বুদ্ধিমত্তা পরিষেবা প্রদান করবেন না।

মূল বৈশিষ্ট্য

  • একীভূত ইন্টারফেস: OpenAI-সামঞ্জস্যপূর্ণ API ফরম্যাটের মাধ্যমে বিভিন্ন বৃহৎ মডেলে অ্যাক্সেস।

  • একাধিক চ্যানেল ও লোড ব্যালেন্সিং: একাধিক আপস্ট্রিম চ্যানেল কনফিগার করা যায়; চ্যানেল নির্দিষ্ট না করলে স্বয়ংক্রিয়ভাবে লোড ব্যালেন্সিং হয়।

  • স্ট্রিমিং আউটপুট: stream মোড সমর্থন করে, ফলে টাইপরাইটার-ধাঁচের প্রতিক্রিয়া পাওয়া যায়।

  • টোকেন ব্যবস্থাপনা: মেয়াদ শেষের সময়, কোটা, অনুমোদিত IP পরিসর এবং অ্যাক্সেসযোগ্য মডেল নির্ধারণ করা যায়।

  • চ্যানেল ব্যবস্থাপনা: একসঙ্গে একাধিক চ্যানেল তৈরি, মডেল তালিকা, চ্যানেল গ্রুপ এবং মডেল ম্যাপিং কনফিগার করা যায়।

  • কোটা ও বিলিং: কোটা বিবরণ, ব্যবহারকারী গ্রুপ, চ্যানেল গ্রুপ, গুণক এবং ডলারে কোটা প্রদর্শন সমর্থন করে।

  • নির্ভরযোগ্যতা: ব্যর্থ হলে স্বয়ংক্রিয় পুনঃচেষ্টা, একাধিক মেশিনে স্থাপন, Redis ক্যাশ এবং ডেটাবেস সংযোগ কনফিগারেশন সমর্থন করে।

  • ব্যবস্থাপনা সম্প্রসারণ: সিস্টেম অ্যাক্সেস টোকেনের মাধ্যমে ম্যানেজমেন্ট API কল করা যায়; সোর্স কোড পরিবর্তন না করেই ব্যবস্থাপনার সক্ষমতা বাড়ানো যায়।

  • ব্যবহারকারী ব্যবস্থা: ইমেইল, Feishu, GitHub এবং WeChat Official Account-সহ বিভিন্ন লগইন ও নিবন্ধন পদ্ধতি সমর্থন করে।

  • ইন্টারফেস কাস্টমাইজেশন: সিস্টেমের নাম, Logo, ফুটার, হোমপেজ, সম্পর্কে পৃষ্ঠা এবং থিম কাস্টমাইজ করা যায়।

Docker ব্যবহার করে দ্রুত স্থাপন

ডেটা ডিরেক্টরি প্রস্তুত করুন

দ্রুত পরীক্ষা বা কম সমান্তরালতার স্থাপনার জন্য SQLite উপযুক্ত। প্রথমে একটি লেখার-অনুমতিসম্পন্ন ডেটা ডিরেক্টরি প্রস্তুত করুন; ডেটাবেস ও লগ ওই ডিরেক্টরিতে সংরক্ষিত হবে।

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

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

-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 ব্যবহার করা যায়।

প্রাথমিক কনফিগারেশন সম্পন্ন করুন

  1. One API-এর অ্যাডমিন পৃষ্ঠা খুলুন, root অ্যাকাউন্ট দিয়ে লগইন করুন এবং ডিফল্ট পাসওয়ার্ড পরিবর্তন করুন।

  2. চ্যানেল পৃষ্ঠায় যান, সংশ্লিষ্ট সরবরাহকারীর ধরন নির্বাচন করুন এবং আপস্ট্রিম API Key যোগ করুন।

  3. আপস্ট্রিমের সক্ষমতা অনুযায়ী চ্যানেল সমর্থিত মডেল তালিকা ও গ্রুপ নির্ধারণ করুন।

  4. টোকেন পৃষ্ঠায় যান এবং ক্লায়েন্টের ব্যবহারের জন্য একটি অ্যাক্সেস টোকেন তৈরি করুন।

  5. প্রয়োজনে টোকেনের কোটা, কার্যকারিতা, অনুমোদিত 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 ডেটাবেসে সংযুক্ত থাকতে হবে এবং সেশন কনফিগারেশনও অভিন্ন রাখতে হবে।

  1. সব সার্ভারে একই SESSION_SECRET সেট করুন।

  2. সব সার্ভারকে SQL_DSN-এর মাধ্যমে একই MySQL ডেটাবেসে সংযুক্ত করুন।

  3. স্লেভ সার্ভারে NODE_TYPE=slave সেট করুন; সেট না করলে ডিফল্টভাবে এটি মাস্টার সার্ভার হিসেবে বিবেচিত হবে।

  4. ডেটাবেস থেকে নিয়মিত কনফিগারেশন সিঙ্ক করতে SYNC_FREQUENCY ব্যবহার করুন।

  5. স্লেভ সার্ভারে FRONTEND_BASE_URL সেট করে পেজের অনুরোধ মাস্টার সার্ভারে রিডাইরেক্ট করা যায়।

  6. প্রতিটি স্লেভ সার্ভারে Redis স্থাপন করে REDIS_CONN_STRING সেট করা যায়, যাতে ক্যাশের মেয়াদ চলাকালে ডেটাবেসে অ্যাক্সেস কমে।

  7. মাস্টার সার্ভার থেকে ডেটাবেসে অ্যাক্সেসের বিলম্ব বেশি হলে 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:49153

Nginx ও 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-তে Certbot ব্যবহার করে HTTPS সংগ্রহ ও কনফিগার করা যায়:

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 স্থায়ী রাখতে ডেটা ভলিউম সঠিকভাবে মাউন্ট করতে হবে।

উপসংহার

একাধিক মডেল সরবরাহকারীকে OpenAI-সামঞ্জস্যপূর্ণ কল পদ্ধতিতে একীভূত করা এবং চ্যানেল, টোকেন, কোটা ও ব্যবহারকারী কেন্দ্রীয়ভাবে পরিচালনার জন্য One API উপযোগী। ব্যক্তিগত বা কম-সমসাময়িকতার পরিবেশে Docker ও SQLite দিয়ে শুরু করা যায়; বেশি সমসাময়িকতা ও একাধিক সার্ভারের পরিবেশে শেয়ার করা ডেটাবেস ব্যবহার করা উচিত এবং বিলম্ব অনুযায়ী সতর্কতার সঙ্গে Redis যুক্ত করতে হবে। ব্যবহারের আগে ডিফল্ট পাসওয়ার্ড পরিবর্তন করুন, HTTPS কনফিগার করুন, ডেটা স্থায়ীভাবে সংরক্ষণ করুন এবং পরিষেবাটি সংশ্লিষ্ট শর্ত ও আইন মেনে চলছে কি না নিশ্চিত করুন।

প্রকল্পটি MIT লাইসেন্সের অধীনে ওপেন সোর্স, তবে README-তে পৃষ্ঠার নিচে ক্রেডিট ও প্রকল্পের লিংক রাখার অনুরোধ করা হয়েছে; ক্রেডিট সরাতে হলে আগে অনুমতি নিতে হবে। আরও তথ্যের জন্য One API GitHub রিপোজিটরি দেখুন।