Các phần cơ sở kiến thức ▾

Điều hướng

▸ Bắt đầu tại đây Theo vai trò

Danh mục

Công cụ 52
Bảng thuật ngữ 12

Công cụ

Factory Droid + JoinGonka Gateway: BYOK trên các mô hình mạng Gonka

Factory Droid (lệnh droid) — tác nhân mã nguồn terminal từ công ty Factory. Nó hiểu dự án, chỉnh sửa tệp, chạy lệnh và kiểm thử, đồng thời có thể lập kế hoạch cho các tác vụ lớn. Có hai chế độ: droid tương tác trong terminal và droid exec một lần — thực hiện một tác vụ từ script hoặc CI.

Droid hoạt động mặc định trên các mô hình từ catalog của Factory, nhưng nó có hỗ trợ BYOK: mảng customModels trong ~/.factory/settings.json chấp nhận bất kỳ endpoint nào hỗ trợ OpenAI Chat Completions. JoinGonka Gateway chính xác là như vậy, vì vậy việc kết nối chỉ cần một lệnh cài đặt — và tác nhân sẽ hoạt động trên các mô hình của mạng phi tập trung Gonka: DeepSeek V4 Flash, GLM-5.3 Flash và MiniMax M2.7, tất cả đều đồng giá — $0.0069 cho một triệu input token.

Một điều kiện cần biết trước: chế độ tương tác Droid yêu cầu đăng nhập vào tài khoản Factory và việc sử dụng mô hình riêng không thay đổi điều này. Lệnh droid exec một lần trên các mô hình BYOK trong lần chạy thử của chúng tôi vẫn hoạt động mà không cần đăng nhập — chi tiết trong phần về BYOK. Các lệnh, tệp và thông báo bên dưới đã được xác minh bằng lần chạy thử thực tế Droid 0.225.1 qua gateway vào ngày 23 tháng 9 năm 2026. Sau khi xác nhận địa chỉ, tài khoản của bạn sẽ nhận được 3M token miễn phí — đủ để bạn tự mình thử nghiệm mọi thứ.

Bắt đầu nhanh: cài đặt và một câu lệnh

Bước 1: cài Droid. Các cách chính thức từ tài liệu Factory:

# macOS and Linux
curl -fsSL https://app.factory.ai/cli | sh

# Homebrew
brew install --cask droid

# Windows (PowerShell)
irm https://app.factory.ai/cli/windows | iex

# via npm
npm install -g droid

Script đặt binary vào ~/.local/bin và gợi ý cách thêm thư mục vào PATH; trên Linux tài liệu yêu cầu cài thêm gói xdg-utils. Kiểm tra bằng droid --version.

Bước 2: lấy key. Đăng ký tại gate.joingonka.ai/register, xác nhận địa chỉ và tạo key với tiền tố jg- trong mục "API key". Một key và một số dư dùng cho tất cả model của mạng lưới.

Bước 3: chạy trình cài đặt.

npx @joingonka/setup --tool droid

Trình cài đặt sẽ hỏi key — key không được truyền qua tham số dòng lệnh để không lưu lại trong lịch sử shell — và thực hiện bốn việc:

  • thêm vào mảng customModels của file ~/.factory/settings.json (trên Windows là %USERPROFILE%\.factory\settings.json) một bản ghi cho mỗi model của mạng lưới: địa chỉ gateway, loại provider generic-chat-completion-api, key dạng literal, cửa sổ ngữ cảnh và giới hạn phản hồi thực tế; file sẽ có quyền 600;
  • đặt model mặc định — sessionDefaultSettings.model — thành DeepSeek V4 Flash, nhưng chỉ khi chưa chọn model nào hoặc model đang trỏ đến một model đã rời mạng lưới. Model từ catalog của Factory hoặc bản ghi BYOK của người khác sẽ không bị ghi đè, mà chỉ gợi ý cách chuyển đổi;
  • lưu bản sao của file cũ, giữ nguyên các bản ghi khác trong customModels, các cài đặt còn lại và chú thích; file không thể phân tích sẽ không bị ghi đè mà sẽ thông báo cần sửa gì;
  • cuối cùng gửi một request trực tiếp đến gateway và cho biết key, địa chỉ và model có được chấp nhận hay không.

Model mặc định khác được chỉ định bằng cờ --model với viết tắt deepseek, glm hoặc minimax — model được chỉ định rõ ràng luôn được ghi lại. Với dotfile và server có chế độ không hỏi, key trong chế độ này lấy từ biến môi trường:

JOINGONKA_API_KEY=jg-your-key npx @joingonka/setup --tool droid --model glm --non-interactive

Không cần khởi động lại Droid: nó tự nhận ra thay đổi trong settings.json. Dòng ! Could not verify right now với phản hồi 429 ở cuối nghĩa là model đang bận, không phải lỗi cấu hình — cấu hình đã được ghi xong.

Cấu hình thủ công: customModels trong settings.json

Mọi thứ trình cài đặt thực hiện đều có thể viết tay. Cài đặt người dùng của Droid được lưu trong ~/.factory/settings.json; nếu tệp chưa tồn tại, Droid sẽ tạo nó trong lần chạy đầu tiên. Đối với mạng Gonka, bạn cần mảng customModels và một model mặc định:

{
  "customModels": [
    {
      "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
      "id": "custom:deepseek-ai/DeepSeek-V4-Flash-0731",
      "displayName": "DeepSeek V4 Flash (Gonka)",
      "baseUrl": "https://gate.joingonka.ai/v1",
      "apiKey": "jg-your-key",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 32768,
      "maxContextLimit": 380000,
      "noImageSupport": true
    },
    {
      "model": "zai-org/GLM-5.3-Flash",
      "id": "custom:zai-org/GLM-5.3-Flash",
      "displayName": "GLM 5.3 Flash (Gonka)",
      "baseUrl": "https://gate.joingonka.ai/v1",
      "apiKey": "jg-your-key",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 8192,
      "maxContextLimit": 390000,
      "noImageSupport": true
    },
    {
      "model": "MiniMaxAI/MiniMax-M2.7",
      "id": "custom:MiniMaxAI/MiniMax-M2.7",
      "displayName": "MiniMax M2.7 (Gonka)",
      "baseUrl": "https://gate.joingonka.ai/v1",
      "apiKey": "jg-your-key",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 8192,
      "maxContextLimit": 200000,
      "noImageSupport": true
    }
  ],
  "sessionDefaultSettings": {
    "model": "custom:deepseek-ai/DeepSeek-V4-Flash-0731"
  }
}
TrườngGiá trịĐiều quan trọng
modelid model của mạngĐược gửi trong yêu cầu nguyên trạng, kèm cả tiền tố nhà cung cấp
idcustom: + id modelTên cố định của bản ghi dùng cho cờ -m và model mặc định. Nếu thiếu trường này, Droid tự tạo tên — từ displayName và số thứ tự
displayNamebất kỳ nhãn nàoĐây là tên model hiển thị trong danh sách /model
baseUrlhttps://gate.joingonka.ai/v1Bắt buộc có /v1 ở cuối: đường dẫn /chat/completions do Droid tự thêm vào
apiKeykhóa jg-… của bạnGhi trực tiếp là cách đáng tin cậy nhất. Cách tham chiếu dạng ${JOINGONKA_API_KEY} cũng hợp lệ, nhưng khi đó biến phải tồn tại trong môi trường chạy Droid, nếu không yêu cầu sẽ không được gửi đi
providergeneric-chat-completion-apiLoại dành cho OpenAI Chat Completions — viết đúng như vậy, chữ thường; toàn bộ hướng dẫn này đã được kiểm chứng với giá trị này
maxOutputTokens32768, 8192, 8192Giới hạn phản hồi của mỗi model trên mạng
maxContextLimit380000, 390000, 200000Cửa sổ ngữ cảnh của model; trường này được mô tả trong lược đồ cài đặt của Factory
noImageSupporttrueCác model của mạng là model văn bản, cờ này tắt việc đính kèm hình ảnh cho bản ghi

Model mặc định được lưu trong sessionDefaultSettings.model và tham chiếu đến bản ghi qua id của nó. Tài liệu Factory có nhắc đến cả khóa model ở gốc tệp, nhưng trong lần chạy thử của chúng tôi, droid exec không có cờ -m lại lấy model từ sessionDefaultSettings — và vẫn như vậy sau khi đổi giá trị.

Khóa nằm trong tệp dưới dạng văn bản thuần: hãy đóng tệp bằng lệnh chmod 600 ~/.factory/settings.json và đừng chuyển các bản ghi chứa khóa vào .factory/settings.json của dự án — tệp này thường bị đưa vào kho mã nguồn. Còn nếu sau khi chạy Droid tệp trông khác đi thì cũng bình thường: mỗi khi lưu bất kỳ cài đặt nào, Droid ghi lại toàn bộ tệp — sắp xếp các khóa, thêm trường index cho các bản ghi và không giữ lại chú thích. Quyền 600 vẫn được giữ nguyên, và trình cài đặt vẫn cập nhật những bản ghi như vậy một cách bình thường.

BYOK trong Droid: chọn mô hình và những yêu cầu tài khoản Factory

Droid hiển thị các bản ghi của riêng mình tách biệt với danh mục: theo tài liệu, ở chế độ tương tác, lệnh /model liệt kê chúng trong mục Custom models, còn Ctrl+N chuyển đổi giữa các model ngay tại ô nhập. Ở chế độ chạy một lần, model được chỉ định bằng cờ -m với giá trị từ trường id, dấu gạch chéo được viết nguyên như vậy: droid exec -m custom:zai-org/GLM-5.3-Flash "…".

Nếu bạn gõ sai tên, Droid sẽ trả lời Invalid model và liệt kê tất cả các model mà nó thấy, bao gồm cả các model của riêng bạn dưới dạng custom:… (display name): qua đó cũng thấy được rằng các bản ghi đã tải thành công. Tên theo kiểu tài liệu Factory, từ nhãn hiển thị và số thứ tự (custom:DeepSeek-V4-Flash-(Gonka)-0), sẽ không hoạt động khi có id rõ ràng — trong lần chạy thử của chúng tôi, nó cũng cho ra Invalid model.

Những gì cần tài khoản Factory. Các model của riêng bạn giải quyết vấn đề thanh toán token, nhưng không giải quyết việc đăng nhập vào chính sản phẩm. Đây là những gì lần chạy Droid 0.225.1 mà không đăng nhập tài khoản cho thấy:

Kịch bảnCó cần đăng nhập Factory khôngKết quả trong lần chạy
droid ở chế độ tương tácCóNgay sau màn hình khởi động — màn hình «Please login with your Factory account to continue» với các lựa chọn Login và Exit; không có tài khoản thì không thể đi tiếp
droid exec trên các model BYOKTheo tài liệu — có, qua khóa FACTORY_API_KEYCả ba model của mạng lưới đều phản hồi; trong đầu ra JSON có factory_credits: 0, trong log có cảnh báo về các tính năng đám mây không khả dụng
Các tính năng đám mây: đồng bộ phiên với phiên bản web, connector, giới hạn góiCóCác yêu cầu tới API Factory nhận 401 và bị bỏ qua — điều này không ảnh hưởng đến hoạt động của agent

Để làm việc trong giao diện, hãy tạo tài khoản Factory và đăng nhập qua trình duyệt — mục Login hoặc lệnh /login; trên máy không có trình duyệt, tài liệu đề xuất dùng khóa từ cài đặt tài khoản trong biến FACTORY_API_KEY. Việc chạy droid exec mà không đăng nhập thì tiện để thử nghiệm, nhưng không được mô tả chính thức — đừng dựa vào nó trong CI. Theo trang giá của Factory, BYOK nằm trong tất cả các gói cá nhân với hạn mức miễn phí, và vượt hạn mức thì việc dùng BYOK được tính phí theo điều kiện của gói; điều kiện hiện hành — tại factory.ai/pricing. Token của các model mạng lưới thì được thanh toán riêng — từ số dư JoinGonka.

Nên chọn model nào. Giá của tất cả các model mạng lưới đều như nhau, nên lựa chọn là về hành vi. Đây là cách chúng hoạt động trong lần chạy droid exec của chúng tôi trên cùng một tác vụ — đọc file và tìm lỗi:

ModelNgữ cảnh / phản hồiHành vi trong Droid
DeepSeek V4 Flash380K / 32768Trả lời đúng chỉ trong hai lượt. Trần phản hồi lớn nhất trong mạng lưới, nên trình cài đặt cũng đặt nó làm mặc định. Với --auto low, nó cũng đã sửa file và tự chạy để kiểm tra
GLM-5.3 Flash390K / 8192Trả lời đúng trong hai lượt, khoảng 20 giây. Là model suy luận: một phần trần phản hồi dành cho suy luận
MiniMax M2.7200K / 8192Trả lời đúng trong hai lượt, 10-20 giây. Phần suy luận của model đến tách biệt với phản hồi, và trong đầu ra droid exec chỉ còn lại phản hồi

Cờ -r (mức độ suy luận), theo tài liệu Factory, không được áp dụng cho các model BYOK. Lý do vì sao DeepSeek V4 Flash được chọn làm mặc định được phân tích trong bài đánh giá model.

Kiểm tra: những gì sẽ xảy ra

Hãy đặt vào một thư mục trống tệp calc.py có một lỗi rõ ràng — chẳng hạn, diện tích hình chữ nhật mà các cạnh được cộng thay vì nhân — rồi yêu cầu Droid tìm ra lỗi đó:

droid exec "Read the file calc.py in the current project directory and tell me in one sentence whether it has a bug."

Không có cờ nào, droid exec hoạt động ở chế độ chỉ đọc: xem tệp thì được, sửa thì không. Agent sẽ tự gọi công cụ đọc và trả lời đúng trọng tâm, kèm chỉ ra biểu thức bị lỗi. Với cờ -o json, câu trả lời đến dưới dạng một đối tượng duy nhất, rất tiện để xử lý bằng script (kết quả được rút gọn):

{"type":"result","subtype":"success","is_error":false,"duration_ms":2239,"num_turns":2,
 "result":"Yes, the file has a bug: the rectangle area is computed as the sum of the side lengths, but it should be their product (width * height). …",
 "usage":{"input_tokens":19016,"output_tokens":146,"factory_credits":0,"ttft_ms":747}}

Trường factory_credits: 0 xác nhận rằng công việc chạy trên model của bạn, chứ không phải bằng credit của Factory. Để agent có thể sửa tệp, hãy thêm mức tự chủ: droid exec --auto low "Fix the bug in calc.py and change nothing else." — trong lần chạy thử của chúng tôi, DeepSeek V4 Flash đã đọc tệp, thay phép cộng bằng phép nhân và tự chạy script để chắc chắn rằng kết quả in ra là 12.

Kiểm tra thứ ba — từ phía gateway: trong trang quản lý ở mục «Sử dụng», yêu cầu sẽ xuất hiện trong phần phân tách «Theo model», còn trong khối «Theo key» thì thời gian của yêu cầu gần nhất sẽ được cập nhật.

Nếu có gì đó không ổn, hãy lưu ý một đặc điểm của Droid: trên console, droid exec chỉ in ra Error during droid execution: Exec failed (trong JSON là "result":"Exec failed"), còn nguyên nhân thật vẫn nằm trong log. Có thể lấy ra bằng một lệnh duy nhất:

grep agent_error_count ~/.factory/logs/droid-log-single.log | grep -o '"errorMessage":"[^,]*' | tail -1
Hiện tượngÝ nghĩaCần làm gì
401 Invalid API keyGateway không chấp nhận keyKiểm tra apiKey trong bản ghi model: key phải đầy đủ, không có khoảng trắng. Nếu ở đó là tham chiếu ${…} — biến phải có trong môi trường mà Droid được chạy từ đó
405 <html>…405 Not Allowed…Trong baseUrl thiếu hậu tố /v1Địa chỉ phải chính xác là https://gate.joingonka.ai/v1
400 Model "…" not found. Available: …Lỗi đánh máy trong trường model, thường gặp nhất là thiếu tiền tố của nhà cung cấpSao chép id từ danh sách mà gateway đưa ra ngay trong chính thông báo đó
Invalid model: custom:… và danh sách modelCờ -m hoặc model mặc định tham chiếu đến một bản ghi không tồn tạiLấy tên từ mục Available custom models. Model của mạng không có ở đó — nghĩa là Droid chưa nạp các bản ghi: hãy kiểm tra cú pháp JSON
429 Model "…" is currently overloaded in the Gonka network (rate limit)Model trên mạng hiện không còn dung lượng trốngDroid tự lặp lại yêu cầu — ở chúng tôi là năm lần thử trong khoảng hai phút. Không ăn thua thì đổi model bằng cờ -m; tình trạng mạng xem tại trang trạng thái
402Số dư tài khoản đã hết tiềnNạp thêm vào tài khoản ở mục «Thanh toán»; key vẫn hoạt động bình thường
«Please login with your Factory account to continue»Chế độ tương tác yêu cầu tài khoản FactoryĐăng nhập qua Login hoặc làm việc qua droid exec
Dừng lâu trước câu trả lời đầu tiênHàng đợi đến model vào giờ cao điểmChờ hoặc đổi model bằng cờ -m

Chi phí là bao nhiêu

Công cụ đại lý tiêu tốn token khác với chat: với mỗi câu lệnh của bạn, Droid thêm vào đó lời nhắc hệ thống, mô tả công cụ và bản chụp thư mục làm việc, và một tác vụ có thể mất vài lượt thực hiện. Trong lần chạy thử của chúng tôi, mỗi lượt tiêu tốn khoảng 9,5 nghìn token đầu vào ngay cả trước câu hỏi của bạn: tác vụ «đọc tệp và tìm lỗi» mất hai lượt và khoảng 19 nghìn token, «sửa và kiểm tra» — bốn lượt và khoảng 44 nghìn token. Vì vậy, giá mỗi token ở đây rất quan trọng.

Thông qua JoinGonka Gateway, token có giá $0.0069 cho một triệu token đầu vào và $0.021 cho một triệu token đầu ra — giá này giống nhau cho tất cả các mô hình trong mạng và được cập nhật trên trang này từ nguồn trực tiếp.

Kịch bảnMức tiêu thụQua Gateway
Tác vụ đơn lẻ: đọc, sửa, kiểm tra19-44K tokenphần trăm xu
Ngày làm việc tích cực3-7M tokenvài xu
Tháng phát triển tích cực~150M tokenkhoảng một đô la

Các ước tính trong cột bên phải dựa trên giá tháng 9 năm 2026. Để so sánh — cách bạn có thể thanh toán cho các mô hình trong Droid:

Phương thứcMô hình thanh toánHạn chế
Mô hình từ danh mục Factoryđăng ký gói Pro, Plus hoặc Maxgiới hạn trượt trong 5 giờ, 7 và 30 ngày; ngoài hạn mức — dùng Droid Core pool hoặc mua thêm Extra Usage
BYOK với khóa nhà cung cấptheo token theo giá nhà cung cấphóa đơn tăng theo độ dài phiên; giá phụ thuộc vào mô hình đã chọn
JoinGonka Gateway (BYOK)theo token, số dư trả trướcmức tiêu thụ hiển thị trong bảng điều khiển, cổng kết nối không có đăng ký hoặc hạn ngạch; các điều kiện BYOK phía Factory giống như bất kỳ khóa nào của riêng bạn

Lệnh /cost trong giao diện Droid hiển thị thống kê phiên, và mức tiêu thụ chính xác cũng như số dư còn lại cho các mô hình BYOK — nằm trong bảng điều khiển của cổng, tại mục «Sử dụng» (Usage) và «Thanh toán» (Billing). Hãy tạo một khóa riêng cho Droid — lưu lượng của nó sẽ hiển thị ở một dòng riêng biệt.

Những lưu ý khi làm việc

Tính tự chủ. Ở chế độ chạy một lần, mặc định Droid chỉ đọc, còn quyền hạn được mở rộng theo các mức: --auto low — sửa tệp, --auto medium — thêm cả cài đặt dependency, build, test và commit cục bộ, --auto high — cho tới cả push và deploy. Cờ --skip-permissions-unsafe gỡ bỏ mọi kiểm tra — chỉ dùng cho container dùng một lần. Ở chế độ tương tác, mức được chuyển bằng Ctrl+L, còn mức khởi đầu do sessionDefaultSettings.autonomyLevel quy định; mặc định ở đó là off — mọi thứ đều phải xác nhận.

Chữ ký trong commit. Tùy chọn includeCoAuthoredByDroid mặc định được bật: Droid thêm vào thông điệp commit một dòng ghi nhận đồng tác giả. Nếu không cần, hãy ghi "includeCoAuthoredByDroid": false vào settings.json.

Phiên làm việc được lưu ở đâu. Sau khi đăng nhập tài khoản, mặc định Droid đồng bộ các phiên CLI lên bản web của Factory — việc này do cloudSessionSync đảm nhiệm. Theo tài liệu, các key BYOK vẫn ở lại cục bộ; nếu muốn cả nội dung trao đổi cũng chỉ nằm trên máy, hãy đặt "cloudSessionSync": false. Về phía mình, gateway không lưu nội dung prompt và câu trả lời — trong thống kê chỉ còn lại các số liệu tổng hợp về mức tiêu thụ.

Cập nhật. Bản cài bằng script tự cập nhật; có thể ghim phiên bản bằng biến FACTORY_DROID_AUTO_UPDATE_ENABLED=false hoặc bằng lệnh droid update --version <version>; các bản build từ npm không tự cập nhật. Sau khi cập nhật, chỉ cần một lệnh droid exec để kiểm tra rằng các model của mạng vẫn còn nguyên.

Hình ảnh. Các model của mạng là model văn bản; để xử lý ảnh chụp màn hình, hãy để sẵn một bản ghi với model có khả năng nhìn hình, ở nhà cung cấp khác.

Nếu bắt buộc phải làm việc mà không có tài khoản nhà cung cấp. Chính những model của mạng này cũng kết nối được với các terminal agent mở, vốn không cần đăng nhập — chẳng hạn với OpenCode bằng cùng bộ cài đó, với cờ --tool opencode.

Factory Droid kết nối với JoinGonka Gateway qua BYOK: lệnh npx @joingonka/setup --tool droid ghi thêm vào customModels của tệp ~/.factory/settings.json các mục DeepSeek V4 Flash, GLM-5.3 Flash và MiniMax M2.7 (provider: generic-chat-completion-api, baseUrl với /v1, khóa jg-…, id tường minh dạng custom:<model>) và đặt DeepSeek V4 Flash vào sessionDefaultSettings.model. Chế độ tương tác yêu cầu tài khoản Factory; droid exec trên các mô hình BYOK trong bản chạy 0.225.1 vẫn hoạt động mà không cần tài khoản, với factory_credits: 0. Cách kiểm tra là droid exec -o json và mục «Sử dụng» trong bảng điều khiển, còn nguyên nhân lỗi Droid ghi không phải ra console mà vào ~/.factory/logs/droid-log-single.log.

Muốn tìm hiểu thêm?

Khám phá các phần khác hoặc bắt đầu kiếm GNK ngay bây giờ.

Nhận khóa và token miễn phí →