> ## Content Index
> Fetch the complete content index at: https://blog.biobee.top/llms.txt
> Use this file to discover other available public pages before exploring further.

# tNGS Panel 引物池设计：从单对引物到可审计的多重体系
- URL: https://blog.biobee.top/tngs-panel-primer-pool-design-panelbee/
- Published: 2026-09-28T02:35:26.000Z
- Updated: 2026-09-28T03:17:00.000Z
- Description: 以本机 PanelBee 项目为例，梳理联合覆盖、候选筛选、二聚体冲突优化、多管分池与最终引物审计，讲清计算设计和临床验证之间的边界。
- Author: Bee Bee
- Tags: tNGS, 引物设计, 生物信息学

一批引物都通过了单对设计，为什么混在一起之后仍然可能出现问题？

对临床诊断生信工程师而言，tNGS panel 的交付对象是一个有明确检测范围、相互作用约束和验证边界的整体。单对引物的长度、GC 和熔解温度只是其中一部分；种内变异、近缘物种、人源背景、引物之间的相互作用，以及最终下单序列的身份，都需要进入同一条证据链。

本文以本机 **PanelBee／tngs\_cli 项目在 2026 年 9 月 28 日的工作区源码**为主要依据，讨论多重 PCR 扩增型 tNGS panel 的引物池设计。内容不涵盖杂交捕获型 panel。文中将项目实现、数学示例和工程建议分别说明，计算审计结果也不作为临床性能结论。

## 1\. 先确定检测声明，再确定候选引物

开始设计前，建议先完成一张“检测声明表”：目标是单一物种还是物种复合群，使用什么样本，需要覆盖哪些种内差异，又必须区分哪些近缘非目标。这些决定会直接影响什么叫自身命中、什么叫交叉命中，以及哪些失败不能通过放宽阈值解决。

PanelBee 对旧 TaxID、菌株／亚种与物种之间的关系进行归一化，并允许显式定义复合群检测范围。一个序列同时命中复合群内多个成员，在“复合群检测”和“单一物种鉴别”两个任务中，可能具有不同的解释。改变目标范围，应当形成新的检测声明和版本，不能仅作为提高成功率的参数调整。\[P1\]

临床项目还应在这一阶段约定：单靶标还是多靶标支持报告、无结果目标如何呈现、RNA 目标涉及的前处理及逆转录环节如何验证。**设计名单中的一个物种，不等于已经建立了该物种的临床检测能力。**这些是项目验收问题，不能留到拿到引物清单后再决定。

## 2\. 覆盖率必须落到同一条序列的两端

参考序列多，并不自动意味着代表性好。相同或高度重复的记录可能主导列频率；某些来源在数据库中缺失，也无法靠增加已有记录数补齐。项目的模板筛选先合并精确比对单倍型，再采用基于位置的 Henikoff 权重，减弱重复记录对保守性判断的支配。位置权重方法的原始依据见文献 \[1\]，这里的具体使用方式来自项目实现。\[P2\]

更关键的是，逐列保守、左端保守和右端保守，不能替代两端共同匹配。项目在启用联合锚点筛选时计算：

```text
C_pair = Σ w_h × I(单倍型 h 同时完整匹配左右锚点)
Σ w_h = 1

```

例如，一个人为构造的参考集合中，左锚点匹配 H1、H2，右锚点匹配 H1、H3；H1、H2、H3 的权重分别为 0.60、0.20、0.20。左右各自覆盖都是 80%，联合覆盖却只有 60%。这只是集合交集示例，不是观测数据，也不是检测阈值。

项目用同时支持两端的真实观测单倍型生成模板，避免逐列拼接出没有实际序列支持的组合。与此同时，必须保留一个限制：**锚点覆盖率属于被评估的锚点，不能自动转移给后续改变位置或长度的最终引物。**连续保守模板允许 Primer3 在较大区域内搜索，救援阶段也可能扩展位置窗口；最终交付时仍应针对实际引物重新确认所声明的覆盖。\[P2\]

这里的“完整匹配比例”是明确的计算口径，既不是 PCR 扩增效率，也不是临床灵敏度。

## 3\. 四类候选池，不是四个 PCR 反应管

项目将模板分为四类：完全保守／严格特异、非完全保守／严格特异、完全保守／非严格特异、非完全保守／非严格特异。它们描述的是候选证据等级。主流程按阶段调用 Primer3，并记录救援和选择来源；**首个产生可用完整引物对的阶段被选中，后续阶段不再继续竞争**。\[P3\]

Primer3 能在指定位置和理化约束下生成并排序候选，引入热力学模型评估相关结构风险；其 penalty 是设计排序依据。\[2\] 当前项目还限制每模板及每物种保留的候选数量。这有助于控制下游规模，却也限定了后续优化能够看到的候选空间。\[P3\]

比较 Tm、发卡或二聚体结果时，还应保存盐离子、寡核苷酸浓度、温度及实际调用参数等计算条件，并核对不同工具是否采用可比较的模型设置。相同的数字阈值，在不同条件下未必表示相同的约束。本文不把软件默认值作为已验证的湿实验配方，也不据一份配置文件就认定所有下游工具都已使用这些值。\[2,3\]

因此，“筛选器找不到无冲突组合”至少需要分成两个问题：当前候选集中有没有解，以及更换位点、重新生成候选后有没有解。前者失败，不能证明目标在生物学上不可设计；前者成功，也不能证明已经找到整个候选空间的最佳 panel。

另一个常见误读是把特异性分数当成概率。项目的分类学感知评分利用自身与跨物种比对证据做排序，并对同一非目标物种聚合最强命中。这个指数依赖参考库、分类关系和模型设置；分数 90 不代表“90% 的实验特异性”。\[P1\]

## 4\. 引物池优化的单位，应是完整引物对

MFEprimer 提供二聚体、发卡及非特异性扩增等质量检查能力。\[3\] 在当前项目主流程中，二聚体步骤调用的是其 `dimer` 功能，随后把单条引物间的事件映射到完整引物对之间的冲突。工具具备的全部功能，不能直接当成某次流程已经运行的检查项目。\[P4\]

以引物对作为图中的节点，有一个直接好处：删除候选时同时删除 F 和 R，不会留下无法完成预期扩增的孤立引物。不同引物对之间的相互作用构成边；同一引物对内部出现的冲突，则形成自环。

当前工作区的二聚体删除模块，以最少删除引物对为目标，建立如下约束模型：

```text
x_i = 1 表示删除引物对 i，0 表示保留
目标：最小化 Σ x_i
冲突边 (i,j)：x_i + x_j ≥ 1
每个有候选的物种 s：Σ[i 属于 s] (1 − x_i) ≥ 1

```

实现优先使用 CP-SAT，缺少相应依赖时回退到 PuLP／CBC；冲突关系与同物种约束共同决定可拆分的连通分量。\[P4\]

这个目标的含义非常有限而具体：在输入候选和已建模冲突内减少删除数。它没有同时优化所有临床终点，也不模拟实际扩增效率。CP-SAT 分支接受 `OPTIMAL` 或 `FEASIBLE` 状态；因此，仅凭程序成功结束，不能无条件宣称每次都已经证明最少删除，更不能宣称整体 panel 获得全局最优性能。

**自环不能通过把 F、R 分到不同反应管来解决。**它提示该引物对自身需要处理；拆开预期配对关系会改变原设计。若它又是某物种唯一候选，当前二聚体模块会在无法兼顾冲突约束与物种保留要求时停止，并给出诊断信息。诊断所列物种是该模型下的一组修复线索，不宜解读为唯一的生物学责任归因。\[P4\]

### 三种冲突，不应合并成同一个“通过”

| 检查层面     | 当前主流程的处理方式              | 结果如何解释                      |
| -------- | ----------------------- | --------------------------- |
| 已报告二聚体冲突 | 约束优化；引物对成对删除；有候选物种至少留一对 | 无法满足约束时停止；无已报告冲突不等于实验中绝无二聚体 |
| 潜在非特异性扩增 | 按剩余风险逐轮贪心删除，并保留物种下限     | 无法继续删除的风险被保留和记录，需复核         |
| 靶标同源冲突   | 将命中聚合成无向冲突图，贪心筛选后同步更新引物 | 同源信号是区分与判读风险线索，不等于已发生交叉扩增   |

后二者来自 `spec_selector.py` 和 `target_remover.py`。\[P5\] 它们与二聚体删除模块并非同一种算法；“为了保留物种而保留风险”也不能写成“风险已被消除”。

## 5\. 从候选筛选到多管分池，还需要一次决策

真正的多管分池，是把完整引物对分配到具体反应管。候选删除回答“保留谁”，分池回答“谁与谁共同反应”。在本次核查的主流程中，未发现自动输出多管分配方案的完整路径；四类候选池和最后保留的一个集合，不足以证明这项能力已经实现。\[P3–P5\]

PrimerPooler 是另一类问题的例子：其官方说明包括在候选池之间移动引物集合、减少相互作用、处理扩增子重叠和限制每池规模等功能。\[4\] 引用它是为了说明任务边界，并不表示 PanelBee 已经集成该工具，也不是对其临床效果的背书。

下面用一个不含真实序列的例子解释选择差异。目标 A 有 A1、A2 两对备选，目标 B 只有 B1；已知冲突只有 A1—B1：

| 方案      | 数学上如何处理冲突           | 仍需回答的问题                |
| ------- | ------------------- | ---------------------- |
| 保留一个集合  | 删除 A1，保留 A2、B1      | A2 能否满足原来的覆盖与冗余要求？     |
| 分到两个反应管 | A1 放一管，A2 与 B1 放另一管 | 增加的反应管、样本分配和各管表现是否可接受？ |
| 重新生成候选  | 寻找能够替代 A1 或 B1 的设计  | 新位点是否仍满足检测声明和验证要求？     |

示例没有预测哪一种在实验中更好。它说明，保留数量、池数和每目标冗余是不同目标；“每物种至少一对”只是软件保留底线，不是临床上足够稳健的统一标准。

## 6\. 人源风险与接头风险，要审计实际参与反应的序列

单条引物命中人源参考，只说明搜索发现了潜在结合证据。项目进一步检查两端所在参考、相向关系、引物 3′ 端与产物跨度。F／R 是预期靶标上的命名，不限制其他位点的物理方向，所以同标签和跨引物对组合也在审计范围内。\[P6\]

这里还要检查“没有命中”是如何产生的：程序成功且搜索结果为空，可以是一项有效的阴性计算结果；输出文件缺失则是执行问题。即使输出完整，BWA／BLAST 等搜索的参考范围和启发式设置仍限定了证据边界，不能解释为已经穷尽所有可能的扩增事件。\[P6\]

接头或通用尾序列是另一个容易漏掉的交付边界。**本次查看的主流程二聚体检查读取的是前序候选引物文件；名称为 `PrimerAdapter` 的步骤实际执行物种结果汇总。**仓库另有添加接头的脚本，但脚本存在不等于主流程已经审计带尾的完整合成序列。\[P7\]

实际项目中，建议分别冻结靶向结合部分与完整合成序列，明确各检查使用哪一个版本。增加通用尾、标签或其他组成后，应基于最终序列重新评估相关相互作用，不能沿用修改前的“无已报告冲突”结论。具体检查范围还应匹配实际建库结构，而不是套用一个统一拼接模板。

## 7\. 最终名单必须与最终证据一一对应

PanelBee 的联合审计回到最终保留的 F、R 和靶标 T，核对 ID、物种归属、序列、方向以及预期产物的一致性。它还将历史二聚体及人源成对事件按最终名单过滤，避免把已经删除的候选风险继续计入交付结果。\[P8\]

| 审计状态       | 当前含义                 | 交付时应如何对待               |
| ---------- | -------------------- | ---------------------- |
| pass       | 关联完整，满足当前实现中的计算风险条件  | 可以进入后续评审；不等于湿实验或临床验证通过 |
| review     | 关联完整，但有需要复核的计算风险     | 保留原因，逐项处理，不能仅凭有序列就下结论  |
| invalid    | 身份、关联、序列或产物信息不完整／不一致 | 先解决证据完整性，不能继续解释性能      |
| no\_result | 请求目标没有最终引物对和靶标       | 继续保留在目标分母中，明确尚未覆盖      |

这里尤其要避免混淆三个比例：“至少有一对结果的目标数／全部请求目标数”“至少有一对计算 `pass` 结果的目标数／全部请求目标数”，以及“最终引物对中的 `pass` 比例”。三者都可以用于工程管理，但含义不同，而且都不是临床灵敏度。一个目标有一对 `pass`、另一对 `review` 时，项目物种汇总仍可能标为 `review`；因此不能从第一个通过的引物对推断整个目标已无风险。\[P8\]

最终汇总通过输入身份与数量核对连接上游审计。对外导出的表格也应与这份名单一致：临时人工替换了一个引物，就需要更新相应风险检查和版本，不能继续引用原来的审计清单。

## 8\. 实验验证应围绕具体声明展开

以下是从临床诊断工程角度提出的验证规划，**不是本项目已经取得的实验结果，也不是通用实验配方**。

| 待验证问题       | 规划重点                      | 报告时需要保留的口径           |
| ----------- | ------------------------- | -------------------- |
| 种内覆盖是否能泛化   | 将设计与独立验证参考分开，检查未覆盖的变异与来源  | 独立菌株／序列数、分层信息、失败目标   |
| 是否能区分近缘非目标  | 按检测声明设置目标及近缘非目标挑战         | 非目标种类、材料范围和异常结果      |
| 多重体系是否产生竞争  | 比较单重与多重表现，纳入丰度不平衡和宿主背景情形  | 各目标表现与重复结构，不只报平均深度   |
| 检出限与重复性是否成立 | 在预先定义的样本和流程条件下开展独立验证      | 输入单位、阳性判定规则、重复数与不确定性 |
| 改版后原结论是否仍适用 | 冻结参考库、实际引物名单及分析规则，评估受影响范围 | 版本差异、重新审计与验证的范围      |

我的交付检查表会保留五类材料：**检测声明、参考与参数快照、候选及救援记录、最终引物—靶标名单、计算审计与实验验证的分别结论。**这样，下一位接手的人才能回答“这对引物为什么留下”“这个目标还有什么风险”和“哪个结论对应哪一版序列”。

引物池设计的成熟度，最终体现在能否让覆盖、冲突、失败和版本都有可复核的解释。对临床诊断而言，明确知道尚未证明什么，与知道已经设计出什么同样有价值。

## 项目取材与证据边界

本文依据本机工作区源码和项目文档原创整理，没有搬运患者数据、实际引物订单或私有目标清单。工作区存在未提交变更，因此仅用 Git 提交号不能完整重建本文所述状态；本次取材已在本地记录相关文件的 SHA-256。

以下为项目内相对路径，便于项目维护者复核，并非公开仓库链接：

- **\[P1\]** `doc/specificity_scoring.md`、`commands/filter_specificity.py`：分类学归一化、检测范围与排序指数。
- **\[P2\]** `doc/template_selector.md`、`commands/template_selector.py`：单倍型权重、联合锚点和真实模板。
- **\[P3\]** `commands/pipeline.py`、`primer_tools/run_primer3_fallback.py`：候选分级、阶段选择和数量限制。
- **\[P4\]** `primer_tools/delete_dimer.py`：引物对冲突、优化约束、求解状态与失败处理。
- **\[P5\]** `primer_tools/spec_selector.py`、`primer_tools/target_remover.py`：贪心筛选及残余风险。
- **\[P6\]** `doc/cache_and_specificity_boundaries.md`、`deploy/README.md`、`primer_tools/spec_selector.py`：人源命中、扩增几何和搜索边界。
- **\[P7\]** `commands/pipeline.py`、`primer_tools/primer_adapter.py`：二聚体输入、汇总步骤和独立加尾工具的调用边界。
- **\[P8\]** `doc/final_primer_target_assessment.md`、`primer_tools/final_assessment.py`、`primer_tools/final_evaluation.py`、`primer_tools/export_results.py`：最终身份核对、状态与交付文件。

上述 `commands/` 位于 `src/tngs_cli/`，`primer_tools/` 位于 `src/tngs_cli/commands/`。与旧方法稿不一致的地方，本文采用本次源码实际行为，不将旧稿中的算法描述外推到所有版本。

本次定向运行了二聚体、扩增筛选、最终审计和汇总评估相关的四个测试文件：36 项通过，1 项失败。失败发生在汇总流程测试触发结果导出时，其测试夹具缺少最终靶标文件。因此本文不声称全流程测试通过；这些检查只为理解当前实现提供局部证据，不能替代独立基准或湿实验验证。

## 参考资料

1. Henikoff S, Henikoff JG. *Position-based sequence weights*. Journal of Molecular Biology. 1994;243(4):574–578\. [原始摘要与书目信息](https://pubmed.ncbi.nlm.nih.gov/7966282/?ref=blog.biobee.top)。
2. Untergasser A, et al. *Primer3—new capabilities and interfaces*. Nucleic Acids Research. 2012;40(15):e115\. [原文，DOI: 10.1093/nar/gks596](https://pmc.ncbi.nlm.nih.gov/articles/PMC3424584/?ref=blog.biobee.top)。
3. Wang K, et al. *MFEprimer-3.0: quality control for PCR primers*. Nucleic Acids Research. 2019;47(W1):W610–W613\. [原文，DOI: 10.1093/nar/gkz351](https://academic.oup.com/nar/article/47/W1/W610/5486745?ref=blog.biobee.top)。
4. PrimerPooler. *Official documentation and source repository*. [官方仓库与使用说明](https://github.com/ssb22/PrimerPooler?ref=blog.biobee.top)，访问日期：2026-09-28。

---

*说明：文中的工程建议和数学示例不是患者研究结果；未开展新的湿实验，也未宣称产品获得临床验证或监管认可。*