图像描述

图像描述(Image Captioning)允许 SillyTavern 为聊天中使用的图片自动生成文字描述。

当你希望 AI 角色“看到”并回应对话中的视觉内容时,请使用图像描述。

  • 为你上传或粘贴到消息中的图片创建描述
  • 为聊天记录中已有的图片补充上下文
  • 使用多种来源生成描述,包括本地模型、云端 API 和众包网络

其中既有无需任何配置、不花钱、不需要 GPU 的选项,也有需要部分或全部上述条件的选项。请根据你的需求和资源选择合适的方案。

图像描述扩展是 SillyTavern 的内置功能,无需单独安装。

快速开始

  1. 配置:
    • 扩展 面板中打开 Image Captioning 面板
    • 选择一个描述来源(通常是“Local”或“Multimodal”)
    • 对于“Multimodal”,请确保你已在 API Connections 标签页中完成连接配置
  2. 生成描述:
    • 扩展 弹出菜单中选择 “Generate Caption
    • 在提示时选择一个图片文件
    • 等待描述生成完成
  3. 检查并发送:
    • 带描述的图片将被插入到你的消息中
    • 通过图片工具提示查看描述
    • 点击 Send,看看你的角色对这张图片作何反应!

面板控件

来源选择

选择图像描述的来源。支持的选项:

来源 说明
Multimodal 云端:OpenAI、Anthropic、Google、MistralAI 等。
本地:Ollama、llama.cpp、KoboldCpp、Text Generation WebUI 和 vLLM。
支持自定义提示词,因此你可以向图片提问。
Local 使用在 SillyTavern 服务器本地运行的 transformers.js。零配置!
Horde 使用 AI Horde 网络,一个由图像生成模型组成的众包分布式网络。无需下载、无需配置、无需付费。响应时间不定。
Extras Extras 项目已于 2024 年 4 月停止维护,不再提供维护或支持。

描述配置

  • Caption Prompt:输入用于生成描述的自定义提示词。默认提示词为 “What's in this image?”
  • Ask every time:切换以在为每张图片生成描述时分别请求自定义提示词

消息模板

  • Message Template:自定义描述消息模板。使用 {{caption}} 宏来插入生成的描述。默认模板为 [{{user}} sends {{char}} a picture that contains: {{caption}}]

自动描述

  • Automatically caption images:切换以对粘贴或附加到消息中的图片自动生成描述
  • Edit captions before saving:切换以允许在保存描述前对其进行编辑

为图片生成描述

在 SillyTavern 中为图片生成描述的所有方式:

  • 扩展 弹出菜单中选择 “Generate Caption”,并在提示时选择一个图片文件
  • 点击消息中已有图片顶部的 Caption 图标
  • 在启用自动描述的情况下,直接将图片粘贴到聊天输入栏
  • 使用消息操作中的 Embed File or Image 按钮将图片文件附加到消息上
  • 发送包含嵌入图片的消息
  • 使用 /caption 斜杠命令

自动描述

自动描述功能允许你在图片加入聊天时自动生成描述,而无需每次都手动触发描述流程。

要启用此功能,请在 Image Captioning 面板中勾选 “Automatically caption images” 复选框。你还可以勾选 “Edit captions before saving”,以便在保存描述前对其进行编辑。

启用后,自动描述会在以下场景中触发:

  • 当图片被直接粘贴到聊天输入栏时。
  • 当图片文件被附加到消息时。
  • 当发送包含嵌入图片的消息时。

系统将使用你所选的描述来源(Local、Extras、Horde 或 Multimodal)以及已配置的设置来为图片生成描述。

保存前编辑描述(精修模式)

如果你已启用 “Edit captions before saving” 选项:

  1. 添加图片后,将弹出一个窗口显示生成的描述。
  2. 你可以根据需要对描述进行查看和编辑。
  3. 点击 “OK” 应用描述,或点击 “Cancel” 丢弃描述而不保存。

描述发送

生成(并可选编辑后)的描述将使用你配置的 Message Template 自动插入到提示词中。默认情况下,它将以以下格式发送:

[BaronVonUser sends Seraphina a picture that contains: ...]

斜杠命令:/caption

该扩展提供了一个 /caption 斜杠命令,可在聊天输入栏或脚本中使用。

用法

/caption [quiet=true|false]? [mesId=number]? [prompt]
  • prompt(可选):用于描述模型的自定义提示词。仅多模态来源支持。
  • quiet=true|false:若设为 true,则不向聊天发送带描述的消息。默认为 false。
  • mesId=number:指定消息 ID,用于从已有消息中为图片生成描述,而不是上传新图片。

如果未提供 mesId,该命令将提示你上传一张图片。当 quiet 为 false(默认)时,一条带描述图片的新消息将被发送到聊天中。生成的描述可作为其他命令的输入。

示例

使用默认设置为新图片生成描述:

/caption

使用自定义提示词为新图片生成描述:

/caption Describe the main colours and shapes in this image

从消息 #5 的图片生成描述,且不发送新消息:

/caption mesId=5 quiet=true

从消息 #10 的图片生成描述并使用自定义提示词,然后根据描述生成一张新图片

/caption mesId=10 Describe this image using comma-separated keywords | /imagine 

Local source

你可以在 config.yaml 中更改模型。对应的键名为 extensions.models.captioning。填入你想使用的 Hugging Face 模型 ID。默认值为 Xenova/vit-gpt2-image-captioning

你可以使用任何支持图像描述的模型(VisionEncoderDecoderModel 或 “image-to-text” pipeline)。该模型需要与 transformers.js 库兼容,即它需要 ONNX 权重。请寻找带有 ONNXimage-to-text 标签的模型,或者包含一个名为 onnx 的文件夹且其中全是 .onnx 文件的模型。

Multimodal source

通用配置

  • Model:选择用于图像描述的模型。可选项因所选 API 而异。
  • Allow reverse proxy:切换以允许在已定义且有效的情况下使用反向代理(OpenAI、Anthropic、Google、Mistral、xAI)

描述来源的 API 密钥和端点 URL 在 API Connections 面板中管理。请先在 API Connections 中完成连接配置,然后在 Captioning 中将其选为描述来源。

对于大多数本地后端,你需要在模型后端而非 SillyTavern 中设置某些选项。如果你的后端一次只能运行一个模型且不支持自动切换,你有以下几种方式来为聊天和描述使用不同的模型:

  1. 次级端点: 使用次级端点功能(参见下方的次级端点章节)连接到另一个用于描述的 API 服务器
  2. 多种连接类型: 在 API Connections 中通过文本补全和聊天补全两种模式连接到你的后端 —— 这样你就能对同一后端类型建立两个独立的连接

来源

要使用这些描述来源之一,请在 Source 下拉菜单中选择 Multimodal。

  • “我想要最好的描述效果,并且愿意为此付费”:Anthropic
  • “我不想付费,也不想运行任何东西”:Google AI Studio 免费档
  • “我想在本地为图片生成描述,并且开箱即用”:Ollama
  • “我想让本地 AI 的梦想延续下去”:KoboldCpp
  • “我想在它不工作时吐槽”:Extras
API 提供商 说明
AI/ML API 云端,付费,多种具备视觉能力的 GPT、Claude 和 Gemini 模型
Chutes 云端,多种具备视觉能力的模型
Claude 云端,付费,所有具备视觉能力的 Claude 模型
Cloudflare Workers AI 云端,付费,多种具备视觉能力的模型
Cohere 云端,付费,Aya Vision 8B / 32B
Custom (OpenAI-compatible) 适用于自定义的 OpenAI 兼容 API,使用 API Connections 标签页中当前配置的模型
Electron Hub 云端,付费,多种具备视觉能力的模型。
Google AI Studio 云端,免费档后付费,Gemini Flash/Pro
Google Vertex AI 云端,免费档,Gemini Flash/Pro
Groq 云端,llama-4 scout/maverick
KoboldCpp 本地,必须在 KoboldCpp 中配置模型
llama.cpp 本地,必须在 llama.cpp 中配置模型
MistralAI 云端,付费,pixtral-large、pixtral-12B、magistral、mistral-large 等。
Moonshot AI 云端,付费,moonshot-vision
NanoGPT 云端,付费,多种具备视觉能力的 GPT/Claude/Google 模型
Ollama 本地,可在 API Connections 中配置后,在 Captioning 内切换可用模型并下载更多视觉模型
OpenAI 云端,付费,GPT-4 Vision、4-turbo、4o、4o-mini
OpenRouter 云端,付费(可能有免费选项),多种模型,可在 API Connections 中配置后从 Captioning 内可用的模型中挑选
Pollinations 云端,免费
Text Generation WebUI (oobabooga) 本地,必须在 ooba 中配置模型
vLLM 本地
xAI (Grok) 云端,付费,grok-vision
Z.AI (GLM). 云端,付费,GLM Vision 模型

次级端点

默认情况下,Multimodal 来源使用在 API Connections 标签页中配置的主端点。 你也可以专门为多模态描述设置一个次级端点。

  • 扩展 面板中打开 Image Captioning 面板。
  • 选择 “Multimodal” 作为描述来源,并选择一个偏好的 API 提供商。
  • 在 “Secondary captioning endpoint URL” 字段中填入次级端点的有效 URL。
  • 勾选 “Use secondary URL” 复选框以启用次级端点。

仅以下 API 支持此功能:

  • KoboldCpp
  • llama.cpp
  • Ollama
  • Text Generation WebUI (oobabooga)
  • vLLM

特定来源指南

KoboldCpp

有关安装和使用 KoboldCpp 的一般信息,请参阅 KoboldCpp 文档

要使用 KoboldCpp 进行多模态描述:

  • 获取一个具备多模态能力的模型,即经过训练可同时处理文本和图像提示词的模型。
  • 同时获取该模型的多模态投影(multimodal projections)。这些权重使模型能够理解输入中文本部分与图像部分之间的关联。
  • 在 KoboldCpp 启动 GUI 或命令行界面中加载模型和投影。

最早的经典本地多模态模型是 LLaVA。该模型和投影的 GGUF 格式文件可从 Mozilla/llava-v1.5-7b-llamafile 获取。要从命令行加载它们,请使用 --model--mmproj 标志分别指定模型和投影。例如:

./koboldcpp \
--model="models/llava-v1.5-7b-Q4_K.gguf" \
--mmproj="models/ llava-v1.5-7b-mmproj-Q4_0.gguf" \
... other flags ...

你可以尝试一些 LLaVA 微调版本:xtuner/llava-llama-3-8b-v1_1-ggufxtuner/llava-phi-3-mini-gguf

你可以使用特定微调版本所基于的基础模型对应的多模态投影。部分常见基础模型的投影可从 koboldcpp/mmproj 获取。