Модуль 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