env-setup
通用项目环境搭建。自动识别技术栈,按需加载子模块,搭建完整可运行环境。 支持 conda(ML/AI 项目优先)、venv、Docker Compose、Node.js、Java。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
通用项目环境搭建。自动识别技术栈,按需加载子模块,搭建完整可运行环境。 支持 conda(ML/AI 项目优先)、venv、Docker Compose、Node.js、Java。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
导师情报分析专家。帮助学生全方位调查研究生导师:学术实力、口碑评价、实验室生态、避雷预警。像一个帮你做尽职调查的'私家侦探'——用公开信息帮你避开学术生涯最大的坑。
导师调查报告生成器。汇总所有子 skill 的输出,生成结构化的 Markdown 报告文件。支持完整报告、精简报告、对比报告、面试准备等多种模板。
导师口碑与避雷调查。从知乎、小红书、一亩三分地、Reddit、RateMyProfessor 等多渠道搜索导师评价,重点挖掘负面信息和红旗警告。这是整个 advisor-agent 的核心差异化模块。
学术搜索与引用指标分析。从 Google Scholar、Semantic Scholar、DBLP 获取导师的论文数据、引用量、h-index 等核心学术指标。
实验室生态情报收集。调查导师实验室的学生构成、毕业去向、平均毕业年限、funding 状况、指导风格等。帮学生了解'进了这个组,日子会怎么过'。
导师论文深度分析。分析研究方向演变趋势、合作网络、发表节奏,帮助学生理解导师的学术轨迹和未来方向。
| name | env-setup |
| description | 通用项目环境搭建。自动识别技术栈,按需加载子模块,搭建完整可运行环境。 支持 conda(ML/AI 项目优先)、venv、Docker Compose、Node.js、Java。 |
将目标项目从源码变成可运行环境。遵循:识别 → 路由 → 搭建 → 验证。
重要原则:只加载需要的子模块,不要读取不相关的文件。
用户提供项目的方式分三种,流程不同:
| 来源 | PROJECT_DIR 怎么定 | 是否 clone | 是否问安装位置 |
|---|---|---|---|
| A. 给了 Git URL | ${SETUP_ROOT}/<name> | 是 | 是,问放哪里 |
| B. 模糊描述 | ${SETUP_ROOT}/<name> | 是(搜索后) | 是 |
| C. 给了本地路径 | 直接用用户给的路径 | 否 | 否 |
先问安装位置(不要默认用 /tmp):
~/projects/<project_name>/tmp/setup/PROJECT_NAME=$(basename "$GIT_URL" .git)
PROJECT_DIR="${SETUP_ROOT}/${PROJECT_NAME}"
WORKSPACE="${SETUP_ROOT}/.workspace/${PROJECT_NAME}"
mkdir -p "${WORKSPACE}"
然后执行第零步网络检测(见下方)再 clone。
# 用户说 "帮我装 /home/sakura/my-project 的环境"
PROJECT_DIR="/home/sakura/my-project" # 直接用用户给的路径
PROJECT_NAME=$(basename "$PROJECT_DIR")
WORKSPACE="${PROJECT_DIR}/.workspace" # workspace 放在项目目录内
mkdir -p "${WORKSPACE}"
不移动、不复制用户的文件。跳过网络检测和 clone,直接进入第一步(识别项目)。
读取 helpers/network-check.md,按顺序执行:
check_proxy — 检测环境变量和 git 全局代理是否已配置test_connectivity — 测试 GitHub 和国内网络连通性git clonesafe_git_clone(自动尝试镜像站)clone 时始终使用 safe_git_clone 函数,它内置了超时检测、镜像回退和代理引导。
cd "$PROJECT_DIR"
# 语言/框架
HAS_PYTHON=false; [ -f requirements.txt ] || [ -f pyproject.toml ] || [ -f setup.py ] || [ -f Pipfile ] || [ -f environment.yml ] || [ -f conda.yaml ] && HAS_PYTHON=true
HAS_NODE=false; [ -f package.json ] && HAS_NODE=true
HAS_JAVA=false; [ -f pom.xml ] || [ -f build.gradle ] && HAS_JAVA=true
HAS_DOCKER=false; [ -f docker-compose.yml ] || [ -f docker-compose.yaml ] || [ -f compose.yml ] && HAS_DOCKER=true
HAS_DOCKERFILE=false; [ -f Dockerfile ] && HAS_DOCKERFILE=true
# conda 相关(只检测 conda 命令是否可用和项目文件,不检测已有环境)
HAS_CONDA_ENV_FILE=false; [ -f environment.yml ] || [ -f environment.yaml ] || [ -f conda.yaml ] && HAS_CONDA_ENV_FILE=true
CONDA_AVAILABLE=false; which conda >/dev/null 2>&1 && CONDA_AVAILABLE=true
# ⚠️ 不要 conda env list —— 不检测/不复用用户已有的 conda 环境
# ML/AI 项目检测(决定是否需要 conda)
IS_ML_PROJECT=false
grep -qiE "torch|tensorflow|transformers|diffusers|accelerate|bitsandbytes|xformers|triton|jax|paddle|onnx|opencv|scikit-learn|keras" \
requirements*.txt pyproject.toml setup.py Pipfile 2>/dev/null && IS_ML_PROJECT=true
# conda 需求判定:有 environment.yml 或 ML 项目 → 需要 conda(没装就装)
NEEDS_CONDA=false
[ "$HAS_CONDA_ENV_FILE" = "true" ] && NEEDS_CONDA=true
[ "$IS_ML_PROJECT" = "true" ] && NEEDS_CONDA=true
echo "Python=$HAS_PYTHON Node=$HAS_NODE Java=$HAS_JAVA Docker=$HAS_DOCKER Dockerfile=$HAS_DOCKERFILE"
echo "Conda可用=$CONDA_AVAILABLE 需要Conda=$NEEDS_CONDA ML项目=$IS_ML_PROJECT"
NEEDS_POSTGRES=false
NEEDS_MYSQL=false
NEEDS_REDIS=false
NEEDS_MONGO=false
NEEDS_SQLITE=false
FILES=$(find "$PROJECT_DIR" -maxdepth 3 \
\( -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.yml" -o -name "*.yaml" \
-o -name "*.env*" -o -name "*.cfg" -o -name "*.ini" -o -name "*.conf" \
-o -name "requirements*.txt" -o -name "package.json" -o -name "Pipfile" \
-o -name "pyproject.toml" -o -name "docker-compose*" \) 2>/dev/null)
grep -ril "psycopg\|postgres\|postgresql" $FILES 2>/dev/null && NEEDS_POSTGRES=true
grep -ril "mysqlclient\|pymysql\|mysql2\|mariadb" $FILES 2>/dev/null && NEEDS_MYSQL=true
grep -ril "redis" $FILES 2>/dev/null && NEEDS_REDIS=true
grep -ril "pymongo\|mongodb\|mongoose" $FILES 2>/dev/null && NEEDS_MONGO=true
grep -ril "sqlite" $FILES 2>/dev/null && NEEDS_SQLITE=true
echo "Postgres=$NEEDS_POSTGRES MySQL=$NEEDS_MYSQL Redis=$NEEDS_REDIS Mongo=$NEEDS_MONGO SQLite=$NEEDS_SQLITE"
提取:安装方式、启动命令、依赖服务、环境变量、特殊硬件要求(GPU 等)。
根据识别结果,只读取对应的子模块文件:
| 文件 | 说明 |
|---|---|
helpers/network-check.md | 网络检测 + 代理处理 + 镜像回退(clone 前) |
helpers/port-isolation.md | 端口查找 + Docker 网络隔离 |
output/status-output.md | 最终输出模板 |
| 条件 | 读取文件 |
|---|---|
NEEDS_POSTGRES=true | db/postgres.md |
NEEDS_MYSQL=true | db/mysql.md |
NEEDS_REDIS=true | db/redis.md |
NEEDS_MONGO=true | db/mongo.md |
NEEDS_SQLITE=true | 无需额外文件 |
| 条件 | 读取文件 |
|---|---|
HAS_DOCKER=true(有 compose) | app/docker-compose.md |
HAS_DOCKERFILE=true(只有 Dockerfile) | app/docker-compose.md(复用其中 Dockerfile 段落) |
HAS_PYTHON=true | app/python.md |
HAS_NODE=true | app/node.md |
HAS_JAVA=true | app/java.md |
| 条件 | 读取文件 |
|---|---|
| 需要拉取任何 Docker 镜像时 | helpers/image-check.md |
优先级:Docker Compose > Dockerfile > 手动搭建。 有 compose 时直接用 compose,不需要再读语言对应的手动搭建文件。
按加载的子模块执行。顺序:
helpers/port-isolation.md)db/*.md)app/*.md)QUIET=true bash skills/env-setup/scripts/health_check.sh \
"$PROJECT_NAME" "$WEB_PORT" \
"postgres:${DB_PORT}:setup_${PROJECT_NAME}_postgres" \
"redis:${REDIS_PORT}:setup_${PROJECT_NAME}_redis"
# 只用 sqlite 的项目
QUIET=true bash skills/env-setup/scripts/health_check.sh \
"$PROJECT_NAME" "$WEB_PORT" sqlite
| 状态 | 条件 |
|---|---|
| READY | 所有服务运行,HTTP 可达(或 ML 项目脚本可执行) |
| PARTIAL | 主应用可用,辅助服务有问题 |
| FAILED | 主应用无法启动 |
搭建完成后,必须按照 output/status-output.md 的模板,将完整的环境文档写入 ${PROJECT_DIR}/ENVIRONMENT_SETUP.md。
这一步不可省略。用户关闭终端后,这个文件是唯一的操作参考。
文档必须包含:
写入后在终端告知用户文件位置:详细文档已保存到: ${PROJECT_DIR}/ENVIRONMENT_SETUP.md
不要重新搭建。确认端口后直接验证:
ss -tlnp | grep -E ":(3000|5000|8000|8080|8888) "
docker ps --format "table {{.Names}}\t{{.Ports}}" 2>/dev/null | grep -i setup
最多重试 3 轮:
| 问题 | 解决方案 |
|---|---|
| git clone 超时 | safe_git_clone 自动尝试镜像站,全部失败则引导用户配代理 |
| GitHub 不可达 | 先用镜像站,不行则提示配置 http_proxy / git proxy |
| 缺系统依赖 | apt-get update && apt-get install -y <pkg> |
| pip/conda 超时 | 换源:pip 用清华源,conda 用清华 channel |
| npm 超时 | npm config set registry https://registry.npmmirror.com |
| Docker 镜像拉取失败 | ensure_image 自动回退阿里云/USTC 镜像 |
| 端口被占 | find_free_port 自动跳过 |
| 数据库连接拒绝 | wait_for_port 等待就绪 |
| CUDA 版本不匹配 | 检查 nvidia-smi,安装对应版本 torch |
| 无法解决 | 记录错误,报告用户 |