Uni-Mol Tools CLI 交互式模型管理完全指南:存储分析、性能排名与智能清理实战
【免费下载链接】CLI-Anything"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything
Uni-Mol Tools CLI 面向分子性质预测实验的全生命周期,不仅提供训练与推理能力,还内置了 5 项交互式模型管理功能:存储分析(Storage Analysis)、模型排名(Model Ranking)、性能历史(Performance History)、智能清理(Smart Cleanup)与归档管理(Archive Management)。本文将逐一拆解这 5 项功能的命令用法、评分/决策机制、交互式与自动模式差异,并结合仓库源码(storage.py、models_manager.py、cleanup.py)说明其底层实现,帮助读者掌握从"训练出多个模型"到"选出最优、清理冗余、归档历史"的完整闭环。
功能总览
Uni-Mol Tools CLI 为智能模型管理提供 5 项交互式功能,覆盖"看空间 → 比模型 → 看趋势 → 清冗余 → 存归档"的完整运维链路:
- Storage Analysis:可视化磁盘空间使用情况,定位优化机会;
- Model Ranking:按 AUC 性能自动对所有已训练模型排序;
- Performance History:追踪模型性能随时间的变化趋势;
- Smart Cleanup:智能识别并删除低价值模型,同时保留重要实验;
- Archive Management:将模型压缩至约 10% 体积(节省约 90% 空间),需要时再还原。
所有命令统一挂在cli-anything-unimol-tools可执行程序下,通过-p/--project指定项目文件(project.json),并支持--json输出结构化结果以接入自动化脚本。CLI 入口定义见 unimol_tools_cli.py,项目文件由project new创建,运行记录(runs)、指标(metrics)等元数据均保存在其中。
1. Storage Analysis:一目了然的磁盘体检
用途
训练分子模型会持续积累三类文件:模型检查点、构象缓存与预测结果。Storage Analysis 帮助你快速回答"空间被谁吃掉了",并给出可执行的优化建议。
命令
cli-anything-unimol-tools -p project.json storage展示内容
组件分解(Components Breakdown),按目录逐项统计:
- Models:训练生成的模型检查点(
.pth文件); - Conformers:缓存的 3D 分子构象(
.sdf文件); - Predictions:保存的预测结果(
.csv文件)。
优化建议(Recommendations):
- 超过阈值天数的旧模型;
- 重复的构象文件;
- 潜在可节省的空间。
示例输出
💾 Storage Analysis ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Total Usage: 549.6MB Components: Models 541.9MB ( 98.6%) █████████████████████████████░ Conformers 7.8MB ( 1.4%) ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Predictions 0.0MB ( 0.0%) ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Models (3): • run_001: 180.6MB (AUC: 0.8723) - 2 days old • run_002: 180.6MB (AUC: 0.8954) - 1 day old • run_003: 180.7MB (AUC: 0.9123) - 0 days old ⭐ Conformers: • 5 unique SDF files (7.8MB) • 3 shared across models ⚠️ Recommendations: • 2 models are > 1 day old (save 361MB) • Conformers are efficiently cached ✓ Potential savings: 361MB (66%) 💡 Tip: Run 'cleanup --auto' to free up space底层实现:分析逻辑从何而来
从源码看,analyze_project_storage()(storage.py)按project_root下的experiments/(模型)、conformers/、predictions/三个目录分别统计大小;模型目录同时支持model_dir与save_path两种键名(兼容不同版本的项目文件)。建议生成规则如下:
- 旧模型:
age_days > 7,汇总其占用空间作为可节省量; - 低分模型:
AUC < 0.75且age_days > 1,同样计入潜在节省。
命令行展示端(unimol_tools_cli.py)用 30 字符宽的█/░进度条按百分比渲染每个组件,并通过storage_mod.format_size()(支持 B/KB/MB/GB/TB 递进换算)输出人类可读的大小。对应测试位于 test_storage.py,覆盖了空项目、无效路径、百分比求和等边界场景。
理解 Conformers(构象缓存)
什么是构象(conformer)?
- 由 SMILES 生成的三维分子结构;
- Uni-Mol 编码所需的输入;
- 以
.sdf文件缓存以便复用。
为什么它们会出现在统计中?
- 首次训练时:从 SMILES 生成构象;
- 保存至项目下的
conformers/目录; - 后续训练:复用缓存文件,显著提速。
缓存级别(由--conf-cache-level控制):
| 级别 | 行为 | 特点 |
|---|---|---|
0 | 不缓存,每次都重新生成 | 最慢,磁盘占用最小 |
1 | 智能缓存,生成一次后复用 | 默认、推荐 |
2 | 严格复用,仅使用已有缓存 | 最快,需预先生成 |
典型使用场景
实验开始前:
# 检查可用空间 cli-anything-unimol-tools -p project.json storage实验结束后:
# 查看积累了哪些产物 cli-anything-unimol-tools -p project.json storage # 依据建议执行清理 cli-anything-unimol-tools -p project.json cleanup --auto多项目监控:
# 为所有项目生成存储报告 for proj in projects/*.json; do echo "=== $(basename $proj) ===" cli-anything-unimol-tools -p "$proj" storage echo "" done > storage_report.txt2. Model Ranking:用分数说话,不靠直觉选模型
用途
实验跑出多个模型后,人工逐个翻指标既低效又易错。Model Ranking 自动按 AUC 性能对全部模型排序,直接给出"哪个模型适合上线"的推荐。
命令
cli-anything-unimol-tools -p project.json models rank评分体系
当前评分:100% 基于 AUC
Score = AUC × 10;- 分值范围:0–10(越高越好);
- 示例:AUC 0.8723 → Score 8.7/10。
状态标签(Status):
| 标签 | 判定条件 |
|---|---|
| Best | AUC ≥ 0.85 且 score ≥ 8.5 |
| Good | AUC ≥ 0.85 |
| Ok | AUC ≥ 0.75 |
| Weak | AUC ≥ 0.65 |
| Poor | AUC < 0.65 |
示例输出
🏆 Model Ranking ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Based on AUC performance Rank Run ID Score AUC Duration Status ────────────────────────────────────────────────────────────────── 🥇 1 run_003 9.1/10 0.9123 26.8s Best 🥈 2 run_002 9.0/10 0.8954 19.7s Good 🥉 3 run_001 8.7/10 0.8723 16.3s Good 4 run_004 7.8/10 0.7803 18.2s Ok 5 run_005 7.2/10 0.7234 15.9s Weak 💡 Recommendation: Use run_003 for production - Highest AUC: 0.9123 - Consistent performance across metrics视觉指示符
| 图标 | 含义 |
|---|---|
| 🥇 | 第 1 名(最优模型) |
| 🥈 | 第 2 名 |
| 🥉 | 第 3 名 |
| ⭐ | 高 AUC(≥ 0.90) |
| ⚡ | 快速训练(<20s) |
底层实现:分数与状态的精确算法
calculate_model_score()(models_manager.py)是评分的核心函数。虽然当前配置默认weight_auc=1.0、weight_time=0.0、weight_recency=0.0,即纯 AUC 评分,但函数本身是一个可扩展的加权模型:
- AUC 分:从
metrics中读取auc(兼容auroc键,默认 0.5),auc × 10; - 时间分(预留):假设训练时长典型区间 10–30 秒,
(30 - duration) / 2归一化到 0–10,用时越短得分越高; - 新颖度分(预留):24 小时内满分 10,超过 7 天为 0。
rank_models()(models_manager.py)按分数降序排序并附加rank序号;状态判定使用上述阈值链(AUC ≥ 0.85 且分数 ≥ 8.5 为 Best,逐级向下)。命令行展示(unimol_tools_cli.py)为前 3 名渲染 🥇/🥈/🥉,为 AUC ≥ 0.85 附加 ⭐,为训练时长 <16s 附加 ⚡,并打印推荐模型。
此外,compare_models()支持双模型逐指标对比(auc/accuracy/f1_score/mcc/log_loss 等,log_loss 取小值为胜),get_best_model()则直接返回指标最优的模型,供models best命令使用。
典型使用场景
多模型训练后横向比较:
# 对比所有模型 cli-anything-unimol-tools -p project.json models rank用最佳模型做预测:
# 提取最佳模型 ID BEST=$(cli-anything-unimol-tools --json -p project.json models rank | \ jq -r '.models[0].run_id') # 用最佳模型跑预测 cli-anything-unimol-tools -p project.json predict run $BEST test.csv定位表现不佳的模型:
# 先排名 cli-anything-unimol-tools -p project.json models rank # 删除 "Poor" 或 "Weak" 模型 cli-anything-unimol-tools -p project.json cleanup --auto --min-auc=0.75JSON 输出:自动化友好
cli-anything-unimol-tools --json -p project.json models rank | jq{ "models": [ { "rank": 1, "run_id": "run_003", "score": 9.1, "auc": 0.9123, "duration_sec": 26.8, "status": "Best", "timestamp": "2024-01-15T12:34:56" }, { "rank": 2, "run_id": "run_002", "score": 9.0, "auc": 0.8954, "duration_sec": 19.7, "status": "Good", "timestamp": "2024-01-14T10:20:30" } ], "recommendation": { "run_id": "run_003", "reason": "Highest AUC (0.9123)" } }--json全局开关对所有子命令生效(见 unimol_tools_cli.py 的上下文对象设计),配合jq即可在 CI/定时任务中消费。
3. Performance History:看清实验是在进步还是倒退
用途
把历次训练运行按时间展开,可视化 AUC 与训练时长的演进,判断实验方向是否正确。
命令
cli-anything-unimol-tools -p project.json models history展示内容
时间线(Timeline):
- 按时间顺序排列的训练运行;
- AUC 演进;
- 训练时长变化。
趋势分析(Trend Analysis):
- Improving:最新 AUC 比最早 AUC 高 0.05 以上;
- Declining:最新 AUC 比最早 AUC 低 0.05 以上;
- Stable:变化在 ±0.05 以内;
- Insufficient data:模型数量少于 2 个。
洞察(Insights):
- 最优模型识别;
- 性能提升幅度;
- 近期性能回落的告警。
示例输出
📊 Model Performance History ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Total runs: 5 Trend: improving AUC Progress: run_001 (01/12) │███████████████████████████████████████ 0.7893 run_002 (01/13) │████████████████████████████████████████████ 0.8123 run_003 (01/14) │████████████████████████████████████████████ 0.8295 run_004 (01/14) │████████████████████████████████████████████████ 0.8954 run_005 (01/15) │████████████████████████████████████████████████ 0.9123 Training Time: run_001 (01/12) │█████████████████████ 16.3s run_002 (01/13) │██████████████████████ 17.1s run_003 (01/14) │██████████████████████████ 19.2s run_004 (01/14) │████████████████████████████ 19.7s run_005 (01/15) │██████████████████████████████████ 26.8s 💡 Insights: ✓ Best model: run_005 (AUC: 0.9123) ✓ Improving trend (+0.123 AUC over 5 runs) ⚠ Training time increasing (16.3s → 26.8s)如何解读图表
AUC 进度图:
- 每根条形代表一个模型;
- 条形长度 = AUC 值;
- 条形越长 = 性能越好;
- 直观反映是否在持续进步。
训练时长图:
- 每根条形代表一次训练耗时;
- 帮助发现实验是否越来越慢;
- 用于成本/性能的权衡判断。
底层实现:趋势判定与告警规则
get_model_history()(models_manager.py)先按timestamp排序构建时间线,再对比首尾 AUC:
last_auc > first_auc + 0.05→improving;last_auc < first_auc - 0.05→declining;- 其余 →
stable;少于 2 个模型 →insufficient_data。
洞察生成逻辑包括:标记最优模型;improving时输出累计提升量(+{delta:.3f} AUC);declining时输出回落告警;若最近一次相比上一次下降超过 0.02(且至少有 3 条记录),则额外提示"近期回落"。命令行端(unimol_tools_cli.py)用 50 字符宽的条形图渲染 AUC 演进。
典型使用场景
追踪实验进度:
# 每次训练后 cli-anything-unimol-tools -p project.json train start --epochs 20 cli-anything-unimol-tools -p project.json models history识别性能平台期:
# 检查性能是否仍在提升 cli-anything-unimol-tools -p project.json models history # 若趋势为 "stable",可考虑: # - 尝试不同超参数 # - 增加训练数据 # - 更换模型架构性能回退自动检测:
# 自动化检查 TREND=$(cli-anything-unimol-tools --json -p project.json models history | \ jq -r '.trend') if [ "$TREND" = "declining" ]; then echo "⚠️ Warning: Performance declining!" echo "Last few models performed worse than earlier ones" fi4. Smart Cleanup:保留精华,清理冗余
用途
智能识别低价值模型并删除/归档,在节省磁盘空间的同时确保重要实验不被误删。
命令形态
交互模式(首次使用推荐,全程有确认):
cli-anything-unimol-tools -p project.json cleanup自动模式:
cli-anything-unimol-tools -p project.json cleanup --auto [OPTIONS]选项参数
| 选项 | 默认值 | 说明 |
|---|---|---|
--keep-best | 3 | 保留的顶级模型数量 |
--min-auc | 0.75 | AUC 最低阈值(低于则删除) |
--max-age-days | 7 | 保留 N 天以内的新模型 |
清理策略:三类分组
1. Delete(永久删除):
- AUC 低于
min_auc阈值; - 超过
max_age_days天数; - 不在 Top N 之列。
2. Archive(压缩约 90%):
- 中等级别性能(AUC ≥ min_auc);
- 超过
max_age_days天数; - 不在 Top N 之列;
- 未来可能有用。
3. Keep(原样保留):
- 按分数排序的 Top N 最佳模型;
- 近期模型(≤ max_age_days);
- 始终保留最优表现者。
决策逻辑源码解读
suggest_deletable_models()(models_manager.py)完整实现了上述三分类:先调用rank_models()得到排名,取前keep_best_n无条件保留;未进 Top N 但age_days <= max_age_days的按"近期"保留;既老又低于min_auc的进入删除列表;既老但 AUC 达标(≥ min_auc)的进入归档列表。注意,若 run 缺少timestamp,源码将age_days视为 999(按极老处理)。
交互式会话由cleanup_models命令驱动(unimol_tools_cli.py):展示建议 → 让用户选择动作(自动清理/删除全部/归档全部/取消)→ 调用batch_cleanup()执行并保存更新后的项目文件。
交互模式示例会话
🧹 Model Cleanup Assistant ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Found 6 models 🗑️ Suggested for deletion (2 models): • run_001: Low AUC (0.720 < 0.75) - saves 180MB • run_004: Low AUC (0.680 < 0.75) - saves 181MB 📦 Suggested for archival (1 model): • run_002: Old but decent (AUC: 0.820, 8 days old) - saves 163MB ✅ Will keep (3 models): • run_003: Top 3 model (rank 1, AUC: 0.912) • run_005: Top 3 model (rank 2, AUC: 0.895) • run_006: Recent (0 days old) Potential savings: 524MB (96%) Actions: 1. Auto-clean (delete suggested, archive rest) 2. Delete all suggested 3. Archive all suggested 4. Custom selection 5. Cancel Choose action [1-5]: 1 Confirm deletion of run_001, run_004? [yes/no]: yes Processing... ✓ Deleted run_001 (180MB freed) ✓ Deleted run_004 (181MB freed) ✓ Archived run_002 → ~/.unimol-archive/ (163MB saved) Total freed: 524MB ✓ Cleanup complete!自动模式示例
只保留最佳 2 个模型:
cli-anything-unimol-tools -p project.json cleanup --auto --keep-best=2删除 AUC < 0.80 的模型:
cli-anything-unimol-tools -p project.json cleanup --auto --min-auc=0.80激进清理(只留第 1 名):
cli-anything-unimol-tools -p project.json cleanup --auto \ --keep-best=1 \ --min-auc=0.85 \ --max-age-days=3保守清理(保留更多):
cli-anything-unimol-tools -p project.json cleanup --auto \ --keep-best=5 \ --min-auc=0.70 \ --max-age-days=14执行与验证
delete_model()与batch_cleanup()(cleanup.py)负责实际落盘操作:删除前计算目录体积并(默认)要求用户yes/no确认;删除后同步从项目runs中移除记录;批量执行会汇总deleted、failed、space_freed_mb。测试用例(test_cleanup.py)覆盖了删除已有/不存在模型、项目记录同步更新、批量删除与失败路径、空间释放统计等场景。
典型使用场景
超参扫描之后:
# 训练多种配置 for lr in 1e-5 5e-5 1e-4 5e-4; do cli-anything-unimol-tools -p project.json train start --learning-rate $lr done # 清理,保留最佳 2 个 cli-anything-unimol-tools -p project.json cleanup --auto --keep-best=2例行维护:
# 每周清理脚本 cli-anything-unimol-tools -p project.json cleanup --auto \ --keep-best=3 \ --min-auc=0.80上线前准备:
# 只保留绝对最优模型 cli-anything-unimol-tools -p project.json cleanup --auto \ --keep-best=1 \ --min-auc=0.905. Archive Management:压缩归档,随取随用
用途
把模型压缩到原体积的约 10%(节省 90% 空间)而不永久丢失,是"想删又舍不得"场景的最佳折中。
命令
列出归档:
cli-anything-unimol-tools archive list还原归档模型:
cli-anything-unimol-tools -p project.json archive restore RUN_ID归档机制
压缩方式:
- 使用
tar.gz压缩; - 打包模型检查点、配置、指标;
- 典型效果:180MB → 18MB(约 90% 缩减)。
存储位置:
- 默认:
~/.unimol-archive/; - 按项目名组织;
- 命名格式:
{project_name}_{run_id}.tar.gz(源码中还会追加日期戳{YYYYMMDD},见 cleanup.py)。
安全机制:
- 归档成功后才删除原始模型;
- 删除前验证归档完整性(源码中
archive_model()先完成tar.add()与os.path.getsize()校验,再执行shutil.rmtree(model_dir);失败时清理残留的残缺归档)。
列出归档示例
cli-anything-unimol-tools archive list📦 Archived Models ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Total: 4 archives Location: ~/.unimol-archive/ • drug_activity_run_002.tar.gz (18.2MB) - 2024-01-15 10:30 Project: drug_activity, AUC: 0.8123 • solubility_run_001.tar.gz (18.1MB) - 2024-01-14 08:20 Project: solubility, MSE: 0.245 • toxicity_run_003.tar.gz (18.3MB) - 2024-01-13 14:45 Project: toxicity, AUC: 0.7945 • properties_run_005.tar.gz (18.2MB) - 2024-01-12 16:10 Project: properties, Metrics: multilabel Total size: 72.8MB Original size (estimated): 720MB Space saved: 647MB (90%) 💡 Use 'archive restore RUN_ID' to restore an archivelist_archives()(cleanup.py)遍历归档目录中的.tar.gz文件,从文件名解析出项目名、run_id 与日期,并按修改时间倒序排列。
还原归档示例
cli-anything-unimol-tools -p drug_activity.json archive restore run_002📦 Restoring Archive ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Archive: drug_activity_run_002.tar.gz Location: ~/.unimol-archive/drug_activity_run_002.tar.gz Compressed size: 18.2MB Original size: 180.6MB Extracting... ━━━━━━━━━━━━━━━━━━ 100% ✓ Restored: models/run_002/ Contents: • checkpoint.pth (179.3MB) • config.json (1.2KB) • metric.result (0.8KB) ✓ Model ready for use! You can now: • Run predictions: predict run run_002 data.csv • View metrics: train info run_002 • Re-archive: cleanup (will suggest archiving again if old)源码层面,restore_model()(cleanup.py)将归档解压回项目experiments/{run_id}目录,并把run["archived"]复位为False、更新model_dir,随后 CLI 层保存项目文件;若目标目录已存在或归档文件缺失,会返回明确的错误信息。
典型使用场景
归档旧实验:
# 交互式清理会自动建议归档 cli-anything-unimol-tools -p project.json cleanup # 或通过自动模式手动归档 cli-anything-unimol-tools -p project.json cleanup --auto \ --keep-best=2 \ --max-age-days=7还原旧模型做对比:
# 还原旧模型 cli-anything-unimol-tools -p project.json archive restore run_002 # 与当前最优对比 cli-anything-unimol-tools -p project.json models rank # 用两个模型分别预测 cli-anything-unimol-tools -p project.json predict run run_002 test.csv -o old.csv cli-anything-unimol-tools -p project.json predict run run_005 test.csv -o new.csv长期存储:
# 除第 1 名外全部归档 cli-anything-unimol-tools -p project.json cleanup --auto --keep-best=1 # 查看已归档内容 cli-anything-unimol-tools archive list # 备份整个归档目录 tar -czf backup_$(date +%Y%m%d).tar.gz ~/.unimol-archive/综合工作流示例
工作流 1:实验 → 选优 → 部署
# 1. 运行多组实验 for epochs in 10 20 30; do cli-anything-unimol-tools -p project.json train start --epochs $epochs done # 2. 查看结果 cli-anything-unimol-tools -p project.json models history cli-anything-unimol-tools -p project.json models rank # 3. 选出最佳模型 BEST=$(cli-anything-unimol-tools --json -p project.json models rank | \ jq -r '.models[0].run_id') # 4. 清理其余 cli-anything-unimol-tools -p project.json cleanup --auto --keep-best=1 # 5. 部署预测 cli-anything-unimol-tools -p project.json predict run $BEST production_data.csv工作流 2:定期维护
#!/bin/bash # weekly_maintenance.sh PROJECT="my_project.json" echo "Weekly Maintenance Report" echo "==========================" echo "" # Storage before echo "Storage Before:" cli-anything-unimol-tools -p $PROJECT storage echo "" # Cleanup echo "Running cleanup..." cli-anything-unimol-tools -p $PROJECT cleanup --auto \ --keep-best=3 \ --min-auc=0.80 \ --max-age-days=14 echo "" # Storage after echo "Storage After:" cli-anything-unimol-tools -p $PROJECT storage echo "" # Current best echo "Current Best Model:" cli-anything-unimol-tools -p $PROJECT models rank | head -n 5工作流 3:超参数网格搜索
#!/bin/bash # hyperparam_sweep.sh PROJECT="tuning.json" # Grid search for lr in 1e-5 5e-5 1e-4; do for bs in 8 16 32; do for dropout in 0.0 0.1 0.2; do echo "Training: LR=$lr BS=$bs Dropout=$dropout" cli-anything-unimol-tools -p $PROJECT train start \ --epochs 20 \ --learning-rate $lr \ --batch-size $bs \ --dropout $dropout # Check progress cli-anything-unimol-tools -p $PROJECT models history | tail -n 5 done done done # Analyze results echo "=== Final Results ===" cli-anything-unimol-tools -p $PROJECT models rank # Keep top 3, archive rest cli-anything-unimol-tools -p $PROJECT cleanup --auto --keep-best=3最佳实践
1. 定期监控存储
# 纳入每周例行 cli-anything-unimol-tools -p project.json storage2. 实验结束后及时清理
# 超参扫描之后立即清理 cli-anything-unimol-tools -p project.json cleanup --auto3. 用排名而非直觉选择模型
# 不要猜——用排名 BEST=$(cli-anything-unimol-tools --json -p project.json models rank | \ jq -r '.models[0].run_id')4. 拿不准就归档而不是删除
# 不确定时,先归档(之后可还原) cli-anything-unimol-tools -p project.json cleanup # 交互模式 # 选择 "Archive" 选项5. 持续追踪趋势
# 检查自己是否在进步 cli-anything-unimol-tools -p project.json models history下一步
- 故障排查:参见 Troubleshooting Guide;
- 训练流程:参见 Training SOP;
- 清理流程:参见 Cleanup SOP;
- 架构设计:参见 Design Documentation。
【免费下载链接】CLI-Anything"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考