AB
AiBoss站
教程

CodeGeeX

教程

用 CodeGeeX 完成代码补全、生成、翻译与解释

CodeGeeX 是一款开源 AI 编程助手,以 VS Code 与 JetBrains 插件形式提供行内补全、按注释生成函数、跨语言代码翻译和对话式解释。本文从安装登录讲到四类核心功能的实际操作,并给出一个从注释到翻译、解释的完整示例,同时说明自托管与使用中的常见限制。

CodeGeeX 是一款开源的 AI 编程助手,由智谱 AI 与清华大学合作开发,模型针对代码做过专门训练,支持二十多种编程语言。它以插件形式提供,可装在 VS Code 和 JetBrains 系列 IDE 中,主要能力有四块:边写边补全、按自然语言注释生成函数、在不同语言之间翻译代码、以及通过对话解释和修改代码。它适合希望在不增加订阅成本的前提下获得 AI 补全能力的个人开发者,也适合对数据流向有要求、打算自行部署模型的企业团队。想先了解这个工具的基本定位,可以看站内的 CodeGeeX 条目,再回到本文按步骤操作。

需要先说明一点:CodeGeeX 的强项之一是中文提示词与中文语境下的代码理解,因此本文的示例会同时给出中文注释与英文注释两种写法,方便不同工作环境的读者对照。下文所有涉及版本、配额、价格的信息都可能随时间变化,请以官网当前公布的内容为准。

准备工作

在动手之前,把下面几件事确认清楚,可以避免中途卡住。

  • IDE 环境:需要已安装 VS Code,或 JetBrains 系列 IDE(如 IntelliJ IDEA、PyCharm、GoLand 等)。插件通过各自的市场安装,不需要单独下载安装包。
  • 账号:安装插件本身不需要 API Key,也不需要付费。但要解锁全部功能,需要登录一个免费账号。也就是说,不登录也能用一部分能力,登录后功能才完整。
  • 网络与代理:插件需要访问模型服务,若所在网络环境对访问有限制,需要提前配置好代理,否则补全可能长时间无响应。
  • 项目准备:建议在一个真实的小项目里练习,而不是空文件。CodeGeeX 的补全会参考上下文,空文件里能观察到的行为很有限。
  • 自托管(可选):模型权重与代码公开,企业若有严格的数据合规要求,可以部署在自己的基础设施上。自托管不收取模型授权费用,但服务器、GPU 等基础设施成本需要自行承担。

操作步骤

第一步:安装插件

在 VS Code 中打开扩展面板,搜索 “CodeGeeX”,选择对应条目安装。JetBrains 用户在 Settings 的 Plugins 中搜索同名插件安装。安装完成后,IDE 侧边栏会出现 CodeGeeX 的面板入口。

安装过程不需要填写 API Key,也不需要绑定支付方式。装好后建议重启一次 IDE,确保插件完整加载。

第二步:登录账号

点击侧边栏的 CodeGeeX 图标,按提示登录免费账号。登录的作用是解锁全部功能;如果暂时不登录,行内补全等基础能力可能仍可用,但对话、翻译等功能的可用性会受限。登录状态通常保存在本地,后续打开 IDE 不需要重复登录。

第三步:使用行内补全

这是最不需要学习成本的功能。在编辑器里正常敲代码,CodeGeeX 会根据上下文自动给出灰色的行内建议。看到合适的建议时按 Tab 接受,不满意就继续输入,建议会自动刷新。

补全质量与上下文强相关。实践中有两个提高命中率的做法:

  • 把函数签名和文档字符串写清楚,模型会据此推断函数体应该做什么。
  • 把相关联的文件在编辑器里保持打开状态,跨文件的建议会更准确。

例如先写下这样的签名与注释,再让补全接管函数体:

def parse_duration(text: str) -> int:
    """把 '1h30m' 这类时长字符串解析为秒数。

    支持 h / m / s 三种单位,允许缺省,例如 '45s'、'2h'。
    输入非法时抛出 ValueError。
    """

第四步:用注释生成整段代码

行内补全适合逐行推进,而整段生成适合从零写一个函数。做法是在文件里写一段描述意图的注释,然后用 Ctrl+Enter 触发代码生成。生成结果会插入到光标位置,可以继续用对话要求修改。

注释写得越具体,生成结果越接近预期。把输入、输出、边界条件写进注释,比只写一句“写一个排序函数”有效得多。中文注释同样可用,这是 CodeGeeX 相对部分同类工具的一个特点。

# 读取 CSV 文件,按第二列数值降序排序,返回前 10 行
# 要求:跳过表头;第二列不是数字的行直接忽略;文件不存在时返回空列表

第五步:跨语言翻译代码

选中一段代码,在 CodeGeeX 面板中选择翻译功能,指定目标语言,插件会输出对应语言的实现。这个功能在迁移旧项目、或者把原型代码从脚本语言改写成编译型语言时比较实用。

不同语言组合的翻译质量并不一致。根据实际使用反馈,常见组合的表现大致如下:

源语言 目标语言 表现
Python JavaScript / Java / C++ 很好
JavaScript Python / TypeScript 很好
Java Python / Kotlin 较好
C++ Python / Rust 较好

翻译结果必须人工复核。语言之间的运行时差异(异常模型、内存管理、标准库命名)不会自动抹平,尤其是涉及并发、指针、泛型的代码,翻译后往往需要手工调整。

第六步:用对话解释与调试代码

打开侧边栏对话面板,可以直接用中文或英文提问。常见用法有三种:

  1. 逐行解释:选中一段不熟悉的代码,要求逐行说明它在做什么。适合接手他人项目或阅读第三方库源码。
  2. 错误分析:把报错信息贴进对话,让模型结合上下文分析可能的原因。
  3. 补文档:选中已有函数,要求生成文档注释,省去手写 docstring 的时间。

对于需要多步推理的任务,例如“把这个模块改成异步实现,并补上对应的测试”,用对话比用行内补全更合适,因为可以在多轮里逐步收敛结果。

一个完整示例

下面走一遍从注释生成、到翻译、再到解释的完整流程,用一个实际的小函数串起来。

第一步,写注释并生成 Python 实现。在新建的 utils.py 中写下需求注释,按 Ctrl+Enter 生成:

# 统计一段文本中每个单词出现的次数,忽略大小写与标点
# 返回按次数降序排列的 (单词, 次数) 列表;次数相同时按单词字母序

生成结果大致如下(实际输出会因上下文不同而变化,这里只示意结构):

import re
from collections import Counter

def word_freq(text: str):
    words = re.findall(r"[a-zA-Z']+", text.lower())
    counter = Counter(words)
    return sorted(counter.items(), key=lambda kv: (-kv[1], kv[0]))

第二步,检查边界情况。把空字符串、纯标点、带连字符的单词分别作为输入,看结果是否符合预期。如果不符合,直接在对话里描述问题,例如“输入为空字符串时应该返回空列表,当前实现是否满足”,让模型给出修正版本。

第三步,翻译成 JavaScript。选中整个函数,在面板中选择翻译到 JavaScript。得到的实现会使用 Map 或普通对象做计数,排序逻辑需要按同样的规则重写。翻译后重点检查两处:正则表达式在两种语言中的写法差异,以及排序比较函数的稳定性。

第四步,让对话解释翻译结果。选中 JavaScript 版本,要求逐行解释。这一步的价值在于确认翻译没有引入语义偏差,尤其是排序键的构造方式是否与原版一致。

第五步,补文档。回到 Python 版本,选中函数并要求生成文档注释,把输入格式、返回结构、异常情况写进 docstring。生成的注释仍需人工校对,确认描述与实际行为一致。

整个流程下来,四类核心功能都用到了:注释生成负责从零到一,行内补全负责细节修补,翻译负责跨语言迁移,对话负责验证与文档。这也是日常使用中最常见的组合方式。

注意事项

关于免费与配额。CodeGeeX 对个人开发者免费,在 VS Code 与 JetBrains 插件中不设使用次数上限。但这类政策可能调整,具体以官网当前说明为准。企业自托管不收取模型授权费用,基础设施开销需自行评估。

关于与商业工具的差异。与 GitHub Copilot 这类付费产品相比,CodeGeeX 在英文代码库上的建议质量可能略逊一筹,但在中文提示词场景下表现有竞争力。如果团队主要用中文写注释和需求描述,这个差异会比较明显;如果代码库与文档全为英文,则需要实际试用后再判断。

关于生成代码的正确性。补全与生成的结果都需要人工审查。模型可能生成看似合理但实际有误的代码,尤其是涉及边界条件、异常处理、并发安全的部分。不要未经检查就把生成代码合入主干。

关于翻译功能的局限。跨语言翻译不会自动处理运行时差异。异常模型、内存管理、标准库命名、类型系统强度这些方面的差异,需要开发者手工补齐。翻译结果更适合当作起点,而不是终点。

关于隐私与自托管。使用在线服务时,代码片段会发送到模型服务端处理。若项目涉及敏感数据或受合规约束,应评估自托管方案:模型权重与代码公开,可部署在自有基础设施上,从而完全控制数据流向。自托管需要相应的运维能力与硬件资源。

关于上下文窗口。补全与对话都依赖上下文,但上下文长度有限。超大文件或跨多个模块的复杂改动,建议拆分成小块逐步处理,而不是一次性丢给对话面板。

关于登录状态。未登录时部分功能不可用,若发现对话或翻译入口灰显,先检查是否已完成登录。