Code
LiteLLM
Trỏ LiteLLM tới nokeep bằng tiền tố openai/ và api_base. Cách này chạy được trong proxy và trong Python SDK.
Đã kiểm tra 29 tháng 10, 2026
Proxy
model_list:
- model_name: deepseek-v4.1-flash-uncensored
litellm_params:
model: openai/deepseek-v4.1-flash-uncensored
api_base: https://nokeep.ai/v1
api_key: os.environ/NOKEEP_API_KEY
model_info:
input_cost_per_token: 0.00000045
cache_read_input_token_cost: 0.000000011
output_cost_per_token: 0.00000175
- model_name: glm-5.3-flash-uncensored
litellm_params:
model: openai/glm-5.3-flash-uncensored
api_base: https://nokeep.ai/v1
api_key: os.environ/NOKEEP_API_KEY
model_info:
input_cost_per_token: 0.0000002
cache_read_input_token_cost: 0.00000004
output_cost_per_token: 0.00000065pip install 'litellm[proxy]'
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connects
litellm --config config.yamlỨng dụng của bạn sau đó gọi proxy (mặc định http://0.0.0.0:4000) với model_name, và proxy gọi nokeep. model_info cho LiteLLM biết giá của nokeep theo từng token, để việc theo dõi chi phí khớp với hóa đơn của bạn. Nếu thiếu phần này, LiteLLM không có giá cho các mô hình của nokeep và không thể tính lệnh gọi tốn bao nhiêu.
Python SDK
pip install litellm
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport os
import litellm
reply = litellm.completion(
model="openai/deepseek-v4.1-flash-uncensored",
api_base="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
messages=[{"role": "user", "content": "Name three good names for a tavern."}],
)
print(reply.choices[0].message.content)
print(reply.usage)Một provider nokeep gốc đã được đề xuất với LiteLLM. Cho tới khi nó được phát hành, tiền tố openai/ cùng api_base là cách kết nối; yêu cầu được gửi đi đúng như vậy.
Streaming
import os
import litellm
stream = litellm.completion(
model="openai/deepseek-v4.1-flash-uncensored",
api_base="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
messages=[{"role": "user", "content": "Tell me a story in three lines."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
if getattr(chunk, "usage", None):
print("\n", chunk.usage)Công cụ, thinking và bộ lấy mẫu
import os
import litellm
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
reply = litellm.completion(
model="openai/deepseek-v4.1-flash-uncensored",
api_base="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
messages=[{"role": "user", "content": "What's the weather in Lisbon?"}],
tools=tools,
reasoning_effort="high",
max_tokens=4000,
extra_body={"min_p": 0.05}, # fields LiteLLM has no argument for
)
print(reply.choices[0].message.tool_calls)Với tiền tố openai/, reasoning_effort và tools được chuyển nguyên vẹn. Trong proxy, đặt các trường cố định cho từng mô hình dưới litellm_params (ví dụ reasoning_effort: high), hoặc để mỗi bên gọi tự gửi giá trị của mình. Xem Gọi công cụ và 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ụ. - 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. - Phần nội dung chỉ gồm văn bản và hình ảnh. Phần
image_urlhoạt động trêndeepseek-v4.1-flash-uncensored; GLM chỉ đọc văn bản. Phần âm thanh và tệp (như PDF) nhận400 unsupported_input. - `n` phải bằng 1. Muốn nhiều câu trả lời, hãy gọi nhiều lần.
drop_params: true khiến LiteLLM bỏ các trường mà nó cho rằng provider không nhận, trước khi gọi. nokeep đã tự bỏ những gì mô hình không nhận và nêu tên trong x-nokeep-ignored, nên bạn không cần đến nó.
Câu hỏi
Tôi có đặt khóa nokeep vào config.yaml không?
Không. Viết api_key: os.environ/NOKEEP_API_KEY và LiteLLM sẽ đọc khóa từ môi trường khi khởi động.
Vì sao LiteLLM không hiện chi phí cho các lệnh gọi nokeep?
Nó không biết giá của nokeep. Thêm khối model_info từ config phía trên; giá trong đó lấy từ cùng bảng với hóa đơn của bạn. Bản thân hóa đơn làm tròn mỗi lệnh gọi lên thành một tín dụng nguyên.