Ir al contenido
Toda la documentación

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

Shell
pip install llama-index-core llama-index-llms-openai-like
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
llm.py
import 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=True envía chat completions. Sin él, LlamaIndex llama a /v1/completions, que nokeep no tiene.
  • is_function_calling_model=True permite que los agentes y chat_with_tools envíen herramientas.
  • context_window vale 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.
  • temperature vale 0.1 por defecto, lo que hace la ficción plana y repetitiva. Define el tuyo.

Chat y streaming

Python
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

Python
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

Python
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-uncensored acepta none, low, high, max; glm-5.3-flash-uncensored acepta low, high. Los valores minimal, medium y xhigh de otras apps se ejecutan en el nivel más cercano del modelo (medium como high, xhigh como max donde el modelo lo tenga); cualquier otro valor recibe 400 invalid_reasoning_effort. Consulta Razonamiento.
  • GLM elige sus propias herramientas. glm-5.3-flash-uncensored acepta solo tool_choice auto o none. Forzar una herramienta (required o dar el nombre de una función) recibe 400 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-ignored indica qué se dejó fuera. GLM solo conserva tools, tool_choice y reasoning_effort, así que sus temperature y response_format se descartan. Consulta qué campos acepta cada modelo.
  • `n` debe ser 1. Para pedir varias respuestas, haz varias llamadas.
  • Solo chat completions. No existe /v1/responses ni /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.