İçeriğe atla
Tüm belgeler

Kod

Vercel AI SDK

@ai-sdk/openai-compatible paketinden createOpenAICompatible ile bir nokeep sağlayıcısı oluştur. Sonra generateText, streamText ve araçlar, AI SDK’nın herhangi bir modelinde olduğu gibi çalışır.

29 Ekim 2026 tarihinde kontrol edildi

Kurulum ve sağlayıcıyı ayarlama

Shell
npm install ai @ai-sdk/openai-compatible zod
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
nokeep.js
import { createOpenAICompatible } from "@ai-sdk/openai-compatible"

export const nokeep = createOpenAICompatible({
  name: "nokeep",
  apiKey: process.env.NOKEEP_API_KEY,
  baseURL: "https://nokeep.ai/v1",
  includeUsage: true, // token counts on streamed replies too
})

nokeep("<model id>") sana bir model verir. Kimlikler deepseek-v4.1-flash-uncensored ve glm-5.3-flash-uncensored: bunları Modeller sayfasında karşılaştır ya da GET /v1/models üzerinden oku. includeUsage: true, akışlı yanıtlarda da token sayılarını ister; bu olmadan streamText hiçbir sayı bildirmez.

generateText

JavaScript
import { generateText } from "ai"
import { nokeep } from "./nokeep.js"

const { text, usage } = await generateText({
  model: nokeep("deepseek-v4.1-flash-uncensored"),
  system: "You are a blunt editor.",
  prompt: "Cut this opening line to ten words: ...",
})
console.log(text)
console.log(usage.inputTokens, usage.outputTokens)

streamText

JavaScript
import { streamText } from "ai"
import { nokeep } from "./nokeep.js"

const result = streamText({
  model: nokeep("deepseek-v4.1-flash-uncensored"),
  prompt: "Tell me a story in three lines.",
})
for await (const text of result.textStream) process.stdout.write(text)

// With includeUsage on, the counts arrive once the stream ends.
console.log(await result.usage)

Bir Next.js rota işleyicisinde, useChat için result.toUIMessageStreamResponse(), düz metin için result.toTextStreamResponse() döndür. Yanıtı isteği iptal ederek durdur (abortSignal); durdurmadan önce yazılanın bedelini ödersin. Bkz. Akış.

Araç çağırma

JavaScript
import { generateText, stepCountIs, tool } from "ai"
import { z } from "zod"
import { nokeep } from "./nokeep.js"

const { text } = await generateText({
  model: nokeep("deepseek-v4.1-flash-uncensored"),
  tools: {
    weather: tool({
      description: "Get the weather in a city",
      inputSchema: z.object({ city: z.string() }),
      execute: async ({ city }) => ({ city, celsius: 18 }),
    }),
  },
  stopWhen: stepCountIs(5), // let the model call the tool, read the result and answer
  prompt: "What's the weather in Lisbon?",
})
console.log(text)

İki model de araç çağırır. glm-5.3-flash-uncensored kendi seçimini yapar: toolChoice: "required" ya da adlandırılmış bir araç 400 döndürür; bu yüzden bir aracın mutlaka çalışması gerektiğinde DeepSeek’i kullan. Bkz. Araç çağrıları.

Akıl yürütme çabası

JavaScript
import { generateText } from "ai"
import { nokeep } from "./nokeep.js"

const { text, reasoningText } = await generateText({
  model: nokeep("deepseek-v4.1-flash-uncensored"),
  prompt: "Plan a three-act heist story in five bullet points.",
  maxOutputTokens: 4000, // thinking counts toward the limit
  providerOptions: { nokeep: { reasoningEffort: "high" } },
})
console.log(reasoningText) // the thinking, apart from the answer
console.log(text)

providerOptions altındaki anahtar, sağlayıcıya verdiğin name’dir. reasoning_effort olarak, olduğu gibi gönderilir. DeepSeek V4.1 Flash Uncensored, düşünmesini istemediğin sürece hemen yanıtlar: none, low, high, max değerlerini alır. AI SDK’nın kendi reasoning: "high" seçeneği aynı alanı gönderir. Bkz. Düşünme.

Görseller (DeepSeek)

JavaScript
import { readFile } from "node:fs/promises"
import { generateText } from "ai"
import { nokeep } from "./nokeep.js"

const { text } = await generateText({
  model: nokeep("deepseek-v4.1-flash-uncensored"),
  messages: [{
    role: "user",
    content: [
      { type: "text", text: "What is in this picture?" },
      { type: "file", mediaType: "image/jpeg", data: await readFile("photo.jpg") },
    ],
  }],
})
console.log(text)
  • deepseek-v4.1-flash-uncensored istek başına en fazla 10 görseli okur. glm-5.3-flash-uncensored yalnızca metin okur ve 400 unsupported_input döndürür.
  • AI SDK her görseli base64 olarak isteğin içine koyar. data olarak bir URL verirsen, önce dosyayı indirir. Bir istek en fazla 12 MB olabilir, bu yüzden büyük fotoğrafları küçült.
  • Görseller image/* medya türüne sahip file parçalarıdır. Eski image parçası hâlâ çalışır ama kullanımdan kaldırılmıştır.
  • PDF ya da ses gibi diğer dosyalar 400 unsupported_input ile reddedilir. Bkz. Görseller.

Dikkat edilecekler

  • `reasoning_effort` yalnızca modelin kendi değerlerini kabul eder. deepseek-v4.1-flash-uncensored none, low, high, max alır; glm-5.3-flash-uncensored low, high alır. Başka uygulamaların minimal, medium ve xhigh değerleri modelin en yakın düzeyinde çalışır (medium yerine high, xhigh yerine modelde varsa max); başka her değer 400 invalid_reasoning_effort döndürür. Bkz. Düşünme.
  • Bir modelin alamadığı alanlar reddedilmez, düşürülür. Çağrı yine yanıtlanır ve x-nokeep-ignored yanıt üst bilgisi hangi alanların çıkarıldığını söyler. GLM yalnızca tools, tool_choice ve reasoning_effort alanlarını tutar; bu yüzden temperature ve response_format düşürülür. Bkz. hangi modelin hangi alanları aldığı.
  • `n` 1 olmalıdır. Birden çok yanıt için birden çok çağrı yap.
  • `@ai-sdk/openai-compatible` kullan, `@ai-sdk/openai` değil. OpenAI sağlayıcısı varsayılan olarak /v1/responses adresini çağırır; nokeep’te bu yoktur.

Sorular

nokeep için AI SDK sağlayıcı paketi var mı?

Gerekmiyor. @ai-sdk/openai-compatible, OpenAI uyumlu API’ler için AI SDK’nın kendi paketidir ve bu sayfadaki her özellik onunla çalışır.

streamText kullanım bilgisi bildirir mi?

Evet, sağlayıcı includeUsage: true ile oluşturulduğunda. await result.usage çağrının token sayılarını verir.

Ücret ödemeden deneyebilir miyim?

Evet. sk-nokeep-test anahtarını kullan: her çağrı tek sabit bir satırla yanıtlanır ve ücret almaz, böylece önce uygulamanı bağlayabilirsin. Ücretsiz test anahtarı.