Lompat ke konten
Semua dokumentasi

Kode

OpenAI Agents SDK

Agents SDK berjalan di nokeep lewat chat completions. Berikan AsyncOpenAI klien dengan base URL nokeep dan bungkus model dengan OpenAIChatCompletionsModel.

Diperiksa 29 Oktober 2026

Pasang dan hubungkan

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 memanggil Responses API (/v1/responses) kecuali diatur lain, dan nokeep hanya punya chat completions. Membungkus model dengan OpenAIChatCompletionsModel yang membuatnya berfungsi.

Atau atur sekali untuk semua agen

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")

Setelah itu agen menerima id model sebagai string biasa. Handoff antaragen bekerja dengan cara yang sama.

Tools

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 mengirim tiap tool dengan strict: true dan menjalankan loop-nya: model meminta sebuah tool, SDK menjalankannya dan mengirim hasilnya kembali sampai model menjawab. Lihat Pemanggilan tool.

Streaming dan penggunaan

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 meminta usage pada streaming, jadi context_wrapper.usage memuat jumlah token untuk seluruh run, semua panggilan model dijumlahkan.

Reasoning effort dan pengaturan lain

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
    ),
)

Thinking dihitung ke max_tokens, jadi beri agen yang berpikir ruang yang cukup. Lihat Thinking.

Jebakan

  • `reasoning_effort` hanya menerima nilai milik model. deepseek-v4.1-flash-uncensored menerima none, low, high, max; glm-5.3-flash-uncensored menerima low, high. Nilai minimal, medium dan xhigh dari aplikasi lain dijalankan pada level terdekat model (medium sebagai high, xhigh sebagai max jika model punya), nilai lain apa pun mendapat 400 invalid_reasoning_effort. Lihat Thinking.
  • GLM memilih tool-nya sendiri. glm-5.3-flash-uncensored hanya menerima tool_choice auto atau none. Memaksa sebuah tool (required, atau menyebut nama fungsi) mendapat 400 unsupported_tool_choice. Pakai DeepSeek jika perlu memaksa satu tool. Di SDK itu ModelSettings(tool_choice="required"), atau nama tool.
  • Field yang tidak bisa diterima sebuah model dibuang, bukan ditolak. Panggilan tetap dijawab, dan header respons x-nokeep-ignored menyebut apa yang dibuang. GLM hanya menerima tools, tool_choice dan reasoning_effort, jadi temperature dan response_format-nya dibuang. Lihat field apa yang diterima tiap model.
  • Hanya chat completions. Tidak ada /v1/responses dan tidak ada /v1/embeddings; framework yang default-nya memakai salah satunya harus diarahkan ke chat completions, dan embedding perlu penyedia lain.

Hosted tools, seperti pencarian web, pencarian file dan code interpreter, berjalan di server OpenAI sendiri lewat Responses API. Semuanya tidak berfungsi dengan API lain, termasuk nokeep. Tulis sebagai function tools.

Pertanyaan

Apakah saya juga butuh kunci OpenAI?

Tidak. Setiap panggilan model pergi ke nokeep dengan kunci nokeep kamu. Tracing diunggah ke dasbor OpenAI; dengan tracing menyala dan tanpa kunci OpenAI, SDK mencetak OPENAI_API_KEY is not set, skipping trace export dan agen tetap berjalan. set_tracing_disabled(True) membuatnya tenang.

Model mana yang sebaiknya dipakai agen?

deepseek-v4.1-flash-uncensored: bisa diarahkan untuk memanggil tool, membaca gambar, dan menerima semua pengaturan. glm-5.3-flash-uncensored lebih murah dan cocok untuk agen yang membiarkan model memilih tool-nya.