Tài liệu

Tài liệu

Factory Droid

Mô hình tùy chỉnh của Droid là một mảng JSON có ba trường bắt buộc. Trường dễ bị hiểu sai là baseUrl, vì định dạng chính xác của trường này phụ thuộc vào giá trị nhà cung cấp bạn chọn trong số ba giá trị.

Một mục customModels trong ~/.factory/settings.json — model, baseUrl và provider — đưa Droid tới mọi endpoint hỗ trợ Anthropic Messages hoặc OpenAI Chat Completions.

~/.factory/settings.json → customModels
// ~/.factory/settings.json  (Windows: %USERPROFILE%\.factory\settings.json)
{
  "customModels": [
    {
      "model": "claude-sonnet-5",
      "displayName": "Sonnet 5 [Kunavo]",
      "baseUrl": "https://api.kunavo.com",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "anthropic"
    },
    {
      "model": "gpt-5-6-sol",
      "displayName": "GPT-5.6 Sol [Kunavo]",
      "baseUrl": "https://api.kunavo.com/v1",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "generic-chat-completion-api"
    }
  ]
}

// Then, in the shell Droid starts from:
//   export KUNAVO_API_KEY=sk-kn-...
// ${VAR_NAME} expansion is a settings.json feature. It does NOT apply to the
// legacy ~/.factory/config.json, which Factory still loads and merges.
/v1 thuộc về một mục, không phải mục còn lại. Tài liệu của Factory làm rõ điều này bằng một bảng thay vì một câu: tài liệu tham chiếu về nhà cung cấp chỉ định https://api.anthropic.com — địa chỉ gốc, không kèm đường dẫn — cho provider: "anthropic", trong khi https://api.openai.com/v1, https://openrouter.ai/api/v1 và https://api.groq.com/openai/v1 đều có đường dẫn gốc /v1. Droid tự nối thêm đường dẫn định tuyến, nên mục Anthropic ở trên chỉ chứa địa chỉ gốc, còn mục Chat Completions là /v1. Thêm /v1 vào mục Anthropic sẽ gửi yêu cầu đến /v1/v1/messages, dẫn đến 404, chứ không phải lỗi xác thực — xem tài liệu tham chiếu về URL cơ sở.
Cấu hình này được đối chiếu với tài liệu chính thức của Factory vào ngày bên dưới. Kunavo chưa chạy CLI Droid với endpoint của mình — chưa chạy phiên, lượt truyền phát, vòng khứ hồi gọi công cụ nào; điều này cũng đúng với mọi client thuộc nhóm này. Trang hướng dẫn thiết lập đã công bố không phải là một bài kiểm thử. Factory cũng đưa ra tuyên bố tương tự từ phía mình: theo lời họ, chỉ các mô hình Anthropic và OpenAI trên API chính thức của họ mới được “kiểm thử và đánh giá hiệu năng đầy đủ”. curl bên dưới là phần bạn có thể kiểm tra trong mười giây; hành vi của client phụ thuộc vào bạn và Factory.
Có thể bỏ qua authMode. Factory ghi rõ giá trị mặc định provider-default sẽ gửi thông tin xác thực trong x-api-key, và endpoint Messages của Kunavo cũng chấp nhận header đó cùng với Authorization: Bearer. Nếu muốn dùng rõ ràng dạng bearer, Factory ghi authMode: "bearer" cho provider: "anthropic"; cách đó cũng hoạt động ở đây.
Chưa có khóa? Tạo tài khoản Kunavo, tạo khóa (bắt đầu bằng 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 Factory Droid.

Từng bước

  1. Tạo khóa tại /app/keys rồi sao chép — khóa chỉ hiển thị một lần. Xuất khóa thành KUNAVO_API_KEY trong shell dùng để khởi chạy Droid, để khóa không bị ghi vào tệp cài đặt.
  2. Mở ~/.factory/settings.json (nếu chưa có thì tạo tệp) rồi thêm mảng customModels ở trên. Factory đánh dấu chính xác ba trường là bắt buộc — model, baseUrl và provider — còn displayName là nhãn hiển thị trong bộ chọn.
  3. Kiểm tra chính tả của provider. Giá trị phải chính xác là một trong anthropic, openai hoặc generic-chat-completion-api; phần khắc phục sự cố của Factory nêu lỗi chính tả ở đây là nguyên nhân gây ra lỗi "Invalid provider".
  4. Chạy /model trong CLI. Các mục của bạn sẽ xuất hiện trong phần Mô hình tùy chỉnh riêng bên dưới các mục của Factory, với nhãn là displayName bạn đã đặt. Factory theo dõi tệp cài đặt, vì vậy chỉ cần lưu là đủ — không cần khởi động lại.
  5. Giao cho nó một tác vụ đọc và chỉnh sửa tệp thay vì chỉ chào hỏi. Droid dựa vào việc gọi công cụ trong gần như mọi thao tác, và một lượt trò chuyện thông thường sẽ không kiểm tra được phần đó. Sau đó chạy /cost, nơi Factory báo cáo tỷ lệ cache hit — Kunavo hỗ trợ sẵn các dấu cache_control của Anthropic, còn ghi chú của Factory cho biết trên provider Chat Completions dùng chung, bộ nhớ đệm “tùy thuộc vào provider và không thể đảm bảo”.

Đã kiểm tra đối chiếu với Trang Custom Models (BYOK) của Factory vào 21 tháng 9, 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.

Đây là phiên bản ngắn. Hướng dẫn đầy đủ — lựa chọn mô hình, chi phí của một phiên thực tế và các trường hợp lỗi — nằm trong hướng dẫn chi phí của Factory Droid.

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 Factory Droid.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/messages \
  -H "Authorization: Bearer sk-kn-..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'

Đặ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ìnhKunavo vào / raPhù hợp ở đâu trong Factory Droid
claude-sonnet-5$1.40 / $7.00mô hình làm việc mặc định — nằm trong mục provider: "anthropic"
claude-opus-5$3.50 / $17.50lập kế hoạch cho một thay đổi sẽ tốn kém nếu thực hiện sai; cùng mục anthropic
claude-haiku-4-5$0.70 / $3.50các lượt chạy rẻ và phân loại tệp, trong đó khối lượng là yếu tố chi phối; cùng mục anthropic
gpt-5-6-sol$2.00 / $12.00ý kiến thứ hai từ một nhóm mô hình khác — cần mục generic-chat-completion-api
Thanh toán theo token từ số dư trả trước, không có phí hàng tháng — xem trang Thanh toán. Với ngữ cảnh lặp lại — chiếm phần lớn dữ liệu mà trình chỉnh sửa hoặc ứng dụng trò chuyện gửi đi — bộ nhớ đệm prompt ảnh hưởng đến hóa đơn nhiều hơn lựa chọn mô hình.

Những gì mô hình tùy chỉnh trong Droid không thể truy cập

Có ba giới hạn được nêu trong chính các trang của Factory. Mỗi giới hạn ảnh hưởng đến điều bạn nên kỳ vọng ở cấu hình trên, chứ không ảnh hưởng đến việc cấu hình có hoạt động hay không.

  • Chỉ dùng được trên các ứng dụng cục bộ. Trang BYOK của Factory nêu rằng mô hình tùy chỉnh khả dụng trong CLI Droid và ứng dụng máy tính, vốn đọc tệp settings.json cục bộ của bạn, và chúng “không xuất hiện trên các nền tảng web hoặc di động được Factory lưu trữ”. Công việc được ủy quyền qua sản phẩm lưu trữ của Factory vẫn tiếp tục dùng suy luận do Factory tính phí, bất kể bạn đã cấu hình khóa nào ở đây.
  • Quản trị viên có thể tắt tính năng này. Tài liệu về quyền kiểm soát doanh nghiệp của Factory ghi modelPolicy.allowCustomModels và allowedBaseUrls, lần lượt tắt hoàn toàn BYOK của người dùng hoặc buộc mọi mô hình tùy chỉnh chỉ dùng một máy chủ được phê duyệt. Trên máy được quản lý, hãy kiểm tra điều này trước khi xử lý sự cố tệp.
  • Phí gói dịch vụ vẫn được tính. Khóa ở đây được dùng bổ sung chứ không thay thế — Factory tính phí thế nào khi bạn vượt mức BYOK và mức đó là bao nhiêu được đề cập trong hướng dẫn chi phí, không được tính lại trên trang này.

Có một điểm dễ mắc cần biết trước khi sao chép cấu hình từ nơi khác: Factory vẫn tải tệp ~/.factory/config.json cũ với các khóa snake_case custom_models và base_url, rồi gộp tệp đó bên dưới settings.json; tài liệu của Factory nêu rằng phép mở rộng ${VAR_NAME} không áp dụng ở đó. Khóa được ghi dưới dạng giá trị giữ chỗ trong tệp đó sẽ được gửi nguyên văn. Hãy dùng settings.json.

Câu hỏi thường gặp

Làm cách nào để thêm endpoint API tùy chỉnh vào Factory Droid?

Chỉnh sửa ~/.factory/settings.json (%USERPROFILE%\.factory\settings.json trên Windows) rồi thêm mảng customModels. Mỗi mục cần ba trường bắt buộc — model, baseUrl và provider — cùng các trường tùy chọn như displayName, apiKey, authMode, maxOutputTokens và extraHeaders. Không có biểu mẫu cài đặt cho việc này; tệp JSON chính là giao diện. Factory theo dõi tệp, vì vậy sau khi lưu, chạy /model trong CLI và mục đó sẽ xuất hiện dưới tiêu đề "Custom models" riêng.

Base URL của Factory Droid có cần kết thúc bằng /v1 không?

Điều đó phụ thuộc vào giá trị provider; tài liệu của Factory làm rõ bằng bảng tham khảo Provider thay vì một câu văn. Hàng Anthropic ghi https://api.anthropic.com không có path, nên provider "anthropic" dùng origin trần — https://api.kunavo.com đối với Kunavo. Mọi hàng Chat Completions trong bảng đều có gốc /v1 (https://api.openai.com/v1, https://openrouter.ai/api/v1), nên provider "generic-chat-completion-api" dùng https://api.kunavo.com/v1. Droid tự nối route, vì vậy /v1 trong mục Anthropic tạo ra /v1/v1/messages và trả về 404 thay vì lỗi xác thực.

Nên dùng giá trị provider nào cho các mô hình Claude trên endpoint của bên thứ ba?

Dùng "anthropic". Factory ghi rõ ba giá trị provider, mỗi giá trị chọn một giao thức truyền tải: "anthropic" cho Anthropic Messages API tại /v1/messages, "openai" cho OpenAI Responses API và "generic-chat-completion-api" cho OpenAI Chat Completions. Giá trị này cho biết endpoint sử dụng giao thức nào, chứ không phải bên nào tính phí; vì vậy, gateway trả lời tại /v1/messages cần dùng "anthropic", bất kể khóa thuộc tài khoản của ai. Factory khuyến nghị dùng "generic-chat-completion-api" trừ khi bạn đang gọi API chính thức của OpenAI hoặc Anthropic — nhưng điều đó liên quan đến giao thức được cung cấp; nếu endpoint hỗ trợ cả hai, bạn có thể chọn.

Vì sao Factory Droid báo provider không hợp lệ hoặc bỏ qua mô hình tùy chỉnh của tôi?

Phần khắc phục sự cố của Factory nêu ba nguyên nhân. Mô hình không xuất hiện trong bộ chọn thường là do lỗi cú pháp JSON trong settings.json hoặc thiếu trường bắt buộc — model, baseUrl hoặc provider. Lỗi "Invalid provider" là vấn đề chính tả: giá trị phải chính xác là anthropic, openai hoặc generic-chat-completion-api. Lỗi xác thực liên quan đến khóa hoặc base URL; Factory khuyên bạn xác nhận base URL khớp với tài liệu của provider. Trước tiên hãy xác định nguyên nhân bên ngoài client bằng lệnh curl ở trên: nếu nhận được JSON thì endpoint và khóa đều ổn, lỗi nằm trong tệp cài đặt.