← Về thư mục
📄 / / profiles / r-and-d / raw_evidence / OpenAI4S / openai4s / cli / README_zh.md

命令行接口

English

openai4s 命令都放在这里:daemon 生命周期(serve、status、stop、url)、本地一次性任务执行(run)、首次模型配置(init)、科学计算环境创建(setup)以及与之并列、把环境当事务处理的 env generation、几个支持面(doctor、diagnostics、verify-package)、工作流 benchmark、只读会话分享(share)与替它对外承接流量的公网 relay、批处理任务提交(cluster)、team 模式的账号管理(user),还有可选的 Jupyter 适配器命令。-V/--version 回答包版本号。

在架构中的位置

CLI 只负责组合,不负责编排。openai4s run 用 ../agent/ 搭出本地的外层循环,只有当某个回合真的路由到代码 Cell 时,常驻内核才会启动。openai4s serve 把活交给 HTTP/WebSocket server。setup 和 status 这类命令都跑在 Agent 回合之外。

同一棵 argparse 树下其实有三类命令,而失败意味着什么,取决于它属于哪一类。run、init、setup、env、doctor、diagnostics、verify-package、benchmark、user 和 Jupyter 命令都在当前进程里做完 —— user 直接写 store,因为需要初始化或停用账号的运维者,往往正是 daemon 起不来的那位。serve 自己变成 daemon;share 和 cluster 则是 REST 客户端,要求 daemon 已经在跑,因此 daemon 不在或凭据缺失时,它们在触及功能本身之前就先失败;cluster 面向 daemon 是刻意为之 —— 一次提交必须送达真正会处理它的 reconciler,第二个进程绕过 daemon 直接写 workload 行,正是两个 reconciler 对同一个 job 各执一词的由来。

文件

文件 职责
__init__.py 重新导出 main,包本身就是 CLI 入口。
main.py 一棵 argparse 树和它的 handler。在本进程内跑完的:run、init、setup、env(plan/apply/list/rollback/recover)、doctor、diagnostics、verify-package、benchmark、user(add/list/disable/reset-password,直接操作 store;密码走 --password-stdin 或生成后只打印一次,停用账号还会连带清掉它存下的 LLM key),以及 jupyter 的 describe/export/install。与 daemon 打交道的:serve(--detached 在 Linux/macOS 含 WSL2 上转入后台)、status、stop、url、share 的八个子命令,以及 cluster(submit/list/cancel/logs/profiles,走 daemon 的 orchestration 路由);relay serve / relay gen-token 跑的是架在 VPS 上的公网 share relay,不是本机的东西。daemon 的 pidfile 与 statefile 也归它管;建环境时也是它在调 conda —— setup --profile standard 建日常用的 Python 与 R 这一对,full 建全部四个,--only <name> 只建一个。已有的环境除非加 --update,否则不动它;更新绝不会 prune 掉你自己装的包;而且更新时传的是发现逻辑真正找到的那个 prefix,而不是 spec 里的 name: —— 只给名字的话 conda 会拿它去解析自己的 root prefix,结果是在 Agent 根本不会用到的地方另建一个环境,还报成功。

运维契约