Code
OpenAI Agents SDK
Agents SDK chạy trên nokeep qua chat completions. Đưa cho nó một AsyncOpenAI client với base URL của nokeep và bọc mô hình trong OpenAIChatCompletionsModel.
Đã kiểm tra 29 tháng 10, 2026
Cài đặt và kết nối
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 gọi Responses API (/v1/responses) trừ khi được chỉ định khác, và nokeep chỉ có chat completions. Bọc mô hình trong OpenAIChatCompletionsModel chính là điều làm nó chạy được.
Hoặc đặt một lần cho mọi agent
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")Khi đó các agent nhận id mô hình như một chuỗi thường. Chuyển giao giữa các agent hoạt động y như vậy.
Công cụ
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 gửi mỗi công cụ với strict: true và tự chạy vòng lặp: mô hình yêu cầu một công cụ, SDK chạy nó và gửi kết quả lại, cho tới khi mô hình trả lời. Xem Gọi công cụ.
Streaming và mức dùng
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 yêu cầu thông tin mức dùng khi streaming, nên context_wrapper.usage chứa số token của cả lần chạy, cộng dồn mọi lệnh gọi mô hình.
Reasoning effort và các thiết lập khác
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
),
)Phần thinking được tính vào max_tokens, nên hãy để đủ chỗ cho một agent có suy nghĩ. Xem Thinking.
Những điều cần lưu ý
- `reasoning_effort` chỉ nhận giá trị riêng của mô hình.
deepseek-v4.1-flash-uncensorednhậnnone,low,high,max;glm-5.3-flash-uncensorednhậnlow,high. Các giá trịminimal,mediumvàxhighcủa ứng dụng khác sẽ chạy ở mức gần nhất mà mô hình hỗ trợ (mediumthànhhigh,xhighthànhmaxnơi mô hình có mức đó); mọi giá trị khác nhận400 invalid_reasoning_effort. Xem Thinking. - GLM tự chọn công cụ.
glm-5.3-flash-uncensoredchỉ nhậntool_choicelàautohoặcnone. Ép buộc một công cụ (required, hoặc nêu tên một hàm) sẽ nhận400 unsupported_tool_choice. Dùng DeepSeek khi bạn cần ép chọn một công cụ. Trong SDK, điều đó làModelSettings(tool_choice="required"), hoặc một tên công cụ. - Trường mà mô hình không nhận được sẽ bị bỏ, không bị từ chối. Lệnh gọi vẫn được trả lời, và header phản hồi
x-nokeep-ignorednêu tên những gì đã bị bỏ. GLM chỉ giữtools,tool_choicevàreasoning_effort, nêntemperaturevàresponse_formatcủa nó bị bỏ. Xem mỗi mô hình nhận những trường nào. - Chỉ có chat completions. Không có
/v1/responsesvà không có/v1/embeddings; framework nào mặc định dùng một trong hai cần được trỏ sang chat completions, và embeddings cần một provider khác.
Công cụ được host sẵn, như tìm kiếm web, tìm kiếm tệp và trình thông dịch code, chạy trên máy chủ riêng của OpenAI thông qua Responses API. Chúng không hoạt động với bất kỳ API nào khác, kể cả nokeep. Hãy viết chúng thành công cụ hàm.
Câu hỏi
Tôi có cần khóa OpenAI nữa không?
Không. Mọi lệnh gọi mô hình đều đi tới nokeep bằng khóa nokeep của bạn. Phần theo dõi (tracing) được tải lên bảng điều khiển của OpenAI; nếu bật tracing mà không đặt khóa OpenAI, SDK sẽ in OPENAI_API_KEY is not set, skipping trace export và agent vẫn chạy. set_tracing_disabled(True) giúp tắt thông báo này.
Agent nên dùng mô hình nào?
deepseek-v4.1-flash-uncensored: có thể được buộc gọi công cụ, đọc được hình ảnh và nhận mọi thiết lập. glm-5.3-flash-uncensored rẻ hơn và phù hợp với các agent để mô hình tự chọn công cụ.