deepseek-coder需本地部署api服务并配置github actions才能自动审查pr。须用vllm加速推理、严格json提示模板、增量diff获取、行级评论绑定及熔断降级机制。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

DeepSeek 能自动审查 Pull Request(PR),但必须自己搭服务、写提示词、接 GitHub API——它不会主动出现在你的 PR 页面里,也不会默认给出“改进建议”,除非你明确告诉它要做什么、怎么输出、在哪评论。
本地部署 DeepSeek-Coder 并暴露 API 接口
GitHub Actions 无法直接调用 Hugging Face 上的模型,必须先在内网或云服务器上跑一个可访问的 API 服务。vLLM 是目前最稳的选择,比 Transformers + Flask 更低延迟、更高并发。
- 显存要求别硬扛:DeepSeek-Coder-33B-Instruct FP16 推理需 ≥48GB 显存;若只有 24GB,改用
DeepSeek-Coder-V2-Lite-Base或启用--quantization awq启动参数 - 启动命令里必须带
--host 0.0.0.0 --port 8000,否则 GitHub Actions 容器连不上 - 验证接口是否可用:运行
curl -X POST http://your-server:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"deepseek-coder","messages":[{"role":"user","content":"hello"}]}',确认返回含choices[0].message.content
写一个强制 JSON 输出的 Review 提示模板
自由文本输出会导致解析失败,GitHub 评论无法结构化展示。必须用严格 schema 约束模型,让 issues 字段可遍历、line 字段能精准锚定到代码行。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
- 提示词开头必须声明角色和输出格式,例如:
你是一名专注 Python/Java 的资深审查员。请严格按以下 JSON Schema 输出:{"issues":[{"line":int,"severity":"high/medium/low","description":str,"suggestion":str}],"summary":str} - 注入真实上下文:把
diff片段、文件路径(如/src/api/auth.py)、Git 提交信息(如feat(auth): add JWT refresh logic)一起喂给模型,否则它不知道这段代码在干啥 - 加长度限制:在提示末尾写
输出不超过 1500 tokens,不解释、不寒暄、不重复 schema,防止截断导致 JSON 解析失败
用 GitHub Action 触发审查并提交行级评论
.github/workflows/deepseek-review.yml 不是配完就完事——它得能拿到 diff、调通 API、解析 JSON、再调 GitHub REST API 发评论。漏一步,PR 就没反馈。
- 权限不能少:workflow 文件里必须有
permissions: contents: read, pull-requests: write,否则gh api repos/{owner}/{repo}/pulls/{pr}/comments会 403 - diff 获取要增量:用
git diff ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }},别用git diff HEAD^,否则 rebase 后失效 - 评论要绑定行号:调 GitHub API 时,
body字段填模型返回的suggestion,同时传path(文件名)、line(具体行号)、side("RIGHT" 表示新代码侧)
容易被忽略的熔断与降级逻辑
模型不是永远在线、不是每次都能返回合法 JSON、也不是所有 diff 都适合喂给它——没加兜底,CI 就会卡死或误报。
- 超时必须设:GitHub Action 中用
timeout-minutes: 3,API 请求侧加--max-time 90,防止单次请求 hang 住整个 workflow - JSON 解析失败要 fallback:当
jq '.issues'报错时,不要直接 exit,而是 fallback 到发一条泛化评论,比如"AI 审查暂时不可用,请人工复核" - 大 diff 要跳过:如果单个文件 diff 行数 > 500,或总 token 预估 > 8192,直接 skip 该文件——模型会胡说,且 GitHub 评论长度上限是 65536 字符









