PT ▾
Obter chave de API

URL da API Kimi Code: Configuração da URL base para clientes OpenAI OpenAI

A URL da API Kimi Code que você precisa para este serviço é https://api.kimicode.cc/v1. Defina-a em qualquer cliente OpenAI como a URL base, adicione sua chave e use o ID do modelo uncensored.

Atualizado

Um cabo conectando um terminal cliente a um servidor de API, representando uma configuração de URL base

A URL e o que cada parte significa

Se você está procurando a kimi code api url, talvez esteja procurando o endereço do serviço próprio do Kimi. Para isso, use a documentação do fornecedor, já que não posso garantir. Este site oferece algo diferente: uma API compatível com OpenAI hospedada na frente de um único modelo de pesos abertos, operada por um provedor independente. Seu endereço é:

https://api.kimicode.cc/v1

Essa string é a URL base. É a parte compartilhada por todas as requisições. O SDK adiciona o restante. Quando você chama chat.completions.create, a biblioteca OpenAI envia um POST para https://api.kimicode.cc/v1/chat/completions. A lista de modelos está em https://api.kimicode.cc/v1/models e usa GET.

Esses dois são os únicos métodos que esta API oferece: POST /v1/chat/completions e GET /v1/models. Se você esperava endpoints de imagem, áudio ou embedding, eles não existem aqui. É uma API de texto.

Três configurações importam, e nada mais precisa ser alterado no seu código OpenAI existente: a URL base, a chave de API e o ID do modelo uncensored.

Por que a URL base é a única configuração

Clientes estilo OpenAI são construídos em torno de uma ideia: o formato da requisição é fixo e o host é uma configuração. A biblioteca tem um host padrão que aponta para o fornecedor original. Quando você o substitui por outra URL base, o mesmo corpo de requisição vai para outro lugar. Nada nos seus prompts, arrays de mensagens ou análise de resposta precisa mudar.

Isso também explica por que a migração de outro provedor compatível com OpenAI geralmente envolve três edições: a URL base, a chave e o nome do modelo. Os campos na resposta, como choices, message, finish_reason e usage, têm os mesmos nomes, então o código que os lê continua funcionando.

Isso também explica os erros estranhos que as pessoas encontram. Se uma ferramenta pedir uma "URL do servidor" e você colar apenas o host, o caminho faltará. Se uma ferramenta pedir um "endpoint completo" e você colar a URL base, a requisição irá para o lugar errado. Quando uma tela de configuração não está clara, tente a URL base primeiro e leia o código de status retornado. O quickstart na documentação percorre a mesma migração com mais um exemplo.

Variáveis de ambiente para ferramentas que você não pode editar

Muitas ferramentas de linha de comando e frameworks criam um cliente OpenAI sem permitir que você toque no construtor. Eles geralmente leem as variáveis de ambiente padrão, então defini-las é suficiente:

export OPENAI_BASE_URL="https://api.kimicode.cc/v1"
export OPENAI_API_KEY="YOUR_KEY"

Algumas ferramentas mais antigas procuram por OPENAI_API_BASE em vez disso, então se uma ignorar o primeiro nome, tente o segundo. Após defini-las, inicie a ferramenta na mesma sessão de shell, já que variáveis definidas em outra janela de terminal não são compartilhadas.

A ferramenta ainda precisará de um nome de modelo. Se ela codificar um modelo hospedado, procure uma flag ou linha de configuração que o defina e use uncensored. Se não puder ser alterada, a ferramenta não é compatível e um pequeno script como os acima é um caminho melhor.

Obtenha uma chave primeiro

As requisições são autenticadas com um cabeçalho no formato Authorization: Bearer YOUR_KEY. Cada SDK oficial constrói esse cabeçalho para você a partir do argumento api_key. Você pode criar a chave após fazer login com Google ou com um e-mail e senha.

Novas contas podem reivindicar $0,50 de crédito de teste com um clique na página da chave de API. Não precisa de cartão e dura 7 dias. Isso é suficiente para executar todos os exemplos abaixo várias vezes. Chaves de teste permitem 2 requisições simultâneas e 60 requisições por minuto, então execute os exemplos um de cada vez.

Armazene a chave em uma variável de ambiente em vez de em arquivos de código. Uma chave confirmada em um repositório público será encontrada e usada por outra pessoa em poucas horas, e o crédito que ela contém é seu.

Primeira requisição em curl

Curl é a maneira mais rápida de provar que a URL funciona, porque remove todas as bibliotecas da equação. Se essa chamada tiver sucesso, qualquer problema que você encontrar depois está na configuração do seu cliente.

export KIMICODE_KEY="YOUR_KEY"

curl https://api.kimicode.cc/v1/models   -H "Authorization: Bearer $KIMICODE_KEY"

curl https://api.kimicode.cc/v1/chat/completions   -H "Authorization: Bearer $KIMICODE_KEY"   -H "Content-Type: application/json"   -d '{
    "model": "uncensored",
    "messages": [
      {"role": "user", "content": "Say hello in five words."}
    ]
  }'

A primeira chamada retorna a lista de modelos, que deve incluir uncensored. A segunda retorna um objeto padrão de conclusão de chat. Veja os cabeçalhos de resposta com curl -i e você verá X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests e X-RateLimit-Limit-Concurrency. Mantenha o ID da requisição se entrar em contato com suporte sobre uma chamada específica.

Python com o SDK OpenAI

Instale a biblioteca com pip install openai, depois altere dois argumentos no construtor do cliente.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.kimicode.cc/v1",
    api_key=os.environ["KIMICODE_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a base URL is in two sentences."},
    ],
    temperature=0.7,
)
print(resp.choices[0].message.content)
print(resp.usage)

Parâmetros como temperature, top_p, stop, seed e as penalidades de frequência e presença são repassados ao modelo. O valor max_tokens é opcional. Sem ele, a conclusão pode usar o que restar da janela de 100.000 tokens, que é o prompt e a conclusão combinados.

O SDK também lê duas variáveis de ambiente se você não passar argumentos: OPENAI_BASE_URL e OPENAI_API_KEY. Isso é útil para ferramentas que você não pode editar. Defina ambas, inicie a ferramenta e ela falará com esta API.

Node, streaming e modo JSON

A configuração do Node espelha Python. Instale com npm install openai.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.kimicode.cc/v1",
  apiKey: process.env.KIMICODE_KEY,
});

// Streaming over SSE
const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "Write a four-line poem about routers." }],
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

// JSON mode
const json = await client.chat.completions.create({
  model: "uncensored",
  response_format: { type: "json_object" },
  messages: [
    { role: "system", content: "Reply with a JSON object only." },
    { role: "user", content: "Give me keys name and port for a local dev server." },
  ],
});
console.log(JSON.parse(json.choices[0].message.content));

O streaming usa eventos enviados pelo servidor e o uso é relatado no final do fluxo. Uma solicitação em streaming mantém seu slot de concorrência até que o fluxo termine, então um cliente que abre um fluxo e nunca o lê bloqueará um slot. Com o modo JSON, ainda diga ao modelo no prompt para responder em JSON. A flag restringe o formato de saída, mas uma instrução clara fornece nomes de campo melhores.

Chamada de ferramentas

As ferramentas usam o formato padrão do OpenAI: uma lista tools, um tool_choice opcional e os resultados das ferramentas enviados de volta como mensagens com role: "tool". Ao fazer streaming, os tool_calls chegam em partes nos chunks.

import json, os
from openai import OpenAI

client = OpenAI(base_url="https://api.kimicode.cc/v1", api_key=os.environ["KIMICODE_KEY"])

tools = [{
    "type": "function",
    "function": {
        "name": "get_port",
        "description": "Look up the port of a named local service",
        "parameters": {
            "type": "object",
            "properties": {"service": {"type": "string"}},
            "required": ["service"],
        },
    },
}]

messages = [{"role": "user", "content": "Which port does the api service use?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]

messages.append(first.choices[0].message)
messages.append({
    "role": "tool",
    "tool_call_id": call.id,
    "content": json.dumps({"service": "api", "port": 8080}),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)

Trate os argumentos do modelo como entrada não confiável. Valide-os antes de executar qualquer coisa. O modelo pode pular uma chamada de função ou chamá-la com um campo errado, como qualquer modelo pode, então mantenha um caminho de fallback no seu loop.

Quando a URL falha

A maioria das falhas se enquadra em uma lista curta.

  • 404 Not Found. O caminho está errado. Causas comuns: a URL base foi definida para https://api.kimicode.cc sem /v1, ou para https://api.kimicode.cc/v1/chat/completions, então o cliente anexa o caminho duas vezes. Use exatamente a URL base acima.
  • 401 Unauthorized. A chave está ausente, tem um espaço ou nova linha estranhos, ou o cabeçalho não é um token Bearer. Imprima o comprimento da variável para verificar.
  • 429 com código rate_limited. Você passou do limite por minuto: 300 requisições para uma chave completa, 60 para uma chave de teste.
  • 429 com código concurrency. Muitas requisições ao mesmo tempo: 8 para uma chave completa, 2 para uma chave de teste.
  • 429 com um cabeçalho Retry-After: 5. Sobrecarga temporária. Aguarde cinco segundos e tente novamente.
  • Requisição muito grande. O limite do corpo é 8 MB, e o prompt mais a conclusão devem caber em 100.000 tokens.

Um loop de retry que respeita o Retry-After e aplica backoff nos outros dois códigos lida com quase tudo isso. O custo por chamada é baixo; a página de preços tem as taxas por token, e o guia de início rápido mostra os passos de migração de outro provedor estilo OpenAI.

Retentativas e hábitos de produção

Depois que a primeira chamada funcionar, adicione um adaptador de retry antes de enviar para produção. Respeite o cabeçalho Retry-After quando presente e aplique backoff com um atraso aleatório curto caso contrário.

import os, time, random
from openai import OpenAI, RateLimitError

client = OpenAI(base_url="https://api.kimicode.cc/v1", api_key=os.environ["KIMICODE_KEY"])

def ask(messages, tries=5):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError as err:
            retry_after = 5
            if getattr(err, "response", None) is not None:
                retry_after = int(err.response.headers.get("retry-after", 5))
            time.sleep(retry_after + random.random())
    raise RuntimeError("still rate limited after retries")

Limite sua própria concorrência para corresponder à sua chave: um pool de threads de 8 para uma chave completa, 2 para uma chave de teste. Isso impede o erro concurrency antes que ele comece, e também mantém você dentro do limite de 300 requisições por minuto quando cada chamada leva mais de alguns segundos.

Finalmente, lembre-se de que você paga por token. Registre o objeto usage para cada chamada e observe o cabeçalho X-Balance-USD. A $0,15 por 1M de tokens de entrada e $0,50 por 1M de tokens de saída, uma rodada típica de chat custa uma fração de centavo, mas loops e históricos longos somam, e o log diz onde.

Perguntas e respostas

Qual é a URL base para esta API?

https://api.kimicode.cc/v1. Defina-o como a URL base em qualquer cliente compatível com OpenAI e deixe o caminho após ele por conta da biblioteca.

Qual ID de modelo eu envio?

Envie uncensored como valor do modelo. Você pode confirmá-lo chamando GET /v1/models com sua chave.

Posso usar o endpoint oficial do Kimi com minha chave daqui?

Não. Este é um serviço separado com suas próprias chaves e um único modelo de pesos abertos, não a API oficial de nenhum fornecedor. As chaves não são transferíveis em nenhuma das direções.

Por que recebo 404 nas completions de chat?

A URL base provavelmente não possui /v1 ou já inclui /chat/completions. Use https://api.kimicode.cc/v1 e nada mais.

Sua chave está a um clique de distância

Crie uma conta, copie a chave e altere a URL base. Essa é toda a configuração.

Obter chave de API