[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KW97FGAPM6MBYVADSGTGV1":3,"skill-same:01M6KW97FGAPM6MBYVADSGTGV1":92},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":13,"repositoryHtmlUrl":65,"repositoryHomepageUrl":6,"ownerHtmlUrl":66,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":67,"install":68,"resources":81},"01M6KW97FGAPM6MBYVADSGTGV1","blip-2-vision-language",null,"Vision-language pre-training framework bridging frozen image encoders and LLMs. Use when you need image captioning, visual question answering, image-text retrieval, or multimodal chat with state-of-the-art zero-shot performance.","endman100\u002Fskill-router-nexus","endman100","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F31997019?v=4","01M6KPDX17BYDWW4RRB0TNGGMX","01M6KPDX64Y2QBEWVFG5W5PWPF",0,"MIT","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FImage-Recognition\u002Fblip-2\u002Fblip-2\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"blip 2","blip 2 vision language","vision","language","Art","when","captioning","orchestra","pillow","you","Training Framework","bridging","image","question","text","Transformers","ZeRO","multimodal","framework","training","performance","llms","2026-11-10 10:12:30",false,"---\nname: blip-2-vision-language\ndescription: Vision-language pre-training framework bridging frozen image encoders and LLMs. Use when you need image captioning, visual question answering, image-text retrieval, or multimodal chat with state-of-the-art zero-shot performance.\nversion: 1.0.0\nauthor: Orchestra Research\nlicense: MIT\ntags: [Multimodal, Vision-Language, Image Captioning, VQA, Zero-Shot]\ndependencies: [transformers>=4.30.0, torch>=1.10.0, Pillow]\n---\n\n# BLIP-2: Vision-Language Pre-training\n\nComprehensive guide to using Salesforce's BLIP-2 for vision-language tasks with frozen image encoders and large language models.\n\n## When to use BLIP-2\n\n**Use BLIP-2 when:**\n- Need high-quality image captioning with natural descriptions\n- Building visual question answering (VQA) systems\n- Require zero-shot image-text understanding without task-specific training\n- Want to leverage LLM reasoning for visual tasks\n- Building multimodal conversational AI\n- Need image-text retrieval or matching\n\n**Key features:**\n- **Q-Former architecture**: Lightweight query transformer bridges vision and language\n- **Frozen backbone efficiency**: No need to fine-tune large vision\u002Flanguage models\n- **Multiple LLM backends**: OPT (2.7B, 6.7B) and FlanT5 (XL, XXL)\n- **Zero-shot capabilities**: Strong performance without task-specific training\n- **Efficient training**: Only trains Q-Former (~188M parameters)\n- **State-of-the-art results**: Beats larger models on VQA benchmarks\n\n**Use alternatives instead:**\n- **LLaVA**: For instruction-following multimodal chat\n- **InstructBLIP**: For improved instruction-following (BLIP-2 successor)\n- **GPT-4V\u002FClaude 3**: For production multimodal chat (proprietary)\n- **CLIP**: For simple image-text similarity without generation\n- **Flamingo**: For few-shot visual learning\n\n## Quick start\n\n### Installation\n\n```bash\n# HuggingFace Transformers (recommended)\npip install transformers accelerate torch Pillow\n\n# Or LAVIS library (Salesforce official)\npip install salesforce-lavis\n```\n\n### Basic image captioning\n\n```python\nimport torch\nfrom PIL import Image\nfrom transformers import Blip2Processor, Blip2ForConditionalGeneration\n\n# Load model and processor\nprocessor = Blip2Processor.from_pretrained(\"Salesforce\u002Fblip2-opt-2.7b\")\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-opt-2.7b\",\n    torch_dtype=torch.float16,\n    device_map=\"auto\"\n)\n\n# Load image\nimage = Image.open(\"photo.jpg\").convert(\"RGB\")\n\n# Generate caption\ninputs = processor(images=image, return_tensors=\"pt\").to(\"cuda\", torch.float16)\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\ncaption = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]\nprint(caption)\n```\n\n### Visual question answering\n\n```python\n# Ask a question about the image\nquestion = \"What color is the car in this image?\"\n\ninputs = processor(images=image, text=question, return_tensors=\"pt\").to(\"cuda\", torch.float16)\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\nanswer = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]\nprint(answer)\n```\n\n### Using LAVIS library\n\n```python\nimport torch\nfrom lavis.models import load_model_and_preprocess\nfrom PIL import Image\n\n# Load model\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nmodel, vis_processors, txt_processors = load_model_and_preprocess(\n    name=\"blip2_opt\",\n    model_type=\"pretrain_opt2.7b\",\n    is_eval=True,\n    device=device\n)\n\n# Process image\nimage = Image.open(\"photo.jpg\").convert(\"RGB\")\nimage = vis_processors[\"eval\"](image).unsqueeze(0).to(device)\n\n# Caption\ncaption = model.generate({\"image\": image})\nprint(caption)\n\n# VQA\nquestion = txt_processors[\"eval\"](\"What is in this image?\")\nanswer = model.generate({\"image\": image, \"prompt\": question})\nprint(answer)\n```\n\n## Core concepts\n\n### Architecture overview\n\n```\nBLIP-2 Architecture:\n┌─────────────────────────────────────────────────────────────┐\n│                        Q-Former                              │\n│  ┌─────────────────────────────────────────────────────┐    │\n│  │     Learned Queries (32 queries × 768 dim)          │    │\n│  └────────────────────────┬────────────────────────────┘    │\n│                           │                                  │\n│  ┌────────────────────────▼────────────────────────────┐    │\n│  │    Cross-Attention with Image Features               │    │\n│  └────────────────────────┬────────────────────────────┘    │\n│                           │                                  │\n│  ┌────────────────────────▼────────────────────────────┐    │\n│  │    Self-Attention Layers (Transformer)               │    │\n│  └────────────────────────┬────────────────────────────┘    │\n└───────────────────────────┼─────────────────────────────────┘\n                            │\n┌───────────────────────────▼─────────────────────────────────┐\n│  Frozen Vision Encoder    │      Frozen LLM                  │\n│  (ViT-G\u002F14 from EVA-CLIP) │      (OPT or FlanT5)            │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### Model variants\n\n| Model | LLM Backend | Size | Use Case |\n|-------|-------------|------|----------|\n| `blip2-opt-2.7b` | OPT-2.7B | ~4GB | General captioning, VQA |\n| `blip2-opt-6.7b` | OPT-6.7B | ~8GB | Better reasoning |\n| `blip2-flan-t5-xl` | FlanT5-XL | ~5GB | Instruction following |\n| `blip2-flan-t5-xxl` | FlanT5-XXL | ~13GB | Best quality |\n\n### Q-Former components\n\n| Component | Description | Parameters |\n|-----------|-------------|------------|\n| Learned queries | Fixed set of learnable embeddings | 32 × 768 |\n| Image transformer | Cross-attention to vision features | ~108M |\n| Text transformer | Self-attention for text | ~108M |\n| Linear projection | Maps to LLM dimension | Varies |\n\n## Advanced usage\n\n### Batch processing\n\n```python\nfrom PIL import Image\nimport torch\n\n# Load multiple images\nimages = [Image.open(f\"image_{i}.jpg\").convert(\"RGB\") for i in range(4)]\nquestions = [\n    \"What is shown in this image?\",\n    \"Describe the scene.\",\n    \"What colors are prominent?\",\n    \"Is there a person in this image?\"\n]\n\n# Process batch\ninputs = processor(\n    images=images,\n    text=questions,\n    return_tensors=\"pt\",\n    padding=True\n).to(\"cuda\", torch.float16)\n\n# Generate\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\nanswers = processor.batch_decode(generated_ids, skip_special_tokens=True)\n\nfor q, a in zip(questions, answers):\n    print(f\"Q: {q}\\nA: {a}\\n\")\n```\n\n### Controlling generation\n\n```python\n# Control generation parameters\ngenerated_ids = model.generate(\n    **inputs,\n    max_new_tokens=100,\n    min_length=20,\n    num_beams=5,              # Beam search\n    no_repeat_ngram_size=2,   # Avoid repetition\n    top_p=0.9,                # Nucleus sampling\n    temperature=0.7,          # Creativity\n    do_sample=True,           # Enable sampling\n)\n\n# For deterministic output\ngenerated_ids = model.generate(\n    **inputs,\n    max_new_tokens=50,\n    num_beams=5,\n    do_sample=False,\n)\n```\n\n### Memory optimization\n\n```python\n# 8-bit quantization\nfrom transformers import BitsAndBytesConfig\n\nquantization_config = BitsAndBytesConfig(load_in_8bit=True)\n\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-opt-6.7b\",\n    quantization_config=quantization_config,\n    device_map=\"auto\"\n)\n\n# 4-bit quantization (more aggressive)\nquantization_config = BitsAndBytesConfig(\n    load_in_4bit=True,\n    bnb_4bit_compute_dtype=torch.float16\n)\n\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-flan-t5-xxl\",\n    quantization_config=quantization_config,\n    device_map=\"auto\"\n)\n```\n\n### Image-text matching\n\n```python\n# Using LAVIS for ITM (Image-Text Matching)\nfrom lavis.models import load_model_and_preprocess\n\nmodel, vis_processors, txt_processors = load_model_and_preprocess(\n    name=\"blip2_image_text_matching\",\n    model_type=\"pretrain\",\n    is_eval=True,\n    device=device\n)\n\nimage = vis_processors[\"eval\"](raw_image).unsqueeze(0).to(device)\ntext = txt_processors[\"eval\"](\"a dog sitting on grass\")\n\n# Get matching score\nitm_output = model({\"image\": image, \"text_input\": text}, match_head=\"itm\")\nitm_scores = torch.nn.functional.softmax(itm_output, dim=1)\nprint(f\"Match probability: {itm_scores[:, 1].item():.3f}\")\n```\n\n### Feature extraction\n\n```python\n# Extract image features with Q-Former\nfrom lavis.models import load_model_and_preprocess\n\nmodel, vis_processors, _ = load_model_and_preprocess(\n    name=\"blip2_feature_extractor\",\n    model_type=\"pretrain\",\n    is_eval=True,\n    device=device\n)\n\nimage = vis_processors[\"eval\"](raw_image).unsqueeze(0).to(device)\n\n# Get features\nfeatures = model.extract_features({\"image\": image}, mode=\"image\")\nimage_embeds = features.image_embeds  # Shape: [1, 32, 768]\nimage_features = features.image_embeds_proj  # Projected for matching\n```\n\n## Common workflows\n\n### Workflow 1: Image captioning pipeline\n\n```python\nimport torch\nfrom PIL import Image\nfrom transformers import Blip2Processor, Blip2ForConditionalGeneration\nfrom pathlib import Path\n\nclass ImageCaptioner:\n    def __init__(self, model_name=\"Salesforce\u002Fblip2-opt-2.7b\"):\n        self.processor = Blip2Processor.from_pretrained(model_name)\n        self.model = Blip2ForConditionalGeneration.from_pretrained(\n            model_name,\n            torch_dtype=torch.float16,\n            device_map=\"auto\"\n        )\n\n    def caption(self, image_path: str, prompt: str = None) -> str:\n        image = Image.open(image_path).convert(\"RGB\")\n\n        if prompt:\n            inputs = self.processor(images=image, text=prompt, return_tensors=\"pt\")\n        else:\n            inputs = self.processor(images=image, return_tensors=\"pt\")\n\n        inputs = inputs.to(\"cuda\", torch.float16)\n\n        generated_ids = self.model.generate(\n            **inputs,\n            max_new_tokens=50,\n            num_beams=5\n        )\n\n        return self.processor.decode(generated_ids[0], skip_special_tokens=True)\n\n    def caption_batch(self, image_paths: list, prompt: str = None) -> list:\n        images = [Image.open(p).convert(\"RGB\") for p in image_paths]\n\n        if prompt:\n            inputs = self.processor(\n                images=images,\n                text=[prompt] * len(images),\n                return_tensors=\"pt\",\n                padding=True\n            )\n        else:\n            inputs = self.processor(images=images, return_tensors=\"pt\", padding=True)\n\n        inputs = inputs.to(\"cuda\", torch.float16)\n\n        generated_ids = self.model.generate(**inputs, max_new_tokens=50)\n        return self.processor.batch_decode(generated_ids, skip_special_tokens=True)\n\n# Usage\ncaptioner = ImageCaptioner()\n\n# Single image\ncaption = captioner.caption(\"photo.jpg\")\nprint(f\"Caption: {caption}\")\n\n# With prompt for style\ncaption = captioner.caption(\"photo.jpg\", \"a detailed description of\")\nprint(f\"Detailed: {caption}\")\n\n# Batch processing\ncaptions = captioner.caption_batch([\"img1.jpg\", \"img2.jpg\", \"img3.jpg\"])\nfor i, cap in enumerate(captions):\n    print(f\"Image {i+1}: {cap}\")\n```\n\n### Workflow 2: Visual Q&A system\n\n```python\nclass VisualQA:\n    def __init__(self, model_name=\"Salesforce\u002Fblip2-flan-t5-xl\"):\n        self.processor = Blip2Processor.from_pretrained(model_name)\n        self.model = Blip2ForConditionalGeneration.from_pretrained(\n            model_name,\n            torch_dtype=torch.float16,\n            device_map=\"auto\"\n        )\n        self.current_image = None\n        self.current_inputs = None\n\n    def set_image(self, image_path: str):\n        \"\"\"Load image for multiple questions.\"\"\"\n        self.current_image = Image.open(image_path).convert(\"RGB\")\n\n    def ask(self, question: str) -> str:\n        \"\"\"Ask a question about the current image.\"\"\"\n        if self.current_image is None:\n            raise ValueError(\"No image set. Call set_image() first.\")\n\n        # Format question for FlanT5\n        prompt = f\"Question: {question} Answer:\"\n\n        inputs = self.processor(\n            images=self.current_image,\n            text=prompt,\n            return_tensors=\"pt\"\n        ).to(\"cuda\", torch.float16)\n\n        generated_ids = self.model.generate(\n            **inputs,\n            max_new_tokens=50,\n            num_beams=5\n        )\n\n        return self.processor.decode(generated_ids[0], skip_special_tokens=True)\n\n    def ask_multiple(self, questions: list) -> dict:\n        \"\"\"Ask multiple questions about current image.\"\"\"\n        return {q: self.ask(q) for q in questions}\n\n# Usage\nvqa = VisualQA()\nvqa.set_image(\"scene.jpg\")\n\n# Ask questions\nprint(vqa.ask(\"What objects are in this image?\"))\nprint(vqa.ask(\"What is the weather like?\"))\nprint(vqa.ask(\"How many people are there?\"))\n\n# Batch questions\nresults = vqa.ask_multiple([\n    \"What is the main subject?\",\n    \"What colors are dominant?\",\n    \"Is this indoors or outdoors?\"\n])\n```\n\n### Workflow 3: Image search\u002Fretrieval\n\n```python\nimport torch\nimport numpy as np\nfrom PIL import Image\nfrom lavis.models import load_model_and_preprocess\n\nclass ImageSearchEngine:\n    def __init__(self):\n        self.device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n        self.model, self.vis_processors, self.txt_processors = load_model_and_preprocess(\n            name=\"blip2_feature_extractor\",\n            model_type=\"pretrain\",\n            is_eval=True,\n            device=self.device\n        )\n        self.image_features = []\n        self.image_paths = []\n\n    def index_images(self, image_paths: list):\n        \"\"\"Build index from images.\"\"\"\n        self.image_paths = image_paths\n\n        for path in image_paths:\n            image = Image.open(path).convert(\"RGB\")\n            image = self.vis_processors[\"eval\"](image).unsqueeze(0).to(self.device)\n\n            with torch.no_grad():\n                features = self.model.extract_features({\"image\": image}, mode=\"image\")\n                # Use projected features for matching\n                self.image_features.append(\n                    features.image_embeds_proj.mean(dim=1).cpu().numpy()\n                )\n\n        self.image_features = np.vstack(self.image_features)\n\n    def search(self, query: str, top_k: int = 5) -> list:\n        \"\"\"Search images by text query.\"\"\"\n        # Get text features\n        text = self.txt_processors[\"eval\"](query)\n        text_input = {\"text_input\": [text]}\n\n        with torch.no_grad():\n            text_features = self.model.extract_features(text_input, mode=\"text\")\n            text_embeds = text_features.text_embeds_proj[:, 0].cpu().numpy()\n\n        # Compute similarities\n        similarities = np.dot(self.image_features, text_embeds.T).squeeze()\n        top_indices = np.argsort(similarities)[::-1][:top_k]\n\n        return [(self.image_paths[i], similarities[i]) for i in top_indices]\n\n# Usage\nengine = ImageSearchEngine()\nengine.index_images([\"img1.jpg\", \"img2.jpg\", \"img3.jpg\", ...])\n\n# Search\nresults = engine.search(\"a sunset over the ocean\", top_k=5)\nfor path, score in results:\n    print(f\"{path}: {score:.3f}\")\n```\n\n## Output format\n\n### Generation output\n\n```python\n# Direct generation returns token IDs\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\n# Shape: [batch_size, sequence_length]\n\n# Decode to text\ntext = processor.batch_decode(generated_ids, skip_special_tokens=True)\n# Returns: list of strings\n```\n\n### Feature extraction output\n\n```python\n# Q-Former outputs\nfeatures = model.extract_features({\"image\": image}, mode=\"image\")\n\nfeatures.image_embeds          # [B, 32, 768] - Q-Former outputs\nfeatures.image_embeds_proj     # [B, 32, 256] - Projected for matching\nfeatures.text_embeds          # [B, seq_len, 768] - Text features\nfeatures.text_embeds_proj     # [B, 256] - Projected text (CLS)\n```\n\n## Performance optimization\n\n### GPU memory requirements\n\n| Model | FP16 VRAM | INT8 VRAM | INT4 VRAM |\n|-------|-----------|-----------|-----------|\n| blip2-opt-2.7b | ~8GB | ~5GB | ~3GB |\n| blip2-opt-6.7b | ~16GB | ~9GB | ~5GB |\n| blip2-flan-t5-xl | ~10GB | ~6GB | ~4GB |\n| blip2-flan-t5-xxl | ~26GB | ~14GB | ~8GB |\n\n### Speed optimization\n\n```python\n# Use Flash Attention if available\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-opt-2.7b\",\n    torch_dtype=torch.float16,\n    attn_implementation=\"flash_attention_2\",  # Requires flash-attn\n    device_map=\"auto\"\n)\n\n# Compile model (PyTorch 2.0+)\nmodel = torch.compile(model)\n\n# Use smaller images (if quality allows)\nprocessor = Blip2Processor.from_pretrained(\"Salesforce\u002Fblip2-opt-2.7b\")\n# Default is 224x224, which is optimal\n```\n\n## Common issues\n\n| Issue | Solution |\n|-------|----------|\n| CUDA OOM | Use INT8\u002FINT4 quantization, smaller model |\n| Slow generation | Use greedy decoding, reduce max_new_tokens |\n| Poor captions | Try FlanT5 variant, use prompts |\n| Hallucinations | Lower temperature, use beam search |\n| Wrong answers | Rephrase question, provide context |\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Fine-tuning, integration, deployment\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues and solutions\n\n## Resources\n\n- **Paper**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2301.12597\n- **GitHub (LAVIS)**: https:\u002F\u002Fgithub.com\u002Fsalesforce\u002FLAVIS\n- **HuggingFace**: https:\u002F\u002Fhuggingface.co\u002FSalesforce\u002Fblip2-opt-2.7b\n- **Demo**: https:\u002F\u002Fhuggingface.co\u002Fspaces\u002FSalesforce\u002FBLIP2\n- **InstructBLIP**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.06500 (successor)\n","# BLIP-2: Vision-Language Pre-training\n\nComprehensive guide to using Salesforce's BLIP-2 for vision-language tasks with frozen image encoders and large language models.\n\n## When to use BLIP-2\n\n**Use BLIP-2 when:**\n- Need high-quality image captioning with natural descriptions\n- Building visual question answering (VQA) systems\n- Require zero-shot image-text understanding without task-specific training\n- Want to leverage LLM reasoning for visual tasks\n- Building multimodal conversational AI\n- Need image-text retrieval or matching\n\n**Key features:**\n- **Q-Former architecture**: Lightweight query transformer bridges vision and language\n- **Frozen backbone efficiency**: No need to fine-tune large vision\u002Flanguage models\n- **Multiple LLM backends**: OPT (2.7B, 6.7B) and FlanT5 (XL, XXL)\n- **Zero-shot capabilities**: Strong performance without task-specific training\n- **Efficient training**: Only trains Q-Former (~188M parameters)\n- **State-of-the-art results**: Beats larger models on VQA benchmarks\n\n**Use alternatives instead:**\n- **LLaVA**: For instruction-following multimodal chat\n- **InstructBLIP**: For improved instruction-following (BLIP-2 successor)\n- **GPT-4V\u002FClaude 3**: For production multimodal chat (proprietary)\n- **CLIP**: For simple image-text similarity without generation\n- **Flamingo**: For few-shot visual learning\n\n## Quick start\n\n### Installation\n\n```bash\n# HuggingFace Transformers (recommended)\npip install transformers accelerate torch Pillow\n\n# Or LAVIS library (Salesforce official)\npip install salesforce-lavis\n```\n\n### Basic image captioning\n\n```python\nimport torch\nfrom PIL import Image\nfrom transformers import Blip2Processor, Blip2ForConditionalGeneration\n\n# Load model and processor\nprocessor = Blip2Processor.from_pretrained(\"Salesforce\u002Fblip2-opt-2.7b\")\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-opt-2.7b\",\n    torch_dtype=torch.float16,\n    device_map=\"auto\"\n)\n\n# Load image\nimage = Image.open(\"photo.jpg\").convert(\"RGB\")\n\n# Generate caption\ninputs = processor(images=image, return_tensors=\"pt\").to(\"cuda\", torch.float16)\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\ncaption = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]\nprint(caption)\n```\n\n### Visual question answering\n\n```python\n# Ask a question about the image\nquestion = \"What color is the car in this image?\"\n\ninputs = processor(images=image, text=question, return_tensors=\"pt\").to(\"cuda\", torch.float16)\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\nanswer = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]\nprint(answer)\n```\n\n### Using LAVIS library\n\n```python\nimport torch\nfrom lavis.models import load_model_and_preprocess\nfrom PIL import Image\n\n# Load model\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nmodel, vis_processors, txt_processors = load_model_and_preprocess(\n    name=\"blip2_opt\",\n    model_type=\"pretrain_opt2.7b\",\n    is_eval=True,\n    device=device\n)\n\n# Process image\nimage = Image.open(\"photo.jpg\").convert(\"RGB\")\nimage = vis_processors[\"eval\"](image).unsqueeze(0).to(device)\n\n# Caption\ncaption = model.generate({\"image\": image})\nprint(caption)\n\n# VQA\nquestion = txt_processors[\"eval\"](\"What is in this image?\")\nanswer = model.generate({\"image\": image, \"prompt\": question})\nprint(answer)\n```\n\n## Core concepts\n\n### Architecture overview\n\n```\nBLIP-2 Architecture:\n┌─────────────────────────────────────────────────────────────┐\n│                        Q-Former                              │\n│  ┌─────────────────────────────────────────────────────┐    │\n│  │     Learned Queries (32 queries × 768 dim)          │    │\n│  └────────────────────────┬────────────────────────────┘    │\n│                           │                                  │\n│  ┌────────────────────────▼────────────────────────────┐    │\n│  │    Cross-Attention with Image Features               │    │\n│  └────────────────────────┬────────────────────────────┘    │\n│                           │                                  │\n│  ┌────────────────────────▼────────────────────────────┐    │\n│  │    Self-Attention Layers (Transformer)               │    │\n│  └────────────────────────┬────────────────────────────┘    │\n└───────────────────────────┼─────────────────────────────────┘\n                            │\n┌───────────────────────────▼─────────────────────────────────┐\n│  Frozen Vision Encoder    │      Frozen LLM                  │\n│  (ViT-G\u002F14 from EVA-CLIP) │      (OPT or FlanT5)            │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### Model variants\n\n| Model | LLM Backend | Size | Use Case |\n|-------|-------------|------|----------|\n| `blip2-opt-2.7b` | OPT-2.7B | ~4GB | General captioning, VQA |\n| `blip2-opt-6.7b` | OPT-6.7B | ~8GB | Better reasoning |\n| `blip2-flan-t5-xl` | FlanT5-XL | ~5GB | Instruction following |\n| `blip2-flan-t5-xxl` | FlanT5-XXL | ~13GB | Best quality |\n\n### Q-Former components\n\n| Component | Description | Parameters |\n|-----------|-------------|------------|\n| Learned queries | Fixed set of learnable embeddings | 32 × 768 |\n| Image transformer | Cross-attention to vision features | ~108M |\n| Text transformer | Self-attention for text | ~108M |\n| Linear projection | Maps to LLM dimension | Varies |\n\n## Advanced usage\n\n### Batch processing\n\n```python\nfrom PIL import Image\nimport torch\n\n# Load multiple images\nimages = [Image.open(f\"image_{i}.jpg\").convert(\"RGB\") for i in range(4)]\nquestions = [\n    \"What is shown in this image?\",\n    \"Describe the scene.\",\n    \"What colors are prominent?\",\n    \"Is there a person in this image?\"\n]\n\n# Process batch\ninputs = processor(\n    images=images,\n    text=questions,\n    return_tensors=\"pt\",\n    padding=True\n).to(\"cuda\", torch.float16)\n\n# Generate\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\nanswers = processor.batch_decode(generated_ids, skip_special_tokens=True)\n\nfor q, a in zip(questions, answers):\n    print(f\"Q: {q}\\nA: {a}\\n\")\n```\n\n### Controlling generation\n\n```python\n# Control generation parameters\ngenerated_ids = model.generate(\n    **inputs,\n    max_new_tokens=100,\n    min_length=20,\n    num_beams=5,              # Beam search\n    no_repeat_ngram_size=2,   # Avoid repetition\n    top_p=0.9,                # Nucleus sampling\n    temperature=0.7,          # Creativity\n    do_sample=True,           # Enable sampling\n)\n\n# For deterministic output\ngenerated_ids = model.generate(\n    **inputs,\n    max_new_tokens=50,\n    num_beams=5,\n    do_sample=False,\n)\n```\n\n### Memory optimization\n\n```python\n# 8-bit quantization\nfrom transformers import BitsAndBytesConfig\n\nquantization_config = BitsAndBytesConfig(load_in_8bit=True)\n\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-opt-6.7b\",\n    quantization_config=quantization_config,\n    device_map=\"auto\"\n)\n\n# 4-bit quantization (more aggressive)\nquantization_config = BitsAndBytesConfig(\n    load_in_4bit=True,\n    bnb_4bit_compute_dtype=torch.float16\n)\n\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-flan-t5-xxl\",\n    quantization_config=quantization_config,\n    device_map=\"auto\"\n)\n```\n\n### Image-text matching\n\n```python\n# Using LAVIS for ITM (Image-Text Matching)\nfrom lavis.models import load_model_and_preprocess\n\nmodel, vis_processors, txt_processors = load_model_and_preprocess(\n    name=\"blip2_image_text_matching\",\n    model_type=\"pretrain\",\n    is_eval=True,\n    device=device\n)\n\nimage = vis_processors[\"eval\"](raw_image).unsqueeze(0).to(device)\ntext = txt_processors[\"eval\"](\"a dog sitting on grass\")\n\n# Get matching score\nitm_output = model({\"image\": image, \"text_input\": text}, match_head=\"itm\")\nitm_scores = torch.nn.functional.softmax(itm_output, dim=1)\nprint(f\"Match probability: {itm_scores[:, 1].item():.3f}\")\n```\n\n### Feature extraction\n\n```python\n# Extract image features with Q-Former\nfrom lavis.models import load_model_and_preprocess\n\nmodel, vis_processors, _ = load_model_and_preprocess(\n    name=\"blip2_feature_extractor\",\n    model_type=\"pretrain\",\n    is_eval=True,\n    device=device\n)\n\nimage = vis_processors[\"eval\"](raw_image).unsqueeze(0).to(device)\n\n# Get features\nfeatures = model.extract_features({\"image\": image}, mode=\"image\")\nimage_embeds = features.image_embeds  # Shape: [1, 32, 768]\nimage_features = features.image_embeds_proj  # Projected for matching\n```\n\n## Common workflows\n\n### Workflow 1: Image captioning pipeline\n\n```python\nimport torch\nfrom PIL import Image\nfrom transformers import Blip2Processor, Blip2ForConditionalGeneration\nfrom pathlib import Path\n\nclass ImageCaptioner:\n    def __init__(self, model_name=\"Salesforce\u002Fblip2-opt-2.7b\"):\n        self.processor = Blip2Processor.from_pretrained(model_name)\n        self.model = Blip2ForConditionalGeneration.from_pretrained(\n            model_name,\n            torch_dtype=torch.float16,\n            device_map=\"auto\"\n        )\n\n    def caption(self, image_path: str, prompt: str = None) -> str:\n        image = Image.open(image_path).convert(\"RGB\")\n\n        if prompt:\n            inputs = self.processor(images=image, text=prompt, return_tensors=\"pt\")\n        else:\n            inputs = self.processor(images=image, return_tensors=\"pt\")\n\n        inputs = inputs.to(\"cuda\", torch.float16)\n\n        generated_ids = self.model.generate(\n            **inputs,\n            max_new_tokens=50,\n            num_beams=5\n        )\n\n        return self.processor.decode(generated_ids[0], skip_special_tokens=True)\n\n    def caption_batch(self, image_paths: list, prompt: str = None) -> list:\n        images = [Image.open(p).convert(\"RGB\") for p in image_paths]\n\n        if prompt:\n            inputs = self.processor(\n                images=images,\n                text=[prompt] * len(images),\n                return_tensors=\"pt\",\n                padding=True\n            )\n        else:\n            inputs = self.processor(images=images, return_tensors=\"pt\", padding=True)\n\n        inputs = inputs.to(\"cuda\", torch.float16)\n\n        generated_ids = self.model.generate(**inputs, max_new_tokens=50)\n        return self.processor.batch_decode(generated_ids, skip_special_tokens=True)\n\n# Usage\ncaptioner = ImageCaptioner()\n\n# Single image\ncaption = captioner.caption(\"photo.jpg\")\nprint(f\"Caption: {caption}\")\n\n# With prompt for style\ncaption = captioner.caption(\"photo.jpg\", \"a detailed description of\")\nprint(f\"Detailed: {caption}\")\n\n# Batch processing\ncaptions = captioner.caption_batch([\"img1.jpg\", \"img2.jpg\", \"img3.jpg\"])\nfor i, cap in enumerate(captions):\n    print(f\"Image {i+1}: {cap}\")\n```\n\n### Workflow 2: Visual Q&A system\n\n```python\nclass VisualQA:\n    def __init__(self, model_name=\"Salesforce\u002Fblip2-flan-t5-xl\"):\n        self.processor = Blip2Processor.from_pretrained(model_name)\n        self.model = Blip2ForConditionalGeneration.from_pretrained(\n            model_name,\n            torch_dtype=torch.float16,\n            device_map=\"auto\"\n        )\n        self.current_image = None\n        self.current_inputs = None\n\n    def set_image(self, image_path: str):\n        \"\"\"Load image for multiple questions.\"\"\"\n        self.current_image = Image.open(image_path).convert(\"RGB\")\n\n    def ask(self, question: str) -> str:\n        \"\"\"Ask a question about the current image.\"\"\"\n        if self.current_image is None:\n            raise ValueError(\"No image set. Call set_image() first.\")\n\n        # Format question for FlanT5\n        prompt = f\"Question: {question} Answer:\"\n\n        inputs = self.processor(\n            images=self.current_image,\n            text=prompt,\n            return_tensors=\"pt\"\n        ).to(\"cuda\", torch.float16)\n\n        generated_ids = self.model.generate(\n            **inputs,\n            max_new_tokens=50,\n            num_beams=5\n        )\n\n        return self.processor.decode(generated_ids[0], skip_special_tokens=True)\n\n    def ask_multiple(self, questions: list) -> dict:\n        \"\"\"Ask multiple questions about current image.\"\"\"\n        return {q: self.ask(q) for q in questions}\n\n# Usage\nvqa = VisualQA()\nvqa.set_image(\"scene.jpg\")\n\n# Ask questions\nprint(vqa.ask(\"What objects are in this image?\"))\nprint(vqa.ask(\"What is the weather like?\"))\nprint(vqa.ask(\"How many people are there?\"))\n\n# Batch questions\nresults = vqa.ask_multiple([\n    \"What is the main subject?\",\n    \"What colors are dominant?\",\n    \"Is this indoors or outdoors?\"\n])\n```\n\n### Workflow 3: Image search\u002Fretrieval\n\n```python\nimport torch\nimport numpy as np\nfrom PIL import Image\nfrom lavis.models import load_model_and_preprocess\n\nclass ImageSearchEngine:\n    def __init__(self):\n        self.device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n        self.model, self.vis_processors, self.txt_processors = load_model_and_preprocess(\n            name=\"blip2_feature_extractor\",\n            model_type=\"pretrain\",\n            is_eval=True,\n            device=self.device\n        )\n        self.image_features = []\n        self.image_paths = []\n\n    def index_images(self, image_paths: list):\n        \"\"\"Build index from images.\"\"\"\n        self.image_paths = image_paths\n\n        for path in image_paths:\n            image = Image.open(path).convert(\"RGB\")\n            image = self.vis_processors[\"eval\"](image).unsqueeze(0).to(self.device)\n\n            with torch.no_grad():\n                features = self.model.extract_features({\"image\": image}, mode=\"image\")\n                # Use projected features for matching\n                self.image_features.append(\n                    features.image_embeds_proj.mean(dim=1).cpu().numpy()\n                )\n\n        self.image_features = np.vstack(self.image_features)\n\n    def search(self, query: str, top_k: int = 5) -> list:\n        \"\"\"Search images by text query.\"\"\"\n        # Get text features\n        text = self.txt_processors[\"eval\"](query)\n        text_input = {\"text_input\": [text]}\n\n        with torch.no_grad():\n            text_features = self.model.extract_features(text_input, mode=\"text\")\n            text_embeds = text_features.text_embeds_proj[:, 0].cpu().numpy()\n\n        # Compute similarities\n        similarities = np.dot(self.image_features, text_embeds.T).squeeze()\n        top_indices = np.argsort(similarities)[::-1][:top_k]\n\n        return [(self.image_paths[i], similarities[i]) for i in top_indices]\n\n# Usage\nengine = ImageSearchEngine()\nengine.index_images([\"img1.jpg\", \"img2.jpg\", \"img3.jpg\", ...])\n\n# Search\nresults = engine.search(\"a sunset over the ocean\", top_k=5)\nfor path, score in results:\n    print(f\"{path}: {score:.3f}\")\n```\n\n## Output format\n\n### Generation output\n\n```python\n# Direct generation returns token IDs\ngenerated_ids = model.generate(**inputs, max_new_tokens=50)\n# Shape: [batch_size, sequence_length]\n\n# Decode to text\ntext = processor.batch_decode(generated_ids, skip_special_tokens=True)\n# Returns: list of strings\n```\n\n### Feature extraction output\n\n```python\n# Q-Former outputs\nfeatures = model.extract_features({\"image\": image}, mode=\"image\")\n\nfeatures.image_embeds          # [B, 32, 768] - Q-Former outputs\nfeatures.image_embeds_proj     # [B, 32, 256] - Projected for matching\nfeatures.text_embeds          # [B, seq_len, 768] - Text features\nfeatures.text_embeds_proj     # [B, 256] - Projected text (CLS)\n```\n\n## Performance optimization\n\n### GPU memory requirements\n\n| Model | FP16 VRAM | INT8 VRAM | INT4 VRAM |\n|-------|-----------|-----------|-----------|\n| blip2-opt-2.7b | ~8GB | ~5GB | ~3GB |\n| blip2-opt-6.7b | ~16GB | ~9GB | ~5GB |\n| blip2-flan-t5-xl | ~10GB | ~6GB | ~4GB |\n| blip2-flan-t5-xxl | ~26GB | ~14GB | ~8GB |\n\n### Speed optimization\n\n```python\n# Use Flash Attention if available\nmodel = Blip2ForConditionalGeneration.from_pretrained(\n    \"Salesforce\u002Fblip2-opt-2.7b\",\n    torch_dtype=torch.float16,\n    attn_implementation=\"flash_attention_2\",  # Requires flash-attn\n    device_map=\"auto\"\n)\n\n# Compile model (PyTorch 2.0+)\nmodel = torch.compile(model)\n\n# Use smaller images (if quality allows)\nprocessor = Blip2Processor.from_pretrained(\"Salesforce\u002Fblip2-opt-2.7b\")\n# Default is 224x224, which is optimal\n```\n\n## Common issues\n\n| Issue | Solution |\n|-------|----------|\n| CUDA OOM | Use INT8\u002FINT4 quantization, smaller model |\n| Slow generation | Use greedy decoding, reduce max_new_tokens |\n| Poor captions | Try FlanT5 variant, use prompts |\n| Hallucinations | Lower temperature, use beam search |\n| Wrong answers | Rephrase question, provide context |\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Fine-tuning, integration, deployment\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues and solutions\n\n## Resources\n\n- **Paper**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2301.12597\n- **GitHub (LAVIS)**: https:\u002F\u002Fgithub.com\u002Fsalesforce\u002FLAVIS\n- **HuggingFace**: https:\u002F\u002Fhuggingface.co\u002FSalesforce\u002Fblip2-opt-2.7b\n- **Demo**: https:\u002F\u002Fhuggingface.co\u002Fspaces\u002FSalesforce\u002FBLIP2\n- **InstructBLIP**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.06500 (successor)\n",{"name":5,"tags":50,"author":56,"license":14,"version":57,"description":7,"dependencies":58},[51,52,53,54,55],"Multimodal","Vision-Language","Image Captioning","VQA","Zero-Shot","Orchestra Research","1.0.0",[59,60,61],"transformers>=4.30.0","torch>=1.10.0","Pillow","main","f19b254e8975d0bfddb394686706106930d7964d","Image-Recognition\u002Fblip-2\u002Fblip-2","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus","https:\u002F\u002Fgithub.com\u002Fendman100","2026-11-11 18:19:10",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add endman100\u002Fskill-router-nexus --skill blip-2-vision-language",{"tool":74,"command":75},"bunx","bunx skills add endman100\u002Fskill-router-nexus --skill blip-2-vision-language",{"tool":77,"command":78},"pnpm","pnpm dlx skills add endman100\u002Fskill-router-nexus --skill blip-2-vision-language","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FImage-Recognition\u002Fblip-2\u002Fblip-2\u002FSKILL.md",true,[82,88],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fadvanced-usage.md","REFERENCE","参考文档",18889,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FImage-Recognition\u002Fblip-2\u002Fblip-2\u002Freferences\u002Fadvanced-usage.md",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Ftroubleshooting.md",11981,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FImage-Recognition\u002Fblip-2\u002Fblip-2\u002Freferences\u002Ftroubleshooting.md",[93,117,153,174,183,207],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":97,"sourceHtmlUrl":98,"categories":99,"keywords":105,"publishedAt":45},"01M6MPCT5BXVER8HQZTW3QE9AS","create-master","基于佛教经典文献，生成特定高僧大德的 AI 教学角色","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMetaphysics-and-Spirituality\u002FMaster-skill\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMetaphysics-and-Spirituality\u002FMaster-skill\u002FSKILL.md",[100],{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[106,107,108,109,110,111,112,113,114,115,116],"create master","master","create","生成","true","webfetch","edit","write","read","grep","Bash",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":121,"sourceHtmlUrl":122,"categories":123,"keywords":133,"publishedAt":45},"01M6M43AKE95Y64E1JRXEF5QQ3","writing-dna-skill","从至少 20 篇完整文章中蒸馏可复用的写作 DNA，分析语言、文章结构、选题逻辑、素材策略、认知框架和视觉风格，并生成 Writing-DNA.md；按该 DNA 写作时会读取全部蒸馏产物和 5 篇相关原文。用于中英文作者、账号、品牌或出版物的风格分析与一致性写作。 Distill reusable Writing DNA from at least 20 complete articles for Chinese or English authors, publications, brands, and accounts; use for language, structure, topic logic, source strategy, cognitive-frame, and visual-style analysis.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fwriting-dna-skill\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fwriting-dna-skill\u002FSKILL.md",[124,127,130],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":128,"categoryName":129,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":131,"categoryName":132,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000036","内容创作者",[134,135,136,137,138,139,140,141,142,143,144,145,146,109,147,148,149,150,151,152],"writing dna skill","DNA","writing","strategy","english","logic","visual","structure","chinese","reusable","use","style","distill","analysis","frame","source","for","at","complete",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":157,"sourceHtmlUrl":158,"categories":159,"keywords":162,"publishedAt":45},"01M6M428TTCGQ4ME3KY99VN037","stop-slop","Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fstop-slop\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fstop-slop\u002FSKILL.md",[160,161],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":131,"categoryName":132,"taxonomyType":103,"taxonomyTypeDesc":104},[163,164,165,166,28,167,168,169,170,144,171,172,37,150,173,136],"slop","stop slop","stop","drafting","drafts","https","patterns","prose","remove","editing","content",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":178,"sourceHtmlUrl":179,"categories":180,"keywords":181,"publishedAt":45},"01M6M41X0B7EBX42TK435DMGGR","shuorenhua","检查和清理中英文文本里的 AI 套路，适用于“去 AI 味”“说人话”“自然一点”“别像模板”“先标问题”这类改写和审稿需求；按场景控制力度，同时保留事实、术语、语域和责任主体。","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fshuorenhua\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fshuorenhua\u002FSKILL.md",[],[176,182],"文本",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":187,"sourceHtmlUrl":188,"categories":189,"keywords":190,"publishedAt":45},"01M6M3ZD12WBEW5KXKDM4N6DFG","naming","Name products, SaaS, brands, open source projects, bots, and apps. Use when the user needs to name something, find a brand name, or pick a product name. Metaphor-driven process that produces memorable, meaningful names and avoids AI slop.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fnaming-main\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fnaming-main\u002FSKILL.md",[],[185,191,192,193,194,195,144,196,114,149,197,198,199,200,116,201,202,203,204,28,205,206,163],"repo","websearch","product name","apps","bots","view","brand","pick","gh","projects","open","saas","open source","product","describe","ai slop",{"skillNo":208,"name":209,"nameZh":6,"description":210,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":211,"sourceHtmlUrl":212,"categories":213,"keywords":215,"publishedAt":45},"01M6M3YVXAFAAWJ7F6JMPFREYE","humanizer-zh","去除文本中的 AI 生成痕迹。适用于编辑或审阅文本，使其听起来更自然、更像人类书写。\n基于维基百科的\"AI 写作特征\"综合指南。检测并修复以下模式：夸大的象征意义、\n宣传性语言、以 -ing 结尾的肤浅分析、模糊的归因、破折号过度使用、三段式法则、\nAI 词汇、否定式排比、过多的连接性短语。","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fhumanizer-zh\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fhumanizer-zh\u002FSKILL.md",[214],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},[216,217,218,114,113,112,136,109,182,219,163,165],"humanizer","zh","humanizer zh","翻译"]