Código
LlamaIndex
Usa la clase OpenAILike de LlamaIndex con la URL base, tu clave y un id de modelo. Define cuatro opciones que no puede adivinar, y el resto de LlamaIndex funciona encima.
Revisado el 29 de octubre de 2026
Instalar y conectar
pip install llama-index-core llama-index-llms-openai-like
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport os
from llama_index.llms.openai_like import OpenAILike
llm = OpenAILike(
model="deepseek-v4.1-flash-uncensored",
api_base="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
is_chat_model=True,
is_function_calling_model=True,
context_window=1000000,
temperature=0.8,
)
print(llm.complete("Name three good names for a tavern.").text)is_chat_model=Trueenvía chat completions. Sin él, LlamaIndex llama a/v1/completions, que nokeep no tiene.is_function_calling_model=Truepermite que los agentes ychat_with_toolsenvíen herramientas.context_windowvale 3,900 tokens por defecto, así que LlamaIndex recorta los chats largos y el texto recuperado para que quepan. Ponlo con el contexto real del modelo: 1,000,000 para DeepSeek, 128,000 para GLM.temperaturevale 0.1 por defecto, lo que hace la ficción plana y repetitiva. Define el tuyo.
Chat y streaming
from llama_index.core.llms import ChatMessage
messages = [
ChatMessage(role="system", content="You are a blunt editor."),
ChatMessage(role="user", content="Cut this opening line to ten words: ..."),
]
print(llm.chat(messages).message.content)
for part in llm.stream_chat(messages):
print(part.delta, end="", flush=True)Herramientas y agentes
import asyncio
from llama_index.core.agent.workflow import FunctionAgent
def get_weather(city: str) -> str:
"""Get the weather in a city."""
return f"18°C and clear in {city}"
agent = FunctionAgent(
tools=[get_weather],
llm=llm,
system_prompt="You answer questions about the weather.",
)
async def main():
print(await agent.run("What's the weather in Lisbon?"))
asyncio.run(main())Para una sola llamada con herramientas y sin bucle, usa llm.chat_with_tools([tool], user_msg=...) y lee las llamadas con llm.get_tool_calls_from_response(...). Consulta Llamadas a herramientas.
Razonamiento y otros campos
import os
from llama_index.llms.openai_like import OpenAILike
thinker = OpenAILike(
model="deepseek-v4.1-flash-uncensored",
api_base="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
is_chat_model=True,
context_window=1000000,
max_tokens=4000,
additional_kwargs={"reasoning_effort": "high", "min_p": 0.05},
)additional_kwargs se envía tal cual en cada solicitud. El razonamiento cuenta dentro de max_tokens, así que déjale espacio. Consulta Razonamiento.
Advertencias
- `reasoning_effort` solo acepta los valores propios del 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 recibe400 invalid_reasoning_effort. Consulta Razonamiento. - GLM elige sus propias herramientas.
glm-5.3-flash-uncensoredacepta solotool_choiceautoonone. Forzar una herramienta (requiredo dar el nombre de una función) recibe400 unsupported_tool_choice. Usa DeepSeek si necesitas forzar una. - Los campos que un modelo no acepta se descartan, no se rechazan. La llamada responde igual, y el encabezado de respuesta
x-nokeep-ignoredindica qué se dejó fuera. GLM solo conservatools,tool_choiceyreasoning_effort, así que sustemperatureyresponse_formatse descartan. Consulta qué campos acepta cada modelo. - `n` debe ser 1. Para pedir varias respuestas, haz varias llamadas.
- Solo chat completions. No existe
/v1/responsesni/v1/embeddings; un framework que use cualquiera de los dos debe apuntar a chat completions, y los embeddings necesitan otro proveedor.
En una app RAG, define Settings.llm = llm y deja tu modelo de embeddings donde está: nokeep ejecuta el modelo de chat, no los embeddings. Con glm-5.3-flash-uncensored, el temperature que LlamaIndex envía en cada llamada se descarta y aparece en x-nokeep-ignored.
Preguntas
¿Por qué OpenAILike y no OpenAI?
La clase OpenAI de LlamaIndex compara el nombre del modelo con su propia lista y rechaza los nombres que no conoce. OpenAILike acepta cualquier nombre y cualquier URL base.
¿LlamaIndex indexa mis documentos en nokeep?
No. La indexación y los embeddings se ejecutan donde los configuraste. Solo las llamadas de chat llegan a nokeep, y nokeep guarda solo los conteos de tokens de cada una.