企业代码助手
私有化部署的代码助手,基于企业代码库训练,支持代码生成、审查、重构建议。
项目概述
企业代码库是公司的核心知识产权。直接使用云端 AI 编程助手(如 GitHub Copilot)意味着代码片段会发送到外部服务器处理,对金融、医疗、军工等敏感行业存在合规风险。
本案例展示了一套完全私有化部署的企业代码助手系统。基于 Continue 开源框架,搭配本地运行的 Ollama/CodeLlama 模型,结合企业内部代码库的 RAG 索引,实现代码生成、代码审查、重构建议等功能,所有数据不出企业内网。
关键指标
系统架构
系统采用「VS Code Extension + 本地推理 + 企业知识库」三层架构。Continue 插件作为 IDE 前端,通过自定义 API 后端路由到本地 LLM 和 RAG 检索服务。
┌──────────────────────────────────────────────────────┐ │ 开发者 IDE (VS Code) │ │ ┌────────────────────────────────────────┐ │ │ │ Continue Extension │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────┐ │ │ │ │ │ 代码补全 │ │ 对话问答 │ │ 审查 │ │ │ │ │ └──────────┘ └──────────┘ └──────┘ │ │ │ └───────────────────┬────────────────────┘ │ │ │ HTTP (内网) │ ├──────────────────────┴──────────────────────────────┤ │ 企业内网 API 网关 │ ├──────────────────────┬──────────────────────────────┤ │ │ │ │ ┌───────────────────▼──────────────┐ ┌──────────┐ │ │ │ 本地 LLM 推理集群 │ │ RAG 检索 │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ ┌──────┐ │ │ │ │ │ Ollama │ │ vLLM │ │ │ │ 代码库 │ │ │ │ │ │ CodeLlama│ │ DeepSeek │ │ │ │ 索引 │ │ │ │ │ └──────────┘ └──────────┘ │ │ └──────┘ │ │ │ └─────────────────────────────────┘ └──────────┘ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ 企业代码向量库 (Chroma) │ │ │ │ 代码片段 │ API文档 │ README │ 技术规范 │ │ │ └──────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────┘
实现细节
本地推理部署
模型选型
主模型选用 CodeLlama-34B(代码生成和审查),辅助 DeepSeek-Coder-6.7B(轻量级补全)。通过 Ollama 管理模型生命周期,支持 GPU 推理加速。
量化优化
使用 GPTQ 4-bit 量化将 CodeLlama-34B 的显存需求从 68GB 降至 20GB,单张 A100-40G 即可运行。推理延迟控制在 1-3 秒,满足交互式编码需求。
负载均衡
多张 GPU 卡组成推理集群,通过 Nginx 做请求分发。高峰期自动扩容(Kubernetes HPA),低峰期缩容至单卡以降低能耗。
企业代码库索引
代码抓取与解析
定时扫描 GitLab/GitHub Enterprise 仓库,使用 tree-sitter 解析代码 AST,提取函数签名、类定义、文档字符串、注释等结构化信息。
代码嵌入
使用 CodeBERT 或 starcoder-embedding 模型将代码片段向量化(768 维),存入 Chroma 向量数据库。支持多语言混合索引(Python/Java/TypeScript/Go)。
增量更新
通过 Git webhook 监听代码变更,只有修改过的文件才重新索引。全量索引首次约 2 小时(10 万文件),增量更新平均 < 30 秒。
产品功能
智能代码补全
基于 FIM(Fill-in-the-Middle)模式,在编码过程中实时预测后续代码。同时从企业代码库中检索最相似代码片段作为参考上下文。
对话式代码审查
选中代码片段后,Agent 自动分析并给出:潜在 Bug、性能问题、安全漏洞、风格规范违反。支持批量审查 PR。
重构建议
分析代码结构,识别设计模式违规和代码坏味道(过长函数、重复代码、过度耦合),自动生成重构方案和对应的代码 diff。
Continue 自定义配置
{
// Continue VS Code Extension 配置
"models": [
{
"title": "企业代码助手",
"provider": "ollama",
"model": "codellama:34b-code-q4_K_M",
"apiBase": "http://internal-llm-cluster:11434",
"completionOptions": {
"temperature": 0.2,
"topP": 0.9,
"maxTokens": 2048
}
},
{
"title": "代码补全(轻量)",
"provider": "ollama",
"model": "deepseek-coder:6.7b-q4_K_M",
"apiBase": "http://internal-llm-cluster:11434",
"completionOptions": {
"temperature": 0.1,
"maxTokens": 512
}
}
],
"contextProviders": [
{
"name": "codebase-rag",
"params": {
"type": "chroma",
"url": "http://internal-rag-service:8000",
"collection": "enterprise-codebase",
"nResults": 10,
"minScore": 0.7
}
},
{
"name": "file",
"params": {
"maxTokens": 4096
}
},
{
"name": "terminal",
"params": {}
}
],
"slashCommands": [
{
"name": "review",
"description": "审查选中的代码片段",
"prompt": "请以下列维度审查代码:安全性、性能、可维护性、代码规范。指出问题并给出修复建议。"
},
{
"name": "refactor",
"description": "分析代码并提出重构建议",
"prompt": "分析这段代码的设计模式、代码坏味道和重构机会。为每个问题提供具体的重构方案。"
},
{
"name": "test",
"description": "为选中代码生成单元测试",
"prompt": "为以下代码生成 pytest 单元测试。覆盖正常路径、边界条件、错误处理。"
}
],
"tabAutocompleteModel": {
"title": "企业代码补全",
"provider": "ollama",
"model": "deepseek-coder:6.7b-q4_K_M",
"apiBase": "http://internal-llm-cluster:11434"
}
} 经验教训
- 模型量化后的质量损失可以接受 — CodeLlama-34B 4-bit 量化在代码生成任务上准确率下降不到 3%,但显存需求降低 70%,性价比极高
- 企业代码索引的质量比规模重要 — 索引 10 万个精心筛选的高质量代码文件,比索引 100 万个仓库所有文件效果好得多。建议从 Top 10 核心项目开始
- Ollama 的并发能力有限 — 默认只支持单请求串行处理,团队规模超过 20 人时需要换用 vLLM 或 TGI 作为推理后端
- 安全审计不能少 — 即使私有化部署,也需要审计日志记录所有查询、补全和代码发送,确保合规