Skip to main content
Glama

代码重构助手

把遗留代码重构为现代规范代码,保持原有接口与行为不变

License: MIT Python Node.js MCP npm

一个基于本地大模型的代码重构服务。输入一段源代码和一句重构要求,输出重构后的完整代码。

代码不离开你的机器 —— 核心版通过本地 Ollama 推理,无任何数据上传。

快速开始 · 功能 · 使用方式 · 定价 · 贡献


这是什么

历史项目里总有些代码:能跑,但没人愿意碰。变量叫 a、tmp1、data2,三层嵌套的 if 里塞着业务逻辑,同一个校验规则在五个地方各写了一遍。

这个项目做的就是把这些代码改造好。它不修复 bug、不添加功能,只改结构——让代码好读、好改,同时保证外部行为完全不变。

核心能力由本地 Ollama 上的代码模型(默认 deepseek-coder)驱动,可以以 MCP Server、HTTP API、技能包 等多种形态接入你现有的工作流。

Related MCP server: CodeBrain

功能

能力

说明

命名规范化

把 f、a、tmp1 改为能表达意图的命名

重复逻辑提取

识别重复代码片段,提取为独立函数或方法

控制流简化

嵌套条件改为提前返回(卫语句),合并冗余分支

类型标注补充

为 Python、TypeScript 补充类型标注

文档注释生成

按语言惯例补充 docstring / JSDoc / Javadoc

语法现代化

回调改 async/await、var 改 let/const、循环改推导式

支持语言:Python · JavaScript · TypeScript · Java · Go · Rust · C · C++

设计原则

重构这件事,改坏比不改更糟。所以本项目有两条硬约束:

  1. 不改公共接口 —— 函数名、类名、参数签名、返回值结构保持原样(除非你明确要求改)

  2. 保持行为等价 —— 重构后逻辑与原代码一致,不顺手修 bug

快速开始

前置条件

  • Python 3.11+ 或 Node.js 18+

  • Ollama 已安装并运行

  • 已拉取代码模型:ollama pull deepseek-coder

方式一:本地 Python 直接调用

git clone https://github.com/zhouhengchang/code-refactor.git
cd code-refactor
python shared/refactor_core.py   # 内置自测,会先检查服务再跑一个示例

也可以在自己的代码里调用:

# -*- coding: utf-8 -*-
"""最小调用示例。"""

from shared.refactor_core import refactor_code, check_ollama_status

# 先确认环境就绪
print(check_ollama_status())

# 执行重构
result = refactor_code(
    code="def f(a):\n    r = []\n    for i in a:\n        if i % 2 == 0:\n            r.append(i * i)\n    return r\n",
    task="重命名为有意义的函数名与变量名,补充类型标注与中文注释",
    language="python",
)

if result["ok"]:
    print(result["code"])
else:
    print("失败:", result["error"])

方式二:作为 MCP Server 接入(Claude Desktop / WorkBuddy / 任意 MCP 客户端)

已发布到 npm,不用克隆仓库,直接在 MCP 客户端配置里引用:

{
  "mcpServers": {
    "code-refactor": {
      "command": "npx",
      "args": ["-y", "workbuddy-code-refactor-connector"],
      "env": {
        "REFACTOR_BACKEND": "ollama",
        "OLLAMA_HOST": "http://localhost:11434",
        "OLLAMA_MODEL": "deepseek-coder"
      }
    }
  }
}

npm 包:workbuddy-code-refactor-connector

也可以从源码运行,便于自己改代码:

cd workbuddy-connector/server
npm install

然后把上面的 command 改成 node,args 改成 ["/绝对路径/to/workbuddy-connector/server/index.js"] 即可。

重启客户端后即可使用 refactor_code 和 check_status 两个工具。

方式三:Docker 部署 HTTP 服务

docker build -t code-refactor-xpack:1.0.0 -f xpack-server/Dockerfile .
docker run -p 8000:8000 \
  -e OLLAMA_HOST=http://host.docker.internal:11434 \
  -e OLLAMA_MODEL=deepseek-coder \
  code-refactor-xpack:1.0.0

调用:

curl -X POST http://localhost:8000/refactor \
  -H "Content-Type: application/json" \
  -d '{
    "code": "def f(a):\n    return [i*i for i in a if i % 2 == 0]\n",
    "task": "函数名与变量名改为有意义的命名,补充类型标注",
    "language": "python"
  }'

使用方式

输入

参数

必填

说明

code

是

待重构代码,≤ 20000 字符

task

是

重构要求,越具体效果越好

language

否

语言标识,不填自动判断

输出

{
  "ok": true,
  "code": "重构后的完整代码",
  "model": "deepseek-coder",
  "language": "python",
  "elapsed_ms": 3820
}

失败时返回 {"ok": false, "error": "可读中文错误信息", "error_type": "..."},不抛异常、不暴露堆栈。

task 怎么写

这是影响结果质量最大的一个变量。

别这样写

换成这样

「优化一下」

「把五层嵌套 if 改为提前返回,提取重复的参数校验为独立函数」

「太乱了」

「统一命名规范,拆分超过 50 行的函数,补充中文注释」

「改写好点」

「把回调写法改为 async/await,保留原有的错误处理分支」

使用建议

  • 一次一个目标。 「重构 + 加功能」拆成两步做。

  • 长代码分批。 单次 ≤ 300 行为宜,按函数粒度提交。

  • 结果先验证再应用。 跑一遍现有测试再替换生产代码。

配置

全部通过环境变量注入,代码中不含任何密钥。

环境变量

默认值

说明

REFACTOR_BACKEND

ollama

推理后端:ollama(本地)或 openai(任意 OpenAI 兼容接口)

OLLAMA_HOST

http://127.0.0.1:11434

Ollama 服务地址

OLLAMA_MODEL

deepseek-coder

本地模型

OPENAI_BASE_URL

https://api.deepseek.com/v1

云端接口地址(REFACTOR_BACKEND=openai 时生效)

OPENAI_API_KEY

—

云端密钥,仅从环境变量读取,永不写进代码

OPENAI_MODEL

deepseek-flash

云端模型(DeepSeek 官方在列:deepseek-flash / deepseek-v4-pro)

REFACTOR_TIMEOUT

180

超时秒数(Python)

REFACTOR_TIMEOUT_MS

180000

超时毫秒数(Node.js)

本地和云端两套后端同一份代码,切换只改环境变量:

# 改用云端 OpenAI 兼容接口
export REFACTOR_BACKEND=openai
export OPENAI_API_KEY=sk-xxxx

超时默认给到 180 秒,是因为在纯 CPU 的低配机器上本地推理可能需要 1 分钟以上。如果你的机器有 GPU,可以调小。

想用更小更快的本地模型:OLLAMA_MODEL=qwen2.5-coder:1.5b。

运维工具

tools/ 下有两个自检脚本,改完配置或轮换密钥后建议跑一遍,避免"改完才发现用不了":

脚本

作用

tools/rotate_key.py

密钥轮换:先校验鉴权 / 余额 / 真实调用三关,全过才允许写入;替换前自动备份,可一键回滚

tools/verify_online.py

线上体检:依次请求 /healthz、/status、/refactor,确认新配置在生产环境真正生效

# 只验证,不改任何文件
python tools/rotate_key.py --check --key sk-xxxx

# 验证通过后写入 .env
python tools/rotate_key.py --apply --key sk-xxxx

# 线上实例体检
python tools/verify_online.py https://your-host/

rotate_key.py 只改 .env 里 OPENAI_API_KEY 一行,其余配置原样保留。

项目结构

code-refactor/
├── shared/refactor_core.py      # 核心逻辑(唯一真源)
├── workbuddy-connector/         # WorkBuddy / MCP 连接器
├── xpack-server/                # OpenAPI + FastAPI + Dockerfile
├── coze-skill/                  # 扣子技能包
├── skillhub-skill/              # SkillHub Pay Skill
├── alipay-ai/                   # 支付宝 AI收 接入配置
├── xinghuo-agent/               # 讯飞星火智能体配置
├── tools/                       # 密钥轮换与线上体检脚本
└── github-repo/                 # 本文档所在的开源仓库

开源版与托管版

本项目采用 Freemium 模式:核心能力完全开源免费,托管服务面向不想自己部署的用户。

开源版(MIT)

托管版 Pro

价格

免费

¥29/月(含 200 次调用)或 ¥1/次按需付费

部署

自己部署 Ollama

无需部署,开箱即用

模型

你自己选的模型

更大的代码模型,效果更好

速度

取决于你的硬件

GPU 加速,平均 3-5 秒响应

语言支持

8 种

8 种 + 优先级支持

批量重构

需自行封装

支持仓库级批量重构

私有部署

—

支持

支持

社区 Issue

优先工单响应

该选哪个?

  • 代码不能出内网 / 想完全掌控 → 开源版,直接克隆部署

  • 本机没有 GPU、不想折腾环境、需要更好的重构质量 → 托管版

👉 托管版入口: https://code-refactor.app.workbuddy.host

托管版同样承诺:代码仅用于本次推理,不留存、不用于模型训练。

在各大平台使用

本服务已适配以下平台,可按需取用对应目录下的配置文件:

平台

形态

配置 / 入口

npm

可执行 MCP Server(已上线)

npx -y workbuddy-code-refactor-connector

WorkBuddy 开放平台

Connector / MCP Server

workbuddy-connector/

XPack MCP 交易平台

OpenAPI → MCP 服务

xpack-server/openapi.json

扣子(Coze)

技能商店 Skill

coze-skill/skill.json

SkillHub

Pay Skill

skillhub-skill/manifest.json

支付宝 AI收

按调用即时收款

alipay-ai/alipay-ai-config.json

讯飞星火

智能体 / 独立 API

xinghuo-agent/agent-config.json

常见问题

Q:为什么非要本地跑?云端 API 不是更方便? 代码是核心资产。本地推理意味着你的代码一个字节都不会离开你的机器——这对企业代码库往往是硬性要求。想省事就用托管版。

Q:重构会不会改坏我的代码? 设计上不会改变外部行为,但这不构成保证。上生产前请务必跑测试。 项目的第一原则就是"不改接口、不改行为",但模型输出总有不确定性,代码审查不可省。

Q:支持多大的代码? 单次 20000 字符以内,建议 300 行以内。更大的文件按函数拆分。

Q:能只重构一个函数吗? 可以,只把那个函数贴进来就行。

Q:为什么用 deepseek-coder? 在代码任务上表现稳定,是本地小体量模型里性价比较好的选择。你可以通过 OLLAMA_MODEL 换成任何 Ollama 模型。

注意:Ollama 上的 deepseek-coder 标签实际是 约 776MB 的小体量版本,并不是原版的 6.7B。算力允许的话,换成 qwen2.5-coder:7b 效果会明显更好。

Q:响应慢怎么办? 换更小的模型(qwen2.5-coder:1.5b)、缩小单次重构范围、或确认本机没有其他任务在抢 GPU。用托管版也能绕开本地算力限制。

贡献

欢迎 Issue 和 PR。特别需要这些方向的帮助:

  • 新的重构模式 —— 你反复手动做的事,可能就是下一个内置能力

  • 语言适配 —— 目前对 Kotlin、Swift、PHP 的支持还比较弱

  • 测试用例 —— 尤其是"重构后行为保持一致"的验证用例

提 PR 前请确认:代码有中文注释、不含硬编码密钥、通过现有测试。

许可证

MIT —— 可自由商用、修改、分发。


如果这个项目帮你省下了清理遗留代码的时间,给个 ⭐ 是最好的鼓励。

赞助这个项目 · 提交 Issue

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables LLMs to apply Martin Fowler's 71+ refactoring patterns to codebases through a pluggable, language-agnostic architecture. Supports previewing and applying refactorings, analyzing code smells, and inspecting code structure with safe-by-default operations.
    5
    29 PyPI
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides semantic code search and index status for codebases using RAG, enabling AI tools to query code knowledge.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides AI-callable tools for modernizing legacy applications, including stack detection, API contract extraction, SQL to Flyway conversion, and migration effort estimation.
    4
    MIT