Введение в 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-приложений.
Для дальнейшего изучения рекомендуем ознакомиться с оригинальными источниками и документацией, связанными с этим проектом.