← Материалы разборы Yersham
разбор · статьятема-фронтир · H 1.58
6.0
из 10
смотреть не обязательно — забрать выжимку и пункты
оценка машинная и частично зависит от длины ролика — спорите, открывайте оригинал

Guardrails: валидация и исправление выходов LLM

Guards

Guardrails — библиотека для валидации и исправления выходов LLM, оборачивает вызовы, поддерживает Pydantic, повторные запросы и интеграцию с LangChain.

Guardrails — библиотека для валидации и исправления выходов LLM, оборачивает вызовы, поддерживает Pydantic, повторные запросы и интеграцию с LangChain.

что из этого моё

Guardrails можно применить для автоматической проверки и исправления ответов LLM в оркестрации: задать схемы ответов через Pydantic, настроить повторные запросы при несоответствии, и встроить в LangChain-цепочки. Это повысит надёжность выходов агентов и снизит ручную проверку.

Что забрать
отметь, что берёшь в работу → или отбрось как не своёмоё →
обернуть вызов LLM в Guard.for_pydantic с Pydantic-схемой ответа
настроить num_reasks в Guard.configure для контроля повторных запросов
интегрировать Guard с LangChain через to_runnable() в цепочки
расшифровка ролика ↓

Title:

URL Source: https://raw.githubusercontent.com/guardrails-ai/guardrails/main/docs/api_reference/guards.md

Markdown Content: # Guards

## Guard

```python class Guard(IGuard, Generic[OT]) ```

The Guard class.

This class is the main entry point for using Guardrails. It can be initialized by one of the following patterns:

- `Guard().use(...)` - `Guard.for_string(...)` - `Guard.for_pydantic(...)` - `Guard.for_rail(...)` - `Guard.for_rail_string(...)`

The `__call__` method functions as a wrapper around LLM APIs. It takes in an LLM API, and optional prompt parameters, and returns a ValidationOutcome class that contains the raw output from the LLM, the validated output, as well as other helpful information.

#### \_\_init\_\_

```python def __init__(*, id: Optional[str] = None, name: Optional[str] = None, description: Optional[str] = None, validators: Optional[List[ValidatorReference]] = None, output_schema: Optional[Dict[str, Any]] = None, base_url: Optional[str] = None, api_key: Optional[str] = None, history_max_length: Optional[int] = None, use_server: Optional[bool] = None) ```

Initialize the Guard with serialized validator references and an output schema.

Output schema must be a valid JSON Schema.

#### configure

```python def configure(*, num_reasks: Optional[int] = None, allow_metrics_collection: Optional[bool] = None) ```

Configure the Guard.

**Arguments**:

- `num_reasks` _int, optional_ - The max times to re-ask the LLM if validation fails. Defaults to None. - `allow_metrics_collection` _bool, optional_ - Whether to allow Guardrails to collect anonymous metrics. Defaults to None, and falls back to waht is set via the `guardrails configure` command.

#### for\_rail

```python @classmethod def for_rail(cls, rail_file: str, *, name: Optional[str] = None, description: Optional[str] = None) ```

Create a Guard using a `.rail` file to specify the output schema, prompt, etc.

**Arguments**:

- `rail_file` - The path to the `.rail` file. - `name` _str, optional_ - A unique name for this Guard. Defaults to `gr-` + the object id. - `description` _str, optional_ - A description for this Guard. Defaults to None.

**Returns**:

An instance of the `Guard` class.

#### for\_rail\_string

```python @classmethod def for_rail_string(cls, rail_string: str, *, name: Optional[str] = None, description: Optional[str] = None) ```

Create a Guard using a `.rail` string to specify the output schema, prompt, etc..

**Arguments**:

- `rail_string` - The `.rail` string. - `name` _str, optional_ - A unique name for this Guard. Defaults to `gr-` + the object id. - `description` _str, optional_ - A description for this Guard. Defaults to None.

**Returns**:

An instance of the `Guard` class.

#### for\_pydantic

```python @classmethod def for_pydantic(cls, output_class: ModelOrListOfModels, *, reask_messages: Optional[List[Dict]] = None, messages: Optional[List[Dict]] = None, name: Optional[str] = None, description: Optional[str] = None, output_formatter: Optional[Union[str, BaseFormatter]] = None) ```

Create a Guard instance using a Pydantic model to specify the output schema.

**Arguments**:

- `output_class` - (Union[Type[BaseModel], List[Type[BaseModel]]]): The pydantic model that describes the desired structure of the output. - `messages` _List[Dict], optional_ - A list of messages to give to the llm. Defaults to None. - `reask_messages` _List[Dict], optional_ - A list of messages to use during reasks. Defaults to None. - `name` _str, optional_ - A unique name for this Guard. Defaults to `gr-` + the object id. - `description` _str, optional_ - A description for this Guard. Defaults to None. - `output_formatter` _str | Formatter, optional_ - 'none' (default), 'jsonformer', or a Guardrails Formatter.

#### for\_string

```python @classmethod def for_string(cls, validators: Sequence[Validator], *, string_description: Optional[str] = None, reask_messages: Optional[List[Dict]] = None, messages: Optional[List[Dict]] = None, name: Optional[str] = None, description: Optional[str] = None) ```

Create a Guard instance for a string response.

**Arguments**:

- `validators` - (List[Validator]): The list of validators to apply to the string output. - `string_description` _str, optional_ - A description for the string to be generated. Defaults to None. - `messages` _List[Dict], optional_ - A list of messages to pass to llm. Defaults to None. - `reask_messages` _List[Dict], optional_ - A list of messages to use during reasks. Defaults to None. - `name` _str, optional_ - A unique name for this Guard. Defaults to `gr-` + the object id. - `description` _str, optional_ - A description for this Guard. Defaults to None.

#### \_\_call\_\_

```python @trace(name="/guard_call", origin="Guard.__call__") def __call__( llm_api: Optional[Callable] = None, *args, prompt_params: Optional[Dict] = None, num_reasks: Optional[int] = 1, messages: Optional[List[Dict]] = None, metadata: Optional[Dict] = None, full_schema_reask: Optional[bool] = None, **kwargs ) -> Union[ValidationOutcome[OT], Iterator[ValidationOutcome[OT]]] ```

Call the LLM and validate the output.

**Arguments**:

- `llm_api` - The LLM API to call (e.g. openai.completions.create or openai.Completion.acreate) - `prompt_params` - The parameters to pass to the prompt.format() method. - `num_reasks` - The max times to re-ask the LLM for invalid output. - `messages` - The message history to pass to the LLM. - `metadata` - Metadata to pass to the validators. - `full_schema_reask` - When reasking, whether to regenerate the full schema or just the incorrect values. Defaults to `True` if a base model is provided, `False` otherwise.

**Returns**:

ValidationOutcome

#### parse

```python @trace(name="/guard_call", origin="Guard.parse") def parse(llm_output: str, *args, metadata: Optional[Dict] = None, llm_api: Optional[Callable] = None, num_reasks: Optional[int] = None, prompt_params: Optional[Dict] = None, full_schema_reask: Optional[bool] = None, **kwargs) -> ValidationOutcome[OT] ```

Alternate flow to using Guard where the llm_output is known.

**Arguments**:

- `llm_output` - The output being parsed and validated. - `metadata` - Metadata to pass to the validators. - `llm_api` - The LLM API to call (e.g. openai.completions.create or openai.Completion.acreate) - `num_reasks` - The max times to re-ask the LLM for invalid output. - `prompt_params` - The parameters to pass to the prompt.format() method. - `full_schema_reask` - When reasking, whether to regenerate the full schema or just the incorrect values.

**Returns**:

ValidationOutcome

#### error\_spans\_in\_output

```python def error_spans_in_output() -> List[ErrorSpan] ```

Get the error spans in the last output.

#### use

```python def use(*validator_spread: Validator, validators: List[Validator] = [], on: str = "output") -> "Guard" ```

Applies validators to the property specified in the `on` argument. Calling `Guard.use` with the same `on` value multiple times will overwrite previously configured validators on the specified property.

**Arguments**:

*validator_spread: One or more validators passed as positional arguments to use. validators: Keyword argument that allows explicitly setting a list of validators to use. on: The property to validate. Valid options include "output", "messages", or a JSON path starting with "$.". Defaults to "output".

#### get\_validators

```python def get_validators(on: str) -> List[Validator] ```

The read-only counterpart to `Guard.use`. Retrieves the validators applied to the specified property.

**Arguments**:

- `on` - The property for which to return configured validators. Valid options include "output", "messages", or a JSON path starting with "$.".

#### validate

```python @trace(name="/guard_call", origin="Guard.validate") def validate(llm_output: str, *args, **kwargs) -> ValidationOutcome[OT] ```

#### to\_runnable

```python def to_runnable() -> Runnable ```

Convert a Guard to a LangChain Runnable.

#### to\_dict

```python def to_dict() -> Dict[str, Any] ```

#### json\_function\_calling\_tool

```python def json_function_calling_tool( tools: Optional[list] = None) -> List[Dict[str, Any]] ```

Appends an OpenAI tool that specifies the output structure using JSON Schema for chat models.

#### from\_dict

```python @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional["Guard"] ```

## AsyncGuard

```python class AsyncGuard(Guard, Generic[OT]) ```

The AsyncGuard class.

This class one of the main entry point for using Guardrails. It is initialized from one of the following class methods:

- `for_rail` - `for_rail_string` - `for_pydantic` - `for_string`

The `__call__` method functions as a wrapper around LLM APIs. It takes in an Async LLM API, and optional prompt parameters, and returns the raw output stream from the LLM and the validated output stream.

#### \_\_init\_\_

```python def __init__(*args, **kwargs) ```

#### for\_pydantic

```python @classmethod def for_pydantic(cls, output_class: ModelOrListOfModels, *, messages: Optional[List[Dict]] = None, reask_messages: Optional[List[Dict]] = None, name: Optional[str] = None, description: Optional[str] = None, output_formatter: Optional[Union[str, BaseFormatter]] = None) ```

#### for\_string

```python @classmethod def for_string(cls, validators: Sequence[Validator], *, string_description: Optional[str] = None, messages: Optional[List[Dict]] = None, reask_messages: Optional[List[Dict]] = None, name: Optional[str] = None, description: Optional[str] = None) ```

#### from\_dict

```python @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional["AsyncGuard"] ```

#### use

```python def use(*validator_spread: Validator, validators: List[Validator] = [], on: str = "output") -> "AsyncGuard" ```

#### \_\_call\_\_

```python @async_trace(name="/guard_call", origin="AsyncGuard.__call__") async def __call__( llm_api: Optional[Callable[..., Awaitable[Any]]] = None, *args, prompt_params: Optional[Dict] = None, num_reasks: Optional[int] = 1, messages: Optional[List[Dict]] = None, metadata: Optional[Dict] = None, full_schema_reask: Optional[bool] = None, **kwargs ) -> Union[ ValidationOutcome[OT], Awaitable[ValidationOutcome[OT]], AsyncIterator[ValidationOutcome[OT]], ] ```

Call the LLM and validate the output. Pass an async LLM API to return a coroutine.

**Arguments**:

- `llm_api` - The LLM API to call (e.g. openai.completions.create or openai.chat.completions.create) - `prompt_params` - The parameters to pass to the prompt.format() method. - `num_reasks` - The max times to re-ask the LLM for invalid output. - `messages` - The message history to pass to the LLM. - `metadata` - Metadata to pass to the validators. - `full_schema_reask` - When reasking, whether to regenerate the full schema or just the incorrect values. Defaults to `True` if a base model is provided, `False` otherwise.

**Returns**:

The raw text output from the LLM and the validated output.

#### parse

```python @async_trace(name="/guard_call", origin="AsyncGuard.parse") async def parse(llm_output: str, *args, metadata: Optional[Dict] = None, llm_api: Optional[Callable[..., Awaitable[Any]]] = None, num_reasks: Optional[int] = None, prompt_params: Optional[Dict] = None, full_schema_reask: Optional[bool] = None, **kwargs) -> Awaitable[ValidationOutcome[OT]] ```

Alternate flow to using AsyncGuard where the llm_output is known.

**Arguments**:

- `llm_output` - The output being parsed and validated. - `metadata` - Metadata to pass to the validators. - `llm_api` - The LLM API to call (e.g. openai.completions.create or openai.Completion.acreate) - `num_reasks` - The max times to re-ask the LLM for invalid output. - `prompt_params` - The parameters to pass to the prompt.format() method. - `full_schema_reask` - When reasking, whether to regenerate the full schema or just the incorrect values.

**Returns**:

The validated response. This is either a string or a dictionary, determined by the object schema defined in the RAILspec.

#### validate

```python @async_trace(name="/guard_call", origin="AsyncGuard.validate") async def validate(llm_output: str, *args, **kwargs) -> Awaitable[ValidationOutcome[OT]] ```

## ValidationOutcome

```python class ValidationOutcome(IValidationOutcome, ArbitraryModel, Generic[OT]) ```

The final output from a Guard execution.

**Attributes**:

- `call_id` - The id of the Call that produced this ValidationOutcome. - `raw_llm_output` - The raw, unchanged output from the LLM call. - `validated_output` - The validated, and potentially fixed, output from the LLM call after passing through validation. - `reask` - If validation continuously fails and all allocated reasks are used, this field will contain the final reask that would have been sent to the LLM if additional reasks were available. - `validation_passed` - A boolean to indicate whether or not the LLM output passed validation. If this is False, the validated_output may be invalid. - `error` - If the validation failed, this field will contain the error message

#### from\_guard\_history

```python @classmethod def from_guard_history(cls, call: Call) ```

Create a ValidationOutcome from a history Call object.

дальше в дело
Собрать это в маршрут
все маршруты →
не хочешь разбираться сам
Сделаю это под задачу
форматы и цены →
ещё разборы