Maliyet
Kullanım büyürken model maliyetini öngörülebilir tutun
Her görevi OpenAI uyumlu tek bir endpoint’ten geçirin, onu başarabilecek en ucuz modele yönlendirin ve her yanıtın döndürdüğü token kullanımını kaydedin.
İstemi kopyalayın
Köşeli parantezli alanları değiştirip Claude Code, Codex veya terminal erişimi olan bir AI’ya yapıştırın. Felo becerisini kurar, kredi harcamadan önce sorar ve iş akışını çalıştırır.
Model harcamamızı incele ve bu görevler için bir yönlendirme planı öner: [görev veya özellik listesi]. Kısıtlar: aylık bütçe [tutar], gecikme hedefi [hedef], kalite çıtası [seviye]. Bir şey önermeden önce canlı model kataloğunu oku. Şunları hazırla: 1. Görev -> önerilen model tablosu. 2. Hangi görevler bir kademe inebilir ve kalite riski. 3. Görev ve özellik başına kullanım günlüğü planı. 4. Üretimi değiştirmeden önce ne ölçülmeli. Kurallar: - Güncel model ID’lerini ve fiyatlarını canlı katalogdan oku; asla ezberden ücret alıntılama. - Üretim yapılandırmasını değiştirme ve gerçek trafik gönderme. - Test çağrıları için kredi harcamadan önce sor. - Geri alma planı ve özellik başına harcama üst sınırı tut. - Planı ./routing-plan.md dosyasına yaz ve sohbette özetle.
Kopya kurulum adımlarını ve güvenlik kurallarını da içerir.
Ne elde edersiniz
Bir çalıştırmanın örnek çıktısı. Canlı üretim değil.
| Görev | Şu an | Öneri | Risk |
|---|---|---|---|
| Bilet sınıflandır | güçlü model | hızlı model | düşük |
| Yanıt taslakla | güçlü model | güçlü model | yok |
| Changelog özetle | güçlü model | hızlı model | orta |
Herhangi bir şeyi değiştirmeden önce: bir hafta görev başına kullanımı kaydet ve 50 örnek çıktıda kaliteyi karşılaştır.
Tam çağrılar
Geliştiriciler için: aynı iş akışı kod olarak, yürütme sırasıyla.
Gerçek API çağrılarını göster
Tüm görevler tek endpoint’te
Sağlayıcı başına SDK yerine tek OpenAI uyumlu endpoint ve tek anahtar kullanın.
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);Örnek çıktı
{ "choices": [{ "message": { "content": "• …" } }], "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 } }Modeli göreve göre yönlendirin
Karmaşıklığa göre hızlı veya güçlü model seçin ve önce baseline’ı yazın.
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, }; }Örnek çıktı
{ "model": "claude-haiku-5-5", "text": "• …", "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 } }Kullanımı okuyun ve kaydedin
Her yanıttan usage okuyun ve özelliğe göre token ile gecikmeyi kaydedin.
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());Örnek çıktı
{"model":"claude-haiku-5-5","kind":"summarize","promptTokens":812,"completionTokens":96,"totalTokens":908} { "claude-haiku-5-5": 18234, "claude-sonnet-5-5": 4201 }Tüm sağlayıcılar için tek anahtar
Katalogdaki modelleri aynı Felo anahtarıyla çağırın ve sağlayıcı yönetimini azaltın.
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); }Fiyatlar canlı katalogdan
Tarife sabitlemeyin; güncel fiyatları katalog ve fiyat sayfasından okuyun.
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.Örnek çıktı
["claude-haiku-5-5", "claude-sonnet-5-5"]
Neler dahil
- Tek endpoint ve anahtar
- Göreve göre hızlı veya güçlü model seçimi
- Her yanıtın token kaydı
- Fiyatlar canlı katalogdan, kodda sabit değil
Neleri yapmaz
- Daha düşük fatura garantisi yok
- Üretim trafiğini otomatik değiştirmez
- ID ve fiyatlar değişir; her zaman canlı kataloğu okuyun
- Kaliteyi sizin için değerlendirmez; örnekleriniz gerekir
- Faturalama veya observability yerine geçmez
Sorular
Fatura düşer mi?
Hangi görevlerin bir kademe inebileceğini gösterir, ancak tasarruf ancak örnekleri karşılaştırıp kullanımı kaydettikten sonra gerçektir.
Modelleri otomatik çağırır mı?
Yalnızca test çağrılarını onaylarsanız. Varsayılan olarak kataloğu okur ve üretime dokunmadan öneri yazar.
Hangi modelin daha ucuz olduğunu nasıl bilirim?
Canlı model kataloğunu ve fiyat sayfasını okuyun; iş akışı tarifeleri sabitlemez çünkü değişirler.
Sağlayıcı sabitlenebilir mi?
Gecikme fiyattan önemliyse evet. Sabitlemek bir seçimdir, retry stratejisi değil; kendi fallback’inizi ekleyin.
Ne kaydedilmeli?
Çağrı başına: görev, özellik, model, prompt token, completion token, toplam ve gecikme. Bütçeden önce özelliğe göre toplayın.
Bir incelemenin maliyeti nedir?
Katalog okumak model çağrısı üretmez. Test çağrıları kullanıma göre faturalanır; istem önceden onay ister.
İlgili iş akışları
Destek sorularını kendi dokümantasyonunuzdan yanıtlayın
Bir LiveDoc oluşturun, yardım merkezini ve dahili runbook’u yükleyin, bileti yanıtlayan pasajları alın ve modelin yalnızca bu kanıtlardan yanıtlamasına izin verin.
İş akışını açAraştırmaTek bir soruyu kaynaklı araştırma brifine dönüştürün
Web’e sorun, yanıtın arkasındaki sayfaları Markdown olarak kaydedin, X’te uygulayıcıların söylediklerini ekleyin ve kanıtları daha sonra tekrar aranabilen bir LiveDoc’ta tutun.
İş akışını açOfisBir araştırma sayfasını sunuma dönüştürün
Sayfayı çıkarın, LiveDoc bağlamı olarak kaydedin, PPT Task API’nin desteyi kurmasına izin verin ve bitmiş bağlantı gelene kadar sorun.
İş akışını açKendinize uyarlayın
Aynı tarif, gerçekte nasıl teslim ettiğinize uyarlanmış.
Önce yalnızca kayıt
Üretimden önce bir hafta kullanım kaydedin, sonra indirime karar verin.
Özellik başına bütçe
Özellik başına aylık limit koyun ve aşılınca uyarın veya düşürün.
Gecikme için sağlayıcı sabitleyin
Gecikme fiyattan önemliyse sağlayıcıyı sabitleyin ve fallback ekleyin.
Devam edin
Bu tarifin arkasındaki referans sayfaları ve sonraki adımlar.