تتبع استجابات وكلاء OpenAI باستخدام منصة MLflow
يُعدّ MLflow منصة مفتوحة المصدر لإدارة وتتبع تجارب تعلم الآلة. عند استخدامه مع مجموعة أدوات تطوير وكلاء OpenAI (OpenAI Agents SDK)، يقوم MLflow تلقائيًا بما يلي:
- تسجيل جميع تفاعلات الوكيل ونداءات واجهة برمجة التطبيقات (API): يتم تسجيل كل تفاعل بين الوكيل والمستخدم، بالإضافة إلى جميع النداءات التي يقوم بها الوكيل لخدمات OpenAI.
- التقاط استخدام الأدوات، ورسائل الإدخال/الإخراج، والقرارات الوسيطة: يوثق MLflow كل خطوة من خطوات عملية اتخاذ القرار، بما في ذلك استخدام أي أدوات خارجية، ورسائل الإدخال والإخراج، بالإضافة إلى القرارات التي يتخذها الوكيل خلال العملية.
- تتبع عمليات التشغيل للتصحيح، وتحليل الأداء، وإعادة الإنتاج: يسهل MLflow عملية تتبع سير عمل الوكيل، مما يسمح بتحليل الأداء وتصحيح الأخطاء بسهولة، بالإضافة إلى ضمان إمكانية إعادة إنتاج النتائج.
تُعد هذه الميزة مفيدة بشكل خاص عند بناء أنظمة متعددة الوكلاء حيث يتعاون وكلاء مختلفون أو ينادون وظائف ديناميكيًا. في هذا البرنامج التعليمي، سنتناول مثالين رئيسيين: عملية تسليم بسيطة بين الوكلاء، واستخدام قيود الوكيل (Agent Guardrails) – مع تتبع سلوكهم باستخدام MLflow.
إعداد التبعيات وتثبيت المكتبات
لتبدأ، ستحتاج إلى تثبيت المكتبات اللازمة باستخدام الأمر التالي:
pip install openai-agents mlflow pydantic pydotenv
مفتاح واجهة برمجة تطبيقات OpenAI (API Key)
للحصول على مفتاح API من OpenAI، قم بزيارة https://platform.openai.com/settings/organization/api-keys وقم بإنشاء مفتاح جديد. إذا كنت مستخدمًا جديدًا، فقد تحتاج إلى إضافة تفاصيل الفوترة وإجراء دفع أدنى قدره 5 دولارات لتنشيط الوصول إلى واجهة برمجة التطبيقات. بمجرد إنشاء المفتاح، أنشئ ملفًا باسم .env وأدخل ما يلي:
OPENAI_API_KEY = <YOUR_API_KEY>
استبدل <YOUR_API_KEY> بالمفتاح الذي قمت بإنشائه.
نظام متعدد الوكلاء (multi_agent_demo.py)
في هذا البرنامج النصي (multi_agent_demo.py)، نقوم ببناء مساعد بسيط متعدد الوكلاء باستخدام مجموعة أدوات تطوير وكلاء OpenAI، مصمم لتوجيه استفسارات المستخدم إما إلى خبير ترميز أو خبير طهي. نقوم بتمكين mlflow.openai.autolog()، والذي يتتبع ويسجل تلقائيًا جميع تفاعلات الوكيل مع واجهة برمجة تطبيقات OpenAI – بما في ذلك المدخلات والمخرجات وتسليمات الوكيل – مما يسهل مراقبة النظام و تصحيحه. تم تكوين MLflow لاستخدام معرف تتبع قائم على الملفات المحلية (./mlruns) ويسجل جميع الأنشطة تحت اسم التجربة “Agent-Coding-Cooking”.
import mlflow, asyncio
from agents import Agent, Runner
import os
from dotenv import load_dotenv
load_dotenv()
mlflow.openai.autolog() # Auto-trace every OpenAI call
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 وعرض موجه يشير إلى عنوان URL والمنفذ حيث تتوفر واجهة المستخدم – عادةً http://localhost:5000 افتراضيًا. يمكننا عرض تدفق التفاعل بأكمله في قسم “التتبع” – من إدخال المستخدم الأولي إلى كيفية توجيه المساعد للطلب إلى الوكيل المناسب، وأخيرًا، الاستجابة التي تم إنشاؤها بواسطة هذا الوكيل. يوفر هذا التتبع الشامل رؤى قيّمة في عملية صنع القرار، والتسليمات، والمخرجات، مما يساعدك على تصحيح أخطاء سير عمل الوكيل وتحسينها.
تتبع قيود الوكيل (guardrails.py)
في هذا المثال، نقوم بتنفيذ وكيل دعم عملاء محمي بقيود باستخدام مجموعة أدوات تطوير وكلاء OpenAI مع تتبع MLflow. تم تصميم الوكيل لمساعدة المستخدمين في الاستفسارات العامة ولكنه مقيد من الإجابة على الأسئلة المتعلقة بالطب. يقوم وكيل قيود مخصص بالتحقق من هذه المدخلات، وإذا تم اكتشافها، يقوم بحظر الطلب. يلتقط 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 MedicalSymptons(BaseModel):
medical_symptoms: bool
reasoning: str
guardrail_agent = Agent(
name="Guardrail check",
instructions="Check if the user is asking you for medical symptons.",
output_type=MedicalSymptons,
)
@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())
هذا البرنامج النصي يُعرّف وكيل دعم عملاء مع قيد إدخال يكتشف الأسئلة المتعلقة بالطب. يستخدم وكيل قيود منفصل guardrail_agent لتقييم ما إذا كانت إدخال المستخدم يحتوي على طلب للحصول على نصيحة طبية. إذا تم اكتشاف مثل هذا الإدخال، يتم تشغيل القيد ويمنع الوكيل الرئيسي من الاستجابة. يتم تسجيل العملية بأكملها، بما في ذلك عمليات فحص القيود ونتائجها، وتتبعها تلقائيًا باستخدام MLflow.
واجهة مستخدم MLflow
لفتح واجهة مستخدم MLflow وعرض جميع تفاعلات الوكيل المسجلة، قم بتشغيل الأمر التالي في نافذة طرفية جديدة:
mlflow ui
في هذا المثال، سألنا الوكيل، “هل يجب أن آخذ الأسبرين إذا كنت أعاني من صداع؟”، مما أدى إلى تشغيل القيد. في واجهة مستخدم MLflow، يمكننا أن نرى بوضوح أن الإدخال تم تمييزه، بالإضافة إلى المنطق الذي قدمه وكيل القيود حول سبب حظر الطلب.
راجع أكواد الأمثلة. يعود الفضل في هذا البحث إلى باحثي هذا المشروع.






اترك تعليقاً