Wiki · 第一章

反应级数多面体与 Biocircuits Explorer 工作台入门

面向实际使用的说明:先交代多面体背后的数学对象,再说明画布上各个节点 代表什么,以及怎样把一个结合网络变成可检查的分析结论。

1本 Wiki 是什么

Biocircuits Explorer 是一个用 反应级数多面体(Reaction Order Polyhedra,ROP)分析平衡结合网络的工作台。首页用截图与短视频展示入口, 本 Wiki 则回答更具体的问题:应用实际在计算什么,画布上的几何对象如何命名, 以及怎样把“关于回路的问题”整理成可复核的分析步骤。

第一次阅读请按章节顺序通读。当你已经搭过几个网络之后,每一节都可以独立作为 参考。

面向谁

适合刚接触 Web 版或 macOS 版应用、希望理解 regime 图、SISO 路径与多面体 到底在画什么 的新用户,而不仅仅是“按哪个按钮”。无需 代数几何或化学反应网络理论的背景,但建议先了解基本的化学平衡(质量作用、 守恒量)。

阅读口径

这不是一份承诺接口稳定的产品手册。文中的节点名、按钮名和云端部署说明对应 当前仓库实现;数学部分描述的是平衡结合网络的渐近结构,数值结论仍需要用你 实际采用的参数范围检查。

2反应级数多面体的理论

2.1什么是反应级数多面体?

反应级数多面体(ROP)是一个几何对象,用来组织平衡结合网络 在不同参数尺度下可能出现的渐近 regime。它不替代具体数值参数,而是在你开始 扫描参数之前,先给出一张结构性的地图。

ROP 分析的输入是一个 结合网络

  • 一组 基本物种 \( X_{1}, \ldots, X_{n} \)。
  • 一组 复合物(complex),即基本物种以整数计量构成的组合,例如 \(AB\)、\(AAB\)、\(ABCD\)。复合物可写作一个整数向量 \( a \in \mathbb{N}^{d} \setminus \{0\}\),其大小 \( |a|_{1} = \sum_{i} a_{i} \le \mu \),其中 \(\mu\) 是允许的复合物最大尺寸。
  • 一组 可逆结合反应 \( C_{a} + C_{b} \rightleftharpoons C_{a+b} \),各自带一个平衡常数。
  • 一个化学计量矩阵 \(N\)(每一行是一个反应),以及一个守恒律矩阵 \(L\), 其各行编码了守恒总量 \( q_{i} = \sum_{j} L_{ij}\,x_{j} \)。
  • 选择哪些总量充当 输入 \(u\)、哪些是固定的守恒总量 \(q\), 以及哪个复合物浓度作为 输出 \(y\)。

输出通常 不是 一条平衡曲线,而是 log-浓度 / log-参数空间中的 多面体结构。一个顶点对应一种完整的渐近 regime:在每个守恒池里, 哪一种物种占主导已经确定。面和棱记录的是主导项打平或切换的位置,也就是 regime 之间的过渡。

为什么是多面体而不是曲线?因为平衡方程

\[ N \log x \;=\; \log k, \qquad L\,x \;=\; q \]

虽然对浓度是非线性的,但在渐近极限下可以分成若干 log-线性 区域。 当每个总量都由某一项主导时,物种浓度可用单项式近似,输出也变成 log-参数的 线性函数。多面体就是记录“哪一项在哪里取胜”的地图;它比单条数值曲线 多给出一层信息:参数空间如何被不同 regime 划分。

一张带顶点标注的 3D 反应级数多面体。
图 1. 工作台中渲染的反应级数多面体。顶点表示主导 regime;面和棱表示 regime 之间的过渡关系。

2.2为什么是主导分析、为什么用 log-log?

化学平衡下,所有物种浓度由质量作用与守恒共同决定。每个守恒总量都是基本 物种自由浓度的单项式之和:

\[ q_{i} \;=\; \sum_{j \,:\, L_{ij} > 0} L_{ij}\, x_{j}. \]

以最简单的 \( A + B \rightleftharpoons AB \) 为例,其平衡常数 \( K = [AB] / ([A]\,[B]) \),\(A\) 的总量就是关于自由浓度 \([A]\) 与 \([B]\) 的两项单项式之和:

\[ q_{A} \;=\; [A] + [AB] \;=\; [A] + K\,[A]\,[B]. \]

ROP 的核心观察是:远离切换边界时,这些单项式通常会有一个主导项。 在 log-浓度空间中,改变参数会让系统跨过若干边界,主导项也随之切换。在一个 regime 内部,浓度之间的主导近似是幂律关系。

换到 log-log 坐标后,这种关系更容易读取。若输出 \(y\) 与输入 \(u\) 在某个 regime 下满足 \( y \asymp C\,u^{\rho} \),则 \( \log y = \rho \log u + \mathrm{const.} \)。这里的斜率就是 反应级数

\[ \rho \;=\; \frac{\partial \log y}{\partial \log u}. \]

有两个关键事实:

  1. 在一个 regime 内,\( \rho \) 是 整数(或来自化学计量的简单 有理数),因为占主导的单项式就是整数幂次的乘积。
  2. 沿一维输入扫描,响应在 log-log 下是 分段线性:一串带整数斜率 的直线段,在某个单项式被另一个反超的 转折点 处相接。

因此,一条给定输入扫描的定性响应可以用有限的反应级数程序来概括:

\[ b \;=\; (\rho_{1}, \rho_{2}, \ldots, \rho_{L}), \quad\text{例如}\quad 0 \to -1 \to +1 \to 0 \to -2. \]

每一项是一段斜率;每次切换对应多面体上的一个转折点。对多输入/多输出切片, 与之对应的对象是一串增益矩阵 \( G_{\ell} = \partial \log y / \partial \log u \)。

2.3多面体上的几何对象

Biocircuits Explorer 尽量沿用 ROP 论文中的术语。下面列出的对象,有些会在 画布上直接出现,有些是结果表和图形背后的计算对象。

反应级数矩阵 (reaction-order matrix)
\(\log x\) 对 \(\log(q, k)\) 的雅可比矩阵,其元素正是局部的反应级数。 顶点、面以及多面体本身都围绕该矩阵如何变化而组织。
指派 (assignment)
为每个守恒总量选定一个“占主导”的物种:在守恒池 \(i\) 中, 物种 \(j\) 拥有(几乎)全部质量。
指派多胞形  \(\mathrm{AssignP}(L)\)
所有合法指派的凸包 —— 一个粗糙的外包络,是每个守恒总量对应单纯形的 笛卡尔积。
主导 regime (dominance regime)
可以被某个 \( x \in \mathbb{R}^{n}_{>0} \) 真正实现的指派。某些指派 是“虚的”;只有真正可实现的才是真实 regime。
主导多胞形  \(\mathrm{DomP}(L)\)
主导 regime 的凸包。这是主导模式 \( A(x) = \Lambda_{Lx}^{-1} L\, \Lambda_{x} \) 紧致的多面体外包络, 其每一个顶点都是可达的 regime。
顶点 · 面 · 棱
顶点 = 完整的渐近 regime(每个总量只有唯一胜者);面 = 多个物种打平的 部分 regime;棱 = 某次打平被打破的单步过渡。沿多面体游走,就是真实回路 在参数变化时所经历的 regime 序列。
支撑集 (support)
在给定 regime 下幸存下来的单项式集合。支撑集随顶点变化。
输入/输出投影
选定一个被扫描的输入 \(u\) 和一个输出 \(y\),等价于把多面体投影到 \((\log u, \log y)\) 平面,得到的像就是 SISO regime 结构。
SISO 路径
当被扫描输入从 \(0\) 扫到 \(\infty\) 时,系统所经过的顶点序列。 反应级数程序 \( b = (\rho_{1}, \ldots, \rho_{L}) \) 就是沿该路径读到 的一串斜率。
渐近 vs. 奇异 regime
在顶点内 \( \rho \) 是有限整数。在某些面上它可能是无穷或未定义 (log-log 下的竖直跳跃)。应用会保留这一区分 —— 奇异 token \(\pm \infty\) 与 NaN 不会被并入有限的反应级数。
能力周期表 (capability periodic table)
一个由 \((d, \mu)\)(基本物种数与最大复合物大小)构成的二维索引,每个 格子对应一类有限的搜索空间。格子并不是简单的“能 / 不能”,而是带一个 能力包络:可实现的机制类、强度极值、鲁棒性极值、最小见证网络 以及不可达证明。
符号字 (sign word)
对 \(\{-, 0, +\}\) 三态做行程长度压缩得到的程序。零态是真实状态 (饱和、不变),不会被当作无信息的重复符号删掉。机制类别包括:从零激活 \(0 \to +\)、回到零 \(+ \to 0\)、直接反转 \(+ \to -\)、零中介反转 \(+ \to 0 \to -\) 等。

2.4多面体能告诉你关于回路的什么?

多面体一旦建好、SISO(或 MIMO)投影一旦选定,下面几样实用对象就自然 浮现出来:

  • 响应级数。 SISO 路径上的斜率 \(\rho_{\ell}\) 就是局部 的 Hill 型指数。\(\rho \approx 0\) 是饱和;\(\rho \approx 1\) 是线性; \(\rho > \mu\) 则相对最大复合物尺寸而言是 超敏感
  • 敏感区 vs. 饱和区。 多面体帮助定位它们在 log-参数空间中的位置,通常可以先少做一些盲目的密集扫描。
  • 切换轨迹 / 转折点。 多面体的面投影到输入轴上,给出 定性行为发生切换时的输入值。一个边界在 log 空间下是仿射的: \[ a_{u}\,\log u + a_{q}^{\top}\!\log q + a_{K}^{\top}\!\log K + c = 0, \] 因此转折点位于 \[ \log u^{\ast} \;=\; -\,\frac{a_{q}^{\top}\!\log q + a_{K}^{\top}\!\log K + c}{a_{u}}. \] 切换是被结合常数主导、被守恒总量主导,还是混合控制,都是一种内置的 机制分类。
  • 上界可达性。 守恒给出 \( x_{a} \le U_{a}(q) = \min_{\,i:\,a_{i}>0}\, q_{i}/a_{i} \)。 输出对应的顶点是否恰好坐在这个上界上,就回答了“回路是否能被驱动到 化学计量上限”。
  • 鲁棒区域。 一个程序可以“强但脆弱”、 “弱但鲁棒”,也可以“强且鲁棒”。多面体提供计算体积分数鲁棒性 指标(R-index)的几何基础;具体分数仍取决于你选择的参数域和筛选条件。
  • 可达行为族。 不同机制可能产生同一个 regime 图与符号字; 周期表将它们归入若干机制类(激活、抑制、回到零、零中介反转、多回合程序、 MIMO 秩扩展等)。Atlas 工作流就是在这个行为族空间里检索。

2.5一个直观例子:\(A + B \rightleftharpoons AB\)

取最简单的非平凡结合网络,其平衡常数与守恒律为

\[ K \;=\; \frac{[AB]}{[A]\,[B]}, \qquad q_{A} = [A] + [AB], \qquad q_{B} = [B] + [AB]. \]

以 \(q_{A}\) 作为被扫描的输入 \(u\),固定 \(q_{B}\),取 \(y = [AB]\) 为输出。守恒矩阵为

\[ L \;=\; \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 1 \end{bmatrix}, \]

因此主导模式矩阵 \(A(x)\) 的每一行都是一维单纯形:\(q_{A}\) 那一行的质量 在 \(A\) 与 \(AB\) 之间分配,\(q_{B}\) 那一行在 \(B\) 与 \(AB\) 之间。 四个指派恰好是结果方形的四个角;本网络中四个指派全部可实现,所以主导 多胞形 就是 这个正方形。其四个顶点的含义如下:

  • \((A, B)\):两种物种基本都游离。 \([AB] \approx K\,q_{A}\,q_{B}\),故 \(\rho = 1\)。
  • \((AB, B)\):\(A\) 基本被结合,\(B\) 基本游离。 \([AB] \approx q_{A}\),仍是 \(\rho = 1\),但输出已抵达 \(A\) 的上限。
  • \((A, AB)\):\(B\) 基本被结合,\(A\) 基本游离。 \([AB] \approx q_{B}\),对 \(u\) 而言是常数,\(\rho = 0\) —— 饱和。
  • \((AB, AB)\):两个总量都坍缩到同一个复合物上;限制性物种在 \(A\) 与 \(B\) 之间切换。

当 \(u = q_{A}\) 不断增大时,一次典型的 SISO 扫描会走过 \( (A,B) \to (AB,B) \to (A,AB) \),读出反应级数程序

\[ \rho \,:\, 1 \to 1 \to 0, \]

经行程长度符号压缩后得到一个典型的“回归到零”响应 \( S(b) \,:\, + \to 0 \)。正方形的每个顶点都是一个 regime,每条棱都是 一个转折点,整个正方形就是这个回路的主导多胞形。增大 \(\mu\) 或 \(d\) (转到二聚体或三物种网络),这个正方形会膨胀为顶点结构更丰富的高维多面体 —— 这也是能力周期表要刻画的设计空间。

3一分钟上手画布

3.1节点、端口、连线

Web 版在 空白画布 中打开。你通过放置 节点 并连接它们的 端口 来搭建一次分析:

  • 添加节点。 点击工具栏的 Add Node,在分类菜单 (Utilities、Input、Parameters、Process、Results)中选择。
  • 连接端口。 每个节点左侧是带类型的输入端口,右侧是 输出端口。从输出拖到匹配的输入即可。
  • 运行。 大多数节点都有 Run 按钮。工具栏的 Run Connected 会按依赖顺序执行整个连通子图; Cloud Compute 把重计算下发到远端后端。
  • 保存。 Save Workspace 把整张画布(节点、参数、 连线)导出为可移植的 JSON。

3.2节点家族

反复出现的就是这五类:

Input(输入)
reaction-network 用于手工输入反应; network-id-definition 用于加载压缩后的网络 ID; sbml-import 用于从 SBML 文件导入模型。
Process(处理)
model-builder 把反应转成符号模型(\(N\)、\(L\)、会话 ID)。 atlas-builder 根据 atlas 规格构建一个网络库。 sbml-export 把连接的反应源导出为 SBML。
Parameters(参数)
siso-paramsscan-1d-paramsscan-2d-paramsrop-cloud-paramsrop-poly-paramsfret-paramsatlas-specatlas-query-config
Results(结果)
model-summaryvertices-tableregime-graphsiso-resultqk-poly-resultscan-1d-resultscan-2d-resultrop-cloud-resultrop-poly-resultfret-resultatlas-query-resultatlas-inverse-result
Utilities(工具)
markdown-note 用于在工作区中保留自由格式的笔记。

3.3画布操作与快捷键

  • 平移。按住 空格 拖拽,或用鼠标中键 / 右键拖拽, 或滚轮 / 触控板双指滑动。
  • 缩放。Ctrl/ + 滚轮(触控板可双指捏合)。
  • 选择。在空白画布上拖拽进行框选;Shift+点击节点 可加入/移出选择。拖动任一已选中节点会整组一起移动。
  • 对齐。选中两个及以上节点时会浮现对齐工具条 (对齐边/中心、等距分布)。
  • 编辑。Ctrl/+Z 撤销、 Ctrl/+Shift+Z 重做、 Delete 删除选择、 Ctrl/+A/C/V/D 全选 / 复制 / 粘贴 / 创建副本。
  • 速查表。随时按 ? 查看完整快捷键列表; Esc 清除选择。

4操作流程 — 一步一步怎么做

下面每条流程都可以单独照着做。每节开头的连线示意,表示画布上最小可用的 节点链。

4.1建立模型并查看 regime

这是所有其它流程的前置步骤。

reaction-network model-builder model-summary + vertices-table + regime-graph
  1. 录入反应

    添加一个 reaction-network 节点。逐行输入反应,例如 E + S <-> C_ES,并填一个解离常数 Kd。需要多少行就加多少行。

  2. 构建模型

    reaction-network 连到 model-builder, 点 Run。builder 会固定下物种、复合物、总量与常数的符号顺序, 并返回一个供下游节点复用的会话 ID。

  3. 查看模型

    model-builder 连到 model-summary, 即可看到 \(n\)、\(d\)、\(r\)、物种列表、总量、结合常数符号,以及矩阵 \(N\) 与 \(L\)。

  4. 列出顶点

    再连一个 vertices-table。每一行是多面体的一个顶点: 它的物种排列、类型(渐近 / 非渐近)、奇异 / 可逆状态、零空间维数。

  5. 查看 regime 图

    添加 regime-graph。下拉框可在 qK-neighbor(参数单步过渡相连的 regime)与 SISO 两种模式之间切换。

如何读这些输出

顶点表是多面体的离散索引;regime 图是它的一维骨架。两者结合就告诉你 当前网络的定性行为有多丰富 —— 甚至在你还没选定任何具体数字之前。

4.2追踪一条 SISO 行为路径

当你想知道“回路对某一特定输入的响应长什么样”时用它。

model-builder siso-params siso-result qk-poly-result
  1. 选输入、输出、扫描范围

    siso-params 中选择 \(qK\) 变量(被扫描输入)、 目标物种 \(x\)(输出)、路径范围(feasiblerobustall)、最小体积分数与 log\(_{10}\) 扫描边界。

  2. 枚举行为族

    运行 siso-result。节点返回按排序的 SISO 路径列表 —— 每条路径就是一个反应级数程序 \( b = (\rho_{1}, \ldots, \rho_{L}) \),附带可行体积。

  3. 可视化所选路径

    点列表中的一条路径,连到 qk-poly-result 上,即可看到 在 \(qK\)-空间中该路径所对应的投影多面体。

读懂斜率

SISO 路径上的整数序列就是每一步的局部 log-log 斜率。看到 0 → 1 → 0 通常表示“先激活、后饱和”; 1 → 0 → −1 是“有峰的非单调响应”。仅取符号 并做行程长度压缩,就得到周期表所索引的“符号字”。

4.3运行参数扫描

想要数值响应曲线(而不仅是符号路径)时使用。

model-builder scan-1d-params scan-1d-result
  1. 选参数与范围

    scan-1d-params 中选 \(qK\) 变量、log 区间与点数, 填入输出表达式 —— 例如 2*C_ES + E

  2. 运行并读取

    scan-1d-result 绘制输出表达式相对扫描变量的曲线, 十字光标与数值读数可以馈送到下游节点。

  3. 需要时换 2D

    改用 scan-2d-params / scan-2d-result,即可同时横扫两个参数得到热图。

4.4可视化 ROP 多面体与点云

多面体本身是一个节点;在参数空间中采样得到的点云是另一个。两者结合 可以帮你发现鲁棒区域。

model-builder rop-poly-params rop-poly-result
reaction-network rop-cloud-params rop-cloud-result
  1. 配置多面体视图

    rop-poly-params 中选 2D 或 3D,并为每条坐标轴配上 一对(物种 \(x\),\(qK\) 参数)。内部样本数控制内部如何填充。

  2. 采样点云

    rop-cloud-params 选采样模式(x-spaceqK-based)、采样数、目标物种以及 log 范围。结果节点把点云 叠加在多面体上绘制。

  3. 寻找致密区域

    周围点云稠密的顶点通常对应较鲁棒的 regime:在当前采样范围和采样方式下, 许多参数样本都会落到这里。点云稀疏并不自动说明机制不可用,但提示你需要 检查参数窗口是否很窄。

4.5Atlas 检索与逆向设计

Atlas 工作流走的是反方向:给定你想要的行为,去寻找能实现它的网络。

atlas-spec atlas-builder + atlas-query-config atlas-query-result / atlas-inverse-result
  1. 指定搜索空间

    atlas-spec 有四个标签页:Basic(来源标签、 SQLite 路径、profile)、Behavior(路径范围、最小体积)、 Enumeration(成对结合、反应数)以及 Explicit(显式 JSON 网络列表)。

  2. 预览库

    连接到 atlas-builder,点 Build Preview —— 这只会生成 atlas 的一个切片,便于你在投入完整构建前先校验规格。

  3. 定义设计目标

    atlas-query-config 让你陈述目标:一对 I/O(例如 tA -> AB)、一个 motif 标签、精确行为、见证路径或 禁止 regime。选择排序策略 —— minimal_firstrobustness_first

  4. 正向或逆向

    atlas-query-result 返回排序后的匹配列表; atlas-inverse-result 进一步在“构建 + 查询” 循环中加入反例细化,并返回带证据的候选网络。

注意

画布上的 builder 适合做预览和小型临时 atlas。如需大规模库构建,请使用 webapp/build_atlas.jl 等 CLI 脚本,然后让查询节点指向 生成的 SQLite 文件。

5它能解决什么 — 设计应用

ROP 分析在以下三类情形中尤其有用:

  1. 不靠曲线拟合先读出 Hill 型指数。 SISO 路径上的 整数斜率给出局部响应级数的渐近预测。检查是否存在 某个 regime 满足 \( \rho > \mu \),可以先判断超敏感响应在结构上是否有希望。
  2. 寻找鲁棒工作区。 点云密度可以作为鲁棒性的采样估计: 被大量参数样本访问的顶点,通常比只在很小参数窗口内出现的顶点更值得优先检查。
  3. 逆向设计。 给定一个目标信号处理行为(一段符号字、 一定的峰高、一个鲁棒的“回到零”响应),atlas 工具会枚举出 可能实现它的结合网络,并按最简性或鲁棒性排序。

还有一个实用角度:ROP 分析能帮助解释 为什么 某个回路做不到某件事。如果你的目标响应不在你所检索的周期表格子 \((d, \mu)\) 中任何一个网络的多面体里,并且搜索空间已经完整覆盖你的建模假设, 那么这种失败更像是结构性的,而不是某组常数没调好。应用会尽量给出这类 negative evidence,帮助你决定是否扩大物种数、复合物大小或改变假设。

一张工作区,同时展示 SISO 结果、多面体与参数扫描。
图 2. 一次典型的工作台会话:regime 图、SISO 路径枚举与参数扫描都接在同一个 模型上。

6如何读输出

一次好的 ROP 分析不只是几张图。应用实际暴露的是多层证据:符号模型、有限个 regime、邻接结构、渐近响应级数,以及有限参数下的数值检查。本节给出一个 实用的阅读顺序。

6.1Regime 表检查清单

先看 model-summaryvertices-table。它们回答: 你画的网络是否真的变成了你想分析的网络。

输出字段 含义 该检查什么
speciesx_sym 后端采用的物种顺序。 确认 AABC_ES 等复合物命名前后一致。
q_symK_sym 构成 \(qK\) 坐标系的守恒总量与结合常数。 SISO 节点只能直接扫描这些变量。
N 反应约束的化学计量矩阵。 意外的秩或行数,通常说明反应列表有问题。
L 守恒律矩阵。 每一行都应该能对应一个你能解释的守恒池。
顶点类型 regime 是否渐近、奇异、可逆或退化。 有限响应级数来自规则的渐近顶点;奇异项需要单独解释。
Nullity 激活约束施加后还剩下的局部自由度。 高 nullity 往往意味着 regime 不只是一个孤立角点,而位于更大的面上。

如果模型摘要已经不对,就先别继续跑 SISO。先修反应列表;为错误守恒池画出 再漂亮的多面体,也仍然是错误答案。

6.2SISO 判读清单

SISO 结果至少要分三层读:完整斜率程序、压缩后的符号行为,以及支撑该行为的 几何证据。

模式 解释 设计问题
0 → + 从平坦基线开始激活。 输出是否只在输入越过边界后才打开?
+ → 0 响应逐渐饱和。 输出上限是由守恒总量还是结合常数决定的?
+ → - 直接反转:输入继续增加反而压低输出。 反转时是哪一个复合物夺走了限制性物种?
+ → 0 → - 带平台的零中介反转。 这个平台是否足够鲁棒,能作为工作窗口?
+ → 0 → + 中间经过饱和的两阶段激活。 是否存在两个独立结合阈值?
NaN±∞ 投影坐标下出现奇异或竖直响应。 这是有意义的跃迁,还是该 regime 下输出本身消失了?

符号字只是摘要,不是全部信息。两条路径可以有同一个符号字,但强度、顶点序列、 切换控制因素和鲁棒性都不同。在把两个行为视为等价之前,请同时看完整斜率列表 与投影多面体。

6.3数值扫描与渐近分析

ROP 多面体是渐近对象:它预测哪些单项式在宽阔的 log-参数区域中占主导。 参数扫描是有限数值计算。二者在大尺度形状上应当相互印证,但回答的问题不同。

  • SISO 路径 判断哪些定性行为在结构上可能。
  • 参数扫描 检查你实际想用的有限常数取值。
  • ROP 点云 估计哪些 regime 占据较大的参数体积。
  • 当当前网络不能实现目标行为时,用 atlas 检索 寻找候选替代网络。

一个好用的节奏

先建模、读顶点、选输入输出、枚举 SISO 路径、查看投影多面体,然后在相同坐标下 做数值扫描。若二者不一致,这种不一致本身就是信息:通常意味着有限尺度效应、 很窄的切换区,或输出表达式与渐近坐标不完全对齐。

7节点参考

画布是一个数据流系统。理解一个节点,关键是知道它消耗什么、产生什么,以及通常 对应哪个后端接口。

模型构建

reaction-network 保存反应与解离常数。 model-builder 调用 /api/build_model,并输出供 多数下游节点复用的会话。

Regime 结构

model-summaryvertices-tableregime-graph 通过 /api/find_vertices/api/build_graph 暴露符号模型、顶点与邻接图。

SISO 分析

siso-params 定义 \(qK\) 坐标与输出。 siso-result 调用 /api/siso_paths 等接口; qk-poly-result 渲染所选路径的几何。

扫描与曲面

scan-1d-resultscan-2d-resultfret-resultrop-cloud-resultrop-poly-result 将一个会话转成数值曲线、热图、采样点云和 多面体投影。

Atlas 工作流

atlas-specatlas-builderatlas-query-configatlas-query-resultatlas-inverse-result 覆盖构建、查询与逆向设计。

互操作

sbml-import 通过 /api/v1/import/sbml 把 SBML 文件 解析成可编辑的反应(绑定网络子集;无法表示的部分以警告形式返回)。 sbml-export 通过 /api/v1/export/sbml 把连接的反应源导出。

工作区笔记

markdown-note 不依赖后端。它用于让保存下来的工作区携带假设、 候选机制,或记录为什么接受 / 排除某条路径。

7.1常见连线模式

问题 最小节点链 典型下一步
反应列表解析对了吗? reaction-network → model-builder → model-summary 摘要无误后再加 vertices-table
有哪些 regime? model-builder → vertices-table 添加 regime-graph 查看过渡。
一个输入如何影响一个输出? model-builder → siso-params → siso-result 选中一条路径,用 qk-poly-result 查看。
某组有限参数会给出什么曲线? model-builder → scan-1d-params → scan-1d-result 把曲线与 SISO 斜率程序对照。
哪个网络能实现目标行为? atlas-spec → atlas-query-config → atlas-query-result 使用 atlas-inverse-result 做构建 + 查询细化。

8Atlas 与逆向设计

Atlas 层把大量单个 ROP 分析组织成可检索的设计库。到这里,项目就不再只是 单模型工作台,而变成了一张能力空间地图。

8.1四个 atlas 对象

Atlas spec
描述要分析什么:显式网络、枚举搜索空间、行为配置、来源标签,以及可选的 SQLite 持久化设置。
Atlas
单次构建结果,通常包含 network entries、behavior slices 与 family buckets。
Atlas library
由一个或多个 atlas 构建结果聚合成的稳定库对象,适合版本化和反复查询。
Atlas SQLite
面向大型或增量库的持久化形式。查询节点与 CLI 脚本都可以直接读取。

8.2如何表述查询

好的 atlas 查询会同时说明行为与证据。先从输入 / 输出对开始,再只添加真正重要的 约束。

  • Motif 查询 查找激活、抑制、反转、回到零等宽泛机制类。
  • 精确行为查询 要求一串具体斜率或符号字。
  • 见证查询 不只匹配摘要标签,还要求一条具体顶点路径。
  • 禁止 regime 查询 排除会经过不想要中间状态的回路。
  • 鲁棒性查询 按体积分数过滤或排序,而不是只问是否存在。

8.3逆向设计返回什么

逆向设计不是简单地“更用力搜索”,而是把构建、查询、反例知识与候选 细化组合在一起。一个有用结果应当说明:

  • 哪些网络匹配;
  • 目标类型是什么(motif、精确行为、见证路径或 support);
  • 是否执行了新的 atlas 构建或合并;
  • 哪些候选被拒绝,以及原因是什么;
  • 匹配是结构上精确,还是只是软 support 匹配。

一次失败的逆向设计也可能很有价值。如果整个 \((d,\mu)\) 格子都无法通过精确 support screen,那么这就是证据:目标行为可能需要更多基本物种、更大的复合物, 或者不同的建模假设。

8.4画布还是 CLI?

在塑造问题时使用画布;当问题已经稳定、运行规模变大时使用 CLI。

julia --project=webapp webapp/build_atlas.jl spec.json atlas.json
julia --project=webapp webapp/query_atlas.jl atlas.json query.json result.json
julia --project=webapp webapp/run_inverse_design.jl spec.json inverse_result.json

如果你希望跨很多会话复用同一个库,或长期合并增量构建,SQLite 路线是更合适的选择。

9AI Import — 把论文变成模型

ai-import 节点用于把论文、补充材料或 notebook 中明确写出的 平衡结合步骤整理成初稿。它会调用你选择的大语言模型,尝试抽取可逆结合反应、 Kd 数值和推荐的下游分析,并把结果作为可编辑节点放到画布上。它适合减少录入工作, 但不应当被当作自动建模或文献审查的最终结论。

隐私模型

项目后端不会接收或保存你的 API Key;浏览器会把 Key 直接发送给你选择的 provider。只有在你信任当前这台机器时,才建议勾选 “Remember for browser session”。

9.1节点做什么

这个节点的输出会经过固定 schema 和白名单检查。它可以做这些事:

  • 读你粘贴的文本、PDF 附件,或 Jupyter .ipynb (只读源代码 cell,输出 cell 与 base64 图像在本地剥离后才上传)。
  • 返回一个或多个 network,每个带一组可逆结合反应、一个 mol/L 单位的 Kd 数值,以及置信度标签。
  • 从一份固定的白名单里挑选推荐的下游分析;超出白名单的请求会被后处理丢弃。
  • 返回一份 warnings 列表,记录近似、单位换算、跳过的文件和被丢弃的项。

点击某个 network 卡片上的 Insert chain,节点会自动落下一个 reaction-network(已填好抽取到的反应)→ 接入 model-builder → 再为每个推荐分析挂一个结果节点。每个生成的节点都 是普通的画布节点,可以照常编辑反应、改 Kd、重跑、保存。

9.2选择 Provider 与 API Key

UI 目前内置两个 provider 选项,二者都按 Anthropic Messages API 形态调用:

Provider 模型 Endpoint 文档附件
Anthropic Claude Opus 4.7、Sonnet 4.6、Haiku 4.5 api.anthropic.com/v1/messages 支持 PDF
DeepSeek V4 Pro、V4 Flash(Anthropic 兼容) api.deepseek.com/anthropic/v1/messages 仅支持文本与 notebook

在下拉框里选一个模型,或者填一个自定义 model ID。Provider 由模型名前缀自动 识别(claude 开头走 Anthropic,deepseek 开头走 DeepSeek)。模型可用性以对应 provider 的实际 API 为准;如果某个 provider 拒绝 PDF 或 document 内容块,请改用文本或 notebook 输入。API Key 输入框是 password 类型;不勾选 “Remember for browser session” 时,页面不会把 Key 写入 sessionStorage。

9.3输入:文本、PDF、Notebook

三类输入可以单独使用,也可以组合;组合时会作为同一个材料包发送:

文本
粘贴一段方法、补充材料、摘要等任何相关内容。当你只需要长论文里的几条反应时 最方便。
PDF
上传整篇论文。整个 PDF 会作为一个 document 内容块发送, token 消耗会比纯文本路径高。仅在 Anthropic 模型上可用。
Notebook
上传 .ipynb。浏览器在本地解析,只发送源 cell(markdown + code)。 输出 cell、base64 图像与大块数据都不会离开你的机器。

9.4读结果与自动生成的节点链

运行结束后,节点 body 里会渲染三件事:一段对论文的简短总结、每个抽取到的 network 一张卡片、以及一份 warnings 列表。每个 network 卡片上有 Insert chain 按钮,按下后落到画布上的结构是:

reaction-network model-builder [推荐结果节点]

推荐结果会按 network 展开:model-summary 会被保留,再加上若干 来自固定白名单的节点 —— vertices-tableregime-graphsiso-resultscan-1d-resultscan-2d-resultrop-cloud-resultrop-poly-resultfret-result。白名单以外的节点类型会被后处理丢弃并写入 warning。

9.5校验规则 —— 以及被丢弃的内容

提示词和后处理都在限制模型输出,但不能保证抽取一定正确。常见的处理规则如下:

  • 论文没给 Kd。使用占位值 1e-3 M,置信度标记 low,warning 中点名是哪条反应。拓扑会保留下来,数值需要你手动修。
  • 只给 Ka。节点输出 \( K_{d} = 1 / K_{a} \) 并在 warnings 中记录这次取倒数。
  • 只给 kon / koff节点输出 \( K_{d} = k_{\mathrm{off}} / k_{\mathrm{on}} \) 并在 warnings 中记录。
  • Hill 函数、唯象 dose-response、催化周转。直接丢弃并记入 warnings;节点不会把这些内容改写成不存在的结合机制。
  • 单位换算。nM / µM / mM 都会被换算到 M,并在 warnings 中记录。

如果一次运行返回 network 加上一段说明,通常表示材料里没有可抽取的 平衡结合化学,或者输入不足以支持结构化反应列表。此时应补充方法段、补充材料或 反应表,而不是接受占位模型。

10账户与登录

在面向公网的部署中,云端后端要求登录用户。在本地或 on-prem 部署里,登录按钮 会隐藏起来,分析请求直接走当前进程内的 Julia 后端,不需要项目账户。

10.1什么时候需要登录

只有这些场景需要账户:

  • 提交 云计算任务(atlas 构建、逆向设计)。
  • 被按用户配额计数 —— 每日提交计数器按 Cognito 用户键。
  • 在云端后端的 S3 前缀里持久化结果工件。

本地的 SISO 分析、regime 图、点云、参数扫描、模型摘要等交互式分析 不需要账户。工具栏上的 Sign in 按钮只在后端报告 已启用鉴权时才显示。

10.2登录流程

身份验证使用 AWS Cognito Hosted UI,配合 OAuth 授权码 + PKCE 流程:

  1. 点击工具栏的 Sign in

    当 Cognito 未配置时该按钮隐藏。配置时,SPA 会先抓 /api/auth/config,从中拿到 Cognito 域名和公开的 app-client ID。

  2. 走 Cognito Hosted UI

    浏览器跳转到 …amazoncognito.com/oauth2/authorize。在那里用 邮箱 + 密码注册或登录;邮箱验证和可选 MFA 都由 Cognito 处理。

  3. 经过 /auth-callback.html 回弹

    Cognito 带着授权码重定向回 /auth-callback.html。SPA 使用 在跳转前缓存的 PKCE verifier,把授权码换成 ID / access / refresh token。

  4. 回到原页面

    Token 写入 localStorage,SPA 跳回触发登录的那个页面。之后 每次云任务提交都会附上 Authorization: Bearer <id_token>

ID token 在过期前 5 分钟自动用 refresh token 续签。登出会清空本地 token, 并访问 Cognito 的 /logout 端点,让下一次登录回到干净的 Hosted UI。

10.3macOS 同一套流程

Swift 版 macOS 应用在 WKWebView 内运行同一份 auth.js。Token 存在 WebView 自带的 localStorage 里。当前没有原生 Keychain 集成 —— 后续如果要换成 ASWebAuthenticationSession + Keychain,这只是 Swift 侧的改动, 不会影响 Web 代码。

Cognito app client 必须同时注册 macOS WebView 的回环回调 (默认 http://127.0.0.1:18088/auth-callback.html)以及 Web 源。 完整的回调 URL 清单见 deploy/AWS_BATCH.md §2.2。

10.4按用户配额

当部署用 --with-quota-table 选项开启时,会按 Cognito sub 在 DynamoDB 里建一个计数器。每次云任务提交都会写入; 通过 TTL 字段每天重置一次。

默认上限是 每人每天 50 个任务;运维可以用环境变量 BIOCIRCUITS_EXPLORER_QUOTA_DAILY_LIMIT 调高或调低。超过上限时, 云端后端返回 HTTP 429,不会真的去排队 Batch 任务。本地分析不计入。

11云计算 — 把重任务远程跑

有两类分析可能跑几分钟到几小时:构建较大的 atlas、以及在大搜索格子上跑 逆向设计。Cloud Compute 开关把这些任务转给远程的 AWS Batch 队列, 其他分析仍然走进程内的 Julia 后端。

11.1切换 Cloud Compute

工具栏上有一个 Cloud Compute 按钮,它翻转一个会话级的开关, 并写入 localStorage

  • 开。Atlas 构建、逆向设计会被作为 job 提交到云端后端。 结果节点显示 job ID、实时状态徽章,以及任务结束后的工件链接。
  • 关。同样的节点本地跑,期间画布会阻塞。适合小规模预览。

对轻量分析(SISO 路径、扫描、多面体查看器)来说,Cloud Compute 开关不会改变 当前实现的执行位置,它们仍在本地后端运行。

11.2哪些任务会走云端

端点 Cloud Compute 开 Cloud Compute 关
build_atlas AWS Batch 任务 本地 Julia worker
run_inverse_design AWS Batch 任务 本地 Julia worker
build_modelfind_verticessiso_pathsparameter_scan_*rop_*fret_* 始终本地 —— 开关被忽略。

11.3部署栈

在运维一侧,云端路径用到四个 AWS 表面。使用方不需要懂这些细节,但在排查 job 日志或规划部署时会派上用场:

ECR
存放 worker 的 Docker 镜像。它和本地后端是同一个镜像,区别只在 entrypoint:worker 入口从 S3 读 input.json,把 status.json / result.json 写回去。
S3
每个 job 一个前缀,存放 input.jsonstatus.jsonresult.json。前端轮询 status.json,状态变为 succeeded 时下载 result.json
AWS Batch
把 worker 镜像作为容器跑在托管 compute environment 里。默认 minvCpus=0,没有任务时集群缩到 0。job 定义注册了执行角色, 使得 ECR 镜像拉取和 CloudWatch 日志投递在 EC2 启动型和 Fargate 启动型 环境下都能正常工作。
DynamoDB(可选)
按 Cognito sub 计数的每日任务表。通过 setup_aws_batch.sh--with-quota-table 启用。 面向用户的行为见 §10.4。

当 Cognito 已配置时,POST /api/jobs 请求必须带上签名的 Cognito ID token;否则云端后端会以 HTTP 400 “Missing Authorization Bearer token” 拒绝。

运维参考

完整的部署脚本、IAM 策略和回调 URL 列表都在 deploy/AWS_BATCH.md。其中也包括 Cognito 集成与 DynamoDB 配额表。

11.4观察远程任务

结果节点会在原地渲染 job 生命周期:

  • Job ID —— 提交成功后由 Batch 返回。
  • 状态徽章,依次经过 pending → submitted → running → succeeded / failed / cancelled
  • 结果工件链接,任务成功时显示。对 atlas 构建而言, 工件是一个 SQLite 文件,在以后任意一次画布会话里都可以再交给 atlas-spec 节点使用。
  • 错误信息,任务失败时展示;更深的日志在 CloudWatch 对应 Batch job 的日志组里。

完整生命周期 —— 提交、排队、容器启动、运行、上传结果 —— 在画布上是不透明的: 你只看到状态徽章。如果需要细节,请到 Batch 控制台和对应的 S3 前缀去看。

12排错与边界

大多数令人困惑的结果来自三处:反应列表没有表达你想表达的化学、模型会话已经过期, 或输出表达式与所选坐标不一致。

现象 可能原因 处理方式
Invalid session_id 后端重启、页面刷新后节点仍引用旧会话,或会话已过期。 重新运行 model-builder,再重跑下游节点。
物种意外增多或复合物缺失 反应命名不一致,或反应语法写错。 先检查 model-summary,再运行任何结果节点。
没有返回 SISO 路径 当前 \(qK\) 坐标 / 输出组合在筛选条件下没有可行路径。 放宽路径范围或体积阈值,然后尝试另一个输出物种。
扫描曲线与预期符号字不一致 有限常数尚未进入渐近区域,或输出表达式混合了多个物种。 扩大 log 扫描范围,并与投影多面体对照。
Atlas 查询返回太多网络 查询只描述了很宽泛的 motif。 增加精确行为、见证路径、禁止 regime 或鲁棒性约束。
Atlas 查询完全没有结果 搜索格子、枚举 profile 或 support 条件过于严格。 尝试更大的 \((d,\mu)\) 格子,或查看 negative evidence。

12.1建模边界

当前工作台面向的是带守恒总量的平衡结合网络。它不是通用的时间动力学模拟器, 也不直接处理不可逆生产 / 降解、空间转运、随机拷贝数噪声或任意 ODE 模型。 有些问题可以通过选择一个稳态结合子问题来近似,但这种近似应当被明确写下来。

它最强的回答是结构性的:行为可能 / 不可能、regime 过渡、渐近斜率,以及 log-参数空间中的鲁棒性。数值扫描用于把这些结构连接到有限参数值,而不是在 生物问题需要完整动力学模拟时替代它。

13参考资料

关于形式化的展开,请参阅仓库中的论文:

  • 结合网络的主导多胞形(Dominance polytope of binding networks)—— 证明多胞形定理的长文(位置: doc/ROP_paper/)。
  • 结合回路的能力周期表(Capability periodic table for binding circuits)—— 建立 \((d, \mu)\) 索引、符号字、R-index 鲁棒性与 最小见证机制的短文(位置: docs/rop_capability_periodic_table_paper_en.pdf)。
  • periodic_complete_definition —— 实现 profile 与术语对照 (位置:docs/periodic_complete_definition.md)。

实操向的导览与细节,请参考仓库里 wiki/ 目录中的 markdown wiki: quick startatlas workflowsAPI reference