如何为mLLMCelltype注册自定义LLM模型与提供商:扩展细胞类型注释的完整教程
【免费下载链接】mLLMCelltypeCell type annotation for single-cell RNA-seq using multi-LLM consensus项目地址: https://gitcode.com/gh_mirrors/ml/mLLMCelltype
mLLMCelltype是一款基于多 LLM 共识(Multi-LLM Consensus)的单细胞 RNA-seq 细胞类型注释工具:它把多个大语言模型的预测结果汇总投票,为 scRNA-seq 数据的每个细胞簇给出更可靠的细胞类型标签。除了内置的 OpenAI、Anthropic、DeepSeek、Gemini 等主流模型外,它还支持注册自定义 LLM 模型与提供商——无论是你自己部署的开源大模型,还是新发布、尚未被内置支持的模型,都可以在几分钟内接入注释流程。本教程将带你从零完成注册。
为什么需要注册自定义模型?
mLLMCelltype 内置了11 个 LLM 提供商,通过模型名前缀自动路由请求,常见前缀如下:
| 内置提供商 | 可识别的模型名前缀 |
|---|---|
| OpenAI | gpt-*、o1/o3/o4、codex-* |
| Anthropic | claude-* |
| DeepSeek | deepseek-* |
| Gemini | gemini-* |
| 通义千问 | qwen*、qwq-* |
| 阶跃星辰 | step-* |
| 智谱 | glm-*、chatglm* |
| MiniMax | minimax-* |
| Grok | grok-* |
| Kimi(月之暗面) | kimi-*、moonshot-* |
| OpenRouter | 名称中含/的任意模型 |
路由逻辑由 get_provider() 函数实现:它先检查模型名是否已注册为自定义模型,再依次匹配内置前缀。当模型名既不在上表、也未注册时,工具会报出 "Cannot determine provider" 错误——这正是自定义注册最常见的触发场景。
以下三类需求是注册自定义模型的典型动机:
- 🏠自托管模型:用 vLLM、Ollama 等在本地或内网部署的开源大模型;
- 🆕新发布模型:命名不符合内置前缀规则,尚未被官方收录;
- 🏢企业 API 网关:通过统一代理出口调用多家厂商的模型服务。
注册核心机制:两个函数两步走
整个注册流程只依赖两个函数(源码见 custom_model_manager.R):
register_custom_provider(provider_name, process_fn, description = NULL)注册一个自定义提供商,核心是提交一个处理函数process_fn。register_custom_model(model_name, provider_name, model_config = list())在该提供商下注册一个自定义模型,可附带temperature、max_tokens等配置。
💡三个关键约定,注册前务必了解:
process_fn必须接受prompt、model、api_key三个参数(可选再接受model_config和base_url),并返回模型响应文本;- 名称会被自动转为小写,且只能包含字母、数字、点号、下划线、连字符;
- 内置提供商名(如
openai、claude)为保留名,不能重复注册。
注册成功后,get_provider()会自动把该模型名的请求路由到你的process_fn,后续注释调用无需任何改动。
三步注册教程
以接入一个OpenAI 兼容端点(如自托管的 vLLM 服务)为例。
第一步:编写模型处理函数
处理函数负责把 prompt 发给你自己的 API 端点,并返回响应文本:
my_process_fn <- function(prompt, model, api_key) { response <- httr::POST( url = "http://localhost:8000/v1/chat/completions", body = list(model = model, messages = list(list(role = "user", content = prompt))), httr::add_headers(Authorization = paste("Bearer", api_key)), encode = "json" ) httr::content(response)$choices[[1]]$message$ }⚠️ 返回的必须是字符型文本,mLLMCelltype 内置的响应解析器会负责从中提取细胞类型标签,你不需要做任何后处理。
第二步:注册自定义提供商
register_custom_provider( provider_name = "my_llm", process_fn = my_process_fn, description = "My self-hosted LLM service" )第三步:注册自定义模型
register_custom_model( model_name = "my-local-model", provider_name = "my_llm", model_config = list(temperature = 0.7, max_tokens = 2000) )直接用于细胞类型注释
注册完成后,自定义模型与内置模型用法完全一致:
results <- annotate_cell_types( input = your_markers, tissue_name = "human PBMC", model = "my-local-model", api_key = "your-api-key" )你同样可以把它放进多模型共识流程中,与gpt-5.5、claude-sonnet-4-6等内置模型一起投票,进一步提升注释稳健性。
查看与管理已注册的模型
注册信息保存在当前 R 会话中(重启会话后需重新注册)。用下面两个函数即可随时核查:
list_custom_providers() # 已注册的自定义提供商 list_custom_models() # 已注册的自定义模型常见问题排查
| 报错信息 | 原因与解决办法 |
|---|---|
Provider 'xxx' is reserved for a built-in provider | 名称与内置提供商冲突,换一个名称即可 |
process_fn must accept parameters: prompt, model, api_key | 处理函数缺少必需参数,请补齐三个形参 |
Provider 'xxx' does not exist | 模型注册前必须先注册提供商,注意顺序 |
Model 'xxx' already exists | 同名模型重复注册,改名为my-local-model-v2之类 |
自定义模型报does not accept base_url | 传了base_url但函数未声明该参数,给process_fn加上base_url = NULL形参 |
另外请注意:自定义注册功能目前由 R 版提供(见 R/vignettes/advanced-features.Rmd 的 "Custom Processing Functions" 一节);Python 版(python/mllmcelltype/config.py)采用固定的提供商配置表,暂不支持动态注册。
小结
为 mLLMCelltype 接入新模型只需三步:写好接受prompt / model / api_key的处理函数 →register_custom_provider()注册提供商 →register_custom_model()注册模型。之后,你的自定义 LLM 就能与内置模型一样参与单细胞细胞类型注释与多模型共识投票,让工具真正适配你的私有算力与最新模型生态。🚀
【免费下载链接】mLLMCelltypeCell type annotation for single-cell RNA-seq using multi-LLM consensus项目地址: https://gitcode.com/gh_mirrors/ml/mLLMCelltype
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考