Danbooru标签搜索引擎更新
Danbooru标签搜索引擎更新:支持 MCP 接入,让 AI 直接调用搜索能力

距离上次发文已经过去了一段时间,这期间工具做了不少改动,挑几个值得说的讲一下。
最大的更新:MCP 接口
这次更新里影响最大的,是加了 MCP(Model Context Protocol)接口。
简单说,MCP 是一个让大模型客户端「调用外部工具」的协议。接入之后,Claude Desktop、Cursor、Cherry Studio 这类支持 MCP 的客户端,可以在对话过程中直接调用 Danbooru 标签搜索引擎,不需要你手动打开网页复制粘贴,AI 会在需要的时候自己去查。
接入方式很简单,在客户端的 MCP 配置里加一条:
1 | |
目前提供两个工具:
search_tags:自然语言搜索标签,接受中英文描述,返回匹配标签列表和可直接用于 AI 绘画的 prompt 字符串get_related_tags:给定已选标签列表,基于共现数据推荐搭配标签
工具的参数设计上做了比较仔细的场景化区分,比如
use_segmentation
控制是否拆词(完整画面描述开,精确查词关),top_k
针对不同场景给了推荐值,文档里都有说明。
为什么 MCP 比直接把标签集合塞给 AI 更好用?
这个问题我做了一个量化测试。
实验设计:底模统一使用
DeepSeek-V3-0324(无思考模式)。方案 A 是接入本项目的 MCP
接口,让模型按需调用检索工具;方案 B 是利用该模型的 1M
上下文窗口,直接将完整的 tags_enhanced.csv 标签数据库塞入
prompt,让模型在静态上下文中直接回答。两组输入的 Prompt
完全相同,只有信息获取方式不同。评测模型选用 Gemini 2.5
Pro,对两组输出隐去来源后进行盲评打分,满分 100 分。
测试共 17 组,覆盖完整画面描述(含人设还原)、关联推荐、概念扩展、角色识别、角色特征搜索等五类场景。
得分汇总如下:
| # | 任务类型 | A(MCP) | B(静态注入) | 差值 |
|---|---|---|---|---|
| 1 | 原创人设还原 | 95 | 72 | +23 |
| 2 | 完整画面描述 | 94 | 74 | +20 |
| 3 | 关联推荐 | 100 | 96 | +4 |
| 4 | 概念扩展(武装JK) | 90 | 40 | +50 |
| 5 | 角色识别(星穹铁道) | 95 | 20 | +75 |
| 6 | 完整画面描述(夜景) | 90 | 40 | +50 |
| 7 | 哥特洛丽塔场景 | 95 | 85 | +10 |
| 8 | 深夜便利店场景 | 92 | 65 | +27 |
| 9 | 图书馆阅读场景 | 92 | 72 | +20 |
| 10 | 角色描述搜索(SAO) | 85 | 40 | +45 |
| 11 | 角色识别(原神) | 95 | 45 | +50 |
| 12 | 角色识别(石之门) | 90 | 85 | +5 |
| 13 | 角色特征(初音未来) | 100 | 40 | +60 |
| 14 | 概念扩展(透视感) | 95 | 75 | +20 |
| 15 | 意境扩展(异国街道) | 95 | 90 | +5 |
| 16 | 关联推荐(blood+sword) | 98 | 80 | +18 |
| 17 | 关联推荐(cake+maid) | 98 | 82 | +16 |
| 均值 | 93.5 | 64.8 | +28.7 |
17 组测试 A 全部高于 B。A 均值 94.1(标准差 3.9),B 均值 64.8(标准差 22.5),平均差值 29.3 分(95% CI:[18.3, 40.3])。
以下是各统计指标的计算方式与结果。设 \(n = 17\),\(d_i = A_i - B_i\) 为第 \(i\) 组的得分差值,\(\bar{d}\)、\(s_d\) 分别为差值的均值与标准差。
配对 t 检验检验「两组得分均值是否存在显著差异」的假设,适用于同一批任务上的两种方案对比。统计量为:
\[t = \frac{\bar{d}}{s_d / \sqrt{n}}\]
代入数据:\(\bar{d} = 29.3\),\(s_d = 21.5\),得 \(t(16) = 5.63\),\(p = 3.8 \times 10^{-5}\)。
Wilcoxon 符号秩检验是配对 t 检验的非参数替代,不假设差值服从正态分布,对小样本更稳健。它对所有差值 \(d_i\) 按绝对值排秩,统计量 \(W\) 为正差值对应秩次之和:
\[W = \sum_{i: d_i > 0} R_i\]
其中 \(R_i\) 为 \(|d_i|\) 的秩次。本次 \(W = 153\)(即全部 17 个正差值的秩次之和,等于 \(1+2+\cdots+17 = 153\),意味着没有任何一组 B 优于 A),\(p = 1.4 \times 10^{-4}\)。
符号检验是最简单的非参数检验,仅统计 A 优于 B 的组数,原假设为「A 优于 B 的概率等于 0.5」。若 17 组全部 A 优于 B,在原假设下出现此结果的概率为:
\[p = \left(\frac{1}{2}\right)^{17} \approx 7.6 \times 10^{-6}\]
效应量 Cohen's d衡量两组差异的实际大小,与样本量无关,消除了「样本足够大时任何微小差异都显著」的问题。配对场景下的公式为:
\[d = \frac{\bar{d}}{s_d} = \frac{29.3}{21.5} = 1.37\]
按惯例,\(d > 0.8\) 即为大效应。1.37 表明两种方案的差距在实践中是可以明显感知的,不只是统计上显著。
95% 置信区间给出了均值差的估计范围,基于 \(t\) 分布构造:
\[\bar{d} \pm t_{0.975,\, n-1} \cdot \frac{s_d}{\sqrt{n}} = 29.3 \pm 2.12 \times 5.21 = [18.3,\ 40.3]\]
即在 95% 的置信水平下,MCP 方案相对于静态注入方案的得分优势在 18.3 到 40.3 分之间。
B 的标准差(22.5)远高于 A(3.9),说明静态注入方案的表现高度依赖任务类型,在部分场景下尚可(关联推荐类最高 96 分),在另一些场景下几乎完全失效(角色识别类最低 20 分);MCP 方案在所有任务类型上均保持稳定。
失败模式上,B 的问题在不同任务类型里有明显规律:
角色识别类(第 5、10、11 组) 是差距最大的场景,B
得分分别为 20、40、45。B 在第 5
组(缇宝识别)直接把有三个分身的黄金裔角色答成了「阿格莱雅」,导致整组输出失效;在第
10
组(刀剑神域系统管理员)把正确答案「神代凛子」认成了「桐谷直叶」;在第
11 组(原神厨师香菱)虽然答对角色,但只能提供 cooking
这一个相关特征标签,而 A 命中了
guoba_(genshin_impact)、holding_cooking_pot、chili_pepper
等十余个精确标签。
概念扩展与领域专有标签(第 4 组) 差距达 50 分。B
只能做到 weapon + school_uniform 的字面组合,无法命中
tactical_school_uniform
这个专门描述「战术校服」的领域标签,而这正是语义检索 +
共现索引的核心优势所在。
角色识别(第 5 组) 差距最大,达 75
分。题目是「星穹铁道里有三个分身的可玩黄金裔角色」,B
直接把答案给成了「阿格莱雅」,角色认错导致后续所有特征标签全部失效,得分
20。A 通过检索工具定位到正确角色「缇宝」,命中了
tribbie_(honkai:_star_rail)、triplets、chrysos_heirs_(honkai:_star_rail)、cross-shaped_pupils、laurel_crown
等核心标签,还区分出了三个分身各自的独立标签(trianne_、trinnon_、tribios_)。
完整画面描述类(第 1、2 组) 的差距相对小一些(20~23
分),主要问题是 B 凭空添加未指定的属性(如
blue_eyes、long_sleeves),以及属性降级(high_ponytail
被简化为 ponytail)。
关联推荐类(第 3、16、17 组)两者差距较小,这符合预期——关联推荐本质上是标签推荐而非精确匹配,B 依靠模型自身的语言知识仍能给出合理结果,只是覆盖度和精确度略低。
核心差距不来自模型参数能力,而来自 信息获取方式:实时检索可以访问标签共现结构和角色映射关系,静态数据集注入受限于词表边界,越是依赖图谱关联理解的任务,差距越大。特别是角色识别类任务,B 在这类高度依赖专有知识库的任务上几乎没有胜算。
其他主要更新
推荐打分算法升级
共现推荐的打分从原来的 TF-IDF 惩罚归一化换成了
NPMI(归一化点互信息)。旧方案只惩罚目标标签的热度,不考虑种子标签本身的频率,会导致高频种子标签(如
1girl)推荐出大量只是因为高频而共现的无关标签。NPMI
同时归一化两端,有效过滤掉这类热度驱动的伪相关结果。
意图检测与层权重动态分配
搜索时会先检测输入的语言特征:是中文还是英文、是长句还是短词。根据检测结果,四个检索视图(英文标签、中文扩展词、维基释义、中文核心词)各自分配不同的 top_k 配额。比如输入是长中文句子,释义视图权重会更高;输入是英文短词,英文视图优先。这个逻辑原来是等权处理的,现在按意图动态分配。
REST API 完善
/api/search 和 /api/related
两个端点已经是正式可用的状态,有完整的 Swagger 文档(访问
/api/docs 可查看)。
当前运行数据
工具上线至今运行约 4 个月,累计搜索量 17,000+,累计访问量 33,000+,HuggingFace Space 收到 24 个 Like,GitHub 23 个 Star。
工具地址:https://huggingface.co/spaces/SAkizuki/DanbooruSearch
ComfyUI 插件版:https://github.com/SuzumiyaAkizuki/ComfyUI-DanbooruSearcher
MCP 接入文档:https://github.com/SuzumiyaAkizuki/DanbooruSearchOnline#mcp-接口
如果觉得有用,欢迎点个 Like 或 Star,也可以把链接分享给需要的人。有问题或反馈可以直接在评论区说。