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: 补全延迟过高怎么优化?¶
- 使用更小的模型(StarCoder-1B 延迟最低)
- 确保 GPU 正确加载(检查
nvidia-smi) - 减少上下文窗口大小
- 网络层面:将服务部署在与开发者同一局域网
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/