コード
OpenAI Agents SDK
Agents SDKはチャットcompletionsを通じてnokeepで動きます。nokeepのベースURLを指定した AsyncOpenAI クライアントを用意し、モデルを OpenAIChatCompletionsModel で包んでください。
2026年10月29日 確認
インストールと接続
pip install openai-agents
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport os
from openai import AsyncOpenAI
from agents import Agent, OpenAIChatCompletionsModel, set_tracing_disabled
client = AsyncOpenAI(
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
set_tracing_disabled(True) # traces go to OpenAI's dashboard, which a nokeep key can't reach
model = OpenAIChatCompletionsModel(model="deepseek-v4.1-flash-uncensored", openai_client=client)
from agents import Runner
agent = Agent(name="Editor", instructions="You are a blunt editor.", model=model)
result = Runner.run_sync(agent, "Cut this opening line to ten words: ...")
print(result.final_output)SDKは指定がない限り Responses API(/v1/responses)を呼び出しますが、nokeepにあるのはチャットcompletionsだけです。モデルを OpenAIChatCompletionsModel で包むことで動くようになります。
すべてのエージェントに一度だけ設定
import os
from openai import AsyncOpenAI
from agents import Agent, set_default_openai_api, set_default_openai_client, set_tracing_disabled
set_default_openai_client(AsyncOpenAI(base_url="https://nokeep.ai/v1", api_key=os.environ["NOKEEP_API_KEY"]), use_for_tracing=False)
set_default_openai_api("chat_completions")
set_tracing_disabled(True)
agent = Agent(name="Editor", instructions="You are a blunt editor.", model="deepseek-v4.1-flash-uncensored")この設定後、エージェントはモデルIDを普通の文字列で指定します。エージェント同士のハンドオフも同じように動きます。
ツール
from agents import Agent, Runner, function_tool
@function_tool
def get_weather(city: str) -> str:
"""Get the weather in a city."""
return f"18°C and clear in {city}"
agent = Agent(
name="Weather",
instructions="Answer questions about the weather.",
model=model,
tools=[get_weather],
)
print(Runner.run_sync(agent, "What's the weather in Lisbon?").final_output)SDKは各ツールを strict: true で送り、ループを実行します。モデルがツールを要求し、SDKがそれを実行して結果を送り返し、モデルが答えるまで繰り返します。ツール呼び出しを参照してください。
ストリーミングと使用量
import asyncio
from agents import Runner
from openai.types.responses import ResponseTextDeltaEvent
async def main():
result = Runner.run_streamed(agent, "Tell me a story in three lines.")
async for event in result.stream_events():
if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
print(event.data.delta, end="", flush=True)
print("\n", result.context_wrapper.usage)
asyncio.run(main())SDKはストリームで使用量を要求するので、context_wrapper.usage には実行全体のトークン数が入ります。すべてのモデル呼び出しを合計した値です。
推論の強さとその他の設定
from agents import Agent, ModelSettings
from openai.types.shared import Reasoning
planner = Agent(
name="Planner",
instructions="Plan before you answer.",
model=model,
model_settings=ModelSettings(
reasoning=Reasoning(effort="high"), # sent as reasoning_effort
max_tokens=4000,
extra_body={"min_p": 0.05}, # fields ModelSettings has no argument for
),
)思考も 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を使ってください。SDKではModelSettings(tool_choice="required")、またはツール名を指定します。 - モデルが受け付けないフィールドは、拒否されず無視されます。 呼び出しは成功し、
x-nokeep-ignoredレスポンスヘッダーに無視されたものが記載されます。GLMが受け付けるのはtools、tool_choice、reasoning_effortだけなので、temperatureとresponse_formatは無視されます。各モデルが受け付けるフィールドを参照してください。 - チャットcompletionsのみ対応です。
/v1/responsesも/v1/embeddingsもありません。どちらかをデフォルトにするフレームワークは、チャットcompletionsを使うように指定する必要があります。埋め込みには別のプロバイダーが必要です。
ウェブ検索、ファイル検索、コードインタプリターといったホスト型ツールは、Responses APIを通じてOpenAI自身のサーバーで動きます。他のAPI(nokeepを含む)では動きません。関数ツールとして書いてください。
よくある質問
OpenAIのキーも必要ですか?
いいえ。すべてのモデル呼び出しは、nokeepのキーを使ってnokeepに送られます。トレースはOpenAIのダッシュボードにアップロードされます。トレースが有効でOpenAIのキーが設定されていない場合、SDKは OPENAI_API_KEY is not set, skipping trace export と表示しますが、エージェントはそのまま動きます。set_tracing_disabled(True) で表示を止められます。
エージェントにはどのモデルを使うべきですか?
deepseek-v4.1-flash-uncensored です。ツールを呼び出させることができ、画像を読め、すべての設定を受け付けます。glm-5.3-flash-uncensored はコストが低く、モデルにツールを選ばせるエージェントに向いています。