Модуль LLM Predictor служит оболочкой для механизмов языковой модели (LLM). Его основная цель — оптимизировать взаимодействие с различными LLM, предоставляя унифицированные интерфейсы для прогнозирования и потоковой передачи, как синхронно, так и асинхронно. Целью этой статьи является изучение архитектуры модуля и анализ вариантов дизайна, которые делают его надежным и адаптируемым.

Раздел импорта

import logging
from abc import abstractmethod, ABC
from pydantic import BaseModel, PrivateAttr
from typing import Any, List, Optional

Раздел импорта начинается со стандартных модулей Python, таких как logging и typing. Кроме того, он импортирует расширенные функции, такие как abstractmethod и ABC из модуля abc для абстрактных классов, а также BaseModel и PrivateAttr из pydantic, библиотеки проверки данных и управления настройками.

Класс BaseLLMPPredictor

class BaseLLMPredictor(BaseModel, ABC):

Это абстрактный базовый класс, наследуемый от BaseModel и ABC. Он устанавливает план для любого предиктора LLM, гарантируя, что любой производный класс должен будет реализовать абстрактные методы.

Абстрактные методы

@abstractmethod
def predict(self, prompt: Prompt, **prompt_args: Any) -> str:
    """Predict the answer to a query."""

Эти абстрактные методы гарантируют, что любой подкласс будет реализовывать эти функции, обеспечивая единообразный способ взаимодействия с различными типами LLM.

Класс LLMPredictor

class LLMPredictor(BaseLLMPredictor):

Это основной класс, который выполняет фактические операции.

Инициализация и частные атрибуты

_llm: LLM = PrivateAttr()

Класс использует PrivateAttr Pydantic, чтобы сохранить _llm в качестве закрытого атрибута. Во время инициализации он определяет тип LLM с помощью функции resolve_llm(llm), гарантируя получение правильного объекта LLM.

Переопределенные методы свойств

@property
def llm(self) -> LLM:
    """Get LLM."""
    return self._llm