跳转至

Tabby 代码 AI 自托管

为什么要学 Tabby

Tabby 是一个开源的自托管 AI 代码助手,功能类似 GitHub Copilot 但完全运行在你自己的服务器上。对于关注代码安全和隐私的团队,Tabby 提供了企业级的代码补全和对话能力,同时确保源代码不会离开内网。它支持多种编程语言,可对接各种开源代码模型,并且提供了完善的管理后台来监控使用情况。


核心概念

概念白话解释用途
Code Completion实时代码补全编写代码时自动提示下一行
Chat代码对话解释代码、重构、debug
Repository Context仓库索引让 AI 理解你的代码库上下文
Model Backend底层推理引擎支持多种模型和硬件
Team Management团队管理多用户认证与使用统计
RAG检索增强生成基于代码库的精准回答

安装配置

Docker 部署

# GPU 版本(推荐)
docker run -d \
  --name tabby \
  --gpus all \
  -p 8080:8080 \
  -v $HOME/.tabby:/data \
  tabbyml/tabby \
  serve --model StarCoder-1B --chat-model Qwen2-1.5B-Instruct

# CPU 版本
docker run -d \
  --name tabby \
  -p 8080:8080 \
  -v $HOME/.tabby:/data \
  tabbyml/tabby \
  serve --model StarCoder-1B --device cpu

Docker Compose 生产部署

version: '3.8'
services:
  tabby:
    image: tabbyml/tabby:latest
    command: serve --model StarCoder-7B --chat-model Qwen2-7B-Instruct
    ports:
      - "8080:8080"
    volumes:
      - tabby-data:/data
    environment:
      - TABBY_WEBSERVER_JWT_TOKEN_SECRET=your-secret-key
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    restart: unless-stopped

volumes:
  tabby-data:

可用模型

# 代码补全模型(按大小)
# StarCoder-1B   → 入门级,2GB 显存
# StarCoder-3B   → 平衡选择,4GB 显存
# StarCoder-7B   → 高质量,8GB 显存
# CodeLlama-13B  → 专业级,16GB 显存

# 对话模型
# Qwen2-1.5B-Instruct → 轻量对话
# Qwen2-7B-Instruct   → 高质量对话
# CodeLlama-Instruct   → 代码专精对话

快速上手

访问管理后台

启动后打开 http://localhost:8080,首次访问会引导创建管理员账户。

IDE 插件安装

VS Code: 1. 安装扩展 "Tabby" 2. 设置 Endpoint: http://your-server:8080 3. 输入 Token(在管理后台生成)

Neovim:

-- 使用 lazy.nvim
{
  'TabbyML/vim-tabby',
  config = function()
    vim.g.tabby_server_url = 'http://localhost:8080'
    vim.g.tabby_token = 'your-token'
  end
}

JetBrains: 在 Marketplace 搜索 "Tabby" 安装,设置中填入服务器地址和 Token。

使用代码补全

安装插件后,正常编写代码即可看到 Tabby 的补全建议: - Tab 键接受补全 - Esc 键拒绝 - 支持多行补全

API 直接调用

# 代码补全
curl -X POST http://localhost:8080/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token" \
  -d '{
    "language": "python",
    "segments": {
      "prefix": "def fibonacci(n):\n    ",
      "suffix": "\n    return result"
    }
  }'

# 健康检查
curl http://localhost:8080/v1/health

进阶用法

仓库索引配置

# 在管理后台添加 Git 仓库
# 或通过 API
curl -X POST http://localhost:8080/repositories \
  -H "Authorization: Bearer admin-token" \
  -d '{
    "name": "my-project",
    "git_url": "https://github.com/org/repo.git"
  }'

# 手动触发索引
curl -X POST http://localhost:8080/repositories/my-project/resolve

团队管理

# 创建邀请链接
# 在管理后台 Settings → Team → Create Invitation

# 查看使用统计
curl http://localhost:8080/v1/admin/usage \
  -H "Authorization: Bearer admin-token"

自定义模型

# ~/.tabby/config.toml
[model.completion.http]
kind = "llama.cpp/completion"
api_endpoint = "http://localhost:8081/v1"
prompt_template = "<|fim_prefix|>{prefix}<|fim_suffix|>{suffix}<|fim_middle|>"

[model.chat.http]
kind = "openai/chat"
api_endpoint = "http://localhost:11434/v1"
model_name = "deepseek-coder:33b"

SSL 与反向代理

server {
    listen 443 ssl;
    server_name tabby.company.com;

    ssl_certificate /etc/ssl/tabby.pem;
    ssl_certificate_key /etc/ssl/tabby.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off;
    }
}

监控与告警

# Prometheus 指标
# Tabby 在 /metrics 暴露 Prometheus 指标

# Grafana Dashboard 配置关注:
# - tabby_completion_latency_seconds
# - tabby_completion_count_total
# - tabby_chat_count_total
# - tabby_model_loading_time_seconds

常见问题

Q: 补全延迟过高怎么优化?

  1. 使用更小的模型(StarCoder-1B 延迟最低)
  2. 确保 GPU 正确加载(检查 nvidia-smi
  3. 减少上下文窗口大小
  4. 网络层面:将服务部署在与开发者同一局域网

Q: 如何升级模型但不丢失配置?

docker stop tabby
docker rm tabby
# 数据卷会保留
docker run -d --name tabby --gpus all -p 8080:8080 \
  -v $HOME/.tabby:/data \
  tabbyml/tabby serve --model NewModel

Q: 支持哪些编程语言?

几乎所有主流语言:Python、JavaScript/TypeScript、Java、Go、Rust、C/C++、Ruby、PHP、Swift、Kotlin 等。补全质量取决于训练数据中的语言比例。

Q: 能否用 Ollama 作为后端?

可以,通过自定义 HTTP 模型配置对接 Ollama 的 API:

[model.chat.http]
kind = "openai/chat"
api_endpoint = "http://localhost:11434/v1"
model_name = "codellama"


参考资源

  • GitHub:https://github.com/TabbyML/tabby
  • 文档:https://tabby.tabbyml.com/
  • 模型注册表:https://tabby.tabbyml.com/docs/models/
  • IDE 插件:https://tabby.tabbyml.com/docs/extensions/
  • Blog:https://tabby.tabbyml.com/blog/