Código
LangChain
O ChatOpenAI do LangChain funciona com o nokeep como está: dê a URL base, a sua chave e um id de modelo. Em Python e em JavaScript.
Verificado em 29 de outubro de 2026
Instale e conecte
pip install langchain-openai
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="deepseek-v4.1-flash-uncensored",
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
reply = llm.invoke("Name three good names for a tavern.")
print(reply.content)
print(reply.usage_metadata)No JavaScript, a URL base vai dentro de configuration, não no nível de cima. Um baseURL no nível de cima é ignorado, e a chamada vai para o host padrão com a sua chave do nokeep.
Streaming
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="deepseek-v4.1-flash-uncensored",
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
stream_usage=True, # ask for the token counts in the last chunk
)
full = None
for chunk in llm.stream("Tell me a story in three lines."):
print(chunk.content, end="", flush=True)
full = chunk if full is None else full + chunk
print("\n", full.usage_metadata)Em Python, o ChatOpenAI pede o uso em um stream só para o host padrão dele. Defina stream_usage=True para receber as contagens de tokens com uma URL base própria. O cliente JavaScript pede por conta própria. Veja Streaming.
Chamada de ferramentas
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""Get the weather in a city."""
return f"18°C and clear in {city}"
message = llm.bind_tools([get_weather]).invoke("What's the weather in Lisbon?")
for call in message.tool_calls:
print(call["name"], call["args"])Os dois modelos chamam ferramentas. Agentes do LangChain construídos com bind_tools funcionam do mesmo jeito. with_structured_output envia response_format com um schema JSON, que o deepseek-v4.1-flash-uncensored aceita e o GLM descarta. Use o DeepSeek para saída estruturada. Veja Chamadas de ferramentas e Saída em JSON.
Raciocínio e amostradores
import os
from langchain_openai import ChatOpenAI
thinker = ChatOpenAI(
model="deepseek-v4.1-flash-uncensored",
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
reasoning_effort="high",
max_tokens=4000,
extra_body={"min_p": 0.05}, # fields ChatOpenAI has no argument for
)O DeepSeek responde de imediato, a menos que você peça para pensar. Dê espaço a uma chamada com raciocínio: o raciocínio conta no max_tokens.
Armadilhas
- `reasoning_effort` aceita só os valores do próprio modelo.
deepseek-v4.1-flash-uncensoredaceitanone,low,high,max;glm-5.3-flash-uncensoredaceitalow,high. Os valoresminimal,mediumexhighde outros apps rodam no nível mais próximo do modelo (mediumcomohigh,xhighcomomaxonde o modelo tem esse nível); qualquer outro valor recebe400 invalid_reasoning_effort. Veja Raciocínio. - O GLM escolhe as próprias ferramentas.
glm-5.3-flash-uncensoredaceita sótool_choiceautoounone. Forçar uma ferramenta (required, ou citar uma função) recebe400 unsupported_tool_choice. Use o DeepSeek quando precisar forçar uma. - Campos que um modelo não aceita são descartados, não recusados. A chamada ainda responde, e o cabeçalho de resposta
x-nokeep-ignoreddiz o que ficou de fora. O GLM mantém sótools,tool_choiceereasoning_effort, então seustemperatureeresponse_formatsão descartados. Veja quais campos cada modelo aceita. - Partes de conteúdo são só texto e imagens. As partes
image_urlfuncionam nodeepseek-v4.1-flash-uncensored; o GLM lê apenas texto. Partes de áudio e de arquivo (um PDF) recebem400 unsupported_input. - `n` tem de ser 1. Para pedir várias respostas, faça várias chamadas.
- Só chat completions. Não existem
/v1/responsesnem/v1/embeddings; um framework que usa algum deles por padrão precisa ser apontado para chat completions, e embeddings precisam de outro provedor.
ChatOpenAI(use_responses_api=True) e o useResponsesApi: true do JavaScript chamam /v1/responses, que o nokeep não tem. Deixe-os desligados.
Perguntas
Preciso de um pacote do LangChain para usar o nokeep?
Não. O langchain-openai em Python e o @langchain/openai em JavaScript funcionam com qualquer API compatível com a OpenAI. Defina a URL base como https://nokeep.ai/v1.
Qual modelo um agente do LangChain deve usar?
deepseek-v4.1-flash-uncensored para a maioria dos agentes: ele lê imagens, aceita todos os amostradores e pode ser levado a chamar uma ferramenta. O glm-5.3-flash-uncensored custa menos, mas escolhe as próprias ferramentas.