コード
LangChain
LangChainの ChatOpenAI は、そのままnokeepで動きます。ベースURL、キー、モデルIDを渡してください。PythonとJavaScriptの両方に対応しています。
2026年10月29日 確認
インストールと接続
pip install langchain-openai
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport 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)JavaScriptでは、ベースURLは configuration の中に入れてください。最上位の baseURL は無視され、呼び出しはnokeepのキーを付けたまま既定のホストへ向かいます。
ストリーミング
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)Pythonでは、ChatOpenAI がストリームの使用量を要求するのは既定のホストだけです。独自のベースURLでトークン数を得るには stream_usage=True を設定してください。JavaScriptのクライアントは自分で要求します。ストリーミングを参照。
ツール呼び出し
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"])どちらのモデルもツールを呼べます。bind_tools で作ったLangChainのエージェントも同じように動きます。with_structured_output はJSONスキーマ付きの response_format を送ります。これは deepseek-v4.1-flash-uncensored が受け付け、GLMは取り除きます。構造化出力にはDeepSeekを使ってください。ツール呼び出しとJSON出力を参照。
思考とサンプラー
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は、思考を頼まない限りすぐに答えます。思考する呼び出しには余裕を持たせてください。思考も max_tokens に含まれます。
注意点
- `reasoning_effort` はモデル自身の値だけを受け付けます。
deepseek-v4.1-flash-uncensoredはnone、low、high、maxを、glm-5.3-flash-uncensoredはlow、highを受け付けます。他のアプリのminimal、medium、xhighは、モデルで最も近いレベルで動きます(mediumはhigh、xhighはモデルにあればmax)。それ以外の値は400 invalid_reasoning_effortになります。思考を参照。 - GLMは自分でツールを選びます。
glm-5.3-flash-uncensoredが受け付けるのはtool_choiceのautoかnoneだけです。ツールを強制する(requiredや関数名の指定)と400 unsupported_tool_choiceになります。強制が必要ならDeepSeekを使ってください。 - モデルが受け付けないフィールドは、拒否されず取り除かれます。 呼び出しは答えを返し、取り除かれたものは
x-nokeep-ignoredレスポンスヘッダーに名前が出ます。GLMが残すのはtools、tool_choice、reasoning_effortだけなので、temperatureとresponse_formatは取り除かれます。各モデルが受け付けるフィールドを参照。 - コンテンツのパーツはテキストと画像だけです。
image_urlパーツはdeepseek-v4.1-flash-uncensoredで動きます。GLMはテキストだけを読みます。音声やファイルのパーツ(PDFなど)は400 unsupported_inputになります。 - `n` は1にしてください。 複数の返信が欲しければ、複数回呼び出してください。
- チャット補完のみです。
/v1/responsesも/v1/embeddingsもありません。どちらかを既定にするフレームワークは、チャット補完を指すよう設定してください。埋め込みには別のプロバイダーが必要です。
ChatOpenAI(use_responses_api=True) と JavaScriptの useResponsesApi: true は /v1/responses を呼びますが、nokeepにはそれがありません。どちらも外したままにしてください。
よくある質問
nokeepに使うのにLangChainのパッケージは必要ですか?
いいえ。Pythonの langchain-openai、JavaScriptの @langchain/openai は、OpenAI互換のどのAPIでも動きます。ベースURLを https://nokeep.ai/v1 に設定してください。
LangChainのエージェントにはどのモデルを使うべきですか?
ほとんどのエージェントには deepseek-v4.1-flash-uncensored を。画像を読め、すべてのサンプラーを受け付け、ツールを呼ぶよう仕向けられます。glm-5.3-flash-uncensored は安いですが、ツールは自分で選びます。