Código
LlamaIndex
Use a classe OpenAILike do LlamaIndex com a URL base, sua chave e um id de modelo. Defina quatro flags que ela não consegue adivinhar, e o resto do LlamaIndex funciona por cima.
Verificado em 29 de outubro de 2026
Instalar e 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=Trueenvia chat completions. Sem ele, o LlamaIndex chama/v1/completions, que o nokeep não tem.is_function_calling_model=Truepermite que agentes echat_with_toolsenviem ferramentas.context_windowvem por padrão com 3.900 tokens, então o LlamaIndex corta conversas longas e textos recuperados para caber. Defina o contexto real do modelo: 1.000.000 para o DeepSeek, 128.000 para o GLM.temperaturevem por padrão com 0,1, o que deixa a ficção sem graça e repetitiva. Defina a sua.
Chat e 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)Ferramentas e 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 uma chamada com ferramentas e sem loop, use llm.chat_with_tools([tool], user_msg=...) e leia as chamadas com llm.get_tool_calls_from_response(...). Veja Chamadas de ferramentas.
Raciocínio e outros 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 vai em cada requisição exatamente como está. O raciocínio conta no max_tokens, então dê espaço a ele. Veja Raciocínio.
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. - `n` tem de ser 1. Para pedir várias respostas, faça várias chamadas.
- Só chat completions. Não existe
/v1/responsesnem/v1/embeddings; um framework que usa um dos dois por padrão precisa ser apontado para chat completions, e embeddings precisam de outro provedor.
Para um app de RAG, defina Settings.llm = llm e mantenha seu modelo de embeddings onde está: o nokeep roda o modelo de chat, não os embeddings. Com glm-5.3-flash-uncensored, o temperature que o LlamaIndex envia em toda chamada é descartado e aparece em x-nokeep-ignored.
Perguntas
Por que OpenAILike e não OpenAI?
A classe OpenAI do LlamaIndex confere o nome do modelo com a lista dela e recusa nomes que não conhece. OpenAILike aceita qualquer nome e qualquer URL base.
O LlamaIndex indexa meus documentos no nokeep?
Não. A indexação e os embeddings rodam onde você os configurou. Só as chamadas de chat chegam à nokeep, e o nokeep guarda apenas a contagem de tokens de cada uma.