Tài liệu

Cài đặt công cụ agentic

Công cụ agentic gửi nội dung file, output lệnh và toàn bộ lịch sử hội thoại ở mỗi bước. Prompt lớn như vậy có thể mất hàng chục giây trước khi token đầu tiên xuất hiện. Nếu ứng dụng của bạn bỏ cuộc trước, request vẫn bị tính nhưng bạn không nhận được gì. Hãy đặt timeout, streaming, retry và kích thước context như bên dưới.

Vì sao điều này quan trọng

  • Request bị ngắt trước khi có phản hồi vẫn bị tính. Ngay khi request đến, máy chủ AI bắt đầu xử lý toàn bộ prompt. Nếu ứng dụng của bạn ngắt trước (timeout, nút dừng, mất kết nối), chi phí xử lý đã phát sinh nhưng bạn không nhận được phản hồi.
  • Prompt khổng lồ cần hơn 30 giây trước token đầu tiên. Prompt agentic hàng trăm KB với hàng nghìn tin nhắn có thể vượt giới hạn mặc định của nhiều ứng dụng (30 hoặc 60 giây) trước khi một token nào được trả ra.
  • Streaming giữ kết nối luôn sống. Khi bật streaming, máy chủ của chúng tôi gửi header ngay lập tức, rồi gửi tín hiệu keepalive mỗi 10 giây trong lúc chờ phản hồi. Thứ vẫn có thể cắt kết nối là giới hạn thời gian tổng của ứng dụng, nên hãy đặt tối thiểu 300 giây.
  • Chọn model nhanh cho context lớn. Với phiên dài hoặc repo lớn, hãy dùng model nhanh hơn và để dành model lớn cho các bước thật sự cần. So sánh tại trang Bảng giá.

Hướng dẫn chung cho mọi công cụ

Timeout
Tối thiểu 300 giây. Chú ý đơn vị: có công cụ dùng giây (300), có công cụ dùng mili giây (300000).
Streaming
Hãy bật lên. Không có streaming thì không có dữ liệu nào chạy cho đến khi phản hồi hoàn tất, nên proxy và ứng dụng bỏ cuộc sớm hơn.
Retry
Giữ ở mức thấp (0–3). Retry sau timeout là một request mới và cũng bị tính phí. Hãy sửa timeout trước thay vì tăng số lần retry.
Context
Giữ context nhỏ. Dùng compact/tóm tắt tự động, mở phiên mới cho mỗi tác vụ và loại trừ thư mục lớn (node_modules, build, data).

Claude Code

Base URL & key
Làm theo hướng dẫn Claude Code: ANTHROPIC_BASE_URL = https://ai.geraikita.com (không có /v1) và ANTHROPIC_AUTH_TOKEN = key gk- của bạn. Bạn có thể đặt các biến này trong khối env của ~/.claude/settings.json.
Timeout
API_TIMEOUT_MS (mili giây): thời gian mỗi lần thử chờ header phản hồi, mặc định 600000 (10 phút). Đừng giảm; nếu từng giảm, hãy đặt lại tối thiểu 300000.
Streaming
Luôn streaming. Không có cài đặt để tắt.
Retry
CLAUDE_CODE_MAX_RETRIES, mặc định 10, tính cả timeout trước khi phản hồi bắt đầu stream. Với prompt lớn, đặt 2–3 để một bước không bị tính phí lặp đi lặp lại.
Context
/compact tóm tắt hội thoại, /clear bắt đầu hội thoại mới. Auto-compact bật sẵn (autoCompactEnabled); đặt CLAUDE_AUTOCOMPACT_PCT_OVERRIDE thấp hơn (vd. 60) để compact sớm hơn.
~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://ai.geraikita.com",
    "ANTHROPIC_AUTH_TOKEN": "gk-xxxxxxxx",
    "API_TIMEOUT_MS": "600000",
    "CLAUDE_CODE_MAX_RETRIES": "3",
    "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "60"
  }
}

Cline

Base URL & key
Làm theo hướng dẫn Cline: provider OpenAI Compatible (Base URL https://ai.geraikita.com/v1) hoặc Anthropic với Use custom base URL https://ai.geraikita.com.
Timeout
Tài liệu chính thức của Cline không có cài đặt timeout cho provider OpenAI Compatible hay Anthropic (Request Timeout chỉ dành cho Ollama). Để token đầu tiên ra nhanh: thu nhỏ context và chọn model nhanh hơn cho context lớn.
Streaming
Tài liệu chính thức không có cài đặt streaming; không cần thay đổi gì.
Retry
Tài liệu chính thức không có cài đặt retry.
Context
Auto Compact tự động tóm tắt khi context gần đầy. /smol (alias /compact) tóm tắt thủ công, /newtask chuyển bản tóm tắt sang tác vụ mới. Đặt Context Window size trong Model Configuration cho khớp với model.

Roo Code

Base URL & key
Lưu ý: extension Roo Code đã chính thức ngừng hoạt động từ ngày 15 tháng 5 năm 2026. Nếu bạn vẫn dùng: provider OpenAI Compatible, Base URL https://ai.geraikita.com/v1, key gk- của bạn (giống Cline).
Timeout
roo-cline.apiRequestTimeout trong settings.json của VS Code, tính bằng giây (mặc định 600, phạm vi 0–3600, 0 = không giới hạn). Đừng đặt dưới 300.
Streaming
Đảm bảo Enable streaming luôn được tích trong profile OpenAI Compatible.
Retry
Khi bật Auto-Approve, request lỗi được tự động thử lại với độ trễ tăng dần; không có công tắc riêng.
Context
Intelligent Context Condensing (Settings → Context): hạ ngưỡng từ mức mặc định 100% để việc rút gọn bắt đầu sớm hơn, hoặc bấm Condense Context. Loại trừ thư mục lớn bằng .rooignore.

Kilo Code

Base URL & key
Settings → Providers → Custom provider → OpenAI Compatible, Base URL https://ai.geraikita.com/v1, key gk- của bạn. Hoặc dùng file ~/.config/kilo/kilo.jsonc như ví dụ bên dưới.
Timeout
options.timeout trên provider (mili giây) bao gồm thời gian chờ header và byte đầu tiên. Mặc định là 300000, sát giới hạn; hãy đặt 600000. Đừng đặt chunkTimeout quá thấp.
Streaming
Tài liệu chính thức không có cài đặt streaming; không cần thay đổi gì.
Retry
Tài liệu chính thức không có cài đặt retry.
Context
compaction.auto (mặc định true) và /compact. Bạn phải đặt limit.context cho từng model (số nhỏ hơn thì compact sớm hơn): nếu không, auto-compaction sẽ không chạy. Loại trừ thư mục lớn bằng .kilocodeignore hoặc quy tắc permission.
~/.config/kilo/kilo.jsonc
{
  "provider": {
    "geraikita": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Geraikita AI",
      "options": {
        "baseURL": "https://ai.geraikita.com/v1",
        "apiKey": "gk-xxxxxxxx",
        "timeout": 600000
      },
      "models": {
        "claude-sonnet-5": {
          "name": "Claude Sonnet 5",
          "limit": { "context": 128000, "output": 16000 }
        }
      }
    }
  },
  "compaction": { "auto": true }
}

Cursor

Base URL & key
Cursor Settings → Models → OpenAI API key. Tài liệu chính thức của Cursor không mô tả base URL tùy chỉnh; nếu phiên bản Cursor của bạn có Override OpenAI Base URL, hãy nhập https://ai.geraikita.com/v1. API key riêng chỉ dùng được cho model chat (Tab vẫn dùng model tích hợp của Cursor), và request đi qua máy chủ của Cursor.
Timeout
Tài liệu chính thức không có cài đặt timeout điều chỉnh được. Thay vào đó: thu nhỏ context, mở chat mới cho mỗi tác vụ và chọn model nhanh để token đầu tiên đến trước giới hạn của ứng dụng.
Streaming
Do Cursor xử lý; không có cài đặt.
Retry
Tài liệu chính thức không có cài đặt retry.
Context
Cursor tự động tóm tắt phần cũ của hội thoại khi context gần đầy. Mở chat mới mỗi khi đổi tác vụ và loại trừ file lớn bằng .cursorignore.

OpenCode

Base URL & key
Làm theo hướng dẫn OpenCode: provider @ai-sdk/openai-compatible với baseURL https://ai.geraikita.com/v1.
Timeout
Trong provider.geraikita.options (mili giây): headerTimeout (chờ header, mặc định 300000) và chunkTimeout (khoảng cách giữa các chunk stream, mặc định 300000). timeout (giới hạn tổng) tắt theo mặc định; nếu đặt, hãy dùng tối thiểu 300000.
Streaming
Luôn streaming. Không có cài đặt để tắt.
Retry
Tài liệu chính thức không có cài đặt retry. Nếu request liên tục bị ngắt, hãy sửa timeout và thu nhỏ context.
Context
compaction.auto (mặc định true) tự động tóm tắt phiên khi context đầy. /compact tóm tắt thủ công, /new bắt đầu phiên mới.
~/.config/opencode/opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "geraikita": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://ai.geraikita.com/v1",
        "apiKey": "{env:GERAIKITA_API_KEY}",
        "headerTimeout": 300000,
        "chunkTimeout": 300000
      }
    }
  },
  "compaction": { "auto": true }
}

Continue

Base URL & key
Trong config.yaml: provider: openai, apiBase: https://ai.geraikita.com/v1, apiKey = key gk- của bạn.
Timeout
requestOptions.timeout tính bằng giây (mặc định 7200). Dùng tối thiểu 300, không phải 300000.
Streaming
Provider openai luôn streaming.
Retry
Tài liệu chính thức không có cài đặt retry.
Context
defaultCompletionOptions.contextLength và maxTokens giới hạn kích thước context và phản hồi. Mở chat mới cho mỗi tác vụ; Continue CLI có /compact và /clear.
~/.continue/config.yaml
models:
  - name: Claude Sonnet 5 (Geraikita)
    provider: openai
    model: claude-sonnet-5
    apiBase: https://ai.geraikita.com/v1
    apiKey: gk-xxxxxxxx
    requestOptions:
      timeout: 600        # giây, không phải mili giây
    defaultCompletionOptions:
      contextLength: 64000  # nhỏ hơn = lịch sử bị cắt bớt
      maxTokens: 8192

n8n

Base URL & key
Credential OpenAI: đặt Base URL là https://ai.geraikita.com/v1 và API key gk- của bạn. Credential Anthropic: Base URL https://ai.geraikita.com.
Timeout
Node OpenAI Chat Model → Options → Timeout (mili giây). Mặc định là 60000 (60 giây), nguyên nhân phổ biến khiến request bị cắt ở giây thứ 60; hãy đặt tối thiểu 300000. Node HTTP Request → Options → Timeout cũng tính bằng mili giây. Self-hosted: đừng đặt EXECUTIONS_TIMEOUT (giây) thấp hơn mức đó.
Streaming
AI Agent → Options → Enable Streaming (bật sẵn; cần Chat Trigger hoặc Webhook với Response Mode Streaming). Anthropic Chat Model → Stream Responses. OpenAI Chat Model không có tùy chọn streaming, nên hãy dựa vào Timeout đủ dài.
Retry
OpenAI Chat Model → Options → Max Retries, mặc định 2. Retry sau timeout cũng bị tính phí; hãy sửa Timeout trước.
Context
Sub-node Simple Memory → Context Window Length = số lượt tương tác trước được gửi đi. Giữ nhỏ, vd. 5–10.

OpenAI SDK (Python & Node.js)

Base URL & key
base_url / baseURL = https://ai.geraikita.com/v1, api_key / apiKey = key gk- của bạn. Ví dụ cơ bản có trong Request đầu tiên.
Timeout
timeout: giây trong Python, mili giây trong Node.js. Mặc định của SDK là 10 phút, ổn miễn là bạn không hạ xuống dưới 300 giây.
Streaming
stream=True (Python) / stream: true (Node.js).
Retry
max_retries / maxRetries, mặc định 2, tính cả việc thử lại request bị timeout. Với prompt lớn, đặt 0–1.
Context
Chỉ gửi phần lịch sử cần thiết: cắt bớt tin nhắn cũ hoặc tóm tắt trước khi gửi.
from openai import OpenAI

client = OpenAI(
    base_url="https://ai.geraikita.com/v1",
    api_key="gk-xxxxxxxx",
    timeout=600.0,   # giây
    max_retries=1,   # retry sau timeout cũng bị tính phí
)
stream = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "Halo!"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Anthropic SDK (Python & Node.js)

Base URL & key
base_url / baseURL = https://ai.geraikita.com (không có /v1, SDK tự thêm /v1/messages), api_key / apiKey = key gk- của bạn.
Timeout
timeout: giây trong Python, mili giây trong Node.js; mặc định 10 phút. SDK từ chối request không streaming dự kiến kéo dài hơn khoảng 10 phút, nên hãy dùng streaming.
Streaming
client.messages.stream(...), hoặc stream=True / stream: true trên messages.create.
Retry
max_retries / maxRetries, mặc định 2. Với prompt lớn, đặt 0–1.
Context
Chỉ gửi phần lịch sử cần thiết; giới hạn max_tokens theo nhu cầu của phản hồi.
import anthropic

client = anthropic.Anthropic(
    base_url="https://ai.geraikita.com",   # không có /v1
    api_key="gk-xxxxxxxx",
    timeout=600.0,   # giây
    max_retries=1,   # retry sau timeout cũng bị tính phí
)
with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=4096,
    messages=[{"role": "user", "content": "Halo!"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

curl

Base URL & key
Header Authorization: Bearer gk-... tới https://ai.geraikita.com/v1/chat/completions. Ví dụ cơ bản có trong Request đầu tiên.
Timeout
Không có --max-time thì curl không giới hạn tổng thời gian. Nếu dùng, hãy đặt tối thiểu 300 (giây).
Streaming
"stream": true trong body, cộng thêm -N (--no-buffer) để các chunk phản hồi hiện ra ngay.
Retry
--retry mặc định là 0 và cũng thử lại khi timeout. Đừng thêm nó cho prompt lớn.
Context
Bạn tự xây body: chỉ gửi những tin nhắn cần thiết.
bash
curl https://ai.geraikita.com/v1/chat/completions \
  --max-time 600 -N \
  -H "Authorization: Bearer gk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-5","stream":true,"messages":[{"role":"user","content":"Halo!"}]}'

Điều khoản tính phí

Request bị hủy từ phía người mua (ứng dụng timeout, nút dừng, mất kết nối) trước khi có phản hồi vẫn bị tính phí. Output trống chỉ được bồi hoàn khi sự cố ở phía chúng tôi (máy chủ trả về phản hồi trống hoặc lỗi, hoặc không có output trong ≥60 giây). Áp dụng từ ngày 1 tháng 11 năm 2026.

Điều khoản & Điều kiện, Điều 10

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

Ứng dụng của tôi bị timeout và output trống. Tôi có vẫn bị tính phí không?

Có, nếu ứng dụng của bạn ngắt trước khi phản hồi đến: máy chủ AI đã xử lý prompt của bạn. Điều này được quy định trong Điều khoản & Điều kiện và áp dụng từ ngày 1 tháng 11 năm 2026.

Khi nào output trống được bồi hoàn?

Khi sự cố ở phía chúng tôi: máy chủ trả về phản hồi trống hoặc lỗi, hoặc hoàn toàn không có output trong 60 giây trở lên.

Sao không tăng số lần retry cho xong?

Mỗi lần retry là một request mới. Nếu nguyên nhân là timeout quá ngắn, retry chỉ lặp lại khoản phí mà không có kết quả. Hãy tăng timeout lên tối thiểu 300 giây và bật streaming.

Prompt của tôi rất lớn. Cách nào hiệu quả nhất?

Tóm tắt hoặc mở phiên mới, loại trừ thư mục lớn và dùng model nhanh hơn cho context lớn. So sánh các model tại trang Bảng giá.