Tài liệu
DeepSeek Harness
DeepSeek Harness giữ thẻ DeepSeek riêng của mình và thêm thẻ của bạn bên cạnh. Năm trường trong “Thêm nhà cung cấp mô hình” → “API mô hình tùy chỉnh” đưa Claude và GPT vào cùng bộ chọn mô hình, dùng chung một khóa.
Settings → Models → “Add model provider” → “Custom model API” nhận năm trường — Provider ID, display name, base URL, API protocol và API key — đưa Claude và GPT vào cùng bộ chọn với thẻ DeepSeek tích hợp.
# Settings → Models → Add model provider → Custom model API
#
# Provider ID kunavo (lowercase, and permanent)
# display name Kunavo
# base URL https://api.kunavo.com/v1
# API protocol OpenAI Chat Completions (openai-completions)
# API key sk-kn-...
#
# Then Model catalog → Fetch available models → Add selected,
# or type the ids by hand. The page writes the active profile's
# $DSH_HOME/profiles/<profile>/cordis.patch.yml — profile "web" under
# `dsh web`. The same provider there, plus an optional second one
# that sends Claude ids over Anthropic Messages, whose base URL has
# NO /v1. This entry replaces the whole llm-pi-ai config: keep any
# provider already in it.
- id: llm-pi-ai
config:
providers:
kunavo:
apiKeyEnv: KUNAVO_API_KEY
api: openai-completions
baseURL: https://api.kunavo.com/v1 # → /v1/chat/completions
models:
- id: claude-sonnet-5
- id: claude-opus-5
- id: claude-haiku-4-5
- id: gpt-5-6-sol
kunavo-claude:
apiKeyEnv: KUNAVO_API_KEY
api: anthropic-messages
baseURL: https://api.kunavo.com # → /v1/messages
models:
- id: claude-sonnet-5
- id: claude-haiku-4-5openai-completions dùng https://api.kunavo.com/v1; anthropic-messages dùng https://api.kunavo.com, không có /v1, vì dsh tự nối /v1/messages. Một lần chạy dsh 0.2.0-rc.2 với dịch vụ thay thế có ghi lại yêu cầu đã xác định cả hai trường hợp: giao thức thứ nhất gửi POST đến /v1/chat/completions, giao thức thứ hai gửi đến /v1/messages?beta=true từ địa chỉ gốc không kèm đường dẫn — và đến /v1/v1/messages khi URL cơ sở vẫn giữ /v1, mà cổng API thực tế sẽ trả về 404, không phải lỗi xác thực.reasoningEfforts thay đổi vai trò của lời nhắc hệ thống, chứ không quyết định lời nhắc có được nhận hay không. Tài liệu của harness nêu rằng mô hình khai báo khả năng suy luận sẽ có lời nhắc hệ thống được gửi dưới vai trò role: "developer". Kunavo đọc vai trò đó như lượt hệ thống trên mọi họ mô hình, bao gồm Claude, nên không cần tùy chọn compat cho trường hợp này. Cho đến 2026-09-30, luồng xử lý Claude đã loại bỏ vai trò này, và thẻ này từng hướng dẫn bạn đặt compat.supportsDeveloperRole: false; nếu đã đặt, tùy chọn đó không gây hại và có thể giữ nguyên.deepseek-, và dùng khóa này cho các id Claude và GPT trong bảng bên dưới. Điều này cũng có nghĩa là tùy chọn compat.thinkingFormat: deepseek mà tài liệu harness mô tả cho “DeepSeek V4 qua cổng API tương thích với OpenAI” không có đối tượng để tác động ở đây.dsh_session_log, các sự kiện của phiên bao gồm đường dẫn thư mục làm việc của bạn, và dsh_plugin_packages. Trong lần chạy, cả hai nhà cung cấp tùy chỉnh đều không gửi trường nào trong hai trường này, nên nhà cung cấp Kunavo không nhận được chúng. Dung lượng của chúng và tùy chọn tắt việc tải lên được trình bày tại Chi phí DeepSeek Harness.curl bên dưới là phần phía Kunavo, và bạn có thể kiểm tra trong mười giây; dsh là bản xem trước dành cho nhà phát triển và vẫn đang thay đổi.sk-kn-) và nạp tín dụng từ $10 — các lệnh gọi được thanh toán từ số dư đó và các lệnh gọi thất bại không bị tính phí. Sau đó, bảng điều khiển mở tại phần thiết lập DeepSeek Harness.Từng bước
- Tạo khóa tại
/app/keysrồi sao chép khóa — khóa chỉ hiển thị một lần. - Khởi động giao diện web (
dsh web) và đi đến Cài đặt → Mô hình. Chọn Thêm nhà cung cấp mô hình. Thẻ mở ở mục Nhà cung cấp mô hình bên thứ ba, chỉ liệt kê các nhà cung cấp đi kèmdsh— chuyển sang API mô hình tùy chỉnh. - Điền ID nhà cung cấp (chữ thường và cố định — tài liệu cho biết các yêu cầu, phiên đã lưu, giá trị mặc định của mô hình và tham chiếu thông tin xác thực đều sử dụng ID này; đổi tên đồng nghĩa với việc thêm nhà cung cấp mới và xóa nhà cung cấp cũ), tên hiển thị, URL cơ sở
https://api.kunavo.com/v1, giao thức API OpenAI Chat Completions và khóa API. Khóa chỉ cho phép ghi; dsh giữ khóa trong$DSH_HOME/.credentials.yamlvà chỉ lưu tham chiếu đến khóa trong hồ sơ. - Trong Danh mục mô hình, chọn Lấy các mô hình khả dụng — Kunavo phản hồi
GET /v1/models, nên bộ chọn sẽ tự điền danh sách. Đánh dấu các mô hình bạn muốn và chọn Thêm các mục đã chọn. Các id nhập thủ công hoạt động giống hệt, và tài liệu hướng dẫn dùng cách đó bất cứ khi nào tính năng khám phá không liệt kê được mô hình nào. - Tùy chọn: với các id Claude qua giao thức riêng của Anthropic, thêm API mô hình tùy chỉnh thứ hai có ID nhà cung cấp riêng, URL cơ sở
https://api.kunavo.com— không có/v1— giao thức API Anthropic Messages và cùng khóa đó. Chức năng lấy danh sách ở đây cũng liệt kê toàn bộ danh mục; chỉ thêm các idclaude-(vì sao chỉ những id đó). - Chọn một mô hình trong ô soạn thảo và gửi một lượt yêu cầu thao tác với tệp, thay vì lời chào — harness dựa vào việc gọi công cụ cho phần lớn hoạt động, nên lần chạy đầu tiên đọc và chỉnh sửa nội dung sẽ cho bạn biết nhiều hơn. Thay đổi mô hình có hiệu lực từ yêu cầu tiếp theo; tài liệu nêu rõ rằng không cần khởi động lại bất cứ thứ gì.
Đã kiểm tra đối chiếu với trang “Cấu hình mô hình” của DeepSeek Harness (cùng nội dung với docs/user/guide/providers.md tại thẻ dsh-v0.2.0-rc.2) vào 1 tháng 10, 2026. Cài đặt của bên thứ ba có thể thay đổi; nếu tên trường ở đây không còn khớp với những gì bạn thấy, trang đó là nguồn có thẩm quyền, không phải trang này.
Xác minh trước khi gỡ lỗi ứng dụng khách
Một yêu cầu sẽ xác định liệu lỗi nằm ở endpoint, khóa hay tệp cấu hình. Nếu lệnh này trả về JSON, cùng base URL và khóa sẽ hoạt động trong DeepSeek Harness.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Đặt model id nào vào trường
Mọi mô hình văn bản đều có thể truy cập bằng model id — danh sách đang hoạt động là GET /v1/models, còn danh mục kèm giá nằm trên trang mô hình. Mức giá tính bằng USD trên mỗi 1M token, đầu vào / đầu ra.
| ID mô hình | Kunavo vào / ra | Phù hợp ở đâu trong DeepSeek Harness |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | model làm việc mặc định cho các phiên chỉnh sửa tệp |
claude-opus-5 | $3.50 / $17.50 | lập kế hoạch thay đổi mà nếu sai sẽ tốn kém để sửa |
claude-haiku-4-5 | $0.70 / $3.50 | các lượt xử lý giá rẻ — phân loại, tóm tắt, vòng lặp chạy cả ngày |
gpt-5-6-sol | $2.00 / $12.00 | ý kiến thứ hai từ một họ mô hình khác, cùng khóa và cùng nhà cung cấp |
gpt-5-6-terra | $0.70 / $4.20 | đầu vào dài, nơi mức giá trên mỗi token quyết định hóa đơn |
Claude qua Anthropic Messages
Kunavo cũng xử lý API Anthropic Messages, và anthropic-messages là một trong ba giao thức mà biểu mẫu cung cấp. Tài liệu của harness nêu rõ rằng “Một nhà cung cấp sử dụng một giao thức, nên cổng API cung cấp hai giao thức cần hai nhà cung cấp” — vì vậy đây là nhà cung cấp thứ hai bên cạnh nhà cung cấp thứ nhất, không phải một thiết lập của nhà cung cấp thứ nhất.
- URL cơ sở
https://api.kunavo.com, địa chỉ gốc không kèm đường dẫn. Trong lần chạy, địa chỉ gốc đó gửi POST đến/v1/messages?beta=true— đường dẫn mà Claude Code cũng dùng và Kunavo xử lý. Khi có/v1ở cuối, yêu cầu POST được gửi đến/v1/v1/messages. DeepSeek Harness so với Claude Code đặt yêu cầu của hai ứng dụng khách cạnh nhau để đối chiếu. - Chỉ các id Claude.
/v1/messagescủa Kunavo chỉ phục vụ các idclaude-; một idgpt-tại đó sẽ nhận404có nêu/v1/chat/completions. Giữ GPT trên nhà cung cấpopenai-completions. - Chức năng lấy danh sách liệt kê mọi mô hình; chỉ thêm các mô hình Claude. README
llm-pi-aicủa dsh cho biết tính năng khám phá trên giao thức này truy vấnGET /v1/modelsvới headerx-api-keycủa Anthropic, và danh sách mô hình của Kunavo nhận khóa trong header đó giống như trongAuthorization: Bearer— thông tin này đến từ mã nguồn dsh và các bài kiểm tra của chính Kunavo, không phải từ lần chạy. Những gì Lấy các mô hình khả dụng nhận về là toàn bộ danh mục, bao gồm GPT và các mô hình hình ảnh, nên chỉ đánh dấu các idclaude-; nhập thủ công cũng hoạt động như vậy. Danh sách đầy đủ chứng minh ít hơn vẻ bề ngoài: cùng README đó cho biết URL liệt kê được chấp nhận dù có hay không có/v1, trong khi yêu cầu mô hình dùng nguyên URL cơ sở — vì vậy chức năng lấy danh sách cũng điền được danh sách từhttps://api.kunavo.com/v1, còn lượt đầu tiên từ URL cơ sở đó đi đến/v1/v1/messages. - Lợi ích bạn nhận được. Yêu cầu đến theo định dạng của Anthropic — trong lần chạy, lời nhắc hệ thống được truyền trong trường
systemở cấp cao nhất, nên vai tròdeveloperkhông xuất hiện — và Kunavo chuyển tiếp nguyên trạng thay vì chuyển đổi từ định dạng OpenAI. Nhà cung cấpopenai-completionstruy cập cùng các id Claude qua bước chuyển đổi, đó là lý do nhà cung cấp này được dùng trong các bước hướng dẫn.
Tệp đứng sau biểu mẫu
Trang Mô hình ghi vào $DSH_HOME/profiles/<profile>/cordis.patch.yml — $DSH_HOME/profiles/web/cordis.patch.yml khi bạn khởi động bằng dsh web. Các tài liệu dsh cũ chỉ đến $DSH_HOME/settings.yaml; tài liệu của 0.2.0-rc.2 thì không. Khi trình duyệt ở cùng máy với máy chủ, Mở tệp cấu hình trong phần đầu trang Cài đặt sẽ mở tệp đó, và các bộ điều hợp đọc lại tệp ở yêu cầu tiếp theo. Có năm điều quan trọng với endpoint này:
- Cửa sổ ngữ cảnh và số token đầu ra tối đa — trong biểu mẫu, dưới Thiết lập tùy chỉnh → Tùy chọn mô hình. Một id nhập thủ công không mang theo cả hai thông số này, nên các giá trị dự phòng của luồng được áp dụng: 262.144 token ngữ cảnh và 32.768 token đầu ra, theo README
llm-pi-ai— và trong lần chạy, cả hai nhà cung cấp tùy chỉnh đều yêu cầu chính xácmax_tokens: 32768. Mọi id trong bảng bên trên đều hỗ trợ nhiều hơn; dù dùng cách nào, hãy kiểm tra dòng tương ứng và tăng các giá trị theo mục trong danh mục của mô hình nếu bạn muốn nhiều hơn. Kunavo tính phí theo số token mô hình viết ra, không phải giới hạn. compat.supportsDeveloperRole— không cần thiết. Harness khuyến nghị tùy chọn này cho các cổng API từ chối vai tròdeveloper; Kunavo đọc vai trò đó như lượt hệ thống trên mọi họ mô hình, bao gồm Claude. (Cho đến 2026-09-30, luồng xử lý Claude đã loại bỏ vai trò này, và mục này từng hướng dẫn bạn bật tùy chọn — giữ tùy chọn ở trạng thái bật không gây hại.)compat.maxTokensField— giữ nguyên. Harness kết hợp tùy chọn này với tùy chọn bên trên như cách khắc phục đầu tiên thường dùng, nhưng bộ xử lý của chính Kunavo đọcmax_completion_tokensvà dùngmax_tokenslàm giá trị dự phòng, nên giá trị mặc định đã hoạt động.reasoningEfforts— không có trường trong biểu mẫu. Mô hình bạn nhập thủ công không khai báo mức nào, nên menu Mức độ suy luận không xuất hiện và giá trị mặc định của endpoint quyết định mô hình có suy luận hay không. Tự khai báo các mức nếu bạn muốn có menu; trênopenai-completions, mỗi khóa là một mức và giá trị của khóa là cách viết được gửi dưới dạngreasoning_effort. Giá trị đó được chuyển đến idgpt-; với idclaude-, nó không có tác dụng vì giao diện chat của Kunavo không chuyển tiếpreasoning_effortđến Anthropic (/docs/chat#reasoning).- Loại đầu vào (
input: [text, image]trong tệp) — tài liệu nêu rõ rằng thiết lập này “đưa ra một tuyên bố về endpoint của bạn thay vì kiểm tra nó”. Việc đánh dấu Hình ảnh cho một id không nhận hình ảnh không bị harness phát hiện; yêu cầu sẽ bị từ chối ở bước xử lý phía sau. Kiểm tra id trên/modelstrước khi đánh dấu ô.
Phần còn lại mà một phiên gửi — 24 định nghĩa công cụ mỗi lượt, một yêu cầu tiêu đề ngắn cho mỗi phiên mới và các trường bổ sung trên luồng riêng của DeepSeek — được đo lường tại Chi phí DeepSeek Harness.
Câu hỏi thường gặp
Làm cách nào để thêm nhà cung cấp API tùy chỉnh vào DeepSeek Harness?
Khởi động giao diện web bằng dsh web, đi đến Cài đặt → Mô hình và chọn "Thêm nhà cung cấp mô hình". Thẻ mở ở mục "Nhà cung cấp mô hình bên thứ ba", chỉ liệt kê các nhà cung cấp đi kèm dsh; chuyển sang "API mô hình tùy chỉnh". Biểu mẫu yêu cầu ID nhà cung cấp viết thường, tên hiển thị, URL cơ sở, giao thức API và khóa API, sau đó là ít nhất một mô hình trong Danh mục mô hình. ID nhà cung cấp là cố định vì các yêu cầu, phiên đã lưu, giá trị mặc định của mô hình và tham chiếu thông tin xác thực đều sử dụng ID này; đổi tên đồng nghĩa với việc thêm nhà cung cấp mới và xóa nhà cung cấp cũ. Trong 0.2.0-rc.2, trang lưu vào cordis.patch.yml của hồ sơ đang hoạt động — $DSH_HOME/profiles/web/cordis.patch.yml khi chạy dsh web.
URL cơ sở của DeepSeek Harness có cần /v1 ở cuối không?
Điều này phụ thuộc vào giao thức API. Với openai-completions, có: https://api.kunavo.com/v1, trong một lần chạy dsh 0.2.0-rc.2 đã gửi POST đến /v1/chat/completions. Với anthropic-messages, không: https://api.kunavo.com, vì dsh tự nối /v1/messages — địa chỉ gốc không kèm đường dẫn đã gửi POST đến /v1/messages?beta=true, trong khi URL cơ sở kết thúc bằng /v1 gửi POST đến /v1/v1/messages, mà cổng API thực tế sẽ trả về 404 thay vì lỗi xác thực. Lần chạy được thực hiện với dịch vụ thay thế cục bộ ghi lại yêu cầu, không phải với Kunavo.
DeepSeek Harness có thể dùng các mô hình Claude hoặc GPT thay cho DeepSeek không?
Có. Trường giao thức API chỉ tên định dạng truyền tải, không phải nhà cung cấp mô hình: openai-completions là OpenAI Chat Completions, openai-responses là Responses API, và anthropic-messages là Anthropic Messages API. Nhà cung cấp tùy chỉnh chuyển thẳng id mô hình của bạn đến URL cơ sở đã cấu hình, nên id Claude hoặc GPT được phân giải tại endpoint đó thay vì bên trong harness. Trên Kunavo, nhà cung cấp openai-completions tại https://api.kunavo.com/v1 truy cập các id Claude và GPT; nhà cung cấp thứ hai dùng anthropic-messages tại https://api.kunavo.com chỉ truy cập các id Claude, theo định dạng yêu cầu riêng của Anthropic. Cả hai đều nằm cạnh thẻ DeepSeek tích hợp sẵn thay vì thay thế thẻ đó, nên các id DeepSeek tiếp tục dùng khóa DeepSeek của bạn.
DeepSeek Harness gửi những gì đến nhà cung cấp tùy chỉnh?
Trong một lần chạy dsh 0.2.0-rc.2 được ghi lại, cả hai nhà cung cấp tùy chỉnh — openai-completions và anthropic-messages — đều gửi 24 định nghĩa công cụ với mỗi lượt của agent, yêu cầu max_tokens 32.768, là giá trị dự phòng của harness cho mô hình bạn nhập mà không khai báo kích thước, và gửi một yêu cầu tiêu đề ngắn cho mỗi phiên mới với max_tokens 64. Cả hai đều không gửi dsh_session_log hay dsh_plugin_packages: hai trường này, nhật ký sự kiện của phiên và danh sách plugin đã cài đặt, chỉ được gửi trên luồng DeepSeek tích hợp sẵn. Lần chạy dùng dịch vụ thay thế ghi lại yêu cầu, không phải Kunavo, nên nó cho thấy dsh gửi gì chứ không cho thấy bất kỳ nhà cung cấp nào xử lý những nội dung đó ra sao.
Tại sao DeepSeek Harness hoạt động như thể đã bỏ qua lời nhắc hệ thống của tôi?
Kiểm tra xem mô hình có khai báo các mức suy luận hay không. Trên openai-completions, harness gửi lời nhắc hệ thống của mô hình suy luận với role "developer" thay vì "system", vì nó suy ra định dạng yêu cầu từ URL endpoint và coi địa chỉ không nhận diện được là chính OpenAI. Kunavo đọc vai trò đó như lượt hệ thống trên mọi họ mô hình, bao gồm Claude, nên trên Kunavo lời nhắc vẫn được nhận theo cả hai cách. Cho đến 2026-09-30, luồng xử lý Claude đã âm thầm loại bỏ vai trò này; nếu lời nhắc bị mất trước thời điểm đó, đây là nguyên nhân, và compat.supportsDeveloperRole: false trên luồng hoặc mô hình trong cordis.patch.yml của hồ sơ là cách khắc phục tạm thời. Thiết lập này không còn cần thiết và không gây hại nếu được giữ nguyên. Nhà cung cấp anthropic-messages không bao giờ gửi vai trò này: lời nhắc hệ thống được gửi trong trường system ở cấp cao nhất của Anthropic.
Tại sao "Lấy các mô hình khả dụng" không trả về gì hoặc trả về 401 trong DeepSeek Harness?
Tính năng khám phá dùng URL cơ sở, giao thức và khóa hiện có trong biểu mẫu, nên lỗi 401 thường chỉ ra vấn đề với khóa, còn danh sách trống thường chỉ ra vấn đề với URL cơ sở hoặc định dạng liệt kê mà tính năng khám phá không đọc được. Harness có tài liệu mô tả cả hai kết quả và hướng dẫn nhập id thủ công, hoạt động giống hệt. Hai giao thức gửi khóa theo cách khác nhau — openai-completions dùng Authorization: Bearer, anthropic-messages dùng header x-api-key của Anthropic — và danh sách mô hình của Kunavo chấp nhận cả hai. Xác định phía nào có lỗi bằng một lệnh curl đơn giản đến https://api.kunavo.com/v1/models, dùng cùng khóa trong cùng header: nhận được JSON nghĩa là lỗi nằm ở biểu mẫu, 401 nghĩa là lỗi ở khóa, 404 nghĩa là lỗi ở URL. Trên anthropic-messages, danh sách đầy đủ vẫn để ngỏ hai điều: URL cơ sở có đúng hay không, vì tính năng khám phá bỏ một /v1 ở cuối URL liệt kê còn yêu cầu mô hình thì không; và nhà cung cấp có thể gọi những id nào, vì danh sách là toàn bộ danh mục nhưng chỉ các id claude- hoạt động ở đó. Nhà cung cấp tích hợp sẵn luôn nhận phản hồi từ danh mục đã cài đặt ngay cả khi URL cơ sở trỏ đến nơi khác, nên hãy lấy danh sách qua nhà cung cấp tùy chỉnh để biết endpoint thực sự cung cấp gì.