Документация

Интеграция AI

Мультивендорная AI-интеграция на базе Vercel AI SDK с поддержкой 12 провайдеров и 100+ моделей

AI-слой предоставляет единый текстовый интерфейс для больших языковых моделей от разных провайдеров. Он построен на Vercel AI SDK и поддерживает динамическую настройку API key через админ-панель.

Архитектура

Структура модулей

ФайлОписание
src/integrations/ai/index.tsТочка входа, getAIProvider(), извлечение конфигурации
src/integrations/ai/providers.tsЭкземпляры провайдеров и маппинг моделей
src/integrations/ai/models.tsМетаданные моделей: id, label, capability, creditCost
src/integrations/ai/types.tsТипы
src/integrations/ai/utils.tsУтилиты

Быстрый старт

Настройте API key

Откройте Admin → AI Config и заполните API key нужного провайдера. Можно также использовать переменные окружения.

Получите provider в API route

import { getAIProvider } from "@/integrations/ai"
import { streamText } from "ai"

export async function POST(req: Request) {
  const provider = await getAIProvider()
  const model = provider.languageModel("openai/gpt-4o")

  const result = await streamText({
    model,
    messages: [{ role: "user", content: "Hello" }],
  })

  return result.toDataStreamResponse()
}

Используйте метаданные моделей

import {
  getModelConfig,
  canUseModel,
  hasVisionSupport,
  getCreditCost,
  getModelsByProvider,
} from "@/integrations/ai"

const model = getModelConfig("openai/gpt-4o")
const { canUse } = canUseModel("openai/gpt-4o", isProUser)
const hasVision = hasVisionSupport("openai/gpt-4o")
const cost = getCreditCost("openai/gpt-4o")
const openaiModels = getModelsByProvider("openai")

Возможности моделей

Каждая модель содержит следующие метаданные capability:

ВозможностьОписание
visionПоддерживает входные изображения (мультимодальность)
reasoningПоддерживает расширенное мышление и chain-of-thought
pdfПоддерживает обработку PDF-документов

Справочник функций

ФункцияОписание
getModelConfig(modelId)Получить метаданные модели по ID
canUseModel(modelId, isProUser)Проверить, доступна ли модель пользователю
hasVisionSupport(modelId)Есть ли поддержка vision
hasReasoningSupport(modelId)Есть ли поддержка reasoning
hasPdfSupport(modelId)Есть ли поддержка PDF
getMaxOutputTokens(modelId)Максимальное число output tokens
getModelParameters(modelId)Значения по умолчанию параметров модели
getCreditCost(modelId)Стоимость одного вызова в кредитах
getModelsByProvider(provider)Список моделей по провайдеру
getModelsByTier(tier)Список моделей по уровню (free / pro)
getAvailableProviders()Все провайдеры, у которых есть модели
getAllModels()Все модели

Уровни моделей

  • free: доступно всем пользователям
  • pro: требуется подписка Pro (canUseModel это проверяет)

Поддерживаемые провайдеры

ПровайдерКол-во моделейКонфиг
OpenAI22ai_openai_api_key, ai_openai_base_url
Anthropic5ai_anthropic_api_key
Google10ai_google_api_key
xAI9ai_xai_api_key
Groq6ai_groq_api_key
Mistral11ai_mistral_api_key
Cohere3ai_cohere_api_key
DeepSeek2ai_deepseek_api_key, ai_deepseek_base_url
HuggingFace11ai_huggingface_api_key
Novita21ai_novita_api_key
SiliconFlow2ai_siliconflow_api_key
Baseten6ai_baseten_api_key

Сводный список моделей

ПровайдерКол-воПримеры
OpenAI22gpt-4o, gpt-5, o3, o4-mini, gpt-5.1-codex, gpt-oss-20b
Anthropic5claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-5
Google10gemini-2.0-flash, gemini-2.5-pro, gemini-3-flash
xAI9grok-3-mini, grok-4, grok-4-fast-thinking, grok-code
Groq6llama-3.3-70b, qwen3-32b, kimi-k2
Mistral11ministral-3b, mistral-large, codestral, devstral
Cohere3command-a, command-a-thinking, command-r-plus
DeepSeek2deepseek-chat, deepseek-reasoner
HuggingFace11qwen3-4b, qwen3-30b, qwen3-235b
Novita21deepseek-v3.2, qwen3-coder-30b, glm-4.5, minimax-m2
SiliconFlow2deepseek-v3, qwen-2.5-72b
Baseten6deepseek-v3, qwen3-coder-480b, glm-4.7, kimi-k2

Reasoning модели

Модели с capabilities.reasoning: true используют extractReasoningMiddleware. Логика reasoning помещается в теги <think> и затем удаляется из финального вывода. Если для модели есть рекомендуемые параметры, их можно получить через getModelParameters.

Формат ID модели

Формат ID модели: provider/model-name, например openai/gpt-4o, anthropic/claude-sonnet-4-5, deepseek/deepseek-v3.2. Именно этот ID используется при вызове provider.languageModel(id).

Расширение

Подключение нового провайдера

1. Типы (types.ts)

Добавьте в AIProviderKey:

export type AIProviderKey =
  | "openai"
  | "newprovider"  // added
  | ...

2. Экземпляр провайдера (providers.ts)

Инициализируйте его в createProviderInstances и зарегистрируйте модели в languageModels.

...(p.newprovider && {
  "newprovider/model-id": p.newprovider.chatModel("actual vendor model id"),
})

3. Конфигурация (dynamic-config.ts)

Добавьте новый параметр конфигурации и подгруппу в aiConfigGroups.

4. Интернационализация и извлечение конфигурации

Добавьте текст в config.content.ts, а в index.ts сопоставьте его в extractProviderConfigs.

Подключение новой модели у существующего провайдера

1. Зарегистрируйте в providers.ts

"openai/new-model": p.openai("openai actual model name")

2. Добавьте метаданные в models.ts

{
  id: "openai/new-model",
  label: "New Model Name",
  provider: "openai",
  providerModelId: "openai actual model name",
  capabilities: { vision: false, reasoning: false, pdf: false },
  tier: "free",
  maxOutputTokens: 16384,
  creditCost: 1,
}

Чеклист

ШагНовый провайдерНовая модель
types.tsДополнить AIProviderKey
providers.tsЭкземпляр и languageModelsДополнить languageModels
models.tsДополнить метаданные
dynamic-config.tsПараметр и подгруппа
config.content.tsИнтернационализация
index.tsextractProviderConfigs

Содержание