OpenCode là trợ lý lập trình chạy trên terminal, có thể kết nối với bất kỳ API tương thích OpenAI nào. Trỏ OpenCode tới một phiên bản Ollama cục bộ đang chạy Gemma 4, vậy là bạn có ngay một trợ lý lập trình miễn phí mà code không bao giờ bị gửi ra ngoài.

Dưới đây là cách thiết lập trên Mac với Apple Silicon: cài Ollama, pull Gemma 4, tích hợp vào OpenCode.

Yêu cầu

  • Mac với Apple Silicon (M1/M2/M3/M4/M5) và ít nhất 16GB unified memory
  • macOS đã cài Homebrew
  • OpenCode đã được cài đặt (xem opencode.ai hoặc cài qua trình quản lý gói)

Mô hình 8B mặc định của Gemma 4 sử dụng khoảng 9,6GB khi nạp vào bộ nhớ, nên 16GB unified memory cho bạn đủ không gian để chạy cả Ollama và OpenCode mà không gặp vấn đề gì.

Bước 1: Cài đặt Ollama

brew install --cask ollama-app

Lệnh này cài đặt Ollama.app vào /Applications/ và CLI ollama tại /opt/homebrew/bin/ollama.

Bước 2: Khởi động Ollama

open -a Ollama

Đợi biểu tượng trên thanh menu xuất hiện, sau đó kiểm tra xem server đã chạy chưa:

ollama list

Bước 3: Pull Gemma 4

ollama pull gemma4

Tải xuống khoảng 9,6GB. Kiểm tra:

ollama list
# NAME             ID              SIZE      MODIFIED
# gemma4:latest    ...             9.6 GB    ...

Chạy thử:

ollama run gemma4:latest "Hello, what model are you?"

Kiểm tra tăng tốc GPU:

ollama ps
# Should show CPU/GPU split, e.g. 14%/86% CPU/GPU

Ollama v0.19+ trên Apple Silicon tự động sử dụng framework MLX của Apple để tăng tốc suy luận.

Bước 4: Cấu hình OpenCode để sử dụng Gemma 4

OpenCode dùng file cấu hình tại ~/.config/opencode/opencode.jsonc. Thêm Ollama làm provider tùy chỉnh:

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "gemma4:latest": {}
      }
    }
  }
}

Vì Ollama chạy cục bộ nên bạn không cần API key. Nhưng OpenCode yêu cầu một mục xác thực, nên hãy thêm một giá trị tạm (placeholder) vào ~/.local/share/opencode/auth.json:

{
  "ollama": {
    "type": "api",
    "key": "ollama"
  }
}

Khởi động lại OpenCode và dùng /models để chuyển sang ollama/gemma4:latest.

Bước 5: Giữ Gemma 4 luôn được nạp

Ollama tự động gỡ mô hình khỏi bộ nhớ sau 5 phút không hoạt động. Với một trợ lý lập trình bạn dùng cả ngày, điều này dẫn đến những lần khởi động lạnh (cold start) không cần thiết.

Đặt keep-alive thành vô thời hạn:

launchctl setenv OLLAMA_KEEP_ALIVE "-1"

Khởi động lại Ollama để thay đổi có hiệu lực. Để duy trì qua các lần khởi động lại máy, thêm vào ~/.zshrc:

export OLLAMA_KEEP_ALIVE="-1"

Bật tự khởi động khi đăng nhập: nhấn biểu tượng Ollama trên thanh menu → Launch at Login.

Tự động nạp trước khi khởi động

Tạo một launch agent để Gemma 4 được nạp sẵn và sẵn sàng sau mỗi lần khởi động lại:

cat << 'EOF' > ~/Library/LaunchAgents/com.ollama.preload-gemma4.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.ollama.preload-gemma4</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/ollama</string>
        <string>run</string>
        <string>gemma4:latest</string>
        <string></string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>StandardOutPath</key>
    <string>/tmp/ollama-preload.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/ollama-preload.log</string>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.ollama.preload-gemma4.plist

Lệnh này gửi prompt rỗng đến mô hình mỗi 5 phút để giữ nó trong bộ nhớ.

Điểm mạnh của Gemma 4 trong OpenCode

Gemma 4 8B miễn phí, chạy cục bộ, và đáng ngạc nhiên là khá hữu ích cho công việc lập trình hàng ngày:

  • Giải thích code. Hỏi một hàm làm gì, một module được cấu trúc thế nào, hoặc một regex khớp với gì. Câu trả lời rõ ràng và thường chính xác cho các codebase thông thường.
  • Chỉnh sửa nhanh. Sửa lỗi chính tả, cập nhật import, thêm field vào type definition, đổi tên biến. Thay đổi trên một file là thế mạnh của nó.
  • Sinh code boilerplate. File cấu hình, test stub, khung API route, mẫu Dockerfile. Các khuôn mẫu phổ biến không cần nhiều suy luận.
  • Hỗ trợ lệnh shell. Quên flag git hoặc filter jq? Gemma 4 cho bạn lệnh mà không cần phải lên Stack Overflow tra cứu.

Những điểm còn hạn chế

  • Suy luận nhiều bước. Các tác vụ yêu cầu lập kế hoạch qua nhiều file hoặc hiểu luồng điều khiển phức tạp thường cho kết quả không đầy đủ.
  • Tái cấu trúc lớn. Nếu bạn cần thay đổi phối hợp trên toàn codebase, mô hình 8B mất tính nhất quán. Nó xử lý từng file nhưng không duy trì được cái nhìn toàn cục.
  • Trường hợp biên và bug tinh vi. Gemma 4 phát hiện được các vấn đề rõ ràng nhưng bỏ sót loại bug cần kiến thức chuyên sâu hoặc suy luận qua các trường hợp đặc biệt.

Nâng cao: thêm Haimaker để dùng mô hình đám mây

Gemma 4 cục bộ đáp ứng được những nhu cầu cơ bản. Khi gặp thứ nó không xử lý được — debug phức tạp, tái cấu trúc nhiều file, bất kỳ thứ gì cần suy luận sâu — bạn sẽ muốn một mô hình đám mây. Haimaker cho bạn một API key duy nhất để dùng Claude Opus, GPT-5, Gemini Pro và nhiều mô hình khác.

Thêm Haimaker làm provider thứ hai bên cạnh Ollama:

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "gemma4:latest": {}
      }
    },
    "haimaker": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://api.haimaker.ai/v1"
      },
      "models": {
        "anthropic/claude-sonnet-4-6": {},
        "openai/gpt-5": {},
        "google/gemini-2.5-pro": {}
      }
    }
  }
}

Thêm API key Haimaker của bạn vào ~/.local/share/opencode/auth.json:

{
  "ollama": {
    "type": "api",
    "key": "ollama"
  },
  "haimaker": {
    "type": "api",
    "key": "YOUR_HAIMAKER_API_KEY"
  }
}

Bây giờ bạn có thể chuyển đổi giữa mô hình cục bộ và đám mây bằng /models trong OpenCode. Dùng Gemma 4 cho những việc nhanh. Chuyển sang Sonnet hoặc GPT-5 khi tác vụ trở nên khó.

Đăng ký tại haimaker.ai để lấy API key và duyệt danh mục mô hình.

LẤY API KEY HAIMAKER NGAY

Khắc phục sự cố

Provider không xuất hiện trong /models. Khởi động lại OpenCode sau khi chỉnh file cấu hình. Các thay đổi trong opencode.jsonc sẽ không được OpenCode áp dụng khi nó đang chạy.

Lỗi “Model not found”. Đảm bảo model ID trong cấu hình khớp chính xác với những gì Ollama báo. Chạy ollama list và dùng tên như hiển thị — thường là gemma4:latest.

Lỗi xác thực với Ollama. Mặc dù Ollama không cần xác thực, hệ thống provider của OpenCode yêu cầu một mục trong auth.json. Giá trị tạm "key": "ollama" là đủ.

Phản hồi chậm. Đảm bảo bạn đang dùng Ollama v0.19+ để được tăng tốc MLX trên Apple Silicon. Chạy ollama --version để kiểm tra. Đồng thời đóng các ứng dụng chiếm dụng nhiều unified memory — trình duyệt mở nhiều tab thường là nguyên nhân chính.

Vấn đề cửa sổ ngữ cảnh. Gemma 4 hỗ trợ cửa sổ ngữ cảnh lớn, nhưng trên phần cứng 16GB, hãy giữ đầu vào dưới 32K token để có chất lượng đầu ra ổn định. Nếu bạn thấy phản hồi kém đi với prompt dài, đó có thể là lý do.

Các lệnh Ollama hữu ích

LệnhMô tả
ollama listLiệt kê các mô hình đã tải xuống
ollama psHiển thị mô hình đang chạy và mức sử dụng bộ nhớ
ollama run gemma4:latestTrò chuyện tương tác
ollama stop gemma4:latestGỡ mô hình khỏi bộ nhớ
ollama pull gemma4:latestCập nhật lên phiên bản mới nhất
ollama rm gemma4:latestXóa mô hình

Đã dùng Haimaker với OpenCode? Xem hướng dẫn thiết lập provider tùy chỉnh đầy đủ để thêm nhiều mô hình hơn.