本文へ移動
すべてのドキュメント

コード

OpenAI Agents SDK

Agents SDKはチャットcompletionsを通じてnokeepで動きます。nokeepのベースURLを指定した AsyncOpenAI クライアントを用意し、モデルを OpenAIChatCompletionsModel で包んでください。

2026年10月29日 確認

インストールと接続

Shell
pip install openai-agents
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
agent.py
import 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 で包むことで動くようになります。

すべてのエージェントに一度だけ設定

Python
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を普通の文字列で指定します。エージェント同士のハンドオフも同じように動きます。

ツール

Python
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がそれを実行して結果を送り返し、モデルが答えるまで繰り返します。ツール呼び出しを参照してください。

ストリーミングと使用量

Python
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 には実行全体のトークン数が入ります。すべてのモデル呼び出しを合計した値です。

推論の強さとその他の設定

Python
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 はコストが低く、モデルにツールを選ばせるエージェントに向いています。