不经过空间转录组,单细胞测序结果如何用空间蛋白组回到组织原位?——TaoToken 辅助的 PCF/CODEX 验证路径

📅 发布时间:2026/10/8 5:54:43
不经过空间转录组,单细胞测序结果如何用空间蛋白组回到组织原位?——TaoToken 辅助的 PCF/CODEX 验证路径
1. 为什么 scRNA-seq 之后不一定要接空间转录组单细胞测序做完细胞亚群注释清楚marker 基因列表也整理好了接下来最常见的思路是接一个空间转录组把细胞群映射回组织区域。这个思路本身没问题但它回答的核心问题是「哪些基因在哪些区域表达」。如果你的研究目标不是继续找新的转录区域而是想知道「我注释出来的这群细胞在组织里到底存不存在、蛋白层面是否表达、跟谁挨在一起」那空间转录组其实绕远了。空间蛋白组学里的 PCFPhenoCycler-Fusion原 CODEX就是为这个场景准备的。它用抗体 panel 在 FFPE 或新鲜冷冻切片上做多轮荧光成像直接在组织原位识别蛋白标志物然后通过图像分割和邻域分析把细胞类型和空间关系还原出来。scRNA-seq 给你的是「离体细胞图谱」PCF 给你的是「组织原位蛋白图谱」两者衔接的逻辑是单细胞提供细胞类型和候选 markerPCF 提供这些 marker 对应的蛋白在组织中的位置和邻近关系。适合谁已经做完 scRNA-seq、有明确细胞亚群和 marker 列表、想做免疫微环境或肿瘤边界空间验证的研究者。不适合谁还在探索未知表达模式、需要全转录组空间信息的课题那种情况空间转录组更合适。我试过的一个典型流程是scRNA-seq 注释出 CD8 耗竭 T、Treg、TAM、B 细胞、肿瘤细胞等亚群整理出每个亚群的蛋白级 marker然后设计 PCF 抗体 panel在组织切片上做多轮成像最后用分割和邻域分析验证这些细胞是否以特定空间关系共现。下面把这条路径拆成可操作的步骤。2. TaoToken 前置统一 Key 与 API 通道在流程脚本中的接入PCF 的图像处理和下游分析通常涉及 Python/R 脚本调用外部模型或 API比如用大模型辅助生成抗体 panel 注释、批量整理 marker 对应表、或者调用模型做图像描述和质控报告。如果每个脚本都单独配 Key 和 Base URL维护起来很乱。TaoToken 的作用是提供一个统一的 API 通道把模型调用集中管理。官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址https://taotoken.net/api你需要先拿到 Key。进入 console 页面创建 API Key然后在脚本里通过环境变量注入。注意 Base URL 和 Key 要配套使用Model ID 按你实际调用的模型填写。下面是一个可复制的配置片段放在项目根目录的.env或直接 exportexport TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_API_KEYsk-你的实际Key export TAOTOKEN_MODEL_ID你选用的模型ID如果你用 Python 脚本调用可以这样读import os from openai import OpenAI client OpenAI( base_urlos.environ[TAOTOKEN_BASE_URL], api_keyos.environ[TAOTOKEN_API_KEY], ) resp client.chat.completions.create( modelos.environ[TAOTOKEN_MODEL_ID], messages[{role: user, content: 帮我把这组 marker 基因整理成蛋白对应表}], ) print(resp.choices[0].message.content)这里的关键是 Base URL 必须写https://taotoken.net/api不要加多余路径。Key 从 console 的 API Keys 页面获取。Model ID 按你实际使用的模型填不要留空。如果你在 Cline 或 Claude Code 这类工具里接入配置项也是这三件套Base URL、API Key、Model ID。Cline 的 MCP 配置里如果涉及模型调用同样走这个通道。对于长期做编码和 Agent 流程的可以考虑 Coding Plan把模型调用额度集中管理避免每个脚本单独计费。验证模型是否通的时候用模型对话页面直接测一句确认返回正常再写进脚本。3. 可复制配置抗体 panel、marker 对应表与 settings 片段这一节是核心交付。PCF 的抗体 panel 设计直接决定你能不能把 scRNA-seq 的细胞亚群在组织里认出来。原则是每个你要验证的细胞亚群至少有一个膜蛋白或胞内蛋白 marker且该 marker 在 scRNA-seq 里有对应的差异表达基因。下面是一个针对肿瘤免疫微环境的 panel 示例你可以按自己的 scRNA-seq 结果替换。表格里列出细胞类型、scRNA-seq marker 基因、PCF 蛋白 marker、抗体克隆号和荧光通道建议。细胞类型scRNA-seq marker 基因PCF 蛋白 marker抗体克隆号示例通道建议CD8 T 细胞CD8A, CD8BCD8C8/144B488耗竭 CD8 TPDCD1, LAG3, HAVCR2PD-1, LAG3EH12.2H7, 11E3550, 650TregFOXP3, IL2RAFOXP3, CD25236A/E7, BC96594, 488巨噬细胞CD68, CD163CD68, CD163KP1, EDHu-1550, 650B 细胞CD19, MS4A1CD20L26488肿瘤细胞EPCAM, KRT18Pan-CKAE1/AE3594增殖细胞MKI67Ki67B56650检查点配体CD274PD-L122C3550panel 设计有几个坑要注意。第一荧光通道要错开避免光谱重叠PCF 一般支持 3-4 个通道每轮多轮叠加。第二抗体克隆号要选经过 FFPE 验证的很多克隆在 FFPE 上信号很弱。第三胞内 marker 如 FOXP3、Ki67 需要透化步骤panel 里要预留。如果你用 CODEX 的 settings 文件通常是一个 JSON 或 YAML定义每轮的抗体和通道。下面是一个简化片段{ panel_name: tme_immune_pcf_v1, cycles: [ { cycle: 1, antibodies: [ {target: CD8, clone: C8/144B, channel: 488}, {target: PD-1, clone: EH12.2H7, channel: 550}, {target: FOXP3, clone: 236A/E7, channel: 594} ] }, { cycle: 2, antibodies: [ {target: CD68, clone: KP1, channel: 488}, {target: CD20, clone: L26, channel: 550}, {target: Pan-CK, clone: AE1/AE3, channel: 594} ] } ], nuclei_channel: DAPI, exposure_ms: 150 }这个片段可以直接作为你写自己 settings 的模板。路径和字段名按你实际使用的成像系统调整但结构一致。如果你在 Cline 里用 MCP 做 panel 管理可以把这份 JSON 作为资源文件挂进去让模型辅助校验通道冲突。4. 验证请求与成功结果CODEX 图像分割与配准panel 跑完拿到多轮成像数据下一步是分割和配准。分割是把细胞核和细胞边界识别出来配准是把多轮图像对齐到同一坐标系。这两步做不好后面的邻域分析全是错的。分割常用的是基于 DAPI 核染色的核分割再扩展出细胞边界。工具可以用 Cellpose 或 StarDist。下面是一个 Cellpose 的调用示例from cellpose import models model models.Cellpose(model_typenuclei) masks, flows, styles, diams model.eval( dapi_image, diameter30, channels[0, 0], )跑完之后你会得到一个 masks 矩阵每个细胞核有独立标签。然后把这个 masks 和多轮蛋白通道叠加计算每个细胞的蛋白表达强度。配准用相位相关或基于基准点的对齐。CODEX 数据通常每轮之间有微小位移需要刚性配准。下面是一个用 OpenCV 做相位相关配准的片段import cv2 import numpy as np def register_images(ref, moving): ref_gray cv2.cvtColor(ref, cv2.COLOR_BGR2GRAY).astype(np.float32) mov_gray cv2.cvtColor(moving, cv2.COLOR_BGR2GRAY).astype(np.float32) shift, _ cv2.phaseCorrelate(ref_gray, mov_gray) return shift shift register_images(cycle1_dapi, cycle2_dapi) print(检测到位移:, shift)成功的结果是配准后各轮图像对齐误差在亚像素级分割后每个细胞有完整的蛋白表达向量邻域分析能稳定复现 scRNA-seq 提示的细胞共现关系。比如 scRNA-seq 提示 Treg 和耗竭 CD8 T 在非响应组更接近PCF 邻域分析应该能在组织里看到 FOXP3 细胞和 PD-1CD8 细胞的邻近比例升高。验证请求是否成功可以看几个指标配准后 DAPI 通道的互信息是否提升分割细胞数是否和预期密度一致蛋白通道的信噪比是否足够。如果这些指标正常说明流程通了。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节列几个实际会撞到的报错和排查路径。401 Unauthorized。通常是 Key 没配对或者 Base URL 写错了。检查TAOTOKEN_API_KEY是否从 console 的 API Keys 页面正确复制Base URL 是否是https://taotoken.net/api。如果你在 Cline 或 Claude Code 里配置确认三件套都填了Base URL、Key、Model ID。缺一个都会 401。local proxy failed。这个报错一般出现在本地脚本调用外部 API 时网络层没通。先确认你的环境能正常访问https://taotoken.net/api可以用 curl 测一下curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:$TAOTOKEN_MODEL_ID,messages:[{role:user,content:ping}]}如果 curl 通但脚本不通检查脚本里的 base_url 是否被其他库覆盖了。reading choices 报错。这个通常出现在解析模型返回时返回结构和你预期的不一致。比如你按resp.choices[0].message.content取但实际返回里 choices 为空或结构不同。先 print 整个 resp 看结构再调整取值路径。如果你用的是流式返回要按流式的方式解析。OAuth 相关报错。如果你在 Claude Code 或类似工具里用 OAuth 登录方式接入注意 OAuth 和 API Key 是两套通道。TaoToken 的 API 通道用 Key不走 OAuth。如果你在工具里同时配了 OAuth 和 Key可能会冲突。建议统一用 Key 方式配置项写全 Base URL、Key、Model ID。还有一个常见坑是 Model ID 写错。不同模型的 ID 不一样写错了会返回模型不存在。去模型对话页面确认你用的模型 ID再填进脚本。6. 语义一致 CTA把单细胞结果落到组织原位整条路径的核心是scRNA-seq 负责细胞类型和候选 markerPCF 负责蛋白层面的组织原位验证TaoToken 负责流程脚本里的模型调用通道。你不需要先做空间转录组也能把单细胞注释的细胞群映射回组织看它们是否真的以特定空间关系共现。如果你在排障或接入阶段卡住先去 API Keys 页面确认 Key再看接入文档核对 Base URL 和 Model ID。验证模型是否通用模型对话页面直接测。长期做编码和 Agent 流程的看 Coding Plan 把额度集中管理。实际操作中panel 设计和配准参数是最花时间的部分。建议先用一个小样本跑通全流程确认分割和邻域分析结果稳定再放大到全部样本。抗体 panel 不要一次堆太多先验证核心细胞类型的 marker再逐步加检查点和功能 marker。配准后一定要做质控看 DAPI 对齐和蛋白通道信噪比不合格的轮次重跑。最后邻域分析的参数邻域半径、细胞类型定义阈值要固定避免不同样本之间不可比。