Code
LlamaIndex
Nutzen Sie die Klasse OpenAILike von LlamaIndex mit der Basis-URL, Ihrem Schlüssel und einer Modell-ID. Setzen Sie vier Flags, die sie nicht erraten kann, dann läuft der Rest von LlamaIndex darüber.
Geprüft am 29. Oktober 2026
Installieren und verbinden
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=Trueschickt Chat-Completions. Ohne dieses Flag ruft LlamaIndex/v1/completionsauf, das nokeep nicht hat.is_function_calling_model=Truelässt Agenten undchat_with_toolsTools schicken.context_windowist standardmäßig 3.900 Token, daher kürzt LlamaIndex lange Chats und abgerufenen Text, bis sie passen. Setzen Sie den echten Kontext des Modells: 1.000.000 für DeepSeek, 128.000 für GLM.temperatureist standardmäßig 0,1, was Fiktion flach und repetitiv macht. Setzen Sie Ihren eigenen Wert.
Chat und 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)Tools und Agenten
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())Für einen einzelnen Aufruf mit Tools und ohne Schleife verwenden Sie llm.chat_with_tools([tool], user_msg=...) und lesen die Aufrufe mit llm.get_tool_calls_from_response(...). Siehe Tool-Aufrufe.
Denken und andere Felder
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 geht unverändert in jede Anfrage. Denken zählt zu max_tokens, also geben Sie ihm Raum. Siehe Denken.
Stolperfallen
- `reasoning_effort` nimmt nur die eigenen Werte des Modells.
deepseek-v4.1-flash-uncensorednimmtnone,low,high,max;glm-5.3-flash-uncensorednimmtlow,high. Die Werteminimal,mediumundxhighanderer Apps werden auf die nächstliegende Stufe des Modells abgebildet (mediumalshigh,xhighalsmax, wo das Modell sie hat); jeder andere Wert ergibt400 invalid_reasoning_effort. Siehe Denken. - GLM wählt seine Tools selbst.
glm-5.3-flash-uncensorednimmttool_choicenur alsautoodernone. Ein erzwungenes Tool (requiredoder ein benannter Funktionsname) ergibt400 unsupported_tool_choice. Nehmen Sie DeepSeek, wenn Sie eines erzwingen müssen. - Felder, die ein Modell nicht annimmt, werden verworfen, nicht abgelehnt. Der Aufruf wird trotzdem beantwortet, und der Antwort-Header
x-nokeep-ignorednennt, was weggelassen wurde. GLM behält nurtools,tool_choiceundreasoning_effort; daher werden seinetemperatureundresponse_formatverworfen. Siehe welche Felder jedes Modell annimmt. - `n` muss 1 sein. Fordern Sie mehrere Antworten mit mehreren Aufrufen an.
- Nur Chat-Completions. Es gibt kein
/v1/responsesund kein/v1/embeddings; ein Framework, das standardmäßig eines davon nutzt, muss auf Chat-Completions umgestellt werden, und Embeddings brauchen einen anderen Anbieter.
Für eine RAG-App setzen Sie Settings.llm = llm und lassen Ihr Embedding-Modell, wo es ist: nokeep betreibt das Chat-Modell, nicht die Embeddings. Bei glm-5.3-flash-uncensored wird die temperature, die LlamaIndex bei jedem Aufruf schickt, verworfen und im Header x-nokeep-ignored genannt.
Fragen
Warum OpenAILike und nicht OpenAI?
Die Klasse OpenAI von LlamaIndex prüft den Modellnamen gegen ihre eigene Liste und lehnt Namen ab, die sie nicht kennt. OpenAILike nimmt jeden Namen und jede Basis-URL.
Indiziert LlamaIndex meine Dokumente bei nokeep?
Nein. Indexierung und Embeddings laufen dort, wo Sie sie einrichten. Nur die Chat-Aufrufe erreichen nokeep, und nokeep speichert nur die Token-Zahlen zu jedem davon.