ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

知识扩展--PD-1阻断后肿瘤浸润浆细胞谱系分析揭示肿瘤特异性抗体:用TaoToken统一Key跑通scRNA-seq+BCR分析流程

知识扩展--PD-1阻断后肿瘤浸润浆细胞谱系分析揭示肿瘤特异性抗体:用TaoToken统一Key跑通scRNA-seq+BCR分析流程 1. PD-1阻断后浆细胞谱系分析到底在解决什么问题肿瘤免疫治疗里PD-1阻断大家最熟悉的是它对T细胞的“松刹车”作用。但近几年越来越多研究把目光转向肿瘤浸润B细胞TIL-Bs和浆细胞——抗PD-1治疗后肿瘤内CD138浆细胞浸润会增加而且和NSCLC患者更好的临床结局相关。问题在于这些浆细胞到底分泌了什么样的抗体这些抗体能不能识别肿瘤特异性抗原能不能拿来做CAR-T这篇要跟做的流程就是围绕“PD-1阻断后肿瘤浸润浆细胞谱系分析揭示肿瘤特异性抗体”这个场景把scRNA-seq和BCR数据整合起来从原始数据走到可验证的克隆谱系和抗体候选。适合谁已经会跑Seurat基础流程、想进一步做BCR克隆分析的生信同学或者做肿瘤免疫、想从单细胞数据里挖抗体靶点的研究者。核心检索词先明确PD-1阻断、肿瘤浸润浆细胞、BCR克隆分析、scRNA-seq、CAR-T、单细胞。这几个词会贯穿全文。整个分析链条大致是单细胞转录组预处理 → B细胞亚群注释 → BCR序列整合 → 克隆型与SHM分析 → 跨亚群克隆共享 → 候选抗体筛选 → 结构预测辅助验证。听起来长但拆开每一步都有成熟工具。真正卡人的往往不是算法而是环境配置、参考数据集下载、BCR与转录组的barcode对齐、以及各种版本不兼容的报错。我试过在本地用conda装一整套immcantationdowser光依赖冲突就折腾半天。后来改成用统一的API Key走云端模型辅助排查报错和生成脚本效率高很多。下面就把这套可复制的配置和脚本写清楚你照着跑就行。先给一个整体数据流方便你对照自己的数据阶段输入主要工具输出预处理10x矩阵Seurat/Scanpy质控后对象亚群注释降维聚类结果Azimuth参考7类B细胞亚群BCR整合filtered_contig_annotations.csvscRepertoire克隆型表克隆分析克隆型转录组dowser/Change-OSHM、谱系树抗体筛选克隆型序列自定义脚本候选mAb列表结构预测候选序列结构建模表位假设这张表建议先存下来后面每一步都会对应到具体命令。数据量方面原文TIL-B总数约7150个细胞、5281对功能性重轻链这个规模在单机上完全跑得动不需要大集群。2. TaoToken统一Key配置把模型调用和脚本生成接进来做这类多步骤分析最烦的是每换一个工具就要重新配环境、查文档、改参数。我的做法是把“模型辅助”这一层统一到一个入口用TaoToken的API Key来调用这样生成脚本、解释报错、翻译参数都用同一个Key不用在多个平台之间来回切。先说清楚它是什么TaoToken提供统一的API入口兼容常见的对话与代码模型调用方式你拿到一个Key就能在脚本里调用模型来辅助生成分析代码、解读报错信息。适合需要频繁写生信脚本、又不想每次手动查文档的人。配置入口在这里官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API地址是 https://taotoken.net/api 这个不加UTM。注册后在控制台创建Key控制台地址https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。Key管理页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。拿到Key之后最省事的验证方式是先在模型对话页面测一下能不能正常返回https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。如果对话正常说明Key有效再往脚本里接。对于长期要跑编码和Agent任务的可以考虑Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。如果你用Claude Code做这类分析脚本接入配置参考https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 。这里要强调一个原则TaoToken是模型调用入口不是替代你的分析工具。Seurat还是Seuratdowser还是dowser它只是帮你更快写出正确的调用代码、解释报错。别指望它直接帮你跑完整个pipeline。配置时最容易踩的坑是Base URL写错。记住API根地址是 https://taotoken.net/api 不要多加路径。Key放在环境变量里别硬编码进脚本尤其是要分享的notebook。3. 可复制配置settings与脚本片段这一节给可直接复制的配置。先给一个通用的环境变量设置再给模型调用的JSON配置最后给单细胞BCR的核心脚本骨架。环境变量Linux/macOS写进~/.bashrc或~/.zshrcexport TAOTOKEN_API_KEY你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/apiWindows PowerShell$env:TAOTOKEN_API_KEY你的Key $env:TAOTOKEN_BASE_URLhttps://taotoken.net/api模型调用的JSON配置片段以常见的OpenAI兼容格式为例保存为taotoken_config.json{ base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, model: 你的模型ID, timeout: 120, max_retries: 3 }注意model字段要填你在控制台看到的实际模型ID不要照抄示例。Base URL保持https://taotoken.net/api不要加/v1之外的额外路径具体以接入文档为准。如果你用Cline或类似插件做MCP辅助配置里同样要写全三件套Base URL、API Key、Model ID。缺一个都会连不上。Base URL填https://taotoken.net/apiKey填环境变量名或直接值Model ID填控制台里的模型标识。接下来是单细胞预处理脚本骨架RSeuratlibrary(Seurat) library(dplyr) # 读取10x数据 seu - Read10X(data.dir data/filtered_feature_bc_matrix) seu - CreateSeuratObject(counts seu, project TILB, min.cells 3, min.features 200) # 质控 seu[[percent.mt]] - PercentageFeatureSet(seu, pattern ^MT-) seu - subset(seu, subset nFeature_RNA 200 nFeature_RNA 5000 percent.mt 20) # 标准化与降维 seu - NormalizeData(seu) seu - FindVariableFeatures(seu, selection.method vst, nfeatures 2000) seu - ScaleData(seu) seu - RunPCA(seu, npcs 30) seu - FindNeighbors(seu, dims 1:30) seu - FindClusters(seu, resolution 0.8) seu - RunUMAP(seu, dims 1:30) saveRDS(seu, seu_processed.rds)BCR整合脚本骨架RscRepertoirelibrary(scRepertoire) library(Seurat) # 读取BCR contig文件 contig_list - list( read.csv(data/patient004/filtered_contig_annotations.csv), read.csv(data/patient201/filtered_contig_annotations.csv), read.csv(data/patient301/filtered_contig_annotations.csv) ) # 合并BCR与转录组 seu - combineExpression(contig_list, seu, cloneCall genent) # 查看克隆型分布 clonalOverView(seu, cloneCall genent, group.by seurat_clusters)克隆型与SHM分析Rdowser/Change-Olibrary(dowser) library(shazam) # 从contig构建克隆型 clones - formatClones(contig_list, cloneCall genent) # 计算SHM频率 observed - observedMutations(clones, sequenceColumn sequence_alignment, germlineColumn germline_alignment_d_mask, regionDefinition IMGT_V) # 克隆谱系树 trees - getTrees(clones, nproc 4)这三段脚本是骨架实际跑的时候列名、文件路径要按你的数据改。如果报错看不懂把报错贴到模型对话里让它解释比翻文档快。4. 验证请求与成功结果核对脚本跑完不算完得验证结果对不对。这一节给具体的验证动作和核对清单。第一步验证模型调用是否通。用curl测一下curl -X POST https://taotoken.net/api/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:返回ok}]}如果返回里有正常的choices字段说明Key和Base URL都对。如果返回401看第5节的排查。第二步验证单细胞对象。跑完预处理后检查# 细胞数和基因数 dim(seu) # 聚类数 length(levels(seu$seurat_clusters)) # 检查B细胞标志物 FeaturePlot(seu, features c(CD19, MS4A1, CD79A))成功的结果应该是细胞数在几千量级聚类数在15-25之间原文是25个聚类B细胞标志物在特定cluster高表达。第三步验证BCR整合。关键看barcode匹配率# 有多少细胞匹配到了BCR sum(!is.na(seu$CTgene)) / ncol(seu)匹配率太低比如低于10%说明barcode格式不对或者contig文件用错了。原文得到5281对功能性重轻链你的数据规模不同但匹配率应该在合理范围。第四步核对B细胞亚群注释。原文鉴定出7个亚群标志物如下亚群关键标志物初始样BTCL1A, YBX3, FCER, IGHD活化初始BCD83, MIR155HG, NFKB1, CD69周期BMKI67, STMN1, HMGB2GC BBCL6, AICDA记忆BCD27, TNFRSF13BAtM BDUSP4, FCLR5, ZEB2, ITGAXASC/浆细胞MYDGF, JCHAIN, XBP1, MZB1用DotPlot把这些基因画出来看每个cluster是否对应。如果ASC cluster里JCHAIN、MZB1不高说明注释有问题。第五步核对克隆分析结果。成功的结果应该看到初始样B以IgM/IgD为主GC/MBC/ASC出现IgG/IgA类别转换初始样B的SHM频率低GC/MBC/ASC的SHM频率高存在跨亚群共享克隆谱系。原文鉴定出39个跨亚群共享克隆谱系其中12个以重组mAb形式表达。第六步候选抗体筛选。从扩增最大的ASC克隆型里选同时也要从GC、MBC、AtM里选因为原文发现肿瘤反应性抗体不只在ASC里。PC-1就是从ASC库里扩增最大的谱系之一107个成员选出来的。核对清单总结模型调用返回正常choices单细胞对象维度合理B细胞标志物定位正确BCR匹配率在合理范围7个亚群标志物与表格一致类别转换和SHM趋势符合预期存在跨亚群共享克隆候选抗体有明确的克隆扩增和成熟特征5. 本篇常见报错排查这一节对照真实报错来。做scRNA-seqBCR整合报错集中在几个地方。报错1401 Unauthorized{error:{message:Invalid API key,type:invalid_request_error}}原因Key没设对或者环境变量没生效。排查echo $TAOTOKEN_API_KEY看有没有值确认Base URL是https://taotoken.net/api不要写成别的路径确认请求头是Authorization: Bearer key。如果Key刚创建等几秒再试。报错2local proxy failed / connection refusedError: local proxy failed to connect原因本地网络配置或代理设置问题。排查先确认能直接访问API地址检查环境变量里有没有残留的代理设置HTTP_PROXY/HTTPS_PROXY有的话先unset如果是公司网络确认出口规则。注意不要用任何非正规的网络工具直接走正常网络访问即可。报错3reading choices of undefinedTypeError: Cannot read properties of undefined (reading choices)原因返回结构不是预期的对话格式通常是Base URL写错导致请求打到了别的端点。排查确认URL是https://taotoken.net/api加正确的路径打印完整返回体看实际结构检查model ID是否存在于你的账户权限内。报错4OAuth相关错误OAuth error: invalid_client原因用了OAuth流程但配置不匹配。如果你只是用API Key调用不需要走OAuth。排查确认调用方式是API Key而非OAuth如果用的是Claude Code接入参考接入文档里的配置方式Base URL和Key都要填对。报错5BCR整合时barcode不匹配Warning: 0 cells matched between contig and Seurat object原因contig文件里的barcode带了后缀比如-1而Seurat对象里的barcode没有或者反过来。排查检查两边barcode格式用head(colnames(seu))和head(contig$barcode)对比必要时统一去掉或加上后缀。报错6dowser构建克隆型时报序列比对错误Error in formatClones: sequence_alignment column not found原因contig文件列名和dowser期望的不一致。排查用colnames(contig)看实际列名dowser需要sequence_alignment、germline_alignment_d_mask等列如果列名不同要重命名。报错7SHM计算返回全NA原因germline序列列缺失或格式不对。排查确认contig里有germline序列检查是否用了正确的region definitionIMGT_V确认序列没有太多N碱基。这些报错里401和choices相关的基本都是配置问题把Base URL、Key、Model ID三件套核对一遍就能解决。BCR相关的报错多半是列名和barcode格式打印出来对比最快。6. 从克隆谱系到CAR-T候选下一步怎么走跑完上面的流程你手里应该有了注释好的B细胞亚群、整合了BCR的克隆型表、SHM和类别转换结果、跨亚群共享克隆列表、以及一批候选抗体序列。接下来原文的做法是选先导抗体PC-1做抗原鉴定免疫沉淀质谱发现靶标是瓜氨酸化波形蛋白然后构建CAR-T做体内验证。这部分湿实验我们跑不了但生信侧还能做几件事。第一用结构预测辅助表位分析。原文用X射线晶体学解析了PC-1 Fab结构2.2 Å并用AbEpiTope-1.0做计算对接。生信侧你可以用AlphaFold或类似工具预测Fab结构再用对接软件模拟与候选抗原的结合。注意原文也提到最终表位确证需要共晶结构计算预测只是假设。第二做候选抗体的多反应性评估。原文用HuProt微阵列23004种蛋白评估PC-1只有0.6%的蛋白结合超过阈值多反应性极低。生信侧你可以用序列特征CDR长度、疏水残基比例做初步筛选。原文PC-1的HCDR2有17aa、HCDR3有15aa、LCDR1有17aa富含疏水和极性残基这种延长的CDR环可能容纳多样化表位。第三验证PAD2依赖性。原文用CRISPR敲除PAD2后PC-1表面结合从82.6%降到6.4%CAR-T杀伤完全消除。生信侧你可以检查候选抗原是否含有瓜氨酸化位点以及PADI2在肿瘤样本里的表达。第四跨亚群抗体筛选策略。原文不只从ASC选还从GC、MBC、AtM选发现52%的跨亚群mAb能结合A549细胞表面抗原。这说明肿瘤反应性抗体广泛存在于多个抗原经历过的B细胞亚群。你的筛选策略也应该覆盖这些亚群别只盯着ASC。最后给一个实用技巧整个流程里最耗时的不是跑脚本而是调试环境和排查报错。把模型调用接进来之后遇到报错直接贴进去问比翻GitHub issue快。但记住模型给的建议要自己验证尤其是涉及参数和路径的地方。如果你要长期做这类分析建议把常用脚本模板化Key用环境变量管理每次新数据集只改路径和列名。这样从原始数据到候选抗体列表一两天能跑完一轮。
返回列表