Simjecture 课题组安装与开发指南¶
这份指南面向第一次接触 Simjecture、Git 和 GitHub 的同学。先把程序跑起来,再用一个真实的小修改走完开发和提交 PR 的流程。只使用软件的同学可以读到第 4 节;准备参与开发的同学继续往下读。
Simjecture 有两种主要用法:交互模式让你和智能体一起写代码、运行仿真、看图和排查问题;自主研究模式从你给出的假设、研究范围和时间预算出发,让智能体设计实验、寻找反例,并把证据提交给独立审阅者。仿真成功退出和科学结论成立,是两件需要分别检查的事。
项目仓库:github.com/tomzhu0225/simjecture · 在线试用:simjecture.com · 完整文档:drawingsword.com/simjecture
1. 先选适合自己的路径¶
你的目标 |
建议从哪里开始 |
是否需要 GitHub 账号 |
|---|---|---|
先看看软件能做什么 |
打开在线试用网站 |
访客可以试用;登录后可以保留项目、上传文件 |
在自己的电脑或组内服务器上做研究 |
安装发布版 |
下载和安装公开发布版不需要账号 |
修改 Simjecture、修问题或贡献新功能 |
Fork 仓库,再安装源码开发环境 |
需要自己的 GitHub 账号 |
接入自己的求解器或诊断程序 |
先跑通程序,再提供接口、示例和验证 |
提交公开贡献时需要账号 |
第一次使用,建议先完成一个普通 Python 小任务。 不必先装 FLASH、WarpX,也不必先配置 GPU。
发布版和开发版可以同时存在,但要分清两个目录:发布版一般在 ~/simjecture,自己 Fork 的源码建议放在 ~/src/simjecture。修改源码后,要从源码目录启动,才能看到修改。
2. 安装发布版¶
2.1 确认命令在哪里运行¶
本指南的完整安装与实验环境使用 Linux 或 Windows 的 WSL2。下面标为 bash 的代码块,要在 Linux / Ubuntu 终端执行。只有安装 WSL 的代码块在 Windows PowerShell 执行。
你的电脑 |
操作方式 |
|---|---|
Ubuntu / Debian / 其他 Linux |
打开终端,直接继续安装 |
Windows |
先准备 WSL2 Ubuntu,再在 Ubuntu 终端里安装 |
macOS |
可以用浏览器试用,或通过 SSH 连接 Linux 服务器运行完整实验环境 |
Windows 尚未安装 WSL 的同学,在管理员 PowerShell中执行:
wsl --install -d Ubuntu
按提示重启,打开 Ubuntu,设置一个 Linux 用户名和密码。输入 Linux 密码时,终端通常不显示字符,直接输入后回车即可。然后在 PowerShell 检查:
wsl -l -v
Ubuntu 对应的 VERSION 应为 2。安装遇到系统版本、虚拟化或发行版问题时,按 微软的 WSL 安装说明 排查。
2.2 安装并打开 Simjecture¶
在 Linux / Ubuntu 终端执行:
curl -fsSL https://github.com/tomzhu0225/simjecture/releases/latest/download/install.sh | bash
这条命令安装最新稳定发布版,准备 Python、依赖和本地界面,并校验下载的程序包。首次安装需要联网,终端会显示进度;如果提示输入 sudo 密码,输入当前 Linux 用户的密码。
如果提示 curl: command not found,Ubuntu / Debian 用户先执行:
sudo apt update
sudo apt install -y curl
安装成功后,按终端给出的地址打开浏览器。默认是:
http://127.0.0.1:8765
以后重新启动,不需要重新安装:
~/simjecture/start-workspace
终端会保持运行,用来提供网页服务。浏览器关掉后,可以重新打开同一个地址。需要关闭研究任务时,先在界面中暂停或停止;仅关闭浏览器,并不等于停止仿真。
如果 8765 端口被占用,改用一个空闲端口:
~/simjecture/start-workspace --port 8766
然后打开 http://127.0.0.1:8766。
2.3 安装在组内服务器上¶
先按平常的方式 SSH 登录服务器,再在服务器终端执行上面的安装命令。程序和计算任务会运行在服务器上。
要在自己的电脑看界面,在自己电脑的另一个终端执行端口转发。下面的用户名、服务器地址和 SSH 端口都要换成自己的:
ssh -p 22 -N -L 8766:127.0.0.1:8765 YOUR_USER@YOUR_SERVER
服务器上的 Simjecture 使用 8765,本地浏览器打开 http://127.0.0.1:8766。两个终端都要保持连接。安装器也会打印转发命令;实际使用哪一个 SSH 地址和端口登录,就用哪一个转发。
服务器的安装位置可能因管理员部署方式而不同。以安装完成后打印的启动路径为准。不要为了打开网页而把本地操作界面直接绑定到公网。
2.4 数据放在哪里,怎样升级¶
默认发布版目录的含义如下:
位置 |
内容 |
|---|---|
|
按版本保存的程序和 Python 环境 |
|
安装的科研工具和运行环境 |
|
会话、输入、实验输出和研究记录 |
|
日常启动入口 |
升级稳定版时,可以重新运行第 2.2 节的安装命令。安装器保留项目、工具和旧程序版本,切换启动入口。组内正式计算仍应保存重要数据的备份,并记录所用版本。
复现论文或组内统一环境时,从 Releases 页面 选择已发布的指定版本,使用该版本的安装地址。rc 是候选版;它不会由 latest 自动选中。未发布的 Draft 也没有普通用户可用的公开下载地址。源码 main 则可能比稳定版更新。
更详细的部署说明见 安装文档。
3. 连接模型,完成第一次小任务¶
安装 Simjecture 和获得模型访问权限是两件事。本地版需要接入你有权限使用的模型;在线试用站提供的模型和算力则受该站的使用额度限制。
3.1 本地版怎么选择智能体¶
如果使用兼容 API,在本地界面的账户 / 工作区菜单里打开 Connections(连接设置),填入模型服务商提供的 Base URL 和 API key。然后回到会话,选择连接和模型。没有模型列表时,按界面提示输入准确的模型 ID。
如果机器上已经装好并登录了支持的原生 CLI 智能体,可以直接在会话中选择它。CLI 的登录应在运行 Simjecture 的那台机器、同一个系统用户下完成。自己的 Windows 浏览器里登录过模型网站,不代表 Linux 服务器上的 CLI 已经登录。
密钥放在连接设置里,不要写进聊天、源代码或 GitHub 提交。组内共享服务器最好使用各自的系统账号和模型账号。具体界面步骤见 研究工作区说明。
3.2 先做一个可以检查的小任务¶
在交互会话中,可以直接输入:
用 Python 模拟一个单摆。摆长 1 m,重力加速度 9.81 m/s²,初始角度 30°,初始角速度为零,计算 20 秒。画出角度和总能量随时间的变化,再提高积分精度检查结果。保留脚本、参数和图。
检查四件事:有没有真实运行记录,脚本和输入是否保存,图是否来自实际输出,智能体是否解释了数值误差。如果模型连接失败,先解决连接问题;如果命令执行失败,先读该命令的日志。
3.3 再试自主研究¶
在同一会话准备研究简报。例如:
检验假设:摆长 1 m、重力加速度 9.81 m/s² 时,对于 10° 到 80° 的释放角,非线性单摆周期与小角度近似的相对差异都不超过 1%。寻找反例,并通过积分精度或时间步检查确认。先给 10 分钟计算预算;若独立审阅接受了反例,可以结束并报告。使用普通 Python 即可。
在 **Autonomous study(自主研究)**中由智能体准备简报,检查假设、范围、完成策略和预算,再启动。新研究使用 minimal 模式;不同完成策略决定接受反例后直接结束,还是继续提出并验证修正假设。
研究结束时,先读证据和审阅意见。时间耗尽、证据不足和假设被反驳,分别说明不同情况,不应混在一起。具体操作见 第一次研究。
4. 什么时候需要 FLASH、WarpX 或其他工具¶
普通 Python 计算、拟合、画图和分析已有数据,可以先用默认环境。专业求解器是另行安装和验证的工具,不会因为装好了 Simjecture 就全部出现。
任务 |
通常需要准备什么 |
|---|---|
常微分方程、参数扫描、一般数据分析 |
默认 Python 数值环境 |
MHD、辐射流体等 FLASH 计算 |
自行取得 FLASH 源码,选择物理配置并构建对应应用 |
PIC / Hybrid-PIC 等 WarpX 计算 |
对应维度、物理模块和 CPU / CUDA 运行环境 |
EOS、opacity、合成诊断等 |
对应工具及其需要的数据、材料和接口 |
课题组自己的程序 |
一个能运行的例子、输入输出说明和数值验证 |
在 **Research tools(科研工具)**中查看安装和就绪状态。可以让智能体协助构建、接入和检查。FLASH 不随 Simjecture 分发;需要按上游渠道取得源码并按其许可使用。编译好的 FLASH 程序对应特定应用和物理配置,需要其他初值或模块时可能要重新构建。
没有 GPU 的电脑也能参与多数文档、界面、证据服务和普通 Python 开发。真正使用 GPU 的测试,再放到组内已配置的机器上做。加入 SSH 计算机器后,先通过相同的实验启动路径跑一个已知例子。
工具“已安装”、例子“运行成功”和方法“足以支持科学结论”,是三个层次。接入时分别给出证据。可继续读 工具部署、添加工具接口 和 实际启动路径的 commissioning。
5. 开发前,先认识这几个词¶
名称 |
在这个项目里是什么意思 |
|---|---|
Git |
你电脑上记录代码版本的工具 |
GitHub |
网上保存仓库、讨论问题和审阅代码的平台 |
Repository / Repo(仓库) |
程序文件及其版本历史 |
Fork |
在自己的 GitHub 账号下建立原仓库的副本 |
Clone |
把网上的仓库下载到自己的电脑 |
Branch(分支) |
为某个修改单独开一条工作线,例如 |
Commit(提交) |
在本地保存一次有说明的修改记录;此时还没有上传 |
Push(推送) |
把本地提交上传到你的网上仓库 |
PR / Pull request |
请求维护者审阅并把你的分支合入原仓库 |
|
本指南中,前者是你的 Fork,后者是原始 Simjecture 仓库 |
可以按这个顺序理解开发:在分支上修改 → 本地 Commit → Push 到自己的 Fork → 提交 PR → 维护者审阅与合并。Push 之后仍然需要 PR,原仓库才会收到你的合并请求。
6. Fork,并安装源码开发环境¶
下面演示 Ubuntu / Debian / WSL Ubuntu 的流程。无需申请原仓库的写权限,也不需要先配置 SSH key。
6.1 在 GitHub 上 Fork¶
登录自己的 GitHub 账号,打开 Simjecture 仓库,点击右上角 Fork,选择自己的账号,保持仓库名 simjecture,点击 Create fork。初次开发复制默认 main 分支即可。
完成后,你会有一个地址类似 https://github.com/YOUR_GITHUB_NAME/simjecture 的仓库。YOUR_GITHUB_NAME 要换成你的真实 GitHub 用户名,不是显示昵称。可参考 GitHub 的 Fork 说明。
6.2 准备 Git、GitHub 登录工具和 uv¶
在 Linux / Ubuntu 终端执行:
sudo apt update
sudo apt install -y git curl gh
检查安装:
git --version
gh --version
gh 是 GitHub 的命令行工具,用它完成一次网页登录,可以避免初学者手动处理 Git 推送凭据。若发行版没有 gh 包,或其版本不能完成登录,改用 GitHub CLI 官方安装步骤。
安装 Python 环境工具 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
安装器打印路径设置提示后,重新打开 Ubuntu 终端,再检查:
uv --version
uv 会按项目需求准备 Python 和依赖,开发阶段不必另建 Conda 环境。其他安装方式见 uv 官方说明。
6.3 登录 GitHub,让终端可以推送¶
gh auth login
按提示选择 GitHub.com、HTTPS、通过浏览器登录,并允许为 Git 配置认证。把终端给出的验证码填到它指定的网页中。完成后执行:
gh auth setup-git
gh auth status
这一步登录的是 GitHub,用于上传代码。它不是 Simjecture 的模型登录,也不是在公共试用站登录账号。
Git 的 HTTPS 推送不能直接使用 GitHub 网页登录密码;本流程由 gh 管理认证。登录细节见 GitHub CLI 的认证说明。
6.4 Clone 自己的 Fork¶
先把下面地址中的 YOUR_GITHUB_NAME 换成自己的用户名:
mkdir -p ~/src
cd ~/src
git clone https://github.com/YOUR_GITHUB_NAME/simjecture.git
cd simjecture
git remote add upstream https://github.com/tomzhu0225/simjecture.git
git remote -v
最后一条命令的输出应该满足:origin 指向你自己的仓库,upstream 指向 tomzhu0225/simjecture。如果 origin 是原仓库,你 Clone 的不是自己的 Fork;先确认路径,再继续。
为当前仓库设置提交署名。下面的姓名和邮箱要换成自己的:
git config user.name "Li Ming"
git config user.email "YOUR_GITHUB_EMAIL"
邮箱使用 GitHub 账号已验证的地址,或 GitHub 提供的 noreply 隐私邮箱。提交邮箱会进入版本记录;不希望公开个人邮箱时,在 GitHub 账户邮箱设置里查看隐私邮箱。见 提交邮箱设置。
6.5 安装依赖并启动开发版¶
确认现在在 ~/src/simjecture 目录,然后执行:
uv sync --frozen --extra workspace
uv run --extra workspace simjecture doctor --profile core
uv run --extra workspace simjecture web
第一条命令准备项目的 .venv;第二条检查核心运行环境;第三条启动本地界面。如果 doctor 提示实验沙箱不可用,先读诊断并请管理员参考 受限容器说明。没有安装的可选求解器,不需要为一次文档或界面修改全部补齐。
以后从这个源码目录启动,也可以用:
bash scripts/launch-workspace.sh
如果浏览器里看不到代码修改,重新启动开发服务,并确认打开的是开发版打印的地址。运行 ~/simjecture/start-workspace 打开的仍是另一份发布版。
6.6 用编辑器打开代码¶
Windows 用户可以在 Windows 上安装 VS Code 和 WSL 扩展,然后在 Ubuntu 的源码目录执行 code .。窗口应显示连接到 WSL。项目放在 Linux 的 ~/src 下,避免在 Windows 文件夹和 WSL 文件夹之间来回复制。具体步骤见 VS Code 的 WSL 开发说明。
Linux 用户直接用自己熟悉的编辑器打开源码目录即可。下面的 Git 命令仍在该目录的终端执行。
7. 完成第一个真实的小修改¶
第一次贡献可以是:补充一个安装步骤,修正一个容易误解的字段说明,修复一个能复现的界面问题,或给课题组的诊断程序补一个验证例子。新功能较大时,先开 Issue 讨论范围。
7.1 每个问题开一个分支¶
下面用文档修改举例。开始前,git status 应显示没有未提交的修改:
git status
git switch main
git fetch upstream
git merge --ff-only upstream/main
git push origin main
git switch -c docs/clarify-installation
这几步先更新你的 main,再建立工作分支。--ff-only 不会替你处理分叉的历史;若它拒绝更新,保留现场,请熟悉 Git 的同学检查。不要为了继续执行而直接运行 reset --hard。
用编辑器修改你准备改善的文档,例如 docs/getting-started/installation.md。如果是修程序,可用 fix/具体问题 这样的分支名;新功能可用 feat/具体功能。分支名建议使用英文、数字和短横线。
7.2 看懂自己的修改¶
git status
git diff
git status 告诉你改了哪些文件;git diff 显示实际改动。确认没有混入仿真输出、临时脚本、凭据或与你这次修改无关的内容。
项目主要目录如下:
目录 |
开发时常用于什么 |
|---|---|
|
研究服务、智能体接入、实验执行等 Python 代码 |
|
本地与共享网页界面的 JavaScript、CSS 和 HTML |
|
公共站点的账户、队列和执行服务 |
|
给智能体看的工具使用说明和稳定注意事项 |
|
求解器或工具的运行接口与身份描述 |
|
用于检查程序行为的测试 |
|
用户和开发者文档 |
不要直接修改自己安装目录里的 site-packages 来提交贡献。应修改 Fork 中的源文件,测试后提交对应的源文件。
8. 修改后,怎样检查¶
不需要为了修一个文字问题重新做一场长时间科研计算。检查应与修改相关,并保留实际结果。
修改类型 |
至少应该检查什么 |
|---|---|
文档 |
命令、文件路径和链接是否正确,文档能否构建 |
Python 行为 |
相关测试、失败路径,以及代码格式检查 |
网页界面 |
实际点击、宽屏和窄屏、相关浏览器测试 |
求解器接口 |
从实际实验启动器跑通例子,确认输出、单位、身份和日志 |
证据或研究规则 |
与维护者先讨论,验证原有约束和恢复流程 |
第一次可以运行这个很小的测试模块:
uv run --extra workspace pytest tests/test_models.py -q
它检查模型约束,不需要模型 API,也不需要 GPU。修其他模块时,换成与你修改相关的测试文件。修改 Python 后再检查:
uv run --extra workspace ruff check .
git diff --check
修改文档时,增加文档依赖并构建到一个新的输出目录:
uv sync --frozen --extra workspace --group docs
uv run --extra workspace --group docs sphinx-build -W --keep-going -b html docs docs/_build/check
uv run --extra workspace --group docs python scripts/check_docs_links.py docs/_build/check
最后的链接检查会指出缺失的本地页面或文件。若复用过不同主题的旧输出目录,可换一个新的构建目录,避免旧文件影响结果。
浏览器测试需要额外的 browser 依赖组和 Chromium;完整命令、公共服务和 MCP 等专项检查见 CONTRIBUTING.md。普通回归测试不应使用真实密钥或消耗付费模型额度。
测试失败时,先区分代码错误、缺依赖和机器不支持的执行环境。把未运行的检查写清楚,不要把“没有测试”写成“通过”,也不要删除检查来掩盖失败。
9. Commit、Push,然后提交 PR¶
9.1 保存到本地 Git 历史¶
以第 7 节的文档修改为例:
git add docs/getting-started/installation.md
git diff --cached
git commit -m "Clarify the Linux installation steps"
git add 选择这次要提交的文件,git diff --cached 检查这些已选择的改动,git commit 将它们写入本地历史。初学时逐个选择文件,比直接 git add . 更容易发现误提交。
9.2 推送到自己的 Fork¶
git push -u origin docs/clarify-installation
这里上传到的是你自己的 GitHub 仓库。如果提示权限不足,检查 git remote -v 和 gh auth status,确认推送目标与登录账号相符。
9.3 在浏览器中打开 PR¶
打开自己的 Fork,点击 Compare & pull request。若没有这个按钮,在原仓库的 Pull requests → New pull request 中选择 compare across forks。
确认合并方向:
字段 |
应当选择 |
|---|---|
Base repository(接收方) |
|
Base(目标分支) |
|
Head repository(你的改动所在仓库) |
|
Compare(你的工作分支) |
|
写清标题和说明,再点击 Create pull request。还没完成但希望先讨论时,可以建 Draft PR。页面操作见 GitHub 的 Fork PR 说明。
PR 描述不必很长,但要让别人知道问题、改动和验证。可以按下面的结构填写,删掉不适用的部分:
原来的问题
Windows 新用户容易把 Linux 安装命令输入到 PowerShell。
这次改动
补充执行环境说明,把 WSL 和 Ubuntu 终端的命令分开。
怎样检查
文档构建和本地链接检查通过;Ubuntu 安装步骤已核对。
没有改动程序行为,没有重新运行付费科研任务。
相关 Issue
如果有,对应 #问题编号。
这里的检查结果必须换成自己真正做过的结果,不要直接复制示例中的“通过”。
9.4 收到意见后怎么改¶
继续修改同一个工作分支,重新检查、Commit,然后执行 git push。新提交会自动出现在原 PR 里,不必每次重新建 PR。
PR 的红叉通常表示自动检查失败。点击对应检查,看具体报错。首次贡献者的 CI 有时需要维护者批准才能运行;等待批准不等于代码有问题。一个绿色检查也不等于 PR 已经合并,仍需审阅。
合并后,可以在 GitHub 上删除已合并的远程工作分支;历史提交和 PR 讨论仍然保留。本地切回 main,按第 7.1 节的更新步骤同步。再使用 git branch -d 分支名 删除已合并的本地分支。如果因 squash 合并提示“未完全合并”,先保留,请同学核对,不必强制删除。
10. 课题组的求解器、脚本和研究经验怎样贡献¶
10.1 已有程序先整理成一个可复现的小包¶
对于组内的场数据读取器、后处理、诊断程序或求解器接口,先准备:
运行命令:别人用什么命令启动,需要什么软件和硬件。
输入说明:参数、单位、坐标系、边界条件以及数据格式。
输出说明:输出文件在哪里,哪些量能作为诊断,怎样读出结果。
已知例子:给定输入应该得到什么,误差允许多少。
适用范围与来源:哪些物理可以做,哪些不可以;代码和数据来自哪里、是否可以分发。
先把这些说明和例子做好,再讨论是否增加 skills/、capabilities/、安装入口或 GUI 控件。接入工具的说明应写稳定接口和数值注意事项,具体研究问题交给每场研究设计。
带来源限制的求解器可以贡献构建与运行接口,原始源码和二进制留在各自的合法安装环境中。大规模输出、检查点和组内未公开资料也不要直接放入公开 Fork。可先用小型公开或合成数据验证接口。
10.2 不修改核心代码,也能贡献¶
一个可靠的诊断、一套能发现错误的数值控制、一个准确的问题复现,或者一份有输入输出和限制说明的研究记录,都能帮助项目。
用科学算例提交结果时,保留人提出的问题、模型和程序版本、输入、实际运行、数值控制、失败尝试与审阅意见。已有输出的重绘或重放,应明确标注;它不等于新做了一场仿真。
普通代码贡献按项目的 Apache-2.0 许可处理,保留必要来源和上游署名。论文署名则应按实际科研贡献,与该研究的合作者另行讨论。
11. 常见问题¶
遇到的情况 |
先检查什么 |
|---|---|
PowerShell 提示不认识 |
是否应该切到 WSL 的 Ubuntu 终端 |
|
uv 是否安装成功;按安装器提示重新打开终端 |
|
先 |
|
在仓库中设置第 6.4 节的姓名和邮箱 |
Push 时提示 |
|
无法在原仓库直接 Push |
使用自己的 Fork,推送工作分支,再提交 PR |
网页中的模型不可用 |
登录 / API 配置是否在运行 Simjecture 的机器上,模型 ID 是否正确 |
改代码后界面没变 |
是否仍启动着发布版或旧服务,浏览器是否打开了正确端口 |
沙箱或 Linux namespace 报错 |
保存 doctor 诊断,按受限主机文档由管理员确定执行后端 |
Shell 脚本提示 |
检查编辑器是否保存成 CRLF;Shell 脚本应使用 LF |
一个 PR 里出现很多无关文件 |
用 |
CI 红叉 |
点击失败检查,看具体错误;缺硬件和实际测试失败分开报告 |
向组内同学或维护者求助时,发出执行的命令、完整报错、系统、运行目录和版本,比只发“跑不了”更容易定位问题。先去掉密钥、密码和不宜公开的数据。
源码目录中记录版本可以使用:
git rev-parse --short HEAD
uv run --extra workspace python -c "from importlib.metadata import version; print(version('simjecture'))"
12. 日常操作速查¶
想做什么 |
命令或操作 |
|---|---|
启动安装好的发布版 |
|
启动当前源码开发版 |
在仓库里运行 |
查看文件改动 |
|
查看这次选中的提交内容 |
|
新开一个修复分支 |
|
选择本次要提交的文件 |
|
保存一次本地提交 |
|
首次推送当前分支 |
|
在同一个 PR 里继续更新 |
修改、检查、Commit,再 |
向原项目提交改动 |
在 GitHub 上开 PR,接收方选原仓库的 |
更新主线 |
干净工作区中切到 |
组内第一次练习可以这样安排:每个人独立装好环境,完成一个可检查的小任务;再各自选一个真实的小问题,走完一个 PR。后续再分工做求解器接入、诊断验证或核心开发。