# Droid

Nguồn: https://docs.aicentos.com/vi/clients/droid

Language: vi

> Dùng aicentos trong Factory Droid —— đăng ký mô hình tùy chỉnh qua settings.json (BYOK)

Droid là agent lập trình dòng lệnh do Factory phát hành, hỗ trợ BYOK: đăng ký mô hình tùy chỉnh trong `~/.factory/settings.json`, trỏ `baseUrl` về aicentos là được. Droid yêu cầu cửa sổ ngữ cảnh của mô hình ít nhất 64k, lưu ý khi chọn mô hình.

## Chuẩn bị

Trước tiên, tạo một Key riêng cho Droid tại trang "API Key" trong Console (khuyến nghị đặt tên `droid` để dễ theo dõi mức sử dụng):

* Console: [https://aicentos.com](https://aicentos.com)
* Tạo Key: [https://aicentos.com/keys](https://aicentos.com/keys)
* Nạp tiền khi hết số dư: [https://aicentos.com/wallet](https://aicentos.com/wallet)

## Cấu hình cần điền

| Trường        | Giá trị                                      |
| ------------- | -------------------------------------------- |
| File cấu hình | `~/.factory/settings.json`                   |
| provider      | `generic-chat-completion-api`                |
| baseUrl       | `https://aicentos.com/v1`                    |
| apiKey        | `${AICENTOS_API_KEY}`                        |
| Mô hình       | tên mô hình trong "Model Square" của Console |

## Các bước thiết lập

### 1. Thiết lập biến môi trường API Key

```bash
export AICENTOS_API_KEY="sk-API-Key-của-bạn"
```

Ghi vào `~/.zshrc` hoặc `~/.bashrc` để lưu lâu dài.

### 2. Sửa settings.json

Sửa `~/.factory/settings.json`, thêm mảng `customModels`:

```json
{
  "customModels": [
    {
      "model": "gpt-4o",
      "displayName": "GPT-4o (aicentos)",
      "baseUrl": "https://aicentos.com/v1",
      "apiKey": "${AICENTOS_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 8192
    }
  ]
}
```

Các trường quan trọng:

| Trường        | Mô tả                                                                      |
| ------------- | -------------------------------------------------------------------------- |
| `model`       | Model ID thực tế gửi đến endpoint, cần khớp với "Model Square" của Console |
| `displayName` | Tên hiển thị trong bộ chọn mô hình, có thể tự đặt                          |
| `baseUrl`     | Địa chỉ API, nên có `/v1`                                                  |
| `apiKey`      | Hỗ trợ mở rộng `${VAR_NAME}`                                               |
| `provider`    | `anthropic` / `openai` / `generic-chat-completion-api`                     |

### 3. Chọn mô hình

Sau khi khởi động `droid`, chạy `/model`, chọn mô hình vừa đăng ký. **Sau khi sửa cấu hình, cần khởi động lại `droid` trong terminal mới** file mới được đọc lại.

## Kiểm tra

Sau khi chọn mô hình, gửi một yêu cầu đơn giản:

```
Trả lời trong một câu: 1+1 bằng mấy
```

Trả về bình thường nghĩa là kết nối thành công.

## Lưu ý

* **`provider` khuyến nghị điền `generic-chat-completion-api`**, nó đi giao thức OpenAI Chat Completions, cũng là lựa chọn đúng cho phần lớn kịch bản BYOK. Điền `openai` sẽ đi Responses API, và ở một số gateway giá trị này sẽ bỏ qua `base_url` trỏ thẳng đến `api.openai.com`; điền `anthropic` thì đi `/v1/messages`.
* **Dọn biến môi trường trước**. Nếu trong shell đã export `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_BASE_URL` hoặc `ANTHROPIC_API_KEY`, chúng sẽ ghi đè file cấu hình, khiến yêu cầu vòng qua gateway bạn đã cấu hình. Trước khi kết nối nên `unset` các biến này.
* Droid đọc đồng thời `~/.factory/settings.json` và bản cũ `~/.factory/config.json`, file trước có ưu tiên cao hơn. Tên trường bản cũ là dạng snake\_case `custom_models` / `model_display_name` / `base_url` / `api_key`, và **không hỗ trợ** mở rộng `${VAR_NAME}`, khuyến nghị thống nhất dùng `settings.json`.
* Cửa sổ ngữ cảnh của mô hình ít nhất 64k, mô hình local quá nhỏ có thể hoạt động bất thường.
* Factory chỉ chạy benchmark cho giao diện chính thức Anthropic / OpenAI, tính tương thích của mô hình tùy chỉnh không được bảo đảm; đã biết subagent đôi khi sẽ fallback về giao diện chính thức của Anthropic.
* Thứ tự xử lý sự cố: có thấy mô hình trong `/model` không → biến môi trường có bị ANTHROPIC\_\* ghi đè không → baseUrl có `/v1` không → số dư có đủ không.

## Liên kết liên quan

* Tài liệu BYOK chính thức: [https://docs.factory.ai/model-independence/byok](https://docs.factory.ai/model-independence/byok)