الخطوة 6: عامل Harness

يلتف التسخير مع عميل الدردشة مع دعم يحتاج العامل إلى العمل من خلال مهام طويلة متعددة الخطوات — التخطيط / أوضاع التنفيذ، وقائمة المهام للتخطيط مقابل، وضغط السياق، وذاكرة الملف، والوصول إلى الملفات، والموافقة على أداة عدم الطلب مرة أخرى. بدلا من تجميع هذه القطع بنفسك، يمكنك إنشاء عامل تسخير وإخراجها من الصندوق.

إنشاء عامل تسخير من أي IChatClient مع أسلوب الملحق AsHarnessAgent . نظرا لأن التسخير يعمل من خلال المهام بشكل تفاعلي عبر العديد من الخطوات، فإنك عادة ما تقوده من حلقة محادثة: احتفظ AgentSession بحالة التسخير (الخطة، المهام، والمحفوظات) تستمر عبر المنعطفات، وقراءة التعليمات التالية للمستخدم، ودفق إخراج العامل أثناء إنتاجه.

using System;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

// chatClient is any IChatClient implementation (Foundry, Azure OpenAI, OpenAI, Anthropic, ...).
AIAgent agent = chatClient.AsHarnessAgent();

// A session carries the harness state (plan, todos, history) across turns.
AgentSession session = await agent.CreateSessionAsync();

Console.WriteLine("Harness agent ready. Type 'exit' to quit.");
while (true)
{
    Console.Write("> ");
    string? input = Console.ReadLine();
    if (string.IsNullOrWhiteSpace(input) || input.Equals("exit", StringComparison.OrdinalIgnoreCase))
    {
        break;
    }

    // Stream this turn's output as the harness plans and works through the request.
    await foreach (var update in agent.RunStreamingAsync(input, session))
    {
        Console.Write(update);
    }

    Console.WriteLine();
}

يعالج التسخير التخطيط وتعقب المهام واستمرار التاريخ لك عبر المحادثة بأكملها. للحصول على وحدة تحكم كاملة الميزات — مع مطالبات الموافقة على الأدوات، وعرض المهام/الوضع، والأوامر المائلة — راجع نموذج UX الطرفية.

Tip

راجع عينات .NET harness للتطبيقات القابلة للتشغيل الكامل.

ينشئ النموذج الكامل عميل دردشة Microsoft Foundry، ويلفه ب create_harness_agent، ويعيد استخدام جلسة واحدة عبر دورتين. يضيف التسخير التخطيط، to-do التعقب، والضغط بينما يقوم النموذج بتعطيل ذاكرة الملف والبحث على الويب للحفاظ على التركيز.

import asyncio

from agent_framework import create_harness_agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential


async def main() -> None:
    agent = create_harness_agent(
        client=FoundryChatClient(
            project_endpoint="https://your-account.services.ai.azure.com/api/projects/your-project",
            model="gpt-6-luna",
            credential=AzureCliCredential(),
        ),
        agent_instructions="Help users plan and complete multi-step tasks.",
        disable_file_memory=True,
        disable_web_search=True,
    )
    session = agent.create_session()

    print(await agent.run("Plan a weekend trip to Seattle.", session=session))
    print(await agent.run("Turn that plan into a checklist.", session=session))


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

تحافظ الجلسة المشتركة على حالة التسخير عبر كلا الاستدعاءين. للحصول على وحدة تحكم كاملة الميزات - مع مطالبات الموافقة على الأدوات، to-do وعرض الوضع، والأوامر المائلة - راجع نموذج UX الطرفية.

Tip

راجع نموذج بدء الاستخدام الكامل. لمزيد من الأنماط، راجع عينات تسخير Python.

Tip

agent-framework-builder-python يمكن أن توجه مهارة وكيل الترميز تكوين تسخير واختيارات الحزمة. وهي منفصلة عن مهارات عامل وقت التشغيل، والتي تظل اشتراكا Python القدرة على التسخير.

المتطلبات المسبقه

  • انتقل إلى 1.26 أو أحدث.
  • سحب محلي لمستودع Agent Framework Go.
  • نقطة نهاية مشروع Foundry ونشر النموذج، تم تكوينهما من خلال FOUNDRY_PROJECT_ENDPOINT و FOUNDRY_MODEL.
  • بيانات اعتماد Azure معتمدة من قبل DefaultAzureCredential، مثل Azure CLI تسجيل الدخول باستخدام az login.

تكوين تسخير Go

تقوم agent/harness الحزمة بتكوين عامل عادي مدعوم من الموفر. مرر نتيجة harness.AgentConfig إلى منشئ الموفر:

import (
    "context"
    "fmt"
    "os"
    "path/filepath"

    "github.com/microsoft/agent-framework-go/agent"
    "github.com/microsoft/agent-framework-go/agent/harness"
    "github.com/microsoft/agent-framework-go/examples/internal/demo"
    "github.com/microsoft/agent-framework-go/message"
    "github.com/microsoft/agent-framework-go/provider/foundryprovider"
)
    workingDirectory, err := os.Getwd()
    if err != nil {
        return fmt.Errorf("get working directory: %w", err)
    }
    cfg, err := harness.AgentConfig(harness.Config{WorkingDirectory: workingDirectory}, agent.Config{
        Name:        "HarnessAssistant",
        Middlewares: []agent.Middleware{logger},
    })
    if err != nil {
        return err
    }
    a := foundryprovider.NewAgent(
        demo.FoundryProjectEndpoint,
        demo.FoundryTokenCredential(),
        foundryprovider.ModelDeployment(demo.FoundryModel),
        foundryprovider.AgentConfig{
            Config:             cfg,
            DisableStoreOutput: true,
            Instructions:       "Help with software engineering tasks. Use memory and todos to track the current session's work.",
        },
    )

تتضمن الإعدادات الافتراضية المهام وتخطيط وتنفيذ الأوضاع وذاكرة الملفات المعزولة عن الجلسة والمهارات والبحث المستضاف على الويب والبرامج الوسيطة للموافقة على الأدوات وأجهزة القياس عن بعد المفتوح. يقوم المساعد أيضا بتمكين استمرارية محفوظات كل مكالمة خدمة وحقن الرسائل.

تعين DisableStoreOutput: true عينة Foundry هذه بحيث يمتلك التاريخ المحلي المحادثة. قم بتعيين DisableWebSearch في harness.Config إذا كان الموفر أو النشر المحدد لا يدعم بحث الويب المستضاف.

تشغيل العينة الكاملة من جذر مستودع Go:

go run .\examples\02-agents\harness\step04_composite_harness

يعيد النموذج استخدام جلسة عمل عبر دورتين، ويعالج طلبات الموافقة على الأدوات، ويفتح جلسة منفصلة لإظهار عزل الذاكرة. تستمر ذاكرة الملف ضمن agent-file-memory في دليل العمل.

الضغط والتكرار الحلقي هما الاشتراك بدلا من الإعدادات الافتراضية ل Go harness. للحصول على حدود التكوين والمكون، راجع عامل Harness.

الخطوات التالية

انتقل إلى أبعد من ذلك:

  • Agent Harnesses — الضغط، التكرار الحلقي، shell، ونموذج UX الطرفي
  • مهارات العامل - تحميل المهارات تدريجيا من نظام الملفات