Эта глава рассматривает методологии, которые позволяют интеллектуальным агентам систематически оценивать свою производительность, отслеживать прогресс в достижении целей и обнаруживать операционные аномалии. В то время как Глава 11 описывает постановку целей и мониторинг, а Глава 17 посвящена механизмам рассуждений, эта глава фокусируется на непрерывном, часто внешнем, измерении эффективности, действенности и соответствия агента требованиям. Это включает определение метрик, создание циклов обратной связи и внедрение систем отчетности для обеспечения соответствия производительности агента ожиданиям в операционных средах (см. рис. 1).

C00EF6E9-A611-4467-B130-EF4496852A08.png

                           (Изображение: Fig:1. Best practices for evaluation and monitoring)

Практическое применение и варианты использования

Наиболее распространенные приложения и варианты использования:

Практический пример кода

Разработка комплексной системы оценки для агентов ИИ — сложная задача. Тем не менее, для практической реализации можно сосредоточиться на критически важных сценариях использования, необходимых для эффективного функционирования агентов ИИ.

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

def evaluate_response_accuracy(agent_output: str, expected_output: str) -> float:
   """Рассчитывает простую оценку точности ответов агента."""
   # Это очень базовое точное совпадение; в реальном мире использовались бы более сложные метрики
   return 1.0 if agent_output.strip().lower() == expected_output.strip().lower() else 0.0

# Пример использования
agent_response = "Столица Франции - Париж."
ground_truth = "Париж является столицей Франции."
score = evaluate_response_accuracy(agent_response, ground_truth)
print(f"Точность ответа: {score}")

Функция evaluate_response_accuracy рассчитывает базовую оценку точности ответа агента ИИ, выполняя точное, регистронезависимое сравнение между выводом агента и ожидаемым выводом. Однако такой подход не учитывает вариации, такие как перефразирование или семантическая эквивалентность. В примере выше, несмотря на то, что оба предложения несут один и тот же смысл, функция вернет 0.0, поскольку строки не идентичны. Более эффективная оценка требует продвинутых методов обработки естественного языка (NLP) для выявления семантического сходства. Для реальных сценариев необходимы более сложные метрики, включая меры строкового сходства (расстояние Левенштейна), анализ ключевых слов, семантическое сходство с использованием эмбеддингов, оценку LLM-как-судьи и RAG-специфичные метрики (точность и релевантность).

Мониторинг задержки (Latency Monitoring): Мониторинг задержки для действий агента критически важен в приложениях, где скорость ответа или действия агента является ключевым фактором. Этот процесс измеряет время, необходимое агенту для обработки запросов и генерации выводов. Повышенная задержка может негативно сказаться на пользовательском опыте. Рекомендуется записывать эту информацию в постоянную систему хранения.

Отслеживание использования токенов для взаимодействий с LLM: Для агентов, работающих на LLM, отслеживание использования токенов имеет решающее значение для управления затратами и оптимизации распределения ресурсов, поскольку биллинг часто зависит от количества обработанных токенов.

# Это концептуальный пример, так как фактический подсчет токенов зависит от LLM API
class LLMInteractionMonitor:
   def __init__(self):
       self.total_input_tokens = 0
       self.total_output_tokens = 0

   def record_interaction(self, prompt: str, response: str):
       # В реальном сценарии используйте счетчик токенов LLM API или токенизатор
       input_tokens = len(prompt.split()) # Заглушка
       output_tokens = len(response.split()) # Заглушка
       self.total_input_tokens += input_tokens
       self.total_output_tokens += output_tokens
       print(f"Записано взаимодействие: Токены ввода={input_tokens}, Токены вывода={output_tokens}")

   def get_total_tokens(self):
       return self.total_input_tokens, self.total_output_tokens

# Пример использования
monitor = LLMInteractionMonitor()
monitor.record_interaction("Что является столицей Франции?", "Столицей Франции является Париж.")
monitor.record_interaction("Расскажи мне анекдот.", "Почему ученые не доверяют атомам? Потому что они составляют все!")
input_t, output_t = monitor.get_total_tokens()
print(f"Всего токенов ввода: {input_t}, Всего токенов вывода: {output_t}")

Этот класс LLMInteractionMonitor отслеживает использование токенов, имитируя подсчет по количеству слов. В реальной реализации использовались бы специализированные токенизаторы LLM API.