Felo API PlatformFelo API Platform

Biaya

Jaga biaya model tetap terprediksi saat penggunaan tumbuh

Lewatkan setiap tugas melalui satu endpoint kompatibel OpenAI, arahkan ke model termurah yang mampu, dan catat pemakaian token yang dikembalikan setiap respons.

Waktu20 menitTingkatMenengahDiperbarui2026-10-29
Untuk siapaTim platformPemilik produk APIPemimpin engineering

Salin prompt

Ganti kolom dalam kurung siku lalu tempel ke Claude Code, Codex, atau AI dengan akses terminal. Ia memasang skill Felo, bertanya sebelum memakai kredit, dan menjalankan alur kerja.

Tinjau pengeluaran model kami dan usulkan rencana routing untuk tugas berikut: [daftar tugas atau fitur].

Batasan: anggaran bulanan [jumlah], target latensi [target], standar kualitas [standar].
Baca katalog model langsung sebelum merekomendasikan apa pun.

Hasilkan:
1. Tabel tugas -> model yang direkomendasikan.
2. Tugas mana yang bisa turun satu tingkat dan risiko kualitasnya.
3. Rencana pencatatan penggunaan per tugas dan fitur.
4. Apa yang perlu diukur sebelum mengubah produksi.

Aturan:
- Baca ID dan harga model saat ini dari katalog langsung; jangan pernah mengutip tarif dari ingatan.
- Jangan mengubah konfigurasi produksi atau mengirim lalu lintas nyata.
- Tanya dulu sebelum memakai kredit untuk panggilan uji.
- Pertahankan rencana rollback dan batas pengeluaran per fitur.
- Tulis rencana ke ./routing-plan.md dan ringkas di chat.

Salinan juga menyertakan langkah pemasangan dan aturan keamanan.

Yang Anda dapatkan

Contoh keluaran dari satu eksekusi. Bukan pembuatan langsung.

Contoh rencana routing (kutipan)
TugasSaat iniUsulanRisiko
Klasifikasi tiketmodel kuatmodel cepatrendah
Menyusun balasanmodel kuatmodel kuattidak ada
Ringkas changelogmodel kuatmodel cepatsedang

Sebelum mengubah apa pun: catat penggunaan per tugas selama seminggu dan bandingkan kualitas pada 50 keluaran sampel.

Panggilan persisnya

Untuk developer: alur kerja yang sama sebagai kode, sesuai urutan eksekusi.

Tampilkan panggilan API asli
  1. Semua tugas lewat satu endpoint

    Pakai satu endpoint kompatibel OpenAI dan satu kunci, tanpa SDK per penyedia.

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

    Contoh keluaran

    {
      "choices": [{ "message": { "content": "• …" } }],
      "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 }
    }
  2. Arahkan model per tugas

    Pilih model cepat atau kuat sesuai kompleksitas dan catat baseline dulu.

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

    Contoh keluaran

    {
      "model": "claude-haiku-5-5",
      "text": "• …",
      "usage": { "prompt_tokens": 812, "completion_tokens": 96, "total_tokens": 908 }
    }
  3. Baca dan catat pemakaian

    Baca usage tiap respons dan catat token serta latensi per fitur.

    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());

    Contoh keluaran

    {"model":"claude-haiku-5-5","kind":"summarize","promptTokens":812,"completionTokens":96,"totalTokens":908}
    { "claude-haiku-5-5": 18234, "claude-sonnet-5-5": 4201 }
  4. Satu kunci untuk semua penyedia

    Panggil model katalog dengan kunci Felo yang sama dan kurangi pengelolaan penyedia.

    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);
    }
  5. Harga dari katalog live

    Jangan patok tarif; baca harga saat ini dari katalog dan halaman harga.

    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.

    Contoh keluaran

    ["claude-haiku-5-5", "claude-sonnet-5-5"]

Termasuk

  • Endpoint dan kunci terpadu
  • Pilihan model cepat atau kuat per tugas
  • Log token setiap respons
  • Harga dari katalog live, bukan dipatok di kode

Yang tidak dilakukan

  • Tidak menjamin tagihan lebih rendah
  • Tidak mengalihkan traffic produksi otomatis
  • ID dan harga berubah; selalu baca katalog live
  • Tidak menilai kualitas untuk Anda; perlu sampel Anda
  • Tidak menggantikan billing atau observability

Pertanyaan

Apakah tagihan turun?

Ia menunjukkan tugas mana yang bisa turun tingkat, tetapi penghematan baru nyata setelah membandingkan sampel dan mencatat pemakaian.

Apakah memanggil model otomatis?

Hanya jika Anda menyetujui panggilan uji. Default membaca katalog dan menulis rekomendasi tanpa menyentuh produksi.

Bagaimana tahu model mana lebih murah?

Baca katalog model live dan halaman harga; alur tidak mematok tarif karena berubah.

Bisa mematok penyedia?

Bisa, saat latensi lebih penting daripada harga. Mematok adalah pilihan, bukan strategi retry; tambahkan fallback Anda.

Apa yang dicatat?

Per panggilan: tugas, fitur, model, prompt token, completion token, total, dan latensi. Agregasikan per fitur sebelum menetapkan anggaran.

Berapa biaya satu tinjauan?

Membaca katalog tidak membuat panggilan model. Panggilan uji ditagih sesuai pemakaian; prompt meminta persetujuan sebelum.

Alur kerja terkait

Sesuaikan

Resep yang sama, disesuaikan dengan cara Anda benar-benar mengirim.

Hanya mencatat dulu

Sebelum produksi, catat pemakaian seminggu lalu putuskan downgrade.

Anggaran per fitur

Setel batas bulanan per fitur dan peringatkan atau turunkan saat terlampaui.

Patok penyedia karena latensi

Saat latensi lebih penting daripada harga, patok penyedia dan tambahkan fallback.

Halaman referensi di balik resep ini dan langkah berikutnya.