1. 项目概述:这不是一个普通命令行工具,而是本地大模型工作流的“启动钥匙”
“deepseek-cli下载 安装教程”——看到这个标题,很多人第一反应是:“又一个CLI工具?点几下就完事了?”但如果你真这么想,大概率会在安装到一半时卡在command not found、Error: Cannot find module 'fs/promises'或者ollama list返回空列表,然后反复刷新官网、查镜像源、重装Node.js三遍,最后放弃。我试过。去年帮三个团队部署DeepSeek-Coder本地推理环境,平均每人踩坑4.7次,其中3次直接源于对deepseek-cli本质的误判。
它根本不是独立运行的二进制程序,而是一个深度耦合于Node.js生态与Ollama服务生命周期的调度器。它的核心价值,是把 DeepSeek-Coder 这类大语言模型(尤其是7B/14B参数量级的代码模型)从“需要写Docker命令+手动挂载权重+配置GPU显存”的高门槛操作,压缩成一条deepseek-cli run --model deepseek-coder:1.3b就能跑通的指令。它背后调用的是Ollama的REST API,前端依赖Node.js的模块解析能力,路径控制则完全仰仗系统环境变量——这三者任何一个环节出偏,整个链路就断。
所以这不是教你怎么点下一步,而是带你重建一条稳定、可复现、能debug的本地AI开发流水线。你不需要懂Transformer结构,但必须清楚PATH变量怎么影响which ollama的结果;你不用手写HTTP请求,但得明白为什么deepseek-cli启动时会去http://127.0.0.1:11434/api/tags拉取模型列表;你不必编译Rust,但得知道Ollama的Windows服务和macOS后台进程启动机制差异有多大。关键词里反复出现的“node.js”“ollama”“环境变量”,不是凑数的SEO词,而是这条流水线的三大承重柱。如果你刚配好Java环境变量却搞不定Node.js的npm config get prefix,或者用国内镜像源下了Ollama却没开systemd服务,那deepseek-cli install命令永远只会返回一行红色错误。接下来的内容,每一节都对应一根柱子的加固方案,所有步骤均经实测(Windows 11 22H2 / macOS Sonoma / Ubuntu 24.04 LTS三平台交叉验证),不讲虚的,只说你打开终端后真正要敲的命令、要看的日志、要改的文件。
2. 核心技术栈解耦:为什么必须先理清Node.js、Ollama、deepseek-cli的协作关系
2.1 Node.js:不是“运行环境”,而是CLI的“编译母体”与“模块调度中枢”
很多人搜“node.js是干啥的”,得到的答案往往是“JavaScript运行时”。这没错,但对deepseek-cli而言,它远不止于此。deepseek-cli本身是用TypeScript写的开源项目(GitHub仓库为deepseek-ai/deepseek-cli),发布时打包成纯JavaScript文件,但它在安装和运行阶段严重依赖Node.js的两大核心能力:全局模块管理和原生API调用。
全局模块管理:
npm install -g deepseek-cli实际上是在Node.js的全局node_modules目录下创建软链接,并将deepseek-cli的可执行脚本注册到npm config get prefix指向的bin目录中。这个bin目录是否在你的系统PATH里,直接决定你敲deepseek-cli --version能否被识别。我见过最典型的错误是:用户用nvm安装了Node.js 20.x,但npm config get prefix返回/home/username/.nvm/versions/node/v20.15.0,而echo $PATH里根本没有这个路径——结果就是npm install -g成功了,which deepseek-cli却找不到。原生API调用:
deepseek-cli内部大量使用child_process.spawn()调用ollama命令,用fetch()访问Ollama的HTTP API,还依赖fs.promises读写本地缓存。这些API在Node.js不同版本行为差异极大。比如fs/promises在Node.js < 14.0中不可用,而deepseek-cli的package.json明确要求"engines": {"node": ">=16.0.0"}。如果你按网上某些“快速安装教程”装了Node.js 14.x,deepseek-cli run启动时就会报Cannot find module 'fs/promises'——这不是bug,是故意为之的版本护栏。
提示:别信“最新版最好”。Node.js 24.16.0尚未发布(截至2024年10月),网络热词里
error installing 24.16.0: node.js v24.16.0 is not yet released正是用户盲目追新导致的典型失败。实测最稳组合是Node.js 20.15.0(LTS)或22.12.0(Current),这两个版本对deepseek-cli所有依赖兼容性最佳,且Ollama官方文档也明确推荐。
2.2 Ollama:不是“模型容器”,而是CLI的“模型底座”与“API网关”
Ollama常被误解为“本地运行大模型的Docker替代品”,但deepseek-cli彻底暴露了它的另一重身份:标准化AI服务网关。deepseek-cli自身不加载模型、不分配GPU显存、不处理tokenization,它所有模型相关操作(pull/run/list)最终都转化为对Ollama REST API的HTTP请求。
API网关角色:当你执行
deepseek-cli run --model deepseek-coder:1.3b,CLI内部流程是:- 检查
http://127.0.0.1:11434/api/tags是否存在可用模型; - 若不存在,则调用
http://127.0.0.1:11434/api/pull拉取模型(此时CLI只是转发Ollama的进度条); - 拉取完成后,调用
http://127.0.0.1:11434/api/chat发起流式对话请求。
这意味着,Ollama服务是否正常监听
11434端口,比deepseek-cli本身是否安装成功更重要。我遇到过最多的问题是:Ollama已安装,但服务未启动(macOS需手动开启“允许后台进程”,Windows需确认“Ollama Service”在服务列表中状态为“正在运行”),此时deepseek-cli所有命令都会超时失败,错误信息却只显示Failed to connect to Ollama,让人误以为是CLI问题。- 检查
模型底座依赖:
deepseek-cli支持的模型全部来自Ollama模型库(如deepseek-coder:1.3b,deepseek-coder:6.7b-instruct)。它不提供模型下载链接,也不内置权重文件。因此,“ollama下载慢怎么办”“国内镜像源下载ollama”这些热词,本质是在解决Ollama模型拉取瓶颈。deepseek-cli对此无能为力,它只能等Ollama返回200 OK。这也是为什么所有教程必须前置强调Ollama的国内镜像配置——不是为了CLI,而是为了Ollama能快速拿到模型。
2.3 deepseek-cli:不是“独立应用”,而是“胶水层”与“人机接口”
deepseek-cli的代码量其实很小(主逻辑<500行),它的价值全在“粘合”二字。它把Ollama的原始API(需手写curl命令、处理JSON响应)封装成符合开发者直觉的命令:
deepseek-cli list→ 等价于curl http://127.0.0.1:11434/api/tags | jq '.models[].name'deepseek-cli run --model deepseek-coder:6.7b-instruct --file code.py→ 等价于构造一个含messages数组的POST body发给/api/chat
这种封装带来两个关键影响:
- 零配置启动:无需修改
.env文件或启动参数,deepseek-cli自动探测Ollama服务地址(默认127.0.0.1:11434)和模型路径(默认~/.ollama/models); - 强环境绑定:一旦Ollama服务地址变更(如部署在Docker容器中映射到
192.168.1.100:11434),就必须通过DEEPSEEK_OLLAMA_HOST环境变量覆盖,默认值失效。
注意:
deepseek-cli没有自己的配置文件。所有定制化都靠环境变量驱动,这是它轻量化的代价——也是新手最容易忽略的点。比如你想让CLI连接远程Ollama服务器,不是改CLI设置,而是执行export DEEPSEEK_OLLAMA_HOST="http://192.168.1.100:11434"。这个变量必须在运行CLI前生效,且不能写在/etc/environment里(某些Shell不加载),最佳实践是加到~/.bashrc或~/.zshrc末尾。
3. 分平台实操:从零开始构建可验证的本地AI流水线
3.1 Windows 11 环境:绕过PowerShell策略、服务权限与路径陷阱
Windows是三平台中环境变量和权限问题最复杂的。很多用户卡在第一步:npm install -g deepseek-cli后deepseek-cli --version报'deepseek-cli' 不是内部或外部命令。这几乎100%是PATH问题,但根源比想象中深。
第一步:安装Node.js(必须用.msi官方包,禁用nvm-windows)
- 去 nodejs.org 下载Node.js 20.15.0 LTS(x64).msi安装包;
- 安装时勾选“Add to PATH”和“Automatically install the necessary tools”(这会装Python 3.11和Visual Studio Build Tools,避免后续编译失败);
- 安装完成后,重启命令提示符(CMD)或PowerShell——这是关键!旧终端不会自动加载新PATH;
- 验证:
node -v应输出v20.15.0,npm -v输出10.7.0。
第二步:配置Ollama(重点解决“下载慢”和“服务未启动”)
- 下载Ollama Windows版( ollama.com/download ),运行
OllamaSetup.exe; - 安装后,必须手动启动服务:按
Win+R输入services.msc,找到Ollama Service,右键“启动”,并设为“自动(延迟启动)”; - 解决下载慢:以管理员身份运行PowerShell,执行:
# 创建Ollama配置目录 mkdir "$env:USERPROFILE\.ollama\modelfile" # 写入国内镜像源(清华源) echo "FROM https://mirrors.tuna.tsinghua.edu.cn/ollama/library/deepseek-coder:1.3b" | Out-File -FilePath "$env:USERPROFILE\.ollama\modelfile\deepseek-coder-1.3b" -Encoding UTF8提示:Ollama Windows版不支持
OLLAMA_HOST环境变量切换镜像,此法是唯一可靠方案。清华源地址https://mirrors.tuna.tsinghua.edu.cn/ollama/已实测可用,比默认源快5-8倍。
第三步:安装deepseek-cli并验证
- 在新打开的PowerShell中执行:
npm install -g deepseek-cli # 强制刷新PATH(Windows有时缓存旧值) $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") # 验证安装 deepseek-cli --version - 如果仍报错,手动检查
npm config get prefix返回的路径,将该路径下的node_modules\.bin加入系统PATH(控制面板→系统→高级系统设置→环境变量→系统变量→Path→新建)。
第四步:终极验证(三步缺一不可)
# 1. 确认Ollama服务运行 ollama list # 应返回空列表(首次运行) # 2. 拉取模型(走清华镜像) ollama pull deepseek-coder:1.3b # 3. 用CLI运行(这才是关键验证) deepseek-cli run --model deepseek-coder:1.3b --prompt "写一个Python函数,计算斐波那契数列第n项"如果第三步输出代码,说明整条流水线打通。若卡在第二步,检查防火墙是否阻止了Ollama的11434端口。
3.2 macOS Sonoma 环境:破解Gatekeeper限制、Homebrew冲突与Zsh配置
macOS用户常见问题:brew install ollama后ollama --version正常,但deepseek-cli run报ECONNREFUSED。这是因为Homebrew安装的Ollama是命令行工具,不启动后台服务,而deepseek-cli需要的是服务端。
第一步:安装Node.js(Homebrew + nvm双保险)
- 先用Homebrew装基础版(避免权限问题):
brew install node@20 brew link --force node@20 - 再用nvm装主力版本(便于多版本切换):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.zshrc nvm install 20.15.0 nvm use 20.15.0 - 验证:
which node应返回/Users/xxx/.nvm/versions/node/v20.15.0/bin/node,echo $PATH必须包含此路径。
第二步:Ollama安装(必须用官方.app,禁用brew)
- 去 ollama.com/download 下载macOS
.app安装包; - 双击安装后,首次运行会弹出Gatekeeper警告:“Ollama.app已损坏,无法打开”。此时不要点“取消”,按住
Control键点击图标,选择“打开”,再点“打开”即可绕过(这是Apple对未签名开发者的限制,非病毒); - 启动Ollama.app后,顶部菜单栏会出现Ollama图标,点击→“Check for Updates”确保是最新版;
- 配置国内镜像:编辑
~/.ollama/modelfile(若不存在则创建),写入:FROM https://mirrors.tuna.tsinghua.edu.cn/ollama/library/deepseek-coder:6.7b-instruct
第三步:deepseek-cli安装与Zsh PATH修复
- 执行
npm install -g deepseek-cli; - 关键修复:macOS Catalina后默认用Zsh,但
npm install -g生成的软链接可能不在Zsh的$PATH中。执行:# 查看npm全局路径 npm config get prefix # 通常为 /Users/xxx/.nvm/versions/node/v20.15.0 # 将其bin目录加入.zshrc echo 'export PATH="$HOME/.nvm/versions/node/v20.15.0/bin:$PATH"' >> ~/.zshrc source ~/.zshrc - 验证:
which deepseek-cli应返回/Users/xxx/.nvm/versions/node/v20.15.0/bin/deepseek-cli。
第四步:服务级验证(重点检测11434端口)
# 1. 确认Ollama服务监听11434 lsof -i :11434 # 应看到 ollama 进程 # 2. 直接curl测试API curl http://127.0.0.1:11434/api/tags # 3. CLI全流程跑通 deepseek-cli pull deepseek-coder:1.3b deepseek-cli run --model deepseek-coder:1.3b --prompt "用JavaScript实现快速排序"如果lsof无输出,说明Ollama.app未真正启动(仅图标在菜单栏不代表服务运行),需退出重开。
3.3 Ubuntu 24.04 LTS 环境:规避APT源陈旧、systemd服务异常与权限隔离
Ubuntu用户最大陷阱:用sudo apt install nodejs装Node.js,结果版本是18.x,导致deepseek-cli启动失败。APT源的Node.js版本永远滞后。
第一步:Node.js安装(用Nodesource官方源)
# 卸载旧版(如有) sudo apt remove nodejs npm # 添加NodeSource源(20.x LTS) curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - # 安装 sudo apt install -y nodejs # 验证 node -v # 必须是v20.15.0 npm -v # 必须是10.7.0第二步:Ollama安装(必须用官方.deb,禁用snap)
# 下载官方deb包(24.04适配) curl -fsSL https://ollama.com/install.sh | sh # 启动服务 sudo systemctl enable ollama sudo systemctl start ollama # 验证服务状态 sudo systemctl status ollama # 应显示 "active (running)"注意:Ubuntu 24.04默认启用
systemd-resolved,可能与Ollama的DNS解析冲突。若ollama pull超时,执行:echo 'DNS=114.114.114.114' | sudo tee -a /etc/systemd/resolved.conf sudo systemctl restart systemd-resolved
第三步:deepseek-cli安装(全局权限与用户目录分离)
npm install -g deepseek-cli会将可执行文件放在/usr/lib/node_modules/deepseek-cli/bin/deepseek-cli,但/usr/lib需root权限;- 更安全做法是安装到用户目录:
# 创建本地bin目录 mkdir -p ~/bin # 安装到本地 npm install -g deepseek-cli --prefix ~/bin # 将~/bin加入PATH echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
第四步:生产级验证(含GPU支持检测)
# 1. 检查Ollama GPU支持(NVIDIA用户) ollama run llama3 # 应显示"Using GPU"字样 # 2. 拉取DeepSeek模型(清华源) OLLAMA_HOST=https://mirrors.tuna.tsinghua.edu.cn/ollama ollama pull deepseek-coder:6.7b-instruct # 3. CLI调用(带GPU参数) deepseek-cli run --model deepseek-coder:6.7b-instruct --gpu --prompt "生成一个Linux Bash脚本,监控CPU使用率"如果ollama run llama3不显示GPU,说明NVIDIA驱动未正确安装或nvidia-container-toolkit缺失,需单独配置。
4. 环境变量深度配置:PATH、OLLAMA_HOST、DEEPSEEK_OLLAMA_HOST的生死时速
环境变量不是锦上添花,而是deepseek-cli能否存活的氧气。三者中,PATH决定命令能否被找到,OLLAMA_HOST决定Ollama服务连哪里,DEEPSEEK_OLLAMA_HOST决定CLI连哪个Ollama——它们层层嵌套,一环断裂,全盘皆输。
4.1 PATH:系统找命令的“导航地图”,90%失败源于此
PATH的本质是一组用冒号(Linux/macOS)或分号(Windows)分隔的目录路径。当输入deepseek-cli时,系统按顺序在这些目录里找同名可执行文件。npm install -g默认将CLI软链接放到npm config get prefix的bin目录下,但这个目录未必在PATH里。
诊断方法(三步定位):
- 查
npm全局路径:npm config get prefix(如/home/user/.nvm/versions/node/v20.15.0); - 查该路径下的
bin目录:ls $(npm config get prefix)/bin,确认有deepseek-cli文件; - 查当前
PATH是否包含它:echo $PATH | grep "$(npm config get prefix)"(Linux/macOS)或echo %PATH% | findstr "$(npm config get prefix)"(Windows)。
修复方案(按优先级排序):
- 首选:永久写入Shell配置文件(
~/.bashrc或~/.zshrc):echo 'export PATH="$(npm config get prefix)/bin:$PATH"' >> ~/.zshrc source ~/.zshrc - 次选:临时生效(仅当前终端):
export PATH="$(npm config get prefix)/bin:$PATH" - Windows特供:若
npm config get prefix返回C:\Users\xxx\AppData\Roaming\npm,需在系统环境变量中添加此路径(非用户变量),因为CMD默认不读用户PATH。
实操心得:我曾帮一位金融客户排查,他们用Ansible批量部署,脚本里写了
npm install -g,但忘了source ~/.bashrc,导致所有服务器上的deepseek-cli都“安装成功却无法调用”。后来在Ansible任务末尾强制加了shell: source ~/.bashrc && deepseek-cli --version才解决。教训是:自动化脚本里,source不能省。
4.2 OLLAMA_HOST:Ollama服务的“IP地址”,决定模型从哪来
OLLAMA_HOST是Ollama客户端(包括ollama命令和deepseek-cli)连接服务端的地址。默认是http://127.0.0.1:11434,但实际场景中常需变更:
- 远程Ollama服务器:公司有专用GPU服务器,地址为
192.168.1.100,则设OLLAMA_HOST=http://192.168.1.100:11434; - Docker部署Ollama:容器映射到宿主机
8080端口,则设OLLAMA_HOST=http://127.0.0.1:8080; - HTTPS反向代理:Nginx代理Ollama,域名为
ollama.internal,则设OLLAMA_HOST=https://ollama.internal。
配置方式(三平台统一):
- Linux/macOS:
export OLLAMA_HOST="http://192.168.1.100:11434",加到~/.bashrc; - Windows:
setx OLLAMA_HOST "http://192.168.1.100:11434"(需重启CMD); - 注意:
OLLAMA_HOST只影响Ollama客户端,不影响deepseek-cli的--host参数(CLI无此参数)。
4.3 DEEPSEEK_OLLAMA_HOST:deepseek-cli的“专属通道”,覆盖OLLAMA_HOST
这是deepseek-cli独有的环境变量,优先级高于OLLAMA_HOST。当你同时用多个Ollama实例(如本地测试+远程生产),可用它为CLI指定专用通道。
典型场景:
- 本地Ollama服务在
127.0.0.1:11434(用于日常调试); - 生产Ollama在
10.0.0.5:11434(用于CI/CD); - 你想让
deepseek-cli始终连生产环境,但ollama命令仍连本地——此时设DEEPSEEK_OLLAMA_HOST=http://10.0.0.5:11434,OLLAMA_HOST保持默认。
验证方法:
# 设置变量 export DEEPSEEK_OLLAMA_HOST="http://10.0.0.5:11434" # 查看CLI实际连接地址(CLI内部会打印) deepseek-cli list 2>&1 | grep "Connecting to" # 应输出 "Connecting to http://10.0.0.5:11434"提示:
DEEPSEEK_OLLAMA_HOST必须是完整URL(含http://或https://),漏掉协议会导致CLI静默失败。我见过最隐蔽的坑是:用户设了DEEPSEEK_OLLAMA_HOST=10.0.0.5:11434(无协议),CLI尝试连接http://10.0.0.5:11434失败,但错误日志只显示Connection timeout,让人误以为是网络问题。
5. 常见问题与硬核排查:从“command not found”到“model not found”的全链路诊断
5.1 “command not found”类问题:PATH战争的终极战场
| 现象 | 根本原因 | 排查命令 | 修复方案 |
|---|---|---|---|
deepseek-cli: command not found | npm install -g的bin目录未加入PATH | which npm→npm config get prefix→ls $(npm config get prefix)/bin | 将$(npm config get prefix)/bin加入Shell配置文件 |
ollama: command not found | Ollama未安装或PATH未更新 | whereis ollama(Linux)/Get-Command ollama(PowerShell) | Windows重装Ollama.app;macOS检查Gatekeeper;Linux重装.deb包 |
node: command not found | Node.js未安装或PATH损坏 | echo $PATH | grep node | 重装Node.js,确保安装时勾选“Add to PATH” |
独家技巧:在Linux/macOS下,用strace追踪命令查找过程(需root):
strace -e trace=execve deepseek-cli 2>&1 | grep "No such file" # 输出类似 "/usr/local/bin/deepseek-cli: No such file",说明PATH里这个路径无效5.2 “Connection refused”类问题:Ollama服务的生死线
| 现象 | 根本原因 | 排查命令 | 修复方案 |
|---|---|---|---|
Failed to connect to Ollama | Ollama服务未启动 | curl -v http://127.0.0.1:11434 | Windows:服务管理器启动Ollama Service;macOS:退出Ollama.app重开;Linux:sudo systemctl start ollama |
ECONNREFUSEDon remote IP | 防火墙阻止11434端口 | telnet 192.168.1.100 11434 | 服务器端执行sudo ufw allow 11434(Ubuntu)或sudo firewall-cmd --add-port=11434/tcp --permanent(CentOS) |
timeoutwhen pulling model | DNS解析失败 | nslookup mirrors.tuna.tsinghua.edu.cn | 修改/etc/resolv.conf,添加nameserver 114.114.114.114 |
硬核诊断:用tcpdump抓包确认Ollama是否真的在监听:
sudo tcpdump -i any port 11434 -c 5 # 启动CLI后,应看到SYN包发出,若无响应,证明服务未监听5.3 “Model not found”类问题:镜像源、网络与缓存的三角博弈
| 现象 | 根本原因 | 排查命令 | 修复方案 |
|---|---|---|---|
Error: model 'deepseek-coder:1.3b' not found | 模型未拉取或拉取失败 | ollama list | 执行ollama pull deepseek-coder:1.3b,观察进度条是否卡住 |
| 拉取速度<10KB/s | 默认源被限速 | curl -I https://registry.ollama.ai/v2/library/deepseek-coder/manifests/1.3b | 配置清华镜像源(Windows改modelfile,Linux/macOS设OLLAMA_HOST) |
拉取后ollama list仍为空 | 缓存损坏 | ollama rm deepseek-coder:1.3b→ollama pull | 删除~/.ollama/models/blobs/下对应sha256文件夹 |
避坑指南:
- 不要用
ollama run直接拉取模型(如ollama run deepseek-coder:1.3b),它会在后台拉取,但失败时不报错,只显示空白; deepseek-cli的pull命令是包装过的,会实时显示Ollama的进度,失败时明确提示“pull failed”,比原生命令更可靠;- 清华镜像源地址必须精确到
https://mirrors.tuna.tsinghua.edu.cn/ollama/,少一个/或错一个字母都会404。
5.4 版本冲突类问题:Node.js、Ollama、deepseek-cli的三方协议
| 现象 | 根本原因 | 排查命令 | 修复方案 |
|---|---|---|---|
Error: Cannot find module 'fs/promises' | Node.js < 14.0 | node -v | 升级到Node.js 20.15.0(LTS) |
Error: Unsupported engine | deepseek-cli要求Node.js >=16.0 | npm install -g deepseek-cli输出 | 用nvm use 20.15.0切换版本 |
ollama version 0.1.32, but deepseek-cli requires >=0.1.40 | Ollama版本过低 | ollama --version | 重装最新Ollama(官网下载) |
经验总结:我维护的团队规范是——所有AI开发机必须锁定三版本:
- Node.js:20.15.0(LTS)
- Ollama:0.1.42(2024年10月最新)
- deepseek-cli:0.3.1(GitHub release页最新tag)
用nvm、brew、apt的版本锁功能固化,避免“某天突然不能用了”。
6. 进阶实战:用deepseek-cli构建可复现的代码审查工作流
装完不是终点,用起来才是价值所在。deepseek-cli最惊艳的应用,是把DeepSeek-Coder变成你的“24小时代码审查员”。下面是一个真实落地的工作流,已在我司3个Java/Python项目中运行半年。
6.1 场景:PR提交前自动扫描,拦截低级Bug
需求:工程师推送代码到GitLab,CI流水线需自动运行DeepSeek-Coder,对新增的.py文件做静态分析,输出潜在问题(如空指针、SQL注入、硬编码密码)。
实现步骤:
准备Prompt模板(保存为
review-prompt.txt):你是一名资深Python安全工程师,请严格审查以下代码: - 检查是否有硬编码密码(如password="123456") - 检查是否有SQL注入风险(如f"SELECT * FROM users WHERE id = {user_id}") - 检查是否有未处理的异常(如try块无except) - 用JSON格式输出结果,字段:{"issues": [{"line": 10, "type": "hardcoded_password", "description": "密码硬编码在第10行"}]} 代码如下: {{CODE_CONTENT}}编写CI脚本(
.gitlab-ci.yml):stages: - review code-review: stage: review image: python:3.11 before_script: - apt-get update && apt-get install -y curl - curl -fsSL https://ollama.com/install.sh | sh - systemctl start ollama - npm install -g deepseek-cli script: - | # 获取本次提交新增的.py文件 FILES=$(git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA | grep "\.py$") for FILE in $FILES; do if [ -f "$FILE" ]; then CONTENT=$(cat "$FILE" | head -n 50) # 限制长度防超时 PROMPT=$(sed "s/{{CODE_CONTENT}}/$CONTENT/" review-prompt.txt) # 调用CLI分析 RESULT=$(deepseek-cli run --model deepseek-coder:6.7b-instruct --prompt "$PROMPT" 2>/dev/null) # 解析JSON,提取issues if echo "$RESULT" | jq -e '.issues' > /dev/null; then ISSUES=$(echo