Itinai.com it development details code screens blured futuris ee00b4e7 f2cd 46ad 90ca 3140ca10c792 1

Отслеживание ответов агентов OpenAI с помощью MLflow

Itinai.com it development details code screens blured futuris ee00b4e7 f2cd 46ad 90ca 3140ca10c792 1

Введение в MLflow

MLflow — это мощная платформа с открытым исходным кодом, предназначенная для управления и отслеживания экспериментов в области машинного обучения. В сочетании с OpenAI Agents SDK, MLflow автоматически фиксирует все взаимодействия агентов и вызовы API, что значительно упрощает процесс разработки и отладки многоагентных систем.

Практическое применение MLflow

Когда вы работаете с несколькими агентами, которые взаимодействуют друг с другом, важно отслеживать их поведение и результаты. MLflow позволяет:

  • Логировать все взаимодействия агентов и вызовы API;
  • Фиксировать использование инструментов, входные и выходные сообщения, а также промежуточные решения;
  • Отслеживать запуски для отладки, анализа производительности и воспроизводимости.

Пример многоагентной системы

Рассмотрим сценарий, где мы создаем многоагентного помощника, который направляет запросы пользователей к экспертам по программированию и кулинарии. Используя mlflow.openai.autolog(), мы можем автоматически отслеживать все взаимодействия с OpenAI API, включая входные и выходные данные, а также передачи между агентами.

import mlflow, asyncio
from agents import Agent, Runner
import os
from dotenv import load_dotenv
load_dotenv()

mlflow.openai.autolog()  # Автоотслеживание каждого вызова OpenAI
mlflow.set_tracking_uri("./mlruns")
mlflow.set_experiment("Agent-Coding-Cooking")

coding_agent = Agent(name="Coding agent", instructions="You only answer coding questions.")
cooking_agent = Agent(name="Cooking agent", instructions="You only answer cooking questions.")

triage_agent = Agent(
    name="Triage agent",
    instructions="If the request is about code, handoff to coding_agent; if about cooking, handoff to cooking_agent.",
    handoffs=[coding_agent, cooking_agent],
)

async def main():
    res = await Runner.run(triage_agent, input="How do I boil pasta al dente?")
    print(res.final_output)

if __name__ == "__main__":
    asyncio.run(main())

Просмотр интерфейса MLflow

Чтобы открыть интерфейс MLflow и просмотреть все зафиксированные взаимодействия агентов, выполните команду:

mlflow ui

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

Пример с защитными механизмами

Теперь рассмотрим пример, где мы реализуем защитный механизм для агента поддержки клиентов. Этот агент помогает пользователям с общими запросами, но ограничен в ответах на медицинские вопросы. Специальный агент-проверка будет блокировать такие запросы, а MLflow зафиксирует весь процесс.

import mlflow, asyncio
from pydantic import BaseModel
from agents import (
    Agent, Runner,
    GuardrailFunctionOutput, InputGuardrailTripwireTriggered,
    input_guardrail, RunContextWrapper)

from dotenv import load_dotenv
load_dotenv()

mlflow.openai.autolog()
mlflow.set_tracking_uri("./mlruns")
mlflow.set_experiment("Agent-Guardrails")

class MedicalSymptoms(BaseModel):
    medical_symptoms: bool
    reasoning: str

guardrail_agent = Agent(
    name="Guardrail check",
    instructions="Check if the user is asking you for medical symptoms.",
    output_type=MedicalSymptoms,
)

@input_guardrail
async def medical_guardrail(ctx: RunContextWrapper[None], agent: Agent, input):
    result = await Runner.run(guardrail_agent, input, context=ctx.context)
    return GuardrailFunctionOutput(
        output_info=result.final_output,
        tripwire_triggered=result.final_output.medical_symptoms,
    )

agent = Agent(
    name="Customer support agent",
    instructions="You are a customer support agent. You help customers with their questions.",
    input_guardrails=[medical_guardrail],
)

async def main():
    try:
        await Runner.run(agent, "Should I take aspirin if I'm having a headache?")
        print("Guardrail didn't trip - this is unexpected")
    except InputGuardrailTripwireTriggered:
        print("Medical guardrail tripped")

if __name__ == "__main__":
    asyncio.run(main())

Просмотр интерфейса MLflow для защитных механизмов

Запустите команду mlflow ui в новом терминале, чтобы открыть интерфейс MLflow и просмотреть все зафиксированные взаимодействия агентов. В этом примере, когда агент получает вопрос: «Стоит ли мне принимать аспирин, если у меня болит голова?», срабатывает защитный механизм. Интерфейс MLflow четко показывает, что ввод был отмечен, а также объяснение, предоставленное агентом-проверкой, о том, почему запрос был заблокирован.

Заключение

В этой статье мы продемонстрировали, как отслеживать ответы агентов OpenAI с помощью MLflow, показав как многоагентную систему, так и реализацию защитных механизмов. Используя возможности MLflow, разработчики могут повысить надежность и безопасность AI-приложений.

Для дальнейшего изучения рекомендуем ознакомиться с оригинальными источниками и документацией, связанными с этим проектом.

Новости в сфере искусственного интеллекта