Quay lại blog
Hướng dẫn·23 tháng 5, 2026·Đọc 6 phút

Di chuyển từ OpenAI sang Kunavo trong 10 phút — Python, Node, LangChain, Vercel AI SDK

Bốn cách tích hợp OpenAI, thay đổi một dòng cần thiết cho từng cách để bắt đầu chạy qua Kunavo, cùng một bài kiểm tra nhanh có chi phí dưới một xu.

Nếu ứng dụng của bạn đã giao tiếp với API OpenAI, chuyển sang Kunavo mất khoảng mười phút — phần lớn thời gian là đăng ký. Hướng dẫn này trình bày bốn kiểu tích hợp phổ biến nhất và thay đổi một dòng cần thiết cho từng kiểu.

Bước 0 — Lấy khóa (2 phút)

  1. Đăng ký tại kunavo.com/app/signup. Nạp từ $10, trả theo mức dùng và số dư không bao giờ hết hạn.
  2. Truy cập /app/keys và tạo khóa. Khóa bắt đầu bằng sk-kn-.
  3. Đặt biến môi trường: export KUNAVO_API_KEY=sk-kn-....

Bước 1 — Chuyển SDK (1 phút)

Python (gói openai)

migrate.py
# Before — pointing at OpenAI directly
import os

from openai import OpenAI
client = OpenAI(
    api_key=os.environ["OPENAI_API_KEY"],
)

# After — pointing at Kunavo. Everything else stays the same.
import os

from openai import OpenAI
client = OpenAI(
    api_key=os.environ["KUNAVO_API_KEY"],
    base_url="https://api.kunavo.com/v1",
)

Node / TypeScript

migrate.mjs
// Before
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

// After
import OpenAI from "openai";
const client = new OpenAI({
  apiKey: process.env.KUNAVO_API_KEY,
  baseURL: "https://api.kunavo.com/v1",
});

LangChain

LangChain sử dụng cùng OpenAI client bên trong, nên thay đổi là giống hệt. ID mô hình giờ là Kunavo slug — xem /models để biết danh sách hiện tại (thử claude-sonnet-4-6, gpt-5-6-terra, claude-opus-4-7).

langchain_setup.py
import os

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="claude-sonnet-4-6",          # switched the model
    api_key=os.environ["KUNAVO_API_KEY"],
    base_url="https://api.kunavo.com/v1",
)

Vercel AI SDK

@ai-sdk/openai mặc định đọc base URL và API key từ biến môi trường. Đặt chúng là xong — mọi helper của framework (streamText, generateObject, retry, định tuyến công cụ) đều hoạt động không thay đổi.

vercel_ai.mjs
import { openai } from "@ai-sdk/openai";

// @ai-sdk/openai reads OPENAI_BASE_URL automatically
process.env.OPENAI_BASE_URL = "https://api.kunavo.com/v1";
process.env.OPENAI_API_KEY = process.env.KUNAVO_API_KEY;

const model = openai("claude-sonnet-4-6");
// then use streamText / generateText / streamObject as before

Anthropic SDK (nếu bạn đã dùng Claude)

Kunavo cung cấp Messages API gốc của Anthropic tại /v1/messages cũng như định dạng OpenAI — vì vậy bạn không cần đổi SDK.

anthropic_sdk.py
import os

from anthropic import Anthropic

# Before — Anthropic SDK against api.anthropic.com
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

# After — same SDK, against Kunavo. Caching, thinking, tools all pass through.
client = Anthropic(
    api_key=os.environ["KUNAVO_API_KEY"],
    base_url="https://api.kunavo.com",   # SDK appends /v1/messages
)

Bước 2 — Smoke-test ví (1 phút)

Trước khi chạm vào mã production, hãy chạy một bài kiểm tra rẻ với claude-haiku-4-5. Nếu trả về thành công, khóa của bạn hoạt động, thanh toán hoạt động và lớp định tuyến khỏe mạnh.

smoke_test.py
# Cheap, deterministic-ish smoke test for migration validation.
resp = client.chat.completions.create(
    model="claude-haiku-4-5",            # the cheapest Claude
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=8,
    temperature=0,
)
assert resp.choices[0].message.content, "empty response"
print("ok — Kunavo wallet works, total cost ~$0.0001")

Bước 3 — Chuyển lưu lượng (5 phút)

Mẫu an toàn: hai biến môi trường trong ứng dụng — AI_BASE_URL và AI_API_KEY — được chọn theo từng môi trường. Production vẫn dùng OpenAI; staging chuyển sang Kunavo. Sau 24 giờ, chuyển production.

Nếu muốn biết tác động chi phí trước khi chuyển, dashboard Kunavo hiển thị chi phí từng lần gọi so với mức giá chính thức của upstream — dễ dàng tính khoản tiết kiệm hàng tháng dự kiến trên các prompt thực tế.

Những gì giữ nguyên

  • SDK và codebase của bạn.
  • Streaming, gọi hàm, sử dụng công cụ, vision, đầu ra có cấu trúc.
  • Schema request và response chính xác của OpenAI.
  • Dạng lỗi (error.message / error.type / error.code).

Những gì thay đổi theo hướng tốt hơn

  • Bảng giá. Giá và các chương trình giảm giá hiện có khác nhau tùy theo mô hình — xem mức giá hiện tại tại /pricing.
  • Modality. Cùng một SDK truy cập Claude (claude-opus-4-7), GPT (gpt-5-6-sol), GPT-Image-2, Nano Banana, Veo 3, Suno — xem /models.
  • Thanh toán. Ví Stripe, tính bằng USD. Thẻ ở mọi nơi; Apple Pay, Google Pay và Link ở mọi nơi ngoại trừ Ấn Độ; cùng các phương thức nội địa theo quốc gia (Alipay và WeChat Pay tại Trung Quốc, Cash App Pay, Klarna và ACH tại Hoa Kỳ, UPI tại Ấn Độ, KakaoPay tại Hàn Quốc…) — danh sách đầy đủ có tại /docs/billing.
  • Failover. Failover nóng đa nhà cung cấp với định tuyến lại tự động trong cùng request khi upstream chập chờn.

Ghi chú cho các trường hợp không thuận lợi

  • Các endpoint đặc thù của OpenAI hiện chúng tôi chưa hỗ trợ: /v1/responses (dùng /v1/chat/completions), /v1/assistants (lưu trạng thái ở phía bạn; chúng tôi là gateway stateless), /v1/realtime (đã lên kế hoạch).
  • Một số tính năng riêng của Claude — cache_control, thinking mở rộng — hoạt động tốt nhất qua endpoint /v1/messages gốc, không phải định dạng OpenAI.
  • Bộ nhớ đệm prompt không nằm trong số đó: với định dạng OpenAI, Kunavo tự đặt các điểm ngắt bộ nhớ đệm của Claude trên prompt dài, và cache_control mà bạn đặt trên một tin nhắn hoặc một định nghĩa công cụ sẽ được chuyển đến Claude.

Bị mắc kẹt? contact@kunavo.com — nhân viên sẽ trả lời trong một ngày làm việc. Nếu bạn đang thực hiện một đợt di chuyển nghiêm túc, chúng tôi sẽ tham gia cuộc gọi.