Código
LangChain
El ChatOpenAI de LangChain funciona con nokeep tal cual: dale la URL base, tu clave y un id de modelo. Python y JavaScript.
Revisado el 29 de octubre de 2026
Instalar y conectar
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)En JavaScript, la URL base va dentro de configuration, no en el nivel superior. Un baseURL en el nivel superior se ignora y la llamada va al host por defecto con tu clave de 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)En Python, ChatOpenAI pide el uso en un stream solo para su host por defecto. Pon stream_usage=True para obtener los conteos de tokens con una URL base propia. El cliente de JavaScript los pide por su cuenta. Mira Streaming.
Llamadas a herramientas
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"])Los dos modelos llaman herramientas. Los agentes de LangChain construidos sobre bind_tools funcionan igual. with_structured_output envía response_format con un esquema JSON, que deepseek-v4.1-flash-uncensored acepta y GLM descarta. Usa DeepSeek para la salida estructurada. Mira Llamadas a herramientas y Salida JSON.
Razonamiento y muestreadores
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
)DeepSeek responde de inmediato, a menos que le pidas que piense. Deja espacio a una llamada con razonamiento: el razonamiento cuenta para max_tokens.
Trampas
- `reasoning_effort` acepta solo los valores del propio modelo.
deepseek-v4.1-flash-uncensoredaceptanone,low,high,max;glm-5.3-flash-uncensoredaceptalow,high. Los valoresminimal,mediumyxhighde otras apps se ejecutan en el nivel más cercano del modelo (mediumcomohigh,xhighcomomaxdonde el modelo lo tenga); cualquier otro valor da400 invalid_reasoning_effort. Mira Razonamiento. - GLM elige sus propias herramientas.
glm-5.3-flash-uncensoredacepta solotool_choiceautoonone. Forzar una herramienta (required, o nombrar una función) da400 unsupported_tool_choice. Usa DeepSeek cuando necesites forzar una. - Los campos que un modelo no acepta se descartan, no se rechazan. La llamada igual responde, y el encabezado de respuesta
x-nokeep-ignorednombra lo que se dejó fuera. GLM conserva solotools,tool_choiceyreasoning_effort, así que sutemperaturey suresponse_formatse descartan. Mira qué campos acepta cada modelo. - Las partes del contenido son solo texto e imágenes. Las partes
image_urlfuncionan endeepseek-v4.1-flash-uncensored; GLM lee solo texto. Las partes de audio y de archivo (un PDF) dan400 unsupported_input. - `n` debe ser 1. Para pedir varias respuestas, haz varias llamadas.
- Solo chat completions. No hay
/v1/responsesni/v1/embeddings; un framework que use cualquiera de los dos por defecto debe apuntar a chat completions, y los embeddings necesitan otro proveedor.
ChatOpenAI(use_responses_api=True) y useResponsesApi: true en JavaScript llaman a /v1/responses, que nokeep no tiene. Déjalos desactivados.
Preguntas
¿Necesito un paquete de LangChain para nokeep?
No. langchain-openai en Python y @langchain/openai en JavaScript funcionan con cualquier API compatible con OpenAI. Pon la URL base en https://nokeep.ai/v1.
¿Qué modelo debe usar un agente de LangChain?
deepseek-v4.1-flash-uncensored para la mayoría de los agentes: lee imágenes, acepta todos los muestreadores y se le puede pedir que llame a una herramienta. glm-5.3-flash-uncensored cuesta menos, pero elige sus propias herramientas.