数据库
需要检索 UniProt 蛋白元数据、功能、分类…
在搜索蛋白、映射标识符、获取功能注释与序列时,通过 UniProtKB、UniParc、UniRef 和封装工具完成查询。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要检索 UniProt 蛋白元数据、功特定
解决思路
- 阅读 `uv` skill 并遵循其 Setup 指引,确保 `uv` 已安装并在 PATH 中。
- 如果 workspace 根目录不存在 `.licenses/uniprot_database_LICENSE.txt`,先醒目通知用户查看 https://www.uniprot.org/help/license 和 https://www.uniprot.org/help/api_queries,然后创建该文件记录通知文本和时间戳。
- 始终使用提供的 Python 脚本(如 `scripts/uniprot_tools.py`),不要构造自定义 curl 请求。
- 不要编造蛋白功能、元数据或序列;对技能可处理的任务,严格依赖工具输出而非自身知识。
- 如果使用此技能,确保在输出中提及。
- 搜索蛋白功能时,查询功能注释、GO terms、亚细胞定位等。
- 搜索蛋白序列时,按功能注释、基因等在 UniProtKB、UniParc、UniRef 中搜索序列。
- 理解蛋白/生物关系时,利用 Taxonomy 数据库和 Proteome sets。
- 大规模元数据检索时,通过 streaming 获取数千个蛋白的注释。
- 序列发现时,通过 UniParc 查找 orthologs 或非模式蛋白。
- ID 映射时,在 UniProt 与 100+ 外部数据库之间转换 ID。
- 检索历史数据(UniSave)时,获取 entry 的先前版本或追踪已删除序列。
- 根据任务类型和数据量选择工具。
- 使用 `get` 检索特定 entry 的元数据和序列;最适合单个已知 accession;用 `--dataset unisave` 访问 UniSave 历史数据,用于调和旧 release 数据或判断原有效 accession 不再出现在搜索结果中的原因。
- 使用 `search` 搜索匹配 query 的 entries;最适合探索和发现;用 `--limit 5` 验证 query 是否返回预期蛋白再提交更大下载;结果超过 500 entries 会自动分页以提供稳定下载;注意分页搜索中 TXT 等格式与 `--limit` 不可靠,因为 `--limit` 作用于行而非 entries;参见 references/search_query_fields.md。
- 使用 `stream` 流式输出所有匹配 entries;最适合 bulk retrieval 大型数据集(最多 10,000,000 entries);不支持 `--limit`;总是返回完整结果集;需要子集时使用 `search` 加 `--limit`。
- 使用 `count` 计数匹配 query 的 entries;最适合直接回答计数问题,或在运行完整 `search`/`stream` 前做初始估计。
- 使用 `sparql` 执行图查询以进行复杂发现;最适合计数、精确序列匹配和多数据库查询;参见 references/sparql_examples.md。
- 使用 `map` 在 UniProt 与 100+ 数据库之间转换 ID;最适合 ID 映射任务;参见 references/id_mapping_documentation.md;如果用户未明确要求,先尝试 `search` 再使用 `map`,例如 external ID 可能可在 UniParc 中搜索但无法映射到 UniProtKB。
- 典型蛋白研究工作流 Step 1:识别目标蛋白和生物。
- 典型蛋白研究工作流 Step 2:搜索 UniProtKB 中 reviewed entries(`reviewed:true`)。
- 典型蛋白研究工作流 Step 3:如果没有 reviewed entries,搜索 unreviewed 或使用 UniParc 进行序列发现。
- 典型蛋白研究工作流 Step 4:如有必要,将外部 ID(如 Ensembl、PDB)映射到 UniProt Accessions。
- 典型蛋白研究工作流 Step 5:以所需格式(JSON、FASTA)检索功能元数据或序列。
- 处理 search misses(如非模式生物中的基因搜索):如果直接 query(如 `gene:SYMBOL`)失败,先 pivot 到 protein name,搜索 common protein name(如 `protein_name:Alpha-crystallin A`)。
- 处理 search misses:使用 UniParc,搜索 UniParc dataset,它整合所有生命序列,即使未在 UniProtKB 完整注释。
- 处理 search misses:检查 orthologs/canonical,先解析 Human/Mouse ortholog 以找到正确命名/mnemonic。
- Bulk Retrieval Priorities:始终对 bulk data 优先使用 `stream` 或 `sparql`;`search` 适合探索,超过 500 entries 会自动分页以提供稳定下载。
- Bulk Retrieval Priorities Priority 0 `count`:在运行 `search` 或 `stream` 前始终检查结果数。
- Bulk Retrieval Priorities Priority 1 `stream`:bulk data retrieval 的主要方法(最多 10M entries);不支持 `--limit`;总是返回所有结果。
- Bulk Retrieval Priorities Priority 2 `sparql`:在检索期间最适合复杂过滤和精确匹配。
- Sequence-Based Search(Exact Match):使用 SPARQL 按完整氨基酸序列搜索蛋白;REST API `/search` endpoint 不支持直接 sequence-string lookups;任何非精确匹配使用专门 sequence similarity search skills;如果无法在 UniProt 中找到 query,使用 UniParc。
- Sequence-Based Search(Exact Match)SPARQL Query Pattern(UniProt):PREFIX up: <http://purl.uniprot.org/core/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?protein ?name WHERE { ?protein a up:Protein ; up:sequence/rdf:value 'SEQUENCE_HERE' . OPTIONAL { ?protein up:recommendedName/up:fullName ?name . } }
- Sequence-Based Search(Exact Match)SPARQL Query Pattern(UniParc):PREFIX up: <http://purl.uniprot.org/core/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?uniparc ?val WHERE { GRAPH <http://sparql.uniprot.org/uniparc> { ?uniparc a up:Sequence ; rdf:value ?val . FILTER (?val = 'SEQUENCE_HERE') } }
- Counting Entries Efficiently:使用 `count` 或 `SPARQL` 计数 entries(如 How many proteins in Human?)。
- Counting Pattern(Proteins per Organism):PREFIX up: <http://purl.uniprot.org/core/> PREFIX taxon: <http://purl.uniprot.org/taxonomy/> SELECT (COUNT(?protein) AS ?count) WHERE { ?protein a up:Protein ; up:reviewed true ; up:organism taxon:9606 . }
- REST Search Syntax:列表中不用逗号,逗号被当作 literals;使用大写 `OR` 分隔 items;分组示例 `accession:(P12345 OR P67890)`;重复示例 `accession:P12345 OR accession:P67890`。
- REST Search Syntax:空格 = AND,如 `gene:p53 human` 同时搜索两者。
- 示例命令 count:`uv run scripts/uniprot_tools.py count 'taxonomy_id:9606'`
- 示例命令 search:`uv run scripts/uniprot_tools.py search 'gene:p53 AND reviewed:true' --limit 5`
- 示例命令 get:`uv run scripts/uniprot_tools.py get P04637`
- 示例命令 get 历史/已删除 entry(UniSave):`uv run scripts/uniprot_tools.py get P04637 --dataset unisave`
- 示例命令 stream:`uv run scripts/uniprot_tools.py stream 'taxonomy_id:9606 AND reviewed:true' --format tsv --fields accession,gene_names > human_reviewed.tsv`
- 示例命令 map:`uv run scripts/uniprot_tools.py map 'P04637' --from_db UniProtKB_AC-ID --to_db Gene_Name`
- 示例命令 sparql:`uv run scripts/uniprot_tools.py sparql 'PREFIX up: <http://purl.uniprot.org/core/> SELECT ?protein WHERE { ?protein a up:Protein ; up:reviewed true . } LIMIT 5'`
- 使用 `protein_name:` 而不是不支持的 `name:`。
- 不要忽略 UniParc;非模式生物可能只存在于 UniParc。
- 不要混淆 Accession 与 UPI:UniProtKB Accessions(如 `P04637`)链接到功能元数据;UniParc IDs(`UPI...`)仅用于序列;可用 ID Mapping 工具从 UniParc IDs 找交叉引用到 UniProtKB Accessions。
- ID Mapping 中不要使用 `UniProtKB-AC` 作为 target;使用 `UniProtKB`。
- 复杂查询失败时不要放弃;尝试 SPARQL。
- 不要假设 ID 含义;在使用 ID 搜索前,始终在 UniProt 中查其自然语言描述/含义,确保匹配预期搜索词。
- 不要忽略 broad searches 的 citation noise;广文本搜索 `search 'term'` 常返回 false positives(如常见 maintenance proteins),因为 UniProt 搜索完整元数据包括 publication titles;功能发现优先用字段特定过滤器如 `cc_function:` 或 `protein_name:`。
- 短搜索词要加引号和字段前缀,如 `gene:lanM`;未加引号的短词如 `lanM` 可能匹配生物名称子串(如 Lancefieldella)或其他字段。
- 不要直接手动操作蛋白序列;始终使用代码和工具进行基于序列的操作,不要手动编辑、截断或修改蛋白序列。
- 不要过度用 `search` 做 bulk data;如果 `stream` 或 `sparql` 可做,就不要用 `search` 检索数百万 entries;streaming 对大批量更高效;`stream` 硬限制 10,000,000 输出且不支持 `--limit`。
- 不要忘记检查数据量;在运行无 `--limit` 的 `search` 或使用 `stream` 前始终先 `count`;无限查询可能耗时且消耗大量资源,如果返回数百万 entries。
- 不要对 `stream` 使用 `--limit`;`stream` 不支持 `--limit`;需要有限结果时使用 `search` 加 `--limit`。
- 不要忘记许可通知;首次呈现包含 UniProt 数据的结果时,必须说明使用了 UniProt Database 并建议用户查看 licensing terms;即使任务简短,首次回复包含 UniProt 数据时也必须 attribution。
- 参考材料:查阅 [SPARQL Examples](references/sparql_examples.md)。
- 参考材料:查阅 [Search Query Fields Documentation](references/search_query_fields.md)。
- 参考材料:查阅 [ID Mapping Documentation](references/id_mapping_documentation.md)。
- 参考材料:查阅 [UniProt Evidence Docs](https://www.uniprot.org/help/evidences)。
- 底层 API endpoints:`get`, `search`, `stream`, `count` -> `rest.uniprot.org/{dataset}/`。
- 底层 API endpoints:`map` -> `rest.uniprot.org/idmapping/`。
- 底层 API endpoints:`sparql` -> `sparql.uniprot.org/sparql`。
- 底层 API endpoints:`get --dataset unisave` -> `rest.uniprot.org/unisave/`。
适用边界 · 注意事项
- 不要用于序列比对、蛋白折叠或序列相似性搜索;这些任务应使用专门的技能/工具。