Code
LlamaIndex
Utilisez la classe OpenAILike de LlamaIndex avec l’URL de base, votre clé et un identifiant de modèle. Réglez quatre indicateurs qu’il ne peut pas deviner, et le reste de LlamaIndex fonctionne par-dessus.
Vérifié le 29 octobre 2026
Installer et connecter
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=Trueenvoie des chat completions. Sans lui, LlamaIndex appelle/v1/completions, que nokeep ne propose pas.is_function_calling_model=Truepermet aux agents et àchat_with_toolsd’envoyer des outils.context_windowvaut 3 900 jetons par défaut ; LlamaIndex tronque donc les longs chats et les textes récupérés pour tenir. Réglez-le sur le contexte réel du modèle : 1 000 000 pour DeepSeek, 128 000 pour GLM.temperaturevaut 0,1 par défaut, ce qui rend la fiction plate et répétitive. Réglez la vôtre.
Chat et flux
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)Outils et agents
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())Pour un seul appel avec outils et sans boucle, utilisez llm.chat_with_tools([tool], user_msg=...) et lisez les appels avec llm.get_tool_calls_from_response(...). Voir Appels d’outils.
Réflexion et autres champs
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 part tel quel dans chaque requête. La réflexion compte dans max_tokens, donc laissez-lui de la place. Voir Réflexion.
Pièges
- `reasoning_effort` n’accepte que les valeurs du modèle.
deepseek-v4.1-flash-uncensoredacceptenone,low,high,max;glm-5.3-flash-uncensoredacceptelow,high. Les valeursminimal,mediumetxhighd’autres applications passent au niveau le plus proche du modèle (mediumdevienthigh,xhighdevientmaxquand le modèle le propose) ; toute autre valeur reçoit400 invalid_reasoning_effort. Voir Réflexion. - GLM choisit lui-même ses outils.
glm-5.3-flash-uncensoredn’accepte quetool_choiceautoounone. Forcer un outil (required, ou nommer une fonction) reçoit400 unsupported_tool_choice. Utilisez DeepSeek si vous devez en forcer un. - Les champs qu’un modèle ne peut pas prendre sont écartés, pas refusés. L’appel répond quand même, et l’en-tête de réponse
x-nokeep-ignorednomme ce qui a été laissé de côté. GLM ne garde quetools,tool_choiceetreasoning_effort: sontemperatureet sonresponse_formatsont donc écartés. Voir les champs acceptés par chaque modèle. - `n` doit valoir 1. Pour plusieurs réponses, faites plusieurs appels.
- Chat completions uniquement. Il n’y a ni
/v1/responsesni/v1/embeddings; un framework qui utilise l’un des deux par défaut doit être dirigé vers chat completions, et les embeddings demandent un autre fournisseur.
Pour une application RAG, réglez Settings.llm = llm et gardez votre modèle d’embeddings là où il est : nokeep fait tourner le modèle de chat, pas les embeddings. Avec glm-5.3-flash-uncensored, la temperature que LlamaIndex envoie à chaque appel est écartée et nommée dans x-nokeep-ignored.
Questions
Pourquoi OpenAILike et non OpenAI ?
La classe OpenAI de LlamaIndex vérifie le nom du modèle dans sa propre liste et refuse les noms qu’elle ne connaît pas. OpenAILike accepte n’importe quel nom et n’importe quelle URL de base.
LlamaIndex indexe-t-il mes documents sur nokeep ?
Non. L’indexation et les embeddings tournent là où vous les avez configurés. Seuls les appels de chat atteignent nokeep, et nokeep ne garde que le nombre de jetons de chaque appel.