【Hello AI 科技致善】用solo打造python代码翻译系统,让不熟悉英语的python初学者快速理解编程

①摘要:

JX python代码翻译系统能够帮助乡村教师上python课时,更容易让学生理解代码。该系统有英文代码翻译成中文以及大模型自动注释代码的功能,学生阅读代码将不再被英文阻挡,可以把主要的精力放在代码逻辑构建上,思维将更连贯。

真实场景与需求

  • 目标人群:教python的乡村教师、学生、python初学者、不熟悉英文的人

  • 痛点描述:英文不好,又想阅读代码是一件非常痛苦的事情,几乎每个词都要去查含义,花费了大量的时间和精力,这几乎是每一个中国人编程的必经之路。

  • 现有做法:现在遇到不懂意思的英文代码通常的解决方案是通过一个一个划词翻译解决,或者通过编程系统的注释了解大概含义,但这些方法都不够直观且费劲。

③作品介绍:

JX python代码翻译系统是完全用trae的solo模式编写,能够帮助乡村教师上python课时,更容易让学生理解代码的程序。该系统有英文代码翻译成中文以及大模型自动注释代码的功能,代码格式结构不会被改变,学生阅读代码将不再被英文阻挡,能迅速理解代码含义,这样就可以把主要的精力放在代码逻辑构建上,编程思维将更连贯。

我本人不会python语言,完全是编程小白,听说大模型可以自然语言编程,就想利用大模型编程为自己构建一个私人专属功能的rag系统。当时还是用豆包网页版进行编程,在构建系统的时候就会借鉴成熟rag的源码,源码也不是我自己看,而是投给豆包让它帮我修改成我需要的功能。在使用大模型的过程中,经常会遇到大模型弱智没逻辑导致编程卡住的问题,这让我不得不需要自己理解代码含义,从而纠正大模型的逻辑错误。但都是英文的代码让我看得难受之极,很简单的逻辑,就是因为不懂英文,还要去查英文翻译,浪费了大量的时间。于是我萌生了先做个代码翻译工具的想法。正好在刷抖音时看到介绍trae的视频,我就试着用它来编写这个代码翻译系统,虽然经历了一些小磨难,但最终还是成功竣工。在此之后我甚至利用trae为自己在gitee上建了个代码仓库。当我看到这次的ai致善公益活动,发现我的JX python代码翻译系统正好能够服务于乡村教师以及学生,就来参赛了。

用 SOLO 实现的过程:

  • 在编写这个系统时,我只是告诉solo,这个代码翻译系统大概需要几个功能?比如用大模型把代码从英文翻译成中文,且不能改变代码结构,然后还需要有代码注释功能。其它的需求都是在代码完善的过程中一点一点加上的。

  • solo得到我的功能需求后,自己就梳理了整个系统结构,甚至想出了我之前都没考虑到的代码词汇一致性的问题,然后就是solo的自动写代码 → 自动运行 → 自动抓错 → 自动修复 → 自动验证,直到完全跑通无报错。最后连readme文档都是solo帮我写的。

  • 在编写代码翻译系统时,我发现solo的提示词很重要,不然solo会偷懒,欺骗,甚至假完工。经过了多次实验,才最终采用以下提示词,以保证solo能够正确执行我的要求。

  • 提示词:请你用 Solo 全自动模式完成目标:自动写代码 → 自动运行 → 自动抓错 → 自动修复 → 自动验证,直到完全跑通无报错。

  • 在完成系统的过程中,solo也为我带来了不少烦恼,比如编程时有时缺乏逻辑,在错误的道路上不断重复,不能一针见血的发现问题。这些麻烦浪费了我不少时间,使我甚至有过要放弃的想法。但好在最终我坚持下来了,代码翻译系统也完美竣工。

⑤成果展示:

系统简介

JX python代码翻译系统是一个专门为初学Python的中文用户设计的代码阅读辅助工具。它可以将英文Python代码翻译成中文,帮助中文用户更好地理解和学习Python编程。

目标用户:初学Python的中文使用者,特别是阅读英文代码有困难的用户。

系统特点

  • 英文转中文:将英文Python代码翻译成中文,方便阅读理解

  • 实时对照:原代码和翻译后的代码同时显示,方便对比学习

  • 词典管理:可自定义翻译映射,添加、修改、删除词汇

  • AI辅助:支持配置本地Ollama或云端Doubao API进行智能翻译

  • 代码注释:自动为代码添加中文注释说明,帮助理解代码逻辑

主界面功能

1. 代码编辑区

系统提供两个代码编辑区:

  • 英文代码(原代码):输入需要翻译的英文Python代码

  • 中文代码(翻译结果):显示翻译后的中文代码

两个编辑区都支持语法高亮和行号显示。

2. 翻译功能

翻译代码

  1. 在"英文代码(原代码)"编辑区输入英文Python代码

  2. 点击"翻译代码"按钮

  3. 系统会自动将代码中的英文关键字、变量名等翻译成中文

  4. 翻译结果会显示在"中文代码(翻译结果)"编辑区

注意:翻译后的中文代码仅供阅读学习使用,不能直接运行。

3. 添加注释

点击"添加注释"按钮,系统会自动为原代码添加详细的中文注释,帮助理解代码功能。

词典管理

点击"词典管理"按钮,进入词典管理页面。

功能说明

  • 查看词汇:显示所有已定义的翻译映射

  • 添加词汇

    1. 在"英文"输入框输入英文词汇

    2. 在"中文"输入框输入对应的中文翻译

    3. 选择词汇类型(变量/常量/类)

    4. 点击"保存"按钮

  • 修改词汇

    1. 点击词汇行后面的"修改"按钮

    2. 表单会自动填充该词汇信息

    3. 修改后点击"保存"按钮

  • 删除词汇:点击词汇行后面的"删除"按钮,确认后删除

注意事项

  • 如果添加的英文词汇已存在,系统会更新该词汇的翻译

  • 删除操作不可恢复,请谨慎操作

AI设置

点击"AI设置"按钮,进入AI配置页面。

支持的AI模型

1. Ollama(本地模型)

适合有本地GPU资源的用户,可以免费使用开源大模型。

配置参数:

使用步骤:

  1. 在本地安装Ollama

  2. 下载所需模型(如 qwen2:4b)

  3. 启动Ollama服务

  4. 在系统中配置Ollama参数

2. Doubao API(云端模型)

适合需要更高翻译质量的用户,需要申请API Key。

配置参数:

  • AI模型:选择"Doubao API"

  • Doubao API Key:从豆包平台获取的API密钥

  • Doubao模型名称:如 ep-20240514162345-n2c4d

使用步骤:

  1. 注册豆包开放平台账号

  2. 创建应用并获取API Key

  3. 在系统中配置Doubao参数

保存设置

配置完成后,点击"保存设置"按钮保存配置。

JX python代码翻译系统gitee仓库地址:

https://gitee.com/jixiao1982/jxzwpython

⑥代码翻译展示

英文代码(原代码)

以下是您提供的 Python 代码的逐行注释,解释了每一行的功能:

# 导入操作系统模块,用于访问环境变量和创建文件路径
import os

# 导入 gradiologin 库(简写为 grlogin),用于处理身份验证逻辑
import gradiologin as grlogin
# 从 decouple 库导入 config 函数,用于安全地读取环境变量配置
from decouple import config
# 导入 FastAPI 框架,用于构建 Web API 应用
from fastapi import FastAPI
# 从 FastAPI 导入 FileResponse,用于动态返回服务器文件(如 favicon)
from fastapi.responses import FileResponse
# 导入项目配置设置模块,获取核心配置信息
from theflow.settings import settings as flowsettings

# 从 flowsettings 配置中获取 "KH_APP_DATA_DIR" 配置项,默认值为当前目录 "."
# 如果未配置,则使用默认值
KH_APP_DATA_DIR = getattr(flowsettings, "KH_APP_DATA_DIR", ".")

# 尝试从环境变量 "GRADIO_TEMP_DIR" 中读取临时目录路径
GRADIO_TEMP_DIR = os.getenv("GRADIO_TEMP_DIR", None)

# 从配置文件中读取 "AUTHENTICATION_METHOD" 环境变量,默认使用 "GOOGLE" 进行认证
# "AUTHENTICATION_METHOD" 决定了后续使用的认证方式(Google 或 Keycloak)
AUTHENTICATION_METHOD = config("AUTHENTICATION_METHOD", "GOOGLE")

# 如果 "GRADIO_TEMP_DIR" 环境变量未设置(为 None),则生成一个新的路径
# 新路径位于主应用程序数据目录下的 "gradio_tmp" 子目录中
if GRADIO_TEMP_DIR is None:
    GRADIO_TEMP_DIR = os.path.join(KH_APP_DATA_DIR, "gradio_tmp")
    # 强制将生成的路径赋值给操作系统环境变量,确保 Gradio 能找到该临时目录
    os.environ["GRADIO_TEMP_DIR"] = GRADIO_TEMP_DIR

# 初始化用于 Google 认证的客户端 ID 和密钥(从环境变量读取)
GOOGLE_CLIENT_ID = config("GOOGLE_CLIENT_ID", default="")
GOOGLE_CLIENT_SECRET = config("GOOGLE_CLIENT_SECRET", default="")

# 初始化用于 Keycloak OpenID 认证的服务器 URL、领域、客户端 ID 和密钥
KEYCLOAK_SERVER_URL = config("KEYCLOAK_SERVER_URL", default="")
KEYCLOAK_REALM = config("KEYCLOAK_REALM", default="")
KEYCLOAK_CLIENT_ID = config("KEYCLOAK_CLIENT_ID", default="")
KEYCLOAK_CLIENT_SECRET = config("KEYCLOAK_CLIENT_SECRET", default="")

# 从项目主模块 ktem 中导入 App 类(包含 Gradio 逻辑)
from ktem.main import App  # noqa

# 实例化 ktem 的 App 对象
gradio_app = App()
# 创建 Gradio 演示应用实例(基于上面的 App 对象)
demo = gradio_app.make()

# 实例化 FastAPI 应用程序
app = FastAPI()

# 检查认证方式是否为 Keycloak
if AUTHENTICATION_METHOD == "KEYCLOAK":
    # 注册 Keycloak OpenID 认证配置
    grlogin.register(
        name="keycloak",                                    # 认证器名称
        server_metadata_url=(                               # Keycloak 的 OpenID 配置地址
            f"{KEYCLOAK_SERVER_URL}/realms/{KEYCLOAK_REALM}/"
            ".well-known/openid-configuration"
        ),
        client_id=KEYCLOAK_CLIENT_ID,                      # 客户端 ID
        client_secret=KEYCLOAK_CLIENT_SECRET,              # 客户端密钥
        client_kwargs={                                     # 额外客户端参数
            "scope": "openid email profile",               # 请求的权限范围
        },
    )

else:
    # 否则,注册 Google 认证配置
    grlogin.register(
        name="google",  # 认证器名称
        server_metadata_url=(                                 # Google 的 OpenID 配置地址
            "https://accounts.google.com/.well-known/openid-configuration"
        ),
        client_id=GOOGLE_CLIENT_ID,                      # 客户端 ID
        client_secret=GOOGLE_CLIENT_SECRET,              # 客户端密钥
        client_kwargs={                                   # 额外客户端参数
            "scope": "openid email profile",              # 请求的权限范围
        },
    )


# 定义一个端点,用于返回网站的 favicon.ico
@app.get("/favicon.ico", include_in_schema=False)
async def favicon():
    # 返回 gradio_app 对象中的 favicon 文件资源
    return FileResponse(gradio_app._favicon)

# 将 Gradio 应用挂载到 FastAPI 应用中
# 挂载路径为 "/app",即访问 /app 时能进入 Gradio 界面
gradio_app.mount_gradio_app(app, 
    demo, 
    "/app", 
    allowed_paths=[                                    # 允许访问的文件路径列表
        "libs/ktem/ktem/assets",                       # ktem 项目的静态资源目录
        GRADIO_TEMP_DIR,                              # 系统自动分配的临时目录
    ],
)

中文代码(翻译结果) 代码中c_表示常量、l_表示类

导入 系统

导入 梯度登录 作为 登录
从 解耦 导入 配置
从 FastAPI 导入 l_FastAPI
从 FastAPI.响应 导入 l_文件响应
从 工作流.设置 导入 设置 作为 工作流设置

c_千赫_应用_数据_目录 = 获取属性(工作流设置, “KH_APP_DATA_DIR”, “.”)
c_gradio_临时_目录 = 系统.获取环境变量(“GRADIO_TEMP_DIR”, 空)
c_认证_方法 = 配置(“AUTHENTICATION_METHOD”, “GOOGLE”)

override GRADIO_TEMP_DIR if it’s not set

如果 c_gradio_临时_目录 是 空:
c_gradio_临时_目录 = 系统.路径.拼接路径(c_千赫_应用_数据_目录, “gradio_tmp”)
系统.环境变量[“GRADIO_TEMP_DIR”] = c_gradio_临时_目录

for authentication with Google

c_谷歌_客户端_标识符 = 配置(“GOOGLE_CLIENT_ID”, 默认=“”)
c_谷歌_客户端_秘密 = 配置(“GOOGLE_CLIENT_SECRET”, 默认=“”)

for authentication with Open ID by keycloak

c_键cloak_服务器_地址 = 配置(“KEYCLOAK_SERVER_URL”, 默认=“”)
c_键cloak_王国 = 配置(“KEYCLOAK_REALM”, 默认=“”)
c_键cloak_客户端_标识符 = 配置(“KEYCLOAK_CLIENT_ID”, 默认=“”)
c_键cloak_客户端_秘密 = 配置(“KEYCLOAK_CLIENT_SECRET”, 默认=“”)

从 临时元.主 导入 l_应用 # noqa

gradio_应用 = l_应用()
演示 = gradio_应用.创建()

app = l_FastAPI()

如果 c_认证_方法 == “KEYCLOAK”:

for authentication with Open ID by keycloak

登录.注册(
名称=“keycloak”,
服务器_元数据_地址=(
函数"{KEYCLOAK_SERVER_URL}/realms/{KEYCLOAK_REALM}/"
“.well-known/openid-configuration”
),
客户端_标识符=c_键cloak_客户端_标识符,
客户端_秘密=c_键cloak_客户端_秘密,
客户端_关键字参数={
“scope”: “openid email profile”,
},
)

否则:

for authentication with Google

登录.注册(
名称=“google”,
服务器_元数据_地址=(
https://accounts.google.com/.well-known/openid-configuration”
),
客户端_标识符=c_谷歌_客户端_标识符,
客户端_秘密=c_谷歌_客户端_秘密,
客户端_关键字参数={
“scope”: “openid email profile”,
},
)

@app.获取(“/favicon.ico”, 包含_在_模式=假)
异步 定义 favicon():
返回 l_文件响应(gradio_应用._图标)

登录.挂载_gradio_应用(
app,
演示,
“/app”,
允许的_路径=[
“libs/ktem/ktem/assets”,
c_gradio_临时_目录,
],
)