# Лучшие практики

Рекомендации по разработке качественных агентов.

## Проектирование

### Один агент — одна область

```
✅ Хорошо:
- Кадровый агент (отпуска, командировки)
- Бухгалтерский агент (счета, оплаты)

❌ Плохо:
- Универсальный агент (всё сразу)
```

### Чёткие границы ответственности

```
Кадровый агент:
✅ Отпуска, командировки, справки
❌ Оплата счетов (это бухгалтерия)
❌ Техническая поддержка
```

## Промпты

### Структурируйте промпт

```
1. Роль (кто ты)
2. Задачи (что делаешь)
3. Правила (как делаешь)
4. Ограничения (чего не делаешь)
5. Формат (как отвечаешь)
```

### Используйте примеры

```
ПРИМЕР:
Пользователь: Сколько отпуска?
Ты: [вызываешь инструмент] У вас 14 дней.
```

### Обрабатывайте краевые случаи

```
ЕСЛИ ДАННЫХ НЕТ:
"К сожалению, не нашёл информацию по вашему запросу.
Уточните параметры или обратитесь к специалисту."
```

## Инструменты

### Атомарность

```
✅ Хорошо:
- Получить остаток отпуска
- Создать заявку на отпуск

❌ Плохо:
- Работа с отпусками (слишком общо)
```

### Понятные описания

```
✅ Хорошо:
"Возвращает остаток дней отпуска для сотрудника.
Используй, когда спрашивают об отпуске."

❌ Плохо:
"Отпуск"
```

### Обработка ошибок

```bsl
Попытка
    // Основной код
Исключение
    Возврат Новый Структура("Ошибка", ОписаниеОшибки());
КонецПопытки;
```

## Безопасность

### Подтверждение действий

```
Перед созданием документа:
1. Покажи параметры
2. Запроси подтверждение
3. Только потом создавай
```

### Ограничение доступа

* Добавляйте пользователей к агентам
* Ограничивайте доступность инструментов
* Логируйте все действия

### Валидация данных

```bsl
// Проверяйте входные параметры
Если ПустаяСтрока(Параметры.Сотрудник) Тогда
    Возврат Новый Структура("Ошибка", "Не указан сотрудник");
КонецЕсли;
```

## Производительность

### Оптимизируйте запросы

```bsl
// Используйте индексы
// Ограничивайте выборку
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 100 ...";
```

### Кэшируйте где возможно

```bsl
// Для редко меняющихся данных
Если ЗначениеЗаполнено(КэшированноеЗначение) Тогда
    Возврат КэшированноеЗначение;
КонецЕсли;
```

### Используйте подходящую модель

| Задача          | Модель      |
| --------------- | ----------- |
| Простые ответы  | GPT-4o-mini |
| Сложный анализ  | GPT-4o      |
| Конфиденциально | Ollama      |

## Тестирование

### Регрессионные тесты

```
Тест 1: Базовый запрос
Тест 2: Запрос с инструментом
Тест 3: Некорректный запрос
Тест 4: Граничные случаи
```

### Тестирование на пользователях

1. Запустите в тестовом режиме
2. Соберите обратную связь
3. Улучшите на основе фидбека

## Мониторинг

### Отслеживайте метрики

* Количество запросов
* Время ответа
* Частота ошибок
* Использование инструментов

### Анализируйте логи

* Неудачные запросы
* Частые ошибки
* Паттерны использования

## Далее

{% content-ref url="/pages/CJ9yzUSQRFkfvGB4Spfm" %}
[Broken mention](broken://pages/CJ9yzUSQRFkfvGB4Spfm)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.onerpa.ru/ai-platforma-oneapa/razrabotka-agentov/luchshie-praktiki.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
