代码中的硬编码字符串——例如 API 地址、数据库密码、超时时间——常常散落在各个文件里,每次修改都得全局搜索,还总担心漏改或改错。这种困扰,凡是做过项目的人都深有体会。借助 CodeGeex,你可以自动将这些“钉子”拔出并统一归置到 config.yaml 或 application.properties 中。下面详细拆解完整流程。
安装并启动本地 CodeGeex 模型
首先从 GitHub 拉取最新仓库:git clone https://github.com/THUDM/CodeGeeX.git,进入目录后运行 pip install -e . 安装所需依赖,接着执行 python -m codegeex serve --port 8080 来启动服务。这一步务必先完成,否则后续所有操作都无法调用模型。如果 8080 端口已被占用,请务必换用 --port 8081 或其他未占用的端口,否则请求会直接超时失败。
构造精准提示词触发硬编码识别
向 CodeGeex 发送 POST 请求时,prompt 中必须包含三个关键要素:语言类型、目标文件路径、明确的指令。以下是两种常用方式:
方法一:直接使用 curl 调用
curl -X POST http://localhost:8080/generate -H "Content-Type: application/json" -d '{"prompt": "Python 代码中识别硬编码字符串:分析 ./src/main.py,找出所有未赋值给常量、未从 os.environ 或 config.get() 获取的字符串字面量,特别是 URL、token、timeout、host、password 类关键词附近的值。只输出纯 JSON 列表,每项含 path、line_number、value、suggestion_key"}'
方法二:用 Python 脚本封装调用(推荐)。新建一个 extract_hardcoded.py,写入 requests 调用逻辑,并设置 timeout=30;如果返回空或报错,先检查模型是否仍在运行、端口是否连通。不要跳过 status_code == 200 的判断,否则可能把错误响应误当成有效结果写入配置,导致后续问题。
解析模型输出并生成配置文件
接收到响应中的 JSON 字符串后,使用 json.loads() 将其解析为 Python 列表。接着按 suggestion_key 去重合并——例如多个位置都出现 "https://api.example.com/v1",模型建议统一映射为 API_BASE_URL,则只保留第一次出现的位置的值。
然后根据项目语言选择输出格式:
- 如果项目是 Python,生成
config.py,写入API_BASE_URL = "https://api.example.com/v1"这类变量; - 如果项目是 Java Spring Boot,生成
application.properties,写入app.api.base-url=https://api.example.com/v1。
这里有一个注意点:Java 的 key 必须使用小写字母加短横线,不能包含下划线或大写字母,否则 Spring 无法识别。
替换原代码中的硬编码
先读取原始文件内容,逐行扫描 line_number 匹配项。对每个匹配行,使用正则表达式将硬编码字符串替换为配置引用——Python 替换为 config.API_BASE_URL,Java 替换为 ${app.api.base-url}。
写回文件前务必先备份原文件为 main.py.bak。替换前不备份,一旦出错就无法还原。最后逐个验证替换后的代码能否正常 import config 并运行,尤其要注意字符串拼接场景——例如 "https://" + host + ":8080" 这种应当整体替换为单个配置项,不能只替换 host 部分。

