Zum Inhalt springen
Gesamte Doku

Code

LangChain

LangChains ChatOpenAI funktioniert mit nokeep so, wie es ist: Geben Sie die Basis-URL, Ihren Schlüssel und eine Modell-ID an. Python und JavaScript.

Geprüft am 29. Oktober 2026

Installieren und verbinden

pip install langchain-openai
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="deepseek-v4.1-flash-uncensored",
    base_url="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
)

reply = llm.invoke("Name three good names for a tavern.")
print(reply.content)
print(reply.usage_metadata)

In JavaScript gehört die Basis-URL in configuration, nicht auf die oberste Ebene. Eine baseURL auf oberster Ebene wird ignoriert, und der Aufruf geht mit Ihrem nokeep-Schlüssel an den Standardhost.

Streamen

import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="deepseek-v4.1-flash-uncensored",
    base_url="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    stream_usage=True,  # ask for the token counts in the last chunk
)

full = None
for chunk in llm.stream("Tell me a story in three lines."):
    print(chunk.content, end="", flush=True)
    full = chunk if full is None else full + chunk
print("\n", full.usage_metadata)

In Python fragt ChatOpenAI die Nutzung bei einem Stream nur für seinen Standardhost ab. Setzen Sie stream_usage=True, um Token-Zählungen mit einer eigenen Basis-URL zu bekommen. Der JavaScript-Client fragt sie selbst ab. Siehe Streaming.

Tool-Aufrufe

from langchain_core.tools import tool

@tool
def get_weather(city: str) -> str:
    """Get the weather in a city."""
    return f"18°C and clear in {city}"

message = llm.bind_tools([get_weather]).invoke("What's the weather in Lisbon?")
for call in message.tool_calls:
    print(call["name"], call["args"])

Beide Modelle rufen Tools auf. LangChain-Agenten, die auf bind_tools aufbauen, funktionieren genauso. with_structured_output sendet response_format mit einem JSON-Schema, das deepseek-v4.1-flash-uncensored annimmt und GLM verwirft. Nutzen Sie DeepSeek für strukturierte Ausgabe. Siehe Tool-Aufrufe und JSON-Ausgabe.

Denken und Sampler

import os
from langchain_openai import ChatOpenAI

thinker = ChatOpenAI(
    model="deepseek-v4.1-flash-uncensored",
    base_url="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    reasoning_effort="high",
    max_tokens=4000,
    extra_body={"min_p": 0.05},  # fields ChatOpenAI has no argument for
)

DeepSeek antwortet sofort, außer Sie bitten es zu denken. Geben Sie einem Denk-Aufruf Raum: Denken zählt zu max_tokens.

Stolperfallen

  • `reasoning_effort` akzeptiert nur die eigenen Werte des Modells. deepseek-v4.1-flash-uncensored akzeptiert none, low, high, max; glm-5.3-flash-uncensored akzeptiert low, high. Die Werte minimal, medium und xhigh anderer Apps werden auf die nächstliegende Stufe des Modells abgebildet (medium als high, xhigh als max, wo das Modell sie hat); jeder andere Wert ergibt 400 invalid_reasoning_effort. Siehe Denken.
  • GLM wählt seine Tools selbst. glm-5.3-flash-uncensored akzeptiert tool_choice nur als auto oder none. Ein erzwungenes Tool (required oder ein benannter Funktionsname) ergibt 400 unsupported_tool_choice. Nutzen Sie DeepSeek, wenn Sie eins erzwingen müssen.
  • Felder, die ein Modell nicht akzeptiert, werden verworfen, nicht abgelehnt. Der Aufruf antwortet trotzdem, und der Antwort-Header x-nokeep-ignored nennt, was weggelassen wurde. GLM behält nur tools, tool_choice und reasoning_effort, daher werden seine temperature und response_format verworfen. Siehe welche Felder jedes Modell annimmt.
  • Inhaltsteile sind nur Text und Bilder. image_url-Teile funktionieren mit deepseek-v4.1-flash-uncensored; GLM liest nur Text. Audio- und Dateiteile (ein PDF) ergeben 400 unsupported_input.
  • `n` muss 1 sein. Für mehrere Antworten machen Sie mehrere Aufrufe.
  • Nur Chat Completions. Es gibt kein /v1/responses und kein /v1/embeddings; ein Framework, das standardmäßig eines davon nutzt, muss auf Chat Completions umgestellt werden, und Embeddings brauchen einen anderen Provider.

ChatOpenAI(use_responses_api=True) und das JavaScript-useResponsesApi: true rufen /v1/responses auf, das nokeep nicht hat. Lassen Sie sie aus.

Fragen

Brauche ich für nokeep ein LangChain-Paket?

Nein. langchain-openai in Python und @langchain/openai in JavaScript funktionieren mit jeder OpenAI-kompatiblen API. Setzen Sie die Basis-URL auf https://nokeep.ai/v1.

Welches Modell sollte ein LangChain-Agent nutzen?

deepseek-v4.1-flash-uncensored für die meisten Agenten: Es liest Bilder, akzeptiert jeden Sampler und lässt sich zu einem Tool-Aufruf bringen. glm-5.3-flash-uncensored kostet weniger, wählt aber seine Tools selbst.