Danbooru标签语义搜索服务器

提供基于自然语言查询的Danbooru标签语义搜索功能,支持日英双语,适用于AI图像生成标签优化。

  • by Zaozaotvk40
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 Zaozaotvk40/danbooru-rag-mcp

使用说明

Danbooru标签RAG MCP服务器

一种MCP(Model Context Protocol)服务器,提供Danbooru标记语义搜索。

概要

此MCP服务器提供了从自然语言查询中搜索Danbooru标记的功能。因为SDXL动画模型是在DanbooruTag中学习的,所以使用适当的标签可以提高图像生成的精度。

特徴

  • 语义搜索:查找在语义上相关的标签,而不是关键字匹配
  • 日本语・英语对应:多语言支持multilingual-e5-small模型
  • 本地运行:完全在本地运行,不使用外部API
  • 軽量:使用LanceDB进行有效的矢量搜索

技术栈

|组件|技术|原因| |---------------|------|------| |MCP SDK|mcp(官方SDK)|标准协议依据| |矢量数据库|轻量,最适合本地执行| 嵌入式模型日英兼容、高精度、CPU兼容 |软件包管理|现代高速|

安装

Claude Desktop的配置文件(claude_desktop_config.json)中添加以下内容:

{
  "mcpServers": {
    "danbooru-rag": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/Zaozaotvk40/danbooru-rag-mcp.git", "danbooru-rag-mcp"]
    }
  }
}

首次启动时将自动构建索引(约60000个标记,需要几分钟)。

使用例

在Claude Desktop中启用该工具后,可以使用自然语言请求生成提示。

例1:角色描写

あなた: 「青い髪のツインテールの女の子が魔法を使っているシーンのプロンプトを作って」

Claude: semantic_searchで関連タグを検索し、以下のようなプロンプトを生成します:
→ 1girl, blue hair, twintails, magic, casting spell, glowing, magical effects, ...

示例2:风景场景

あなた: 「夕焼けのファンタジー風景のプロンプトをお願い」

Claude: 関連タグを検索して組み合わせます:
→ scenery, sunset, fantasy, sky, clouds, orange sky, landscape, no humans, ...

示例3:复杂场景

あなた: 「カフェで本を読んでいる眼鏡の女の子、窓から光が差し込んでいる感じで」

Claude: 複数の要素を検索して統合します:
→ 1girl, glasses, book, reading, cafe, indoors, window, sunlight, sitting, ...

Claude将自动使用semantic_search工具创建基于Danbooru-标记的图像生成提示。

项目结构

danbooru-rag-mcp/
├── README.md                 # このファイル
├── pyproject.toml            # パッケージ設定
├── danbooru-tags.txt         # ソースデータ
├── src/
│   └── danbooru_rag/
│       ├── __init__.py       # パッケージ初期化
│       ├── __main__.py       # モジュールエントリーポイント
│       ├── config.py         # 設定定数
│       ├── embeddings.py     # 埋め込み生成
│       ├── database.py       # LanceDB操作
│       ├── builder.py        # インデックス自動構築
│       └── server.py         # MCPサーバー本体
├── scripts/
│   └── build_index.py        # インデックス手動構築
└── tests/
    └── ...                   # テスト

数据库目标:

  • 窗户: %LOCALAPPDATA%\danbooru-rag\lancedb
  • macOS: ~/Library/Application Support/danbooru-rag/lancedb
  • Linux: ~/.local/share/danbooru-rag/lancedb

设计判断

为什么是multilingual-e5-small?

  1. 日本语・英语両对应:允许用户查询任何语言
  2. 高精度:基准分数高于all-MiniLM-L6-v2
  3. CPU対応:即使没有GPU也能以实用的速度动作
  4. E5前缀:query:/passage:通过前缀提高精度

为什么LanceDB?

  1. 不需要服务器:最适合基于文件的本地运行
  2. Python本地:易于安装和使用
  3. 高速:优化向量搜索

为什么过滤出现频率100以下?

  1. 学习数据质量:低频标记对SDXL模型的学习不够
  2. 索引效率:99999件→减少到约60000件
  3. 検索精度向上:排除干扰的低频标记

开発

测试运行

uv run pytest tests/

编码质量

# 型チェック
uv run mypy src/

# フォーマット
uv run ruff format src/

# リント
uv run ruff check src/

许可证

MIT许可证

数据源

danbooru-tags.txt 啊 ComfyUI自定义脚本 中使用的以下数据为基础:

https://gist.githubusercontent.com/pythongosssss/1d3efa6050356a08cea975183088159a/raw/a18fb2f94f9156cf4476b0c24a09544d6c0baec6/danbooru-tags.txt

原始标记名称以下划线分隔(例如: blue_hair),但在本项目中以空格分隔(例如: blue hair),模板名称将采用不同的格式。

谢辞