Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Изучение семантического ядра
Это важно
Эта функция находится на экспериментальном этапе. Функции на этом этапе находятся в стадии разработки и могут измениться перед переходом к этапу предварительного просмотра или релиз-кандидата.
Скоро появится
OpenAIResponsesAgent.
Подсказка
Подробная документация по API, связанная с этим обсуждением, доступна по адресу:
Функция в настоящее время недоступна в Java.
Что такое агент ответов?
API ответов OpenAI — это самый сложный интерфейс OpenAI для создания ответов модели. Он поддерживает входные данные текста и изображения, а также текстовые выходные данные. Вы можете создавать взаимодействия с моделью с отслеживанием состояния, используя выходные данные предыдущих ответов в качестве входных данных. Кроме того, можно расширить возможности модели с помощью встроенных средств для поиска файлов, поиска в Интернете, использования компьютера и т. д.
Подготовка среды разработки
Чтобы продолжить разработку OpenAIResponsesAgent, настройте среду разработки с соответствующими пакетами.
Скоро появится
OpenAIResponsesAgent.
Установите пакет semantic-kernel.
pip install semantic-kernel
Это важно
Он OpenAIResponsesAgent поддерживается в пакетах Python для семантического ядра версии 1.27.0 и выше.
Функция в настоящее время недоступна в Java.
Создание объекта OpenAIResponsesAgent
Чтобы создать OpenAIResponsesAgent, необходимо сначала создать клиента, чтобы иметь возможность общаться с удаленной службой.
Скоро появится
OpenAIResponsesAgent.
Чтобы настроить модель, используемую API ответов OpenAI или Azure OpenAI, добавляются новые переменные среды:
OPENAI_RESPONSES_MODEL_ID=""
AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME=""
Задайте соответствующую переменную в зависимости от того, какой поставщик вы используете.
Подсказка
Минимально допустимая версия Azure OpenAI API — 2025-03-01-preview. Перейдите по следующей ссылке , чтобы просмотреть доступность региона, поддержку моделей и дополнительные сведения.
Чтобы создать AzureResponsesAgent, который можно использовать с моделями Azure OpenAI, выполните следующие действия.
from semantic_kernel.agents import AzureResponsesAgent
from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings, OpenAISettings
# Set up the client and model using Azure OpenAI Resources
client = AzureResponsesAgent.create_client()
# Create the AzureResponsesAgent instance using the client and the model
agent = AzureResponsesAgent(
ai_model_id=AzureOpenAISettings().responses_deployment_name,
client=client,
instructions="your instructions",
name="name",
)
В качестве альтернативы, чтобы создать OpenAIResponsesAgent для использования с моделями OpenAI:
from semantic_kernel.agents import OpenAIResponsesAgent
# Set up the client and model using OpenAI Resources
client = OpenAIResponsesAgent.create_client()
# Create the OpenAIResponsesAgent instance using the client and the model
agent = OpenAIResponsesAgent(
ai_model_id=OpenAISettings().responses_model_id,
client=client,
instructions="your instructions",
name="name",
)
Функция в настоящее время недоступна в Java.
Использование OpenAIResponsesAgent
Скоро появится
OpenAIResponsesAgent.
API ответов OpenAI поддерживает необязательное удаленное хранилище бесед. По умолчанию при использовании ResponsesAgentThreadответы хранятся удаленно. Это позволяет использовать API ответов previous_response_id для поддержания контекста для всех вызовов.
Каждая беседа рассматривается как поток, определяемый уникальным идентификатором строки. Все взаимодействия с вашим OpenAIResponsesAgent ограничиваются этим идентификатором потока.
Базовая механика потока API ответов абстрагируется классом ResponsesAgentThread , который реализует AgentThread интерфейс.
В настоящее время OpenAIResponsesAgent поддерживает только потоки типа ResponsesAgentThread.
Можно вызвать OpenAIResponsesAgent без указания AgentThread, чтобы запустить новый поток, и в ответе на вызов будет возвращен новый AgentThread.
from semantic_kernel.agents import AzureResponsesAgent
# Set up the client and model using Azure OpenAI Resources
client = AzureResponsesAgent.create_client()
# Create the AzureResponsesAgent instance using the client and the model
agent = AzureResponsesAgent(
ai_model_id=AzureOpenAISettings().responses_deployment_name,
client=client,
instructions="your instructions",
name="name",
)
USER_INPUTS = [
"My name is John Doe.",
"Tell me a joke",
"Explain why this is funny.",
"What have we been talking about?",
]
thread = None
# Generate the agent response(s)
for user_input in USER_INPUTS:
print(f"# User: '{user_input}'")
# Invoke the agent for the current message and print the response
response = await agent.get_response(messages=user_input, thread=thread)
print(f"# {response.name}: {response.content}")
# Update the thread so the previous response id is used
thread = response.thread
# Delete the thread when it is no longer needed
await thread.delete() if thread else None
Функция в настоящее время недоступна в Java.
Обработка промежуточных сообщений с помощью OpenAIResponsesAgent
Семантические ядра OpenAIResponsesAgent предназначены для вызова агента, выполняющего запросы пользователей или вопросы. Во время вызова агент может использовать инструменты для получения окончательного ответа. Чтобы получить доступ к промежуточным сообщениям, созданным во время этого процесса, вызывающие могут предоставить функцию обратного вызова, которая обрабатывает экземпляры FunctionCallContent или FunctionResultContent.
Скоро появится
OpenAIResponsesAgent.
Настройка обратного вызова on_intermediate_message в agent.invoke(...) или agent.invoke_stream(...) позволяет вызывающему объекту получать промежуточные сообщения, создаваемые в процессе формирования окончательного ответа агента.
import asyncio
from typing import Annotated
from semantic_kernel.agents import AzureResponsesAgent
from semantic_kernel.contents import AuthorRole, FunctionCallContent, FunctionResultContent
from semantic_kernel.contents.chat_message_content import ChatMessageContent
from semantic_kernel.functions import kernel_function
# Define a sample plugin for the sample
class MenuPlugin:
"""A sample Menu Plugin used for the concept sample."""
@kernel_function(description="Provides a list of specials from the menu.")
def get_specials(self) -> Annotated[str, "Returns the specials from the menu."]:
return """
Special Soup: Clam Chowder
Special Salad: Cobb Salad
Special Drink: Chai Tea
"""
@kernel_function(description="Provides the price of the requested menu item.")
def get_item_price(
self, menu_item: Annotated[str, "The name of the menu item."]
) -> Annotated[str, "Returns the price of the menu item."]:
return "$9.99"
# This callback function will be called for each intermediate message,
# which will allow one to handle FunctionCallContent and FunctionResultContent.
# If the callback is not provided, the agent will return the final response
# with no intermediate tool call steps.
async def handle_intermediate_steps(message: ChatMessageContent) -> None:
for item in message.items or []:
if isinstance(item, FunctionResultContent):
print(f"Function Result:> {item.result} for function: {item.name}")
elif isinstance(item, FunctionCallContent):
print(f"Function Call:> {item.name} with arguments: {item.arguments}")
else:
print(f"{item}")
async def main():
# 1. Create the client using Azure OpenAI resources and configuration
client = AzureResponsesAgent.create_client()
# 2. Create a Semantic Kernel agent for the OpenAI Responses API
agent = AzureResponsesAgent(
ai_model_id=AzureOpenAISettings().responses_deployment_name,
client=client,
name="Host",
instructions="Answer questions about the menu.",
plugins=[MenuPlugin()],
)
# 3. Create a thread for the agent
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread = None
user_inputs = ["Hello", "What is the special soup?", "What is the special drink?", "How much is that?", "Thank you"]
try:
for user_input in user_inputs:
print(f"# {AuthorRole.USER}: '{user_input}'")
async for response in agent.invoke(
messages=user_input,
thread=thread,
on_intermediate_message=handle_intermediate_steps,
):
thread = response.thread
print(f"# {response.name}: {response.content}")
finally:
await thread.delete() if thread else None
if __name__ == "__main__":
asyncio.run(main())
Ниже приведен пример выходных данных из процесса вызова агента:
AuthorRole.USER: 'Hello'
Host: Hi there! How can I assist you with the menu today?
AuthorRole.USER: 'What is the special soup?'
Function Call:> MenuPlugin-get_specials with arguments: {}
Function Result:>
Special Soup: Clam Chowder
Special Salad: Cobb Salad
Special Drink: Chai Tea
for function: MenuPlugin-get_specials
Host: The special soup is Clam Chowder. Would you like to know more about any other specials?
AuthorRole.USER: 'What is the special drink?'
Host: The special drink is Chai Tea. Would you like any more information?
AuthorRole.USER: 'How much is that?'
Function Call:> MenuPlugin-get_item_price with arguments: {"menu_item":"Chai Tea"}
Function Result:> $9.99 for function: MenuPlugin-get_item_price
Host: The Chai Tea is $9.99. Is there anything else you would like to know?
AuthorRole.USER: 'Thank you'
Host: You're welcome! If you have any more questions, feel free to ask. Enjoy your day!
Функция в настоящее время недоступна в Java.
Декларативная спецификация
В ближайшее время будет представлена документация по использованию декларативных спецификаций.
Это важно
Эта функция находится на экспериментальном этапе. Функции на этом этапе находятся в стадии разработки и могут измениться перед переходом к этапу предварительного просмотра или релиз-кандидата.
Элемент OpenAIResponsesAgent поддерживает создание экземпляров из декларативной спецификации YAML. Декларативный подход позволяет определить свойства агента, инструкции, конфигурацию модели, средства и другие параметры в одном, проверяемом документе. Это делает состав агента переносимым и легко управляемым в разных средах.
Замечание
Все средства, функции или подключаемые модули, перечисленные в декларативном YAML, должны быть доступны агенту во время строительства. Для плагинов на основе ядра это означает, что они должны быть зарегистрированы в ядре. Для встроенных инструментов, таких как интерпретатор кода или поиск файлов, необходимо указать правильную конфигурацию и учетные данные. Загрузчик агента не создаст функции с нуля. Если обязательный компонент отсутствует, создание агента не удастся.
Как использовать декларативную спецификацию
Вместо перечисления каждой возможной конфигурации YAML в этом разделе описываются основные принципы и приводятся ссылки на примеры концепций, показывающие полный код для каждого типа инструмента. Ознакомьтесь с этими примерами концепции для комплексных реализаций OpenAIResponsesAgent декларативных спецификаций:
AzureResponsesAgent Образцы:
OpenAIResponsesAgent Образцы:
Пример. Создание AzureAIAgent из YAML
Минимальное декларативное представление YAML может выглядеть следующим образом:
type: openai_responses
name: Host
instructions: Respond politely to the user's questions.
model:
id: ${OpenAI:ChatModelId}
tools:
- id: MenuPlugin.get_specials
type: function
- id: MenuPlugin.get_item_price
type: function
Дополнительные сведения о подключении агента можно найти в приведённых выше полных образцах кода.
Основные моменты
- Декларативные спецификации позволяют определять структуру агента, средства и поведение в YAML.
- Все указанные средства и подключаемые модули должны быть зарегистрированы или доступны во время выполнения.
- Встроенные средства, такие как Bing, поиск файлов и интерпретатор кода, требуют надлежащей настройки и учетных данных (часто через переменные среды или явные аргументы).
- Полные примеры см. в приведенных примерах ссылок, демонстрирующих практические сценарии, включая регистрацию подключаемых модулей, конфигурацию удостоверений Azure и расширенное использование средств.
Эта функция недоступна.