Skip to content

Dreamaker-TA/EasyCode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EasyCode

Your local-first AI coding practice platform.

本地优先的 AI 刷题平台,支持 LLM 评测、代码快照、计时练习与间隔复习。

License: MIT Python Node FastAPI React TypeScript


EasyCode 主界面:题面、Monaco 编辑器、计时器与评测面板

核心特性 · 快速开始 · 自带题库 · 截图 · 配置 · FAQ


项目介绍

EasyCode 是一个面向算法学习者的本地 AI 刷题平台。它把 LeetCode 式的三栏刷题体验、Monaco Python 编辑器、计时练习、代码快照、LLM 评测复盘和 SRS 间隔复习串成一个完整闭环。

它适合已经读过算法讲解、但需要大量动手练习的人。传统刷题平台通常只告诉你“通过/不通过”,EasyCode 更关注“你是怎么写出来的”:哪里卡住、什么时候改了思路、复杂度是否合理、代码质量还有哪些提升空间。提交后,LLM 会基于最终代码和过程快照给出结构化反馈,让每次练习都变成一次可复盘、可追踪、可安排复习的训练。

EasyCode 不绑定固定题库。仓库只附带少量示例题,你可以把自己的题目 Markdown 放入 Code/,一键导入后变成个人专属刷题系统。


核心特性

AI 评测复盘

提交后,后端会调用 OpenAI 兼容的 LLM endpoint,生成一份 5 维评测报告:

维度 内容
编译判断 静态语法判断与问题清单
代码质量 可读性、风格、边界条件与常见陷阱
复杂度分析 时间/空间复杂度与推导说明
优化建议 可替代算法与局部改进方向
过程复盘 基于代码快照分析解题过程

评测会给出 A/B/C/D 评级,并支持手动覆盖评级。

代码快照与回放

练习过程中,前端每 30 秒采集一次代码快照。提交时,EasyCode 不只发送最终答案,也会把关键时间线交给 LLM 分析。你可以在历史页面逐帧回放当时的代码变化,复盘思路转折和卡点。

间隔复习

LLM 评级会直接驱动 SRS 复习计划:

评级 下次复习
A 14 天后
B 7 天后
C 3 天后
D 1 天后

待复习题会聚合到导航栏,帮助你把一次性刷题变成持续训练。

本地优先

数据默认保存在本地 SQLite。代码草稿、提交记录、快照、评测结果都属于你自己的本地学习资产。LLM provider 可自由切换,支持 DeepSeek、Qwen、OpenRouter 或本地 Ollama 等 OpenAI 兼容服务。


快速开始

环境要求

工具 版本
Python 3.11+
uv latest
Node.js 20+
pnpm 9+
LLM 任意 OpenAI 兼容 endpoint

安装与初始化

git clone https://github.com/Dreamaker-TA/EasyCode.git
cd EasyCode

./scripts/bootstrap.sh

首次执行会从 .env.example 复制 .env 并提示你填写 LLM_API_KEY

配置 LLM

编辑 .env

LLM_BASE_URL=https://api.deepseek.com/v1
LLM_API_KEY=replace-with-your-api-key
LLM_MODEL=deepseek-chat

填完后再次运行:

./scripts/bootstrap.sh

启动

make dev

浏览器打开:

http://localhost:5173

自带题库

EasyCode 使用 Markdown 作为题库源。仓库内置少量示例题用于跑通流程,你可以把自己的题目放进:

Code/<章节>/<题号_标题>.md

然后执行:

make ingest

题目格式见 Code/PROJECT_GUIDE.md


截图

题库列表
题库列表
三栏刷题界面
三栏刷题界面
计时练习与快照状态
计时练习
LLM 评测结果
LLM 评测结果

工作流

graph LR
  A[选择题目] --> B[计时练习]
  B --> C[30s 代码快照]
  C --> D[提交代码]
  D --> E[LLM 评测]
  E --> F[A/B/C/D 评级]
  F --> G[SRS 复习计划]
  E --> H[历史回放]
Loading

配置

变量 说明 默认值
LLM_BASE_URL OpenAI 兼容 API 地址 https://api.deepseek.com/v1
LLM_API_KEY LLM API key 必填
LLM_MODEL 模型名 deepseek-chat
DB_PATH SQLite 路径 backend/data/easycode.db
CORS_ORIGINS 后端允许来源 http://localhost:5173,http://127.0.0.1:5173
VITE_API_BASE 前端 API 地址 http://127.0.0.1:8000/api

常用 provider 示例:

# DeepSeek
LLM_BASE_URL=https://api.deepseek.com/v1
LLM_API_KEY=replace-with-your-deepseek-key
LLM_MODEL=deepseek-chat

# Qwen
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
LLM_API_KEY=replace-with-your-qwen-key
LLM_MODEL=qwen-max

# OpenRouter
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_API_KEY=replace-with-your-openrouter-key
LLM_MODEL=anthropic/claude-3.5-sonnet

# Ollama
LLM_BASE_URL=http://localhost:11434/v1
LLM_API_KEY=ollama
LLM_MODEL=qwen2.5-coder:14b

常用命令

命令 说明
make dev 同时启动前后端
make backend 只启动后端
make frontend 只启动前端
make install 安装前后端依赖
make ingest 重新导入题库
make migrate 执行数据库迁移
make seed 灌入题库数据
make clean 清理依赖、数据库与导入产物

技术栈

  • Backend: FastAPI, SQLAlchemy, Alembic, Pydantic, SQLite, OpenAI-compatible SDK
  • Frontend: React, TypeScript, Vite, Monaco Editor, TanStack Query, axios
  • Tooling: uv, pnpm, Makefile

FAQ

LLM 返回 401 / 403 怎么办?

检查 .env 中的 LLM_API_KEY。等号后应该直接写 key 字面值,不要带引号、反引号或列表前缀。

前端 CORS 报错怎么办?

确认 .envCORS_ORIGINS 包含当前前端地址,例如 http://localhost:5173

数据库异常怎么办?

可以执行:

make clean && ./scripts/bootstrap.sh

这会删除本地 SQLite 数据库,提交历史会丢失。重要练习记录建议定期备份:

cp backend/data/easycode.db ~/easycode_backup.db

License

MIT


If EasyCode helps your algorithm practice become more deliberate, give it a star.

About

Local-first AI coding practice platform with LLM review, code snapshots, timed sessions, and spaced repetition. 本地优先的 AI 刷题平台,支持 LLM 评测、 代码快照、计时练习与间隔复习。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors