GitHub Copilot

يدعم Microsoft Agent Framework إنشاء عوامل تستخدم GitHub Copilot SDK كواجهة خلفية لها. يوفر وكلاء GitHub Copilot الوصول إلى قدرات الذكاء الاصطناعي القوية الموجهة نحو الترميز، بما في ذلك تنفيذ أوامر shell، وعمليات الملفات، وجلب عنوان URL، وتكامل خادم بروتوكول سياق النموذج (MCP).

Important

يتطلب GitHub Copilot العوامل وقت تشغيل GitHub Copilot مصادق عليه. تستخدم بعض SDKs CLI مثبتا، بينما يستخدم Go SDK وقت التشغيل المجمع بشكل افتراضي. للأمان، يوصى بتشغيل عوامل بأذونات shell أو الملف في بيئة حاوية (Docker/Dev Container).

الشروع في العمل

أضف حزم NuGet المطلوبة إلى مشروعك.

dotnet add package Microsoft.Agents.AI.GitHub.Copilot

إنشاء عامل GitHub Copilot

كخطوة أولى، قم بإنشاء CopilotClient وبدء تشغيله. ثم استخدم أسلوب الملحق AsAIAgent لإنشاء عامل.

using GitHub.Copilot;
using Microsoft.Agents.AI;

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

AIAgent agent = copilotClient.AsAIAgent(sessionConfig: null);

Console.WriteLine(await agent.RunAsync("What is Microsoft Agent Framework?"));

باستخدام الأدوات والإرشادات

يمكنك توفير أدوات الدالة والإرشادات المخصصة عند إنشاء العامل:

using GitHub.Copilot;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

AIFunction weatherTool = AIFunctionFactory.Create((string location) =>
{
    return $"The weather in {location} is sunny with a high of 25C.";
}, "GetWeather", "Get the weather for a given location.");

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

AIAgent agent = copilotClient.AsAIAgent(
    tools: [weatherTool],
    instructions: "You are a helpful weather agent.");

Console.WriteLine(await agent.RunAsync("What's the weather like in Seattle?"));

ميزات العامل

استجابات الدفق

احصل على الاستجابات عند إنشائها:

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

AIAgent agent = copilotClient.AsAIAgent(sessionConfig: null);

await foreach (AgentResponseUpdate update in agent.RunStreamingAsync("Tell me a short story."))
{
    Console.Write(update);
}

Console.WriteLine();

إدارة الجلسة

الحفاظ على سياق المحادثة عبر تفاعلات متعددة باستخدام جلسات العمل:

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

await using GitHubCopilotAgent agent = new(
    copilotClient,
    instructions: "You are a helpful assistant. Keep your answers short.");

AgentSession session = await agent.CreateSessionAsync();

// First turn
await agent.RunAsync("My name is Alice.", session);

// Second turn - agent remembers the context
AgentResponse response = await agent.RunAsync("What is my name?", session);
Console.WriteLine(response); // Should mention "Alice"

الأذونات

بشكل افتراضي، لا يمكن للعامل تنفيذ أوامر shell أو قراءة/كتابة الملفات أو إحضار عناوين URL. لتمكين هذه الإمكانات، قم بتوفير معالج أذونات عبر SessionConfig:

static Task<PermissionDecision> PromptPermission(
    PermissionRequest request, PermissionInvocation invocation)
{
    Console.WriteLine($"\n[Permission Request: {request.Kind}]");
    Console.Write("Approve? (y/n): ");

    string? input = Console.ReadLine()?.Trim().ToUpperInvariant();
    PermissionDecision decision = input is "Y" or "YES"
        ? PermissionDecision.ApproveOnce()
        : PermissionDecision.Reject();

    return Task.FromResult(decision);
}

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

SessionConfig sessionConfig = new()
{
    OnPermissionRequest = PromptPermission,
};

AIAgent agent = copilotClient.AsAIAgent(sessionConfig);

Console.WriteLine(await agent.RunAsync("List all files in the current directory"));

الموافقة على الأداة

نظرا لأن GitHub Copilot SDK تمتلك حلقة استدعاء الأدوات، يتم فرض الموافقة على أدوات الوظائف المخصصة من خلال خطاف ما قبل التنفيذ الأصلي ل SDK بدلا من الموافقة القياسية على إطار عمل العامل ذهابا وإيابا. عند تسجيل أداة ملتفة في ApprovalRequiredAIFunction، يقوم العامل بتثبيت خطاف افتراضي OnPreToolUse يرجع "ask" لتلك الأداة ويوجه القرار إلى المعالج الخاص بك OnPermissionRequest :

using GitHub.Copilot;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

AIFunction deleteFile = AIFunctionFactory.Create(
    (string path) => $"Deleted {path}.",
    "DeleteFile",
    "Deletes a file.");

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

SessionConfig sessionConfig = new()
{
    // Wrapping the tool marks it approval-required; the agent turns this into an "ask" at OnPreToolUse.
    Tools = [new ApprovalRequiredAIFunction(deleteFile)],

    // OnPermissionRequest decides the "asked" tools (and Copilot's built-in shell/file/URL prompts).
    OnPermissionRequest = PromptPermission,
};

AIAgent agent = copilotClient.AsAIAgent(sessionConfig);

Console.WriteLine(await agent.RunAsync("Delete the file temp.txt"));

تحذير

إذا قمت بتوفير خطاف خاص OnPreToolUse بك عبر SessionConfig.Hooks، فإنه يأخذ الأسبقية ولا يقوم العامل بتثبيت خطاف الموافقة الافتراضي الخاص به. ثم تكون مسؤولا بالكامل عن فرض الموافقة على أي ApprovalRequiredAIFunction تسجيل قمت بتسجيله (على سبيل المثال، عن طريق إرجاع قرار "deny" أو "ask" ). يسجل العامل تحذيرا بتسمية أي أداة مطلوبة للموافقة يجب أن يتعامل معها خطافك.

خوادم MCP

الاتصال بخوادم MCP المحلية (stdio) أو البعيدة (HTTP) للحصول على إمكانيات موسعة:

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

SessionConfig sessionConfig = new()
{
    OnPermissionRequest = PromptPermission,
    McpServers = new Dictionary<string, McpServerConfig>
    {
        // Local stdio server
        ["filesystem"] = new McpStdioServerConfig
        {
            Command = "npx",
            Args = ["-y", "@modelcontextprotocol/server-filesystem", "."],
            Tools = ["*"],
        },
        // Remote HTTP server
        ["microsoft-learn"] = new McpHttpServerConfig
        {
            Url = "https://learn.microsoft.com/api/mcp",
            Tools = ["*"],
        },
    },
};

AIAgent agent = copilotClient.AsAIAgent(sessionConfig);

Console.WriteLine(await agent.RunAsync("Search Microsoft Learn for 'Azure Functions' and summarize the top result"));

Tip

راجع نماذج .NET للحصول على أمثلة كاملة قابلة للتشغيل.

ادوات

الأداة Status Notes
أدوات الدالة مثيلات قياسية AIFunction .
الموافقة على الأداة المقدمة من عميل الدردشة لاستدعاء وظيفة إطار العمل؛ يعمل مع أي استدعاء أداة دالة.
مترجم شفرة ليست قدرة Copilot CLI.
البحث عن الملفات ليست قدرة Copilot CLI.
بحث الويب غير مكشوف كأداة مستضافة.
Shell / نظام الملفات / إحضار عنوان URL مضمن في وقت تشغيل Copilot CLI ومدخل بواسطة معالج الأذونات الذي توفره.
أدوات MCP المستضافة خوادم MCP البعيدة (HTTP) المكونة عبر SessionConfig.McpServers. راجع خوادم MCP.
أدوات MCP المحلية خوادم MCP المحلية (stdio) المكونة عبر SessionConfig.McpServers. راجع خوادم MCP.

استخدام العامل

العامل هو معيار AIAgent ويدعم جميع العمليات القياسية AIAgent .

لمزيد من المعلومات حول كيفية التشغيل والتفاعل مع الوكلاء، راجع البرامج التعليمية لبدء تشغيل العامل.

المتطلبات الأساسية

تثبيت حزمة GitHub Copilot إطار عمل عامل Microsoft.

pip install agent-framework-github-copilot

الإعداد

يمكن تكوين العامل اختياريا باستخدام متغيرات البيئة التالية:

المتغير Description
GITHUB_COPILOT_CLI_PATH المسار إلى Copilot CLI القابل للتنفيذ
GITHUB_COPILOT_MODEL نموذج لاستخدامه (على سبيل المثال، ، gpt-5، claude-sonnet-4)
GITHUB_COPILOT_TIMEOUT مهلة الطلب بالثوان
GITHUB_COPILOT_LOG_LEVEL مستوى سجل CLI
GITHUB_COPILOT_BASE_DIRECTORY دليل لحالة جلسة CLI والتهيئة (الإعدادات الافتراضية إلى ~/.copilot)

الشروع في العمل

استيراد الفئات المطلوبة من إطار عمل العامل:

import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

إنشاء عامل GitHub Copilot

إنشاء عامل أساسي

أبسط طريقة لإنشاء عامل Copilot GitHub:

async def basic_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
    )

    async with agent:
        result = await agent.run("What is Microsoft Agent Framework?")
        print(result)

مع تكوين صريح

يمكنك توفير تكوين صريح من خلال default_options:

async def explicit_config_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
        default_options={
            "model": "gpt-5",
            "timeout": 120,
        },
    )

    async with agent:
        result = await agent.run("What can you do?")
        print(result)

Tip

default_options(وكل تشغيل options) إعادة توجيه أي معلمة مقبولة من قبل Copilot SDK create_session — على سبيل المثال reasoning_effort، أو context_tierenable_citationsأو provider (إحضار المفتاح الخاص بك) أو skill_directories — وليس فقط المفاتيح المعروضة هنا. أسماء المعلمات غير المعروفة ترفع TypeError، لذلك يتم اكتشاف الأخطاء الكتابية بدلا من تجاهلها بصمت.

إحضار المفتاح الخاص بك (BYOK)

استخدم دعم BYOK Copilot SDK لتوجيه طلبات النموذج من خلال OpenAI أو Azure OpenAI أو Anthropic أو نقطة النهاية المتوافقة مع OpenAI بدلا من الواجهة الخلفية GitHub Copilot. مرر من ProviderConfig خلال GitHubCopilotOptions(provider=...)، وقم بتعيين نفس معرف النموذج في كل من تكوين الموفر والخيار على مستوى model الجلسة.

يستخدم النموذج القابل للتشغيل متغيرات البيئة هذه:

المتغير Description
BYOK_PROVIDER_TYPE نوع الموفر: openaiأو azureأو anthropic. تتغير افتراضيا إلى openai.
BYOK_BASE_URL عنوان URL الأساسي لنقطة نهاية الموفر.
BYOK_API_KEY مفتاح واجهة برمجة التطبيقات الثابت لنقطة نهاية الموفر.
BYOK_MODEL_ID معرف النموذج المطلوب. تتغير افتراضيا إلى gpt-4o.

تحذير

يستخدم BYOK بيانات اعتماد ثابتة ولا يوفر تحديثا تلقائيا للرمز المميز. الاحتفاظ بمفاتيح API خارج التحكم بالمصادر وتحميلها من متغيرات البيئة أو مخزن سري. يتم تعقب الاستخدام والفوترة من قبل موفر الخدمة بدلا من GitHub.

import asyncio
import os
from typing import Literal, cast

from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
from copilot.session import ProviderConfig


async def main() -> None:
    print("=== GitHub Copilot Agent with BYOK (Bring Your Own Key) ===\n")

    model_id = os.environ.get("BYOK_MODEL_ID", "gpt-4o")
    provider_type = cast(Literal["openai", "azure", "anthropic"], os.environ.get("BYOK_PROVIDER_TYPE", "openai"))

    # ProviderConfig routes the session through a custom endpoint instead of the GitHub
    # Copilot backend. `wire_api="completions"` is the broadly compatible choice; use
    # "responses" for providers that support the OpenAI Responses API.
    provider: ProviderConfig = {
        "type": provider_type,
        "base_url": os.environ["BYOK_BASE_URL"],
        "api_key": os.environ["BYOK_API_KEY"],
        "wire_api": "completions",
        "model_id": model_id,
    }

    # BYOK requires the model to also be set at the session level.
    agent: GitHubCopilotAgent[GitHubCopilotOptions] = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
        default_options=GitHubCopilotOptions(model=model_id, provider=provider),
    )

    async with agent:
        query = "What are the benefits of using your own API keys with an agent framework?"
        print(f"User: {query}")
        result = await agent.run(query)
        print(f"\nAgent: {result}\n")

ميزات العامل

موفرو السياق

GitHubCopilotAgent يدعم context_providers=[...]Python أيضا . يعمل الموفرون قبل وبعد كل استدعاء، لذلك يتم تضمين الرسائل والإرشادات التي أضافها الموفر في طلب Copilot ويمكن لموفري المحفوظات مراقبة الاستجابة النهائية.

from agent_framework import InMemoryHistoryProvider

agent = GitHubCopilotAgent(
    instructions="You are a helpful coding assistant.",
    context_providers=[InMemoryHistoryProvider()],
)

يمكنك دمج موفري المحفوظات المضمنين مع موفري السياق المخصصين. للحصول على أنماط التنفيذ، راجع موفري السياق.

أدوات الدالة

تجهيز وكيلك بوظائف مخصصة:

from typing import Annotated
from pydantic import Field

def get_weather(
    location: Annotated[str, Field(description="The location to get the weather for.")],
) -> str:
    """Get the weather for a given location."""
    return f"The weather in {location} is sunny with a high of 25C."

async def tools_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful weather agent.",
        tools=[get_weather],
    )

    async with agent:
        result = await agent.run("What's the weather like in Seattle?")
        print(result)

استجابات الدفق

احصل على الاستجابات عند إنشائها للحصول على تجربة مستخدم أفضل:

async def streaming_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
    )

    async with agent:
        print("Agent: ", end="", flush=True)
        async for chunk in agent.run("Tell me a short story.", stream=True):
            if chunk.text:
                print(chunk.text, end="", flush=True)
        print()

إدارة الخيوط

الحفاظ على سياق المحادثة عبر تفاعلات متعددة:

async def thread_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
    )

    async with agent:
        session = agent.create_session()

        # First interaction
        result1 = await agent.run("My name is Alice.", session=session)
        print(f"Agent: {result1}")

        # Second interaction - agent remembers the context
        result2 = await agent.run("What's my name?", session=session)
        print(f"Agent: {result2}")  # Should remember "Alice"

الأذونات

بشكل افتراضي، لا يمكن للعامل تنفيذ أوامر shell أو قراءة/كتابة الملفات أو إحضار عناوين URL. لتمكين هذه الإمكانات، قم بتوفير معالج أذونات:

import asyncio

from copilot.generated.rpc import PermissionDecisionDeniedInteractivelyByUser
from copilot.session import PermissionHandler, PermissionRequestResult
from copilot.session_events import PermissionRequest


async def prompt_permission(
    request: PermissionRequest, context: dict[str, str]
) -> PermissionRequestResult:
    print(f"\n[Permission Request: {request.kind}]")
    response = (await asyncio.to_thread(input, "Approve? (y/n): ")).strip().lower()
    if response in ("y", "yes"):
        return PermissionHandler.approve_all(request, context)
    return PermissionDecisionDeniedInteractivelyByUser()

async def permissions_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant that can execute shell commands.",
        default_options={
            "on_permission_request": prompt_permission,
        },
    )

    async with agent:
        result = await agent.run("List the Python files in the current directory")
        print(result)

بالنسبة للبيئات الموثوق بها حيث يجب الموافقة التلقائية على جميع الأذونات، استخدم المضمن PermissionHandler.approve_all:

from copilot.session import PermissionHandler

agent = GitHubCopilotAgent(
    default_options={
        "on_permission_request": PermissionHandler.approve_all,
    },
)

تدعم معالجات الأذونات عمليات رد الاتصال المتزامنة وغير المتزامنة. استخدم asyncio.to_thread للمطالبات التفاعلية في المعالجات غير المتزامنة لتجنب حظر حلقة الحدث.

الموافقة على الأداة

نظرا لأن GitHub Copilot SDK تمتلك حلقة استدعاء الأدوات، يتم فرض الموافقة على أدوات الوظائف المخصصة من خلال خطاف ما قبل التنفيذ الأصلي ل SDK بدلا من الموافقة القياسية على إطار عمل العامل ذهابا وإيابا. عند تسجيل أداة معلنة مع approval_mode="always_require" ولا توفر خطاف الخاص on_pre_tool_use بك، يقوم العامل بتثبيت خطاف افتراضي يرجع "ask" لتلك الأداة ويوجه القرار إلى المعالج الخاص بك on_permission_request :

from agent_framework import tool
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
from copilot.session import PermissionHandler


@tool(approval_mode="always_require")
def delete_file(path: str) -> str:
    """Delete a file."""
    return f"Deleted {path}."


agent = GitHubCopilotAgent(
    tools=[delete_file],
    # The "ask" decision is routed here; approve or deny the call.
    default_options=GitHubCopilotOptions(on_permission_request=PermissionHandler.approve_all),
)

تحذير

إذا قمت بتوفير خطاف خاص on_pre_tool_use بك، فإنه يأخذ الأسبقية ولا يقوم العامل بتثبيت خطاف الموافقة الافتراضي الخاص به. ثم تكون مسؤولا بالكامل عن فرض الموافقة على أي approval_mode="always_require" أداة (على سبيل المثال، عن طريق إرجاع أو "deny""ask" قرار). يسجل العامل تحذيرا بتسمية أي أداة مطلوبة للموافقة يجب أن يتعامل معها خطافك. باستخدام معالج الأذونات رفض الكل الافتراضي، always_require يتم رفض أداة ما لم تقم بربط الموافقة on_permission_request.

خوادم MCP

الاتصال بخوادم MCP المحلية (stdio) أو البعيدة (HTTP) للحصول على إمكانيات موسعة:

from copilot.session import MCPServerConfig, PermissionHandler

async def mcp_example():
    mcp_servers: dict[str, MCPServerConfig] = {
        # Local stdio server
        "filesystem": {
            "type": "stdio",
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-filesystem", "."],
            "tools": ["*"],
        },
        # Remote HTTP server
        "microsoft-learn": {
            "type": "http",
            "url": "https://learn.microsoft.com/api/mcp",
            "tools": ["*"],
        },
    }

    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant with access to the filesystem and Microsoft Learn.",
        default_options={
            "on_permission_request": PermissionHandler.approve_all,
            "mcp_servers": mcp_servers,
        },
    )

    async with agent:
        result = await agent.run("Search Microsoft Learn for 'Azure Functions' and summarize the top result")
        print(result)

قابلية الرصد

GitHubCopilotAgent يحتوي على تتبع OpenTelemetry مضمن. اتصل configure_otel_providers() مرة واحدة عند بدء التشغيل لتمكين الامتدادات والمقاييس والسجلات لكل تشغيل:

from agent_framework.observability import configure_otel_providers
from agent_framework.github import GitHubCopilotAgent

configure_otel_providers(enable_console_exporters=True)

async with GitHubCopilotAgent() as agent:
    response = await agent.run("Hello!")

إذا كنت بحاجة إلى العامل الأساسي دون طبقة بيانات تتبع الاستخدام (على سبيل المثال لتضمينها في طبقة مخصصة)، فاستورد RawGitHubCopilotAgent من agent_framework.github.

بالنسبة لمصدري OTLP والأمثلة الأغنى، راجع عينات إمكانية الملاحظة.

ادوات

الأداة Status Notes
أدوات الدالة Python القياسية القابلة للاستدعاء أو @ai_function.
الموافقة على الأداة المقدمة من عميل الدردشة لاستدعاء وظيفة إطار العمل؛ يعمل مع أي استدعاء أداة دالة.
مترجم شفرة ليست قدرة Copilot CLI.
البحث عن الملفات ليست قدرة Copilot CLI.
بحث الويب غير مكشوف كأداة مستضافة.
Shell / نظام الملفات / إحضار عنوان URL مضمن في وقت تشغيل Copilot CLI ومدخل بواسطة معالج الأذونات الذي توفره.
أدوات MCP المستضافة خوادم MCP البعيدة (HTTP) المكونة عبر default_options["mcp_servers"]. راجع خوادم MCP.
أدوات MCP المحلية خوادم MCP المحلية (stdio) المكونة عبر default_options["mcp_servers"]. راجع خوادم MCP.

استخدام العامل

العامل هو معيار BaseAgent ويدعم جميع عمليات الوكيل القياسية.

لمزيد من المعلومات حول كيفية التشغيل والتفاعل مع الوكلاء، راجع البرامج التعليمية لبدء تشغيل العامل.

الشروع في العمل

قم بتثبيت الوحدة النمطية Microsoft Agent Framework Go وSDK GitHub Copilot ل Go. يتطلب Agent Framework Go SDK Go 1.25 أو أحدث.

go get github.com/microsoft/agent-framework-go github.com/github/copilot-sdk/go

إنشاء عامل GitHub Copilot

قم بإنشاء وبدء copilot.Clientتشغيل ، ثم قم بتمريره إلى copilotprovider.NewAgent.

import (
    "context"
    "fmt"

    copilot "github.com/github/copilot-sdk/go"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
)

ctx := context.Background()

copilotClient := copilot.NewClient(nil)
if err := copilotClient.Start(ctx); err != nil {
    panic(err)
}
defer func() { _ = copilotClient.Stop() }()

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        Instructions: "You are a helpful assistant.",
    },
)

response, err := copilotAgent.RunText(ctx, "What is Microsoft Agent Framework?").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

باستخدام الأدوات والإرشادات

يمكنك توفير أدوات الدالة والإرشادات المخصصة عند إنشاء العامل:

import (
    "context"
    "fmt"

    copilot "github.com/github/copilot-sdk/go"
    "github.com/microsoft/agent-framework-go/agent"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
    "github.com/microsoft/agent-framework-go/tool"
    "github.com/microsoft/agent-framework-go/tool/functool"
)

weatherTool := functool.MustNew(
    functool.Config{
        Name:        "GetWeather",
        Description: "Get the weather for a given location.",
    },
    func(_ context.Context, location string) (string, error) {
        return fmt.Sprintf("The weather in %s is sunny with a high of 25C.", location), nil
    },
)

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        Instructions: "You are a helpful weather agent.",
        Config: agent.Config{
            Tools: []tool.Tool{weatherTool},
        },
    },
)

response, err := copilotAgent.RunText(ctx, "What's the weather like in Seattle?").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

ميزات العامل

استجابات الدفق

احصل على الاستجابات عند إنشائها:

for update, err := range copilotAgent.RunText(ctx, "Tell me a short story.", agent.Stream(true)) {
    if err != nil {
        panic(err)
    }
    fmt.Print(update)
}

fmt.Println()

إدارة الجلسة

الحفاظ على سياق المحادثة عبر تفاعلات متعددة باستخدام جلسات العمل:

session, err := copilotAgent.CreateSession(ctx)
if err != nil {
    panic(err)
}

// First turn
response, err := copilotAgent.RunText(ctx, "My name is Alice.", agent.WithSession(session)).Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

// Second turn - the agent remembers the context
response, err = copilotAgent.RunText(ctx, "What is my name?", agent.WithSession(session)).Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

الأذونات

بشكل افتراضي، لا يمكن للعامل تنفيذ أوامر shell أو قراءة/كتابة الملفات أو إحضار عناوين URL. لتمكين هذه الإمكانات، قم بتوفير معالج أذونات عبر copilot.SessionConfig:

import (
    "bufio"
    "fmt"
    "os"
    "strings"

    copilot "github.com/github/copilot-sdk/go"
    "github.com/github/copilot-sdk/go/rpc"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
)

func promptPermission(request copilot.PermissionRequest, _ copilot.PermissionInvocation) (rpc.PermissionDecision, error) {
    fmt.Printf("\n[Permission Request: %s]\n", request.Kind())
    fmt.Print("Approve? (y/n): ")

    input, _ := bufio.NewReader(os.Stdin).ReadString('\n')
    input = strings.TrimSpace(strings.ToUpper(input))
    if input == "Y" || input == "YES" {
        return &rpc.PermissionDecisionApproveOnce{}, nil
    }
    return &rpc.PermissionDecisionReject{}, nil
}

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        SessionConfig: &copilot.SessionConfig{
            OnPermissionRequest: promptPermission,
        },
    },
)

response, err := copilotAgent.RunText(ctx, "List all files in the current directory").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

خوادم MCP

الاتصال بخوادم MCP المحلية (stdio) أو البعيدة (HTTP) للحصول على إمكانيات موسعة:

import (
    copilot "github.com/github/copilot-sdk/go"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
)

mcpServers := map[string]copilot.MCPServerConfig{
    // Local stdio server
    "filesystem": copilot.MCPStdioServerConfig{
        Command: "npx",
        Args:    []string{"-y", "@modelcontextprotocol/server-filesystem", "."},
        Tools:   []string{"*"},
    },
    // Remote HTTP server
    "microsoft-learn": copilot.MCPHTTPServerConfig{
        URL:   "https://learn.microsoft.com/api/mcp",
        Tools: []string{"*"},
    },
}

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        Instructions: "You are a helpful assistant with access to the filesystem and Microsoft Learn.",
        SessionConfig: &copilot.SessionConfig{
            OnPermissionRequest: promptPermission,
            MCPServers:          mcpServers,
        },
    },
)

response, err := copilotAgent.RunText(ctx, "Search Microsoft Learn for 'Azure Functions' and summarize the top result").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

Tip

راجع نموذج Go GitHub Copilot للحصول على مثال كامل قابل للتشغيل.

ادوات

الأداة Status Notes
أدوات الدالة مثيلات Go tool.Tool القياسية، بما في ذلك functool الوظائف.
الموافقة على الأداة يمكن أن تستخدم أدوات الدالة دعم الموافقة على أداة Go القياسية؛ تتم معالجة أذونات وقت التشغيل Copilot بواسطة SessionConfig.OnPermissionRequest.
مترجم شفرة ليست قدرة Copilot CLI.
البحث عن الملفات ليست قدرة Copilot CLI.
بحث الويب غير مكشوف كأداة مستضافة.
Shell / نظام الملفات / إحضار عنوان URL مضمن في وقت تشغيل Copilot CLI ومدخل بواسطة معالج الأذونات الذي توفره.
أدوات MCP المستضافة خوادم MCP البعيدة (HTTP) المكونة عبر copilot.SessionConfig.MCPServers. راجع خوادم MCP.
أدوات MCP المحلية خوادم MCP المحلية (stdio) المكونة عبر copilot.SessionConfig.MCPServers. راجع خوادم MCP.

استخدام العامل

العامل هو معيار *agent.Agent ويدعم جميع عمليات الوكيل القياسية.

لمزيد من المعلومات حول كيفية التشغيل والتفاعل مع الوكلاء، راجع البرامج التعليمية لبدء تشغيل العامل.

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