LLM-провайдеры¶
Eval AI Library направляет все вызовы LLM через LiteLLM, а значит любой провайдер и модель, которые поддерживает LiteLLM, работают из коробки -- никакого захардкоженного списка провайдеров, никаких обёрток писать не нужно. Обновили litellm -- новые интеграции появляются автоматически.
Все метрики работают с любым провайдером через единый интерфейс -- достаточно указать нужную строку модели.
Провайдеры первого класса¶
У этих провайдеров есть свои "дружественные" настройки и отдельные страницы документации:
| Провайдер | Префикс | Пример | Переменная окружения |
|---|---|---|---|
| OpenAI | openai: (по умолчанию) | gpt-4o | OPENAI_API_KEY |
| Anthropic Claude | anthropic: | anthropic:claude-3-5-sonnet-latest | ANTHROPIC_API_KEY |
| Google Gemini | google: | google:gemini-2.0-flash | GOOGLE_API_KEY |
| Azure OpenAI | azure: | azure:gpt-4o | AZURE_OPENAI_API_KEY |
| DeepSeek | deepseek: | deepseek:deepseek-chat | DEEPSEEK_API_KEY |
| Qwen (Alibaba) | qwen: | qwen:qwen-max | DASHSCOPE_API_KEY |
| Zhipu GLM | zhipu: | zhipu:glm-4 | ZHIPU_API_KEY |
| Mistral AI | mistral: | mistral:mistral-large-latest | MISTRAL_API_KEY |
| Groq | groq: | groq:llama-3.1-70b-versatile | GROQ_API_KEY |
| Grok (xAI) | grok: | grok:grok-2-latest | XAI_API_KEY |
| Ollama | ollama: | ollama:llama3 | -- |
| Кастомный | -- | Передайте экземпляр CustomLLMClient | -- |
Любой провайдер LiteLLM -- без дополнительной настройки¶
Помимо списка выше, вы можете использовать любой провайдер, который поддерживает LiteLLM -- AWS Bedrock, Google Vertex AI, Cohere, Replicate, Together AI, Perplexity, OpenRouter, Fireworks, Cerebras, SambaNova, Hugging Face и т.д. Просто используйте строку модели в формате LiteLLM напрямую:
from eval_lib import TaskSuccessRateMetric
# AWS Bedrock
metric = TaskSuccessRateMetric(model="bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0")
# Google Vertex AI
metric = TaskSuccessRateMetric(model="vertex_ai/gemini-1.5-pro")
# OpenRouter (шлюз к 100+ моделям)
metric = TaskSuccessRateMetric(model="openrouter/meta-llama/llama-3.1-405b-instruct")
# Together AI
metric = TaskSuccessRateMetric(model="together_ai/meta-llama/Llama-3-70b-chat-hf")
# Cohere
metric = TaskSuccessRateMetric(model="cohere/command-r-plus")
# Perplexity
metric = TaskSuccessRateMetric(model="perplexity/llama-3.1-sonar-large-128k-online")
Учётные данные берутся из переменных окружения, которые LiteLLM ожидает для каждого провайдера (AWS_ACCESS_KEY_ID, VERTEX_PROJECT, OPENROUTER_API_KEY, TOGETHERAI_API_KEY, COHERE_API_KEY, PERPLEXITYAI_API_KEY и т.д.). Полный список провайдеров и переменных окружения -- в документации LiteLLM.
Для специфичных флагов провайдеров, которые не являются env vars (например, aws_region_name, vertex_project, vertex_location), передавайте их через extra_kwargs при вызове chat_complete() напрямую -- см. секцию "Переопределение учётных данных для отдельного запроса" ниже.
Формат указания модели¶
Модель указывается строкой в формате провайдер:имя_модели. OpenAI является провайдером по умолчанию, поэтому для него префикс можно опустить:
# Short form (OpenAI is default)
model = "gpt-4o"
# Full form with provider prefix
model = "provider:model_name"
# Examples
model = "openai:gpt-4o"
model = "anthropic:claude-3-5-sonnet-latest"
model = "google:gemini-2.0-flash"
model = "ollama:llama3"
model = "azure:gpt-4o"
Использование LLMDescriptor¶
Для программного выбора провайдера можно использовать класс LLMDescriptor. Идентификатор провайдера передаётся обычной строкой -- LiteLLM сам выберет нужный бэкенд:
from eval_lib import LLMDescriptor
model = LLMDescriptor(provider="openai", model="gpt-4o")
model = LLMDescriptor(provider="anthropic", model="claude-3-5-sonnet-latest")
model = LLMDescriptor(provider="google", model="gemini-2.0-flash")
Enum Provider намеренно маленький и содержит только провайдеров с нативными (не-LiteLLM) кодовыми путями: OLLAMA, MLX, ZHIPU, CUSTOM. Всё остальное (OpenAI, Anthropic, Google, Azure, Bedrock, Vertex AI, Cohere, Together, OpenRouter, Fireworks, Perplexity, DeepInfra, Cerebras, Databricks, Watsonx, Groq, Mistral, DeepSeek, xAI/Grok, Qwen/DashScope, …) передаётся строкой и маршрутизируется через LiteLLM.
Комбинирование провайдеров в одной оценке¶
Вы можете использовать разных провайдеров для разных метрик в рамках одного запуска оценки. Это позволяет, например, использовать более дешёвую модель для простых метрик и более мощную -- для сложных:
from eval_lib import (
AnswerRelevancyMetric,
FaithfulnessMetric,
CustomEvalMetric,
)
metrics = [
# OpenAI for answer relevancy
AnswerRelevancyMetric(model="gpt-4o", threshold=0.7),
# Claude for faithfulness
FaithfulnessMetric(model="anthropic:claude-3-5-sonnet-latest", threshold=0.7),
# Gemini for custom evaluation
CustomEvalMetric(
model="google:gemini-2.0-flash",
threshold=0.7,
name="Quality",
evaluation_criteria=[
"{{actual_output}} прямо отвечает на {{input}}",
"{{actual_output}} ясен и без филлеров",
],
),
]
Прямые вызовы LLM¶
Помимо использования в метриках, вы можете делать прямые вызовы к LLM через клиент библиотеки:
from eval_lib import chat_complete, get_embeddings
# Chat completion
response, cost = await chat_complete(
llm="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
temperature=0.7
)
# Embeddings
embeddings, cost = await get_embeddings(
model="openai:text-embedding-3-small",
texts=["Hello world", "How are you?"]
)
Переопределение учётных данных для отдельного запроса¶
chat_complete() принимает необязательные ключевые аргументы api_key, api_base и extra_kwargs, которые передаются напрямую в нижележащий вызов LiteLLM. Они перекрывают значения, которые иначе были бы взяты из переменных окружения или из LLMDescriptor, -- это рекомендуемый способ подставлять учётные данные конкретного пользователя в мульти-арендных сервисах без изменения общего os.environ.
from eval_lib import chat_complete
# Передать учётные данные на один запрос, не трогая env vars
response, cost = await chat_complete(
llm="openai:gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
api_key=user_api_key, # перекрывает OPENAI_API_KEY
api_base="https://proxy.example.com/v1", # прокси или Azure endpoint
extra_kwargs={"aws_region_name": "us-east-1"}, # специфичные флаги провайдера
)
Приоритет (выше -- побеждает):
- Явные
api_key/api_base/extra_kwargs, переданные вchat_complete() - Значения, зашитые в
LLMDescriptor(например,api_keyу Zhipu) - Переменные окружения
Область поддержки:
- Хелпер на базе LiteLLM (OpenAI, Anthropic, Google, Azure, DeepSeek, Qwen, Mistral, Groq, Grok, Zhipu и др.) принимает все три аргумента.
- Нативные хелперы (Ollama, MLX) и
CustomLLMClientигнорируют их -- учётные данные там задаются в конструкторе. - Ошибки аутентификации выбрасываются как
LLMConfigurationErrorс именем провайдера в сообщении, так что в мульти-арендной среде можно показать корректную ошибку нужному пользователю.
Отслеживание стоимости¶
Все вызовы API возвращают стоимость в долларах США, когда она доступна. Движок оценки агрегирует стоимость по всем метрикам и тестовым кейсам:
Подробнее о ценах моделей см. Стоимость моделей.