Code Reader
首页
帮助
设计文档
首页
帮助
设计文档
  • SillyTavern AI 后端集成系统分析

SillyTavern AI 后端集成系统分析

1. AI 后端架构概述

SillyTavern 采用模块化架构支持多种 AI 后端,主要分为两大类:

  • Chat Completions API: 基于消息列表的聊天式 API
  • Text Completions API: 基于文本补全的生成式 API

1.1 架构组件图 (Mermaid)

2. 支持的 AI 后端列表

2.1 Chat Completion 后端

后端名称源标识API 端点密钥类型特殊功能
OpenAIopenaiapi.openai.com/v1OPENAIGPT-4, GPT-3.5, DALL-E, TTS, Whisper
Claudeclaudeapi.anthropic.com/v1CLAUDE原生 System Prompt, 工具调用, 缓存
OpenRouteropenrouteropenrouter.ai/api/v1OPENROUTER多模型聚合, 自动回退
Google Geminimakersuitegenerativelanguage.googleapis.comMAKERSUITE多模态, Vertex AI 支持
Mistral AImistralaiapi.mistral.ai/v1MISTRALAI欧洲模型, JSON Schema
Coherecohereapi.cohere.ai/v2COHERECommand 系列模型
DeepSeekdeepseekapi.deepseek.com/betaDEEPSEEKReasoner 模型, 中文优化
xAI (Grok)xaiapi.x.ai/v1XAIGrok 系列, X 平台集成
AI21ai21api.ai21.com/studio/v1AI21Jurassic 系列
Perplexityperplexityapi.perplexity.aiPERPLEXITY带引用的搜索
Groqgroqapi.groq.com/openai/v1GROQ高速推理
Azure OpenAIazure_openai{base_url}/deploymentsAZURE_OPENAI企业部署
Chuteschutesllm.chutes.ai/v1CHUTES去中心化推理
ElectronHubelectronhubapi.electronhub.ai/v1ELECTRONHUB多提供商聚合
NanoGPTnanogptnano-gpt.com/api/v1NANOGPT轻量级
Moonshotmoonshotapi.moonshot.ai/v1MOONSHOT中文模型
Fireworksfireworksapi.fireworks.ai/inference/v1FIREWORKS高速推理
AIMLAPIaimlapiapi.aimlapi.com/v1AIMLAPI统一接口
Pollinationspollinationstext.pollinations.ai无需密钥免费推理
Z.AIzaiapi.z.ai/api/paas/v4ZAI360 智脑
SiliconFlowsiliconflowapi.siliconflow.com/v1SILICONFLOW硅基流动
CometAPIcometapiapi.cometapi.com/v1COMETAPI(暂时禁用)

2.2 Text Completion 后端

后端名称类型标识特点端点
Kobold/KoboldCPPkoboldcpp经典本地推理/v1/generate
Ollamaollama本地模型管理/api/generate
llama.cppllamacpp高性能本地推理/completion
TabbyAPItabby优化的本地 API/v1/completions
Text Generation WebUIoobaGradio 界面/v1/completions
vLLMvllm高吞吐服务/v1/completions
Aphroditeaphrodite优化推理/v1/completions
Together AItogetherai云端服务/v1/completions
Mancermancer特定服务/oai/v1/completions
InfermaticAIinfermaticai推理服务/v1/completions
DreamGendreamgen创意生成/api/openai/v1/completions
Featherlessfeatherless轻量级/v1/completions
HuggingFacehuggingface模型托管/info
Genericgeneric通用 OpenAI 兼容/v1/completions

2.3 其他 AI 服务

服务类型支持的提供商说明
图像生成OpenAI DALL-E, Stable Diffusion, BFL, Fal.ai文生图
语音合成 (TTS)OpenAI, ElevenLabs, ElectronHub, Chutes文本转语音
语音识别OpenAI Whisper, Groq, Mistral, Z.AI, Chutes语音转文本
视频生成OpenAI Sora文生视频
图像理解OpenAI GPT-4V, Claude, Gemini, Mistral, 等视觉问答

3. Prompt 转换系统详解

3.1 转换流程

3.2 核心转换函数

3.2.1 convertClaudeMessages (Claude/Anthropic)

功能: 将 ChatML 格式转换为 Claude Messages API 格式

关键转换:

  • 提取 System Prompt 到独立的 system 字段
  • 合并连续相同角色的消息
  • 转换 Tool Calls 为 tool_use / tool_result 格式
  • 处理图像数据为 base64 inlineData
  • 支持 Assistant Prefill (前缀引导)

代码示例:

// 输入: OpenAI 格式消息
[
  { role: 'system', content: 'You are a helpful assistant' },
  { role: 'user', content: 'Hello' },
  { role: 'assistant', content: 'Hi there!' }
]

// 输出: Claude 格式
{
  system: [{ type: 'text', text: 'You are a helpful assistant' }],
  messages: [
    { role: 'user', content: [{ type: 'text', text: 'Hello' }] },
    { role: 'assistant', content: [{ type: 'text', text: 'Hi there!' }] }
  ]
}

3.2.2 convertGooglePrompt (Gemini)

功能: 转换为 Google Gemini API 格式

关键转换:

  • 分离 System Instruction 和 Contents
  • 角色映射: assistant -> model, system/tool -> user
  • 支持多模态内容 (text, image, video, audio)
  • Function Calling 转换
  • 支持 Gemini 3 的 Thought Signatures

特殊处理:

// 图像数据转换
{
  type: 'image_url',
  image_url: { url: 'data:image/png;base64,...' }
}
// 转换为
{
  inlineData: {
    mimeType: 'image/png',
    data: '...'
  }
}

3.2.3 convertMistralMessages (Mistral AI)

功能: Mistral AI 特定转换

关键特性:

  • Tool ID 哈希化 (SHA512 截断)
  • Assistant Prefix 支持
  • 消息名称处理 (example_user/example_assistant)

3.2.4 convertCohereMessages (Cohere)

功能: Cohere API 格式转换

关键特性:

  • Chat History 格式
  • Tool Calls 引导消息处理
  • 消息名称前缀添加

3.2.5 mergeMessages (通用合并)

功能: 通用消息处理和合并

处理类型 (PROMPT_PROCESSING_TYPE):

  • MERGE: 宽松合并, 保留所有内容
  • MERGE_TOOLS: 合并并保留工具调用
  • SEMI: 严格合并, 处理系统消息
  • SEMI_TOOLS: 严格合并 + 工具支持
  • STRICT: 严格模式, 强制交替角色
  • STRICT_TOOLS: 严格模式 + 工具
  • SINGLE: 单角色模式 (全部转为 user)

通用处理逻辑:

  1. 消息内容扁平化 (处理多模态数组)
  2. 名称前缀添加 (处理 example_user/example_assistant)
  3. 连续相同角色消息合并
  4. 系统消息位置调整
  5. 图像/音频 Token 替换与恢复

3.3 Prompt 后处理流程

3.4 Prompt Caching 支持

SillyTavern 实现了智能的 Prompt Caching 机制:

Claude Caching:

// 在指定深度添加 cache_control
function cachingAtDepthForClaude(messages, depth, ttl) {
  // 从后往前遍历,跳过 Prefill
  // 在指定深度的用户消息添加缓存标记
  messages[i].content[content.length - 1].cache_control = {
    type: 'ephemeral',
    ttl: ttl  // '5m' 或 '1h'
  };
}

OpenRouter Caching:

  • 支持 Claude 模型的缓存
  • 支持 Gemini 模型的缓存 (需要模型支持)
  • 自动检测可缓存模型

4. API 请求流程详解

4.1 请求处理流程图

4.2 关键代码流程

4.2.1 Chat Completions 请求处理

// src/endpoints/backends/chat-completions.js
router.post('/generate', async function (request, response) {
    // 1. 应用自定义 Prompt 后处理
    const postProcessingType = request.body.custom_prompt_post_processing;
    if (postProcessingType) {
        request.body.messages = postProcessPrompt(
            request.body.messages,
            postProcessingType,
            getPromptNames(request)
        );
    }

    // 2. 根据源选择处理器
    switch (request.body.chat_completion_source) {
        case CHAT_COMPLETION_SOURCES.CLAUDE: 
            return await sendClaudeRequest(request, response);
        case CHAT_COMPLETION_SOURCES.MAKERSUITE: 
            return await sendMakerSuiteRequest(request, response);
        // ... 其他后端
    }

    // 3. 通用 OpenAI 兼容处理
    // 构建请求体,添加参数,发送请求
    const requestBody = {
        messages: request.body.messages,
        model: request.body.model,
        temperature: request.body.temperature,
        max_tokens: request.body.max_tokens,
        stream: request.body.stream,
        // ... 其他参数
    };

    const fetchResponse = await fetch(endpointUrl, {
        method: 'post',
        headers: { 'Authorization': 'Bearer ' + apiKey },
        body: JSON.stringify(requestBody),
        signal: controller.signal,
    });

    // 4. 流式或非流式响应处理
    if (request.body.stream) {
        return forwardFetchResponse(fetchResponse, response);
    } else {
        const json = await fetchResponse.json();
        return response.send(json);
    }
});

4.2.2 流式响应转发

// src/util.js
export function forwardFetchResponse(fetchResponse, expressResponse) {
    // 设置响应头
    expressResponse.setHeader('Content-Type', 'text/event-stream');
    
    // 管道传输
    fetchResponse.body.pipe(expressResponse);
    
    // 错误处理
    fetchResponse.body.on('error', (error) => {
        console.error('Streaming error:', error);
        expressResponse.end();
    });
}

4.3 请求取消机制

使用 AbortController 实现请求取消:

const controller = new AbortController();

// 客户端断开连接时取消
request.socket.removeAllListeners('close');
request.socket.on('close', function () {
    controller.abort();
});

// 用于 fetch 请求
fetch(url, { signal: controller.signal });

5. 配置和密钥管理

5.1 Secrets 管理系统

5.2 密钥类型定义

文件: src/endpoints/secrets.js

export const SECRET_KEYS = {
    // OpenAI 兼容
    OPENAI: 'api_key_openai',
    OPENROUTER: 'api_key_openrouter',
    MISTRALAI: 'api_key_mistralai',
    COHERE: 'api_key_cohere',
    DEEPSEEK: 'api_key_deepseek',
    XAI: 'api_key_xai',
    GROQ: 'api_key_groq',
    FIREWORKS: 'api_key_fireworks',
    AZURE_OPENAI: 'api_key_azure_openai',
    
    // Claude/Anthropic
    CLAUDE: 'api_key_claude',
    
    // Google
    MAKERSUITE: 'api_key_makersuite',
    VERTEXAI: 'api_key_vertexai',
    VERTEXAI_SERVICE_ACCOUNT: 'vertexai_service_account_json',
    
    // 本地/自托管
    KOBOLDCPP: 'api_key_koboldcpp',
    LLAMACPP: 'api_key_llamacpp',
    VLLM: 'api_key_vllm',
    APHRODITE: 'api_key_aphrodite',
    TABBY: 'api_key_tabby',
    
    // 其他云服务
    CHUTES: 'api_key_chutes',
    ELECTRONHUB: 'api_key_electronhub',
    NANOGPT: 'api_key_nanogpt',
    MOONSHOT: 'api_key_moonshot',
    AIMLAPI: 'api_key_aimlapi',
    COMETAPI: 'api_key_cometapi',
    ZAI: 'api_key_zai',
    SILICONFLOW: 'api_key_siliconflow',
    
    // 图像/语音/其他
    STABILITY: 'api_key_stability',
    BFL: 'api_key_bfl',
    FALAI: 'api_key_falai',
    ELEVENLABS: 'api_key_elevenlabs',
    AZURE_TTS: 'api_key_azure_tts',
    
    // 翻译/搜索
    DEEPL: 'deepl',
    LIBRE: 'libre',
    SERPAPI: 'api_key_serpapi',
    TAVILY: 'api_key_tavily',
    SERPER: 'api_key_serper',
    
    // NovelAI/其他
    NOVEL: 'api_key_novel',
    HORDE: 'api_key_horde',
};

5.3 SecretManager 类功能

方法功能
writeSecret(key, value, label)写入新密钥,自动激活
readSecret(key, id?)读取密钥值,支持按 ID 读取
deleteSecret(key, id?)删除指定密钥
rotateSecret(key, id)切换激活的密钥
renameSecret(key, id, label)重命名密钥标签
getSecretState()获取所有密钥状态(脱敏)
getAllSecrets()获取所有密钥(原始值)
migrateFlatSecrets()从旧版格式迁移

5.4 配置文件支持

config.yaml 相关配置:

# Claude 缓存配置
claude:
  enableSystemPromptCache: true
  cachingAtDepth: 4
  extendedTTL: false  # true = 1h, false = 5m

# Gemini 配置
gemini:
  apiVersion: v1beta
  enableSystemPromptCache: true

# OpenAI 配置
openai:
  randomizeUserId: false
  captionSystemPrompt: "Describe this image in detail"

# Ollama 配置
ollama:
  keepAlive: -1
  batchSize: 512

# 安全设置
allowKeysExposure: false  # 是否允许暴露密钥

5.5 密钥安全特性

  1. 多重密钥支持: 每个后端可配置多个密钥,支持轮换
  2. 密钥脱敏显示: 默认隐藏密钥,仅显示后 3 位
  3. 激活机制: 同一时间只有一个密钥处于激活状态
  4. UUID 标识: 每个密钥有唯一 ID,便于管理
  5. 迁移支持: 自动从旧版平面格式迁移

6. 扩展功能支持

6.1 多模态支持

6.2 工具调用 (Function Calling)

支持的 Backend:

  • OpenAI (GPT-4, GPT-3.5)
  • Claude (3.5 Sonnet, 3 Opus, 3.7 Sonnet)
  • Gemini (1.5 Pro, 2.0 Flash)
  • Mistral (Large)
  • Groq
  • OpenRouter

6.3 JSON Schema / 结构化输出

支持的 Backend:

  • OpenAI (response_format: json_schema)
  • OpenRouter
  • Groq
  • Mistral
  • Fireworks
  • Azure OpenAI
  • Cohere
  • Chutes
  • DeepSeek

7. 后端特定特性

7.1 Claude 特有功能

功能说明
Thinking推理模式 (claude-3-7-sonnet+)
Web Search内置网页搜索
Extended Output128K 输出
Prompt Caching系统提示和工具缓存
Extended TTL1 小时缓存有效期

7.2 Gemini 特有功能

功能说明
Google Search内置搜索工具
Image Generation原生图像生成
Thinking Config推理预算配置
Vertex AI企业级部署支持
Safety Settings可关闭安全过滤

7.3 OpenRouter 特有功能

功能说明
Provider Routing提供商优先级
Model Fallbacks自动回退
Reasoning推理内容包含
Middle-out上下文压缩
Web Search Plugin网页搜索插件

8. 常量定义

文件: src/constants.js

8.1 Chat Completion 源标识

export const CHAT_COMPLETION_SOURCES = {
    OPENAI: 'openai',
    CLAUDE: 'claude',
    OPENROUTER: 'openrouter',
    AI21: 'ai21',
    MAKERSUITE: 'makersuite',
    VERTEXAI: 'vertexai',
    MISTRALAI: 'mistralai',
    CUSTOM: 'custom',
    COHERE: 'cohere',
    PERPLEXITY: 'perplexity',
    GROQ: 'groq',
    CHUTES: 'chutes',
    ELECTRONHUB: 'electronhub',
    NANOGPT: 'nanogpt',
    DEEPSEEK: 'deepseek',
    AIMLAPI: 'aimlapi',
    XAI: 'xai',
    POLLINATIONS: 'pollinations',
    MOONSHOT: 'moonshot',
    FIREWORKS: 'fireworks',
    COMETAPI: 'cometapi',
    AZURE_OPENAI: 'azure_openai',
    ZAI: 'zai',
    SILICONFLOW: 'siliconflow',
};

8.2 Text Generation 类型

export const TEXTGEN_TYPES = {
    OOBA: 'ooba',
    MANCER: 'mancer',
    VLLM: 'vllm',
    APHRODITE: 'aphrodite',
    TABBY: 'tabby',
    KOBOLDCPP: 'koboldcpp',
    TOGETHERAI: 'togetherai',
    LLAMACPP: 'llamacpp',
    OLLAMA: 'ollama',
    INFERMATICAI: 'infermaticai',
    DREAMGEN: 'dreamgen',
    OPENROUTER: 'openrouter',
    FEATHERLESS: 'featherless',
    HUGGINGFACE: 'huggingface',
    GENERIC: 'generic',
};

9. 总结

SillyTavern 的 AI 后端集成系统设计精巧,具有以下特点:

  1. 高度模块化: 每个后端独立实现,便于扩展
  2. 统一接口: 前端使用统一格式,后端负责转换
  3. 丰富的转换器: 支持 20+ 种后端的 Prompt 格式转换
  4. 完善的密钥管理: 支持多密钥、轮换、脱敏显示
  5. 流式响应: 原生支持 SSE 流式传输
  6. 多模态支持: 图像、视频、音频的统一处理
  7. 工具调用: 跨后端的 Function Calling 支持
  8. 缓存优化: 智能的 Prompt Caching 机制

该系统使得 SillyTavern 能够无缝集成市面上绝大多数的 AI 服务,为用户提供统一的使用体验。