Изучение семантического ядра CopilotStudioAgent

Это важно

Эта функция находится на экспериментальном этапе. Функции на этом этапе находятся в стадии разработки и могут измениться перед переходом к этапу предварительного просмотра или релиз-кандидата.

Подробная документация по API, связанная с этим обсуждением, доступна по адресу:

Скоро появится агент CopilotStudio для .NET.

Обновленная документация API скоро появится.

Функция в настоящее время недоступна в Java.

Что такое CopilotStudioAgent?

Это CopilotStudioAgent точка интеграции в рамках семантического ядра, которая обеспечивает простое взаимодействие с агентами Microsoft Copilot Studio с помощью программных API. Этот агент позволяет:

  • Автоматизация бесед и вызов существующих агентов Copilot Studio из кода Python.
  • Поддерживать богатую историю бесед с помощью потоков, сохраняя контекст между сообщениями.
  • Используйте расширенные возможности получения знаний, поиска в Интернете и интеграции данных, доступные в Microsoft Copilot Studio.

Замечание

Чтобы получить доступ к агенту, необходимо настроить источники знаний и средства в Microsoft Copilot Studio.

Подготовка среды разработки

Для разработки с помощью CopilotStudioAgent необходимо правильно настроить окружение и аутентификацию.

Скоро появится агент CopilotStudio для .NET.

Предпосылки

  1. Python 3.10 или более поздней версии
  2. Семантическое ядро с зависимостями Copilot Studio:
pip install semantic-kernel[copilotstudio]
  1. Агент Microsoft Copilot Studio :

    • Создайте агент в Microsoft Copilot Studio.
    • Опубликуйте вашего агента, и после Settings → Advanced → Metadata получите:
      • Schema Name (используется в качестве agent_identifier)
      • Environment ID
  2. Регистрация приложения Azure Entra ID ("Собственное приложение", для интерактивного входа) с CopilotStudio.Copilots.Invoke делегированными разрешениями.

Переменные среды

Задайте следующие переменные в среде или .env файле:

COPILOT_STUDIO_AGENT_APP_CLIENT_ID=<your-app-client-id>
COPILOT_STUDIO_AGENT_TENANT_ID=<your-tenant-id>
COPILOT_STUDIO_AGENT_ENVIRONMENT_ID=<your-env-id>
COPILOT_STUDIO_AGENT_AGENT_IDENTIFIER=<your-agent-id>
COPILOT_STUDIO_AGENT_AUTH_MODE=interactive

Подсказка

Дополнительные сведения о разрешениях см. в статье "Проверка подлинности API Power Platform ".

Функция в настоящее время недоступна в Java.

Создание и настройка CopilotStudioAgent клиента

Вы можете полагаться на переменные среды для большинства конфигураций, но при необходимости можно явно создать и настроить клиент агента.

Скоро появится агент CopilotStudio для .NET.

Базовое использование — управляемое переменной среды

from semantic_kernel.agents import CopilotStudioAgent

agent = CopilotStudioAgent(
    name="PhysicsAgent",
    instructions="You help answer questions about physics.",
)

Если заданы переменные среды, не требуется явной настройки клиента.

Явное построение клиента

Переопределите конфигурацию или используйте пользовательское удостоверение:

from semantic_kernel.agents import CopilotStudioAgent

client = CopilotStudioAgent.create_client(
    auth_mode="interactive",  # or use CopilotStudioAgentAuthMode.INTERACTIVE
    agent_identifier="<schema-name>",
    app_client_id="<client-id>",
    tenant_id="<tenant-id>",
    environment_id="<env-id>",
)

agent = CopilotStudioAgent(
    client=client,
    name="CustomAgent",
    instructions="You help answer custom questions.",
)

Функция в настоящее время недоступна в Java.

Взаимодействие с приложением CopilotStudioAgent

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

Скоро появится агент CopilotStudio для .NET.

Базовый пример

import asyncio
from semantic_kernel.agents import CopilotStudioAgent

async def main():
    agent = CopilotStudioAgent(
        name="PhysicsAgent",
        instructions="You help answer questions about physics.",
    )

    USER_INPUTS = [
        "Why is the sky blue?",
        "What is the speed of light?",
    ]

    for user_input in USER_INPUTS:
        print(f"# User: {user_input}")
        response = await agent.get_response(messages=user_input)
        print(f"# {response.name}: {response}")

asyncio.run(main())

Поддержание контекста с помощью потоков

Чтобы сохранить состояние беседы, выполните следующие действия:

import asyncio
from semantic_kernel.agents import CopilotStudioAgent, CopilotStudioAgentThread

async def main():
    agent = CopilotStudioAgent(
        name="PhysicsAgent",
        instructions="You help answer questions about physics.",
    )

    USER_INPUTS = [
        "Hello! Who are you? My name is John Doe.",
        "What is the speed of light?",
        "What have we been talking about?",
        "What is my name?",
    ]

    thread: CopilotStudioAgentThread | None = None

    for user_input in USER_INPUTS:
        print(f"# User: {user_input}")
        response = await agent.get_response(messages=user_input, thread=thread)
        print(f"# {response.name}: {response}")
        thread = response.thread

    if thread:
        await thread.delete()

asyncio.run(main())

Использование аргументов и шаблонов запросов

import asyncio
from semantic_kernel.agents import CopilotStudioAgent, CopilotStudioAgentThread
from semantic_kernel.contents import ChatMessageContent
from semantic_kernel.functions import KernelArguments
from semantic_kernel.prompt_template import PromptTemplateConfig

async def main():
    agent = CopilotStudioAgent(
        name="JokeAgent",
        instructions="You are a joker. Tell kid-friendly jokes.",
        prompt_template_config=PromptTemplateConfig(template="Craft jokes about {{$topic}}"),
    )

    USER_INPUTS = [
        ChatMessageContent(role="user", content="Tell me a joke to make me laugh.")
    ]

    thread: CopilotStudioAgentThread | None = None

    for user_input in USER_INPUTS:
        print(f"# User: {user_input}")
        response = await agent.get_response(
            messages=user_input,
            thread=thread,
            arguments=KernelArguments(topic="pirate"),
        )
        print(f"# {response.name}: {response}")
        thread = response.thread

    if thread:
        await thread.delete()

asyncio.run(main())

Перебор потоковой передачи (не поддерживается)

Замечание

Передача ответов в потоковом режиме в настоящее время не поддерживается CopilotStudioAgent.

Использование плагинов с CopilotStudioAgent

Семантический ядро позволяет составить агенты и подключаемые модули. Хотя основная расширяемость для Copilot Studio поставляется через саму студию, вы можете создавать подключаемые модули, как и другие агенты.

Скоро появится агент CopilotStudio для .NET.

from semantic_kernel.functions import kernel_function
from semantic_kernel.agents import CopilotStudioAgent

class SamplePlugin:
    @kernel_function(description="Provides sample data.")
    def get_data(self) -> str:
        return "Sample data from custom plugin"

agent = CopilotStudioAgent(
    name="PluggedInAgent",
    instructions="Demonstrate plugins.",
    plugins=[SamplePlugin()],
)

Функция в настоящее время недоступна в Java.

Дополнительные функции

Можно CopilotStudioAgent использовать расширенные возможности Copilot Studio в зависимости от того, как целевой агент настроен в среде Studio:

  • Получение знаний — отвечает на основе предварительно настроенных источников знаний в Студии.
  • Поиск в Интернете — если веб-поиск включен в агенте Studio, запросы будут использовать поиск Bing.
  • Пользовательская аутентификация или API — с помощью подключаемых модулей Power Platform и Studio; Прямая привязка OpenAPI в настоящее время не является приоритетной в интеграции SK.

Скоро появится агент CopilotStudio для .NET.

Извлечение знаний

Не требуется конкретный код Python; источники знаний должны быть настроены в Copilot Studio. Если сообщения пользователей требуют фактов из этих источников, агент вернет информацию соответствующим образом.

Настройте Copilot в Студии, чтобы разрешить поиск Bing. Затем используйте приведенные выше сведения. Дополнительные сведения о настройке поиска Bing см. в следующем руководстве.

from semantic_kernel.agents import CopilotStudioAgent, CopilotStudioAgentThread

agent = CopilotStudioAgent(
    name="WebSearchAgent",
    instructions="Help answer the user's questions by searching the web.",
)

USER_INPUTS = ["Which team won the 2025 NCAA Basketball championship?"]

thread: CopilotStudioAgentThread | None = None

for user_input in USER_INPUTS:
    print(f"# User: {user_input}")
    # Note: Only non-streamed responses are supported
    response = await agent.get_response(messages=user_input, thread=thread)
    print(f"# {response.name}: {response}")
    thread = response.thread

if thread:
    await thread.delete()

Функция в настоящее время недоступна в Java.

Инструкции

Практические примеры использования CopilotStudioAgentкода см. в примерах кода на GitHub:

Скоро появится агент CopilotStudio для .NET.

Функция в настоящее время недоступна в Java.


Примечания:

  • Дополнительные сведения или устранение неполадок см. в документации по Microsoft Copilot Studio.
  • Только функции и средства, которые отдельно включены и опубликованы в агенте Studio, будут доступны через интерфейс семантического ядра.
  • Потоковая передача, развертывание подключаемых модулей и программное добавление инструментов планируются для будущих выпусков.

Дальнейшие шаги