খরচ
ব্যবহার বাড়লে মডেল খরচ অনুমানযোগ্য রাখুন
প্রতিটি কাজ একটি OpenAI-সামঞ্জস্যপূর্ণ endpoint দিয়ে পাঠান, সক্ষম সবচেয়ে সস্তা মডেলে রুট করুন এবং প্রতিটি প্রতিক্রিয়ার টোকেন ব্যবহার লগ করুন।
প্রম্পট কপি করুন
বর্গ বন্ধনীর ঘরগুলো বদলে Claude Code, Codex বা টার্মিনাল অ্যাক্সেসসহ AI-তে পেস্ট করুন। এটি Felo স্কিল ইনস্টল করে, ক্রেডিটের আগে জিজ্ঞাসা করে ও ওয়ার্কফ্লো চালায়।
আমাদের মডেল খরচ পর্যালোচনা করুন এবং এই কাজগুলোর জন্য রাউটিং পরিকল্পনা প্রস্তাব করুন: [কাজ বা ফিচার তালিকা]। সীমা: মাসিক বাজেট [পরিমাণ], লেটেন্সি লক্ষ্য [লক্ষ্য], গুণমান স্তর [স্তর]। কিছু সুপারিশ করার আগে লাইভ মডেল ক্যাটালগ পড়ুন। তৈরি করুন: 1. কাজ -> সুপারিশকৃত মডেল সারণি। 2. কোন কাজ এক ধাপ নিচে যেতে পারে এবং গুণমান ঝুঁকি। 3. প্রতি কাজ ও ফিচারে ব্যবহার লগ পরিকল্পনা। 4. প্রোডাকশন বদলানোর আগে কী মাপতে হবে। নিয়ম: - বর্তমান মডেল ID ও দাম লাইভ ক্যাটালগ থেকে পড়ুন; স্মৃতি থেকে হার উদ্ধৃত করবেন না। - প্রোডাকশন কনফিগারেশন বদলাবেন না বা বাস্তব ট্রাফিক পাঠাবেন না। - পরীক্ষামূলক কলে ক্রেডিট খরচের আগে জিজ্ঞাসা করুন। - রোলব্যাক পরিকল্পনা ও প্রতি ফিচারে খরচ সীমা রাখুন। - পরিকল্পনা ./routing-plan.md-এ লিখুন এবং চ্যাটে সারসংক্ষেপ দিন।
কপিতে ইনস্টল ধাপ ও নিরাপত্তা নিয়মও আছে।
আপনি কী পান
একটি রানের উদাহরণ আউটপুট। লাইভ জেনারেশন নয়।
| কাজ | বর্তমান | প্রস্তাব | ঝুঁকি |
|---|---|---|---|
| টিকিট শ্রেণিবিন্যাস | শক্তিশালী মডেল | দ্রুত মডেল | কম |
| উত্তর খসড়া | শক্তিশালী মডেল | শক্তিশালী মডেল | নেই |
| চেঞ্জলগ সারসংক্ষেপ | শক্তিশালী মডেল | দ্রুত মডেল | মধ্যম |
কিছু বদলানোর আগে: এক সপ্তাহ প্রতি কাজের ব্যবহার লগ করুন এবং ৫০টি নমুনা আউটপুটে গুণমান তুলনা করুন।
সঠিক কল
ডেভেলপারদের জন্য: একই ওয়ার্কফ্লো কোড হিসেবে, চালানোর ক্রমে।
আসল API কল দেখান
সব কাজ এক endpoint দিয়ে
এক OpenAI-সামঞ্জস্যপূর্ণ endpoint ও এক কী ব্যবহার করুন, প্রতি প্রদানকারীতে SDK নয়।
routing.ts const BASE_URL = "https://openapi.felo.ai/api/v1"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; type Completion = { choices: { message: { content: string } }[]; usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number }; }; async function chat(model: string, prompt: string): Promise<Completion> { const res = await fetch(`${BASE_URL}/chat/completions`, { method: "POST", headers, body: JSON.stringify({ model, messages: [{ role: "user", content: prompt }] }), }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<Completion>; } const summary = await chat( "claude-haiku-5-5", "Summarize this changelog in three bullets: …", ); console.log(summary.choices[0].message.content);উদাহরণ আউটপুট
{ "choices": [{ "message": { "content": "• …" } }], "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 } }কাজ অনুযায়ী মডেল রুট
জটিলতা অনুযায়ী দ্রুত বা শক্তিশালী মডেল বাছুন এবং আগে বেসলাইন লিখুন।
routing.ts type TaskKind = "classify" | "extract" | "summarize" | "draft" | "review"; const MODEL_ROUTES: Record<TaskKind, string> = { classify: "claude-haiku-5-5", extract: "claude-haiku-5-5", summarize: "claude-haiku-5-5", draft: "claude-sonnet-5-5", review: "claude-sonnet-5-5", }; export async function route(kind: TaskKind, prompt: string) { const model = MODEL_ROUTES[kind]; const result = await chat(model, prompt); return { model, text: result.choices[0].message.content, usage: result.usage, }; }উদাহরণ আউটপুট
{ "model": "claude-haiku-5-5", "text": "• …", "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 } }ব্যবহার পড়ুন ও লগ করুন
প্রতি প্রতিক্রিয়ার usage পড়ুন এবং ফিচার অনুযায়ী টোকেন ও লেটেন্সি লগ করুন।
routing.ts type UsageRecord = { model: string; kind: TaskKind; promptTokens: number; completionTokens: number; totalTokens: number; }; const usageLog: UsageRecord[] = []; function logUsage(kind: TaskKind, model: string, usage: Completion["usage"]) { const entry: UsageRecord = { model, kind, promptTokens: usage.prompt_tokens, completionTokens: usage.completion_tokens, totalTokens: usage.total_tokens, }; usageLog.push(entry); console.log(JSON.stringify(entry)); // ship this line to your metrics store return entry; } export function tokensByModel() { return usageLog.reduce<Record<string, number>>((totals, entry) => { totals[entry.model] = (totals[entry.model] ?? 0) + entry.totalTokens; return totals; }, {}); } const result = await route("summarize", "Summarize this changelog in three bullets: …"); logUsage("summarize", result.model, result.usage); console.log(tokensByModel());উদাহরণ আউটপুট
{"model":"claude-haiku-5-5","kind":"summarize","promptTokens":812,"completionTokens":96,"totalTokens":908} { "claude-haiku-5-5": 18234, "claude-sonnet-5-5": 4201 }সব প্রদানকারীর জন্য এক কী
ক্যাটালগ মডেল একই Felo কী দিয়ে ডাকুন এবং প্রদানকারী ব্যবস্থাপনা কমান।
routing.ts async function chatOnChannel(model: string, prompt: string, channel?: string) { const res = await fetch(`${BASE_URL}/chat/completions`, { method: "POST", headers: { ...headers, ...(channel ? { "X-Felo-Channel": channel } : {}), }, body: JSON.stringify({ model, messages: [{ role: "user", content: prompt }] }), }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<Completion>; } // Leave `channel` undefined for the default supplier. export function routePinned(kind: TaskKind, prompt: string, channel?: string) { return chatOnChannel(MODEL_ROUTES[kind], prompt, channel); }লাইভ ক্যাটালগ থেকে দাম
হার স্থির করবেন না; বর্তমান দাম ক্যাটালগ ও মূল্য পৃষ্ঠা থেকে পড়ুন।
routing.ts type Catalog = { data: { id: string; owned_by: string; model_kind: string }[]; }; export async function chatModelIds() { const res = await fetch( `${BASE_URL}/models?exclude_video_and_decisions=true`, { headers }, ); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); const catalog = (await res.json()) as Catalog; return catalog.data .filter((model) => model.model_kind === "chat") .map((model) => model.id); } // Price `tokensByModel()` against https://openapi.felo.ai/pricing and // https://openapi.felo.ai/models. Keep the links, not the rates, in your code.উদাহরণ আউটপুট
["claude-haiku-5-5", "claude-sonnet-5-5"]
যা আছে
- এক endpoint ও কী
- কাজ অনুযায়ী দ্রুত বা শক্তিশালী মডেল নির্বাচন
- প্রতিটি প্রতিক্রিয়ার টোকেন লগ
- লাইভ ক্যাটালগ থেকে দাম, কোডে স্থির নয়
যা করে না
- কম বিলের নিশ্চয়তা নেই
- প্রোডাকশন ট্রাফিক স্বয়ংক্রিয়ভাবে বদলায় না
- ID ও দাম বদলায়; সবসময় লাইভ ক্যাটালগ পড়ুন
- গুণ আপনার জন্য মাপে না; আপনার নমুনা দরকার
- বিলিং বা observability-এর বিকল্প নয়
প্রশ্ন
বিল কমবে?
কোন কাজ সস্তা স্তরে যেতে পারে দেখায়, কিন্তু সঞ্চয় নমুনা তুলনা ও ব্যবহার লগের পরেই সত্যি।
মডেল স্বয়ংক্রিয়ভাবে ডাকে?
শুধু পরীক্ষণ কল অনুমোদন করলে। ডিফল্ট ক্যাটালগ পড়ে সুপারিশ লেখে, প্রোডাকশন ছোঁয় না।
কোন মডেল সস্তা জানবেন কীভাবে?
লাইভ মডেল ক্যাটালগ ও মূল্য পৃষ্ঠা পড়ুন; ওয়ার্কফ্লো হার স্থির করে না কারণ বদলায়।
প্রদানকারী পিন করা যায়?
হ্যাঁ, যখন লেটেন্সি দামের চেয়ে গুরুত্বপূর্ণ। পিন করা পছন্দ, retry কৌশল নয়; নিজের fallback যোগ করুন।
কী লগ করবেন?
প্রতি কলে: কাজ, ফিচার, মডেল, prompt token, completion token, মোট ও লেটেন্সি। বাজেটের আগে ফিচার অনুযায়ী যোগ করুন।
এক পর্যালোচনার খরচ কত?
ক্যাটালগ পড়লে মডেল কল হয় না। পরীক্ষণ কল ব্যবহার অনুযায়ী বিল হয়; প্রম্পট আগে অনুমোদন চায়।
সম্পর্কিত ওয়ার্কফ্লো
আপনার নিজের নথি থেকে সহায়তা প্রশ্নের উত্তর দিন
LiveDoc তৈরি করুন, হেল্প সেন্টার ও অভ্যন্তরীণ runbook লোড করুন, টিকিটের উত্তর দেওয়া অংশ আনুন এবং মডেলকে শুধু সেই প্রমাণ থেকে উত্তর দিতে দিন।
ওয়ার্কফ্লো খুলুনগবেষণাএকটি প্রশ্নকে উৎসসহ গবেষণা ব্রিফে বদলান
ওয়েবকে জিজ্ঞাসা করুন, উত্তরের পেছনের পৃষ্ঠা Markdown-এ সংরক্ষণ করুন, X-এ অনুশীলনকারীরা কী বলেন যোগ করুন এবং প্রমাণ এমন LiveDoc-এ রাখুন যা পরে আবার খোঁজা যায়।
ওয়ার্কফ্লো খুলুনঅফিসগবেষণা পৃষ্ঠাকে উপস্থাপনায় বদলান
পৃষ্ঠা নিষ্কাশ করুন, LiveDoc প্রসঙ্গ হিসেবে রাখুন, PPT Task API দিয়ে ডেক বানাতে দিন এবং প্রস্তুত লিংক না পাওয়া পর্যন্ত জিজ্ঞাসা করুন।
ওয়ার্কফ্লো খুলুননিজের মতো করুন
একই রেসিপি, আপনি যেভাবে সত্যিই সরবরাহ করেন সেভাবে।
আগে শুধু লগ
প্রোডাকশনের আগে এক সপ্তাহ ব্যবহার লগ করুন, তারপর ডাউনগ্রেড ঠিক করুন।
প্রতি ফিচার বাজেট
প্রতি ফিচারে মাসিক সীমা দিন এবং পার হলে সতর্ক বা ডাউনগ্রেড করুন।
লেটেন্সির জন্য প্রদানকারী পিন
লেটেন্সি দামের চেয়ে গুরুত্বপূর্ণ হলে প্রদানকারী পিন করুন এবং fallback যোগ করুন।
এগিয়ে যান
এই রেসিপির পেছনের রেফারেন্স পৃষ্ঠা ও পরবর্তী ধাপ।