Mã
LangChain
ChatOpenAI của LangChain chạy với nokeep như vốn có: cho nó base URL, khóa và một model id. Có cả Python lẫn JavaScript.
Đã kiểm tra 29 tháng 10, 2026
Cài đặt và kết nối
pip install langchain-openai
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="deepseek-v4.1-flash-uncensored",
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
reply = llm.invoke("Name three good names for a tavern.")
print(reply.content)
print(reply.usage_metadata)Trong JavaScript, base URL phải nằm trong configuration, không phải ở cấp cao nhất. baseURL ở cấp cao nhất bị bỏ qua và lần gọi sẽ đi tới máy chủ mặc định với khóa nokeep của bạn.
Stream
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="deepseek-v4.1-flash-uncensored",
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
stream_usage=True, # ask for the token counts in the last chunk
)
full = None
for chunk in llm.stream("Tell me a story in three lines."):
print(chunk.content, end="", flush=True)
full = chunk if full is None else full + chunk
print("\n", full.usage_metadata)Trong Python, ChatOpenAI chỉ yêu cầu số liệu sử dụng khi stream với máy chủ mặc định. Đặt stream_usage=True để nhận số token khi dùng base URL tùy chỉnh. Client JavaScript tự yêu cầu chúng. Xem Truyền từng phần.
Gọi công cụ
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""Get the weather in a city."""
return f"18°C and clear in {city}"
message = llm.bind_tools([get_weather]).invoke("What's the weather in Lisbon?")
for call in message.tool_calls:
print(call["name"], call["args"])Cả hai mô hình đều gọi được công cụ. Các agent LangChain xây trên bind_tools hoạt động y hệt. with_structured_output gửi response_format kèm JSON schema, thứ mà deepseek-v4.1-flash-uncensored nhận còn GLM bỏ đi. Dùng DeepSeek cho đầu ra có cấu trúc. Xem Gọi công cụ và Đầu ra JSON.
Suy nghĩ và bộ lấy mẫu
import os
from langchain_openai import ChatOpenAI
thinker = ChatOpenAI(
model="deepseek-v4.1-flash-uncensored",
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
reasoning_effort="high",
max_tokens=4000,
extra_body={"min_p": 0.05}, # fields ChatOpenAI has no argument for
)DeepSeek trả lời ngay trừ khi bạn yêu cầu nó suy nghĩ. Hãy chừa chỗ cho lần gọi có suy nghĩ: phần suy nghĩ được tính vào max_tokens.
Lưu ý
- `reasoning_effort` chỉ nhận các giá trị của chính 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 có (mediumthànhhigh,xhighthànhmaxkhi mô hình có mức đó); mọi giá trị khác nhận400 invalid_reasoning_effort. Xem Suy nghĩ. - 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 gọi đúng tên một hàm) sẽ nhận400 unsupported_tool_choice. Hãy dùng DeepSeek khi cần ép một công cụ. - Trường mà mô hình không nhận sẽ bị bỏ qua, không bị từ chối. Lần 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 trường nào. - Phần nội dung chỉ gồm văn bản và hình ảnh. Phần
image_urlchạy 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 phản hồi, hãy gọi nhiều lần.
- Chỉ có chat completions. Không có
/v1/responsesvà không có/v1/embeddings; một framework mặc định dùng một trong hai cần được trỏ sang chat completions, còn embeddings cần một nhà cung cấp khác.
ChatOpenAI(use_responses_api=True) và useResponsesApi: true trong JavaScript gọi /v1/responses, thứ mà nokeep không có. Hãy để chúng tắt.
Câu hỏi
Tôi có cần gói LangChain cho nokeep không?
Không. langchain-openai trong Python và @langchain/openai trong JavaScript hoạt động với mọi API tương thích OpenAI. Đặt base URL là https://nokeep.ai/v1.
Agent LangChain nên dùng mô hình nào?
deepseek-v4.1-flash-uncensored cho đa số agent: nó đọc được hình ảnh, nhận mọi bộ lấy mẫu và có thể được yêu cầu gọi công cụ. glm-5.3-flash-uncensored rẻ hơn nhưng tự chọn công cụ.