Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Esplorazione del kernel semantico
Importante
Questa funzionalità si trova nella fase sperimentale. Le funzionalità in questa fase sono in fase di sviluppo e soggette a cambiamenti prima di passare alla fase di anteprima o alla versione candidata al rilascio.
Il
OpenAIResponsesAgent
sarà presto disponibile.
Suggerimento
La documentazione dettagliata dell'API relativa a questa discussione è disponibile all'indirizzo:
Funzionalità attualmente non disponibile in Java.
Che cos'è un agente di risposte?
L'API Risposte OpenAI è l'interfaccia più avanzata di OpenAI per la generazione di risposte del modello. Supporta input di testo e immagine e output di testo. È possibile creare interazioni con stato con il modello, usando l'output delle risposte precedenti come input. È anche possibile estendere le funzionalità del modello con strumenti predefiniti per la ricerca di file, la ricerca Web, l'uso del computer e altro ancora.
Preparazione dell'ambiente di sviluppo
Per procedere con lo sviluppo di un OpenAIResponsesAgent
, è necessario configurare l'ambiente di sviluppo con i pacchetti appropriati.
Il
OpenAIResponsesAgent
sarà presto disponibile.
Installare il pacchetto semantic-kernel
:
pip install semantic-kernel
Importante
OpenAIResponsesAgent
è supportato nei pacchetti Semantic Kernel Python 1.27.0 e versioni successive.
Funzionalità attualmente non disponibile in Java.
Creazione di un OpenAIResponsesAgent
La creazione di un oggetto OpenAIResponsesAgent
richiede prima di tutto la creazione di un client per poter comunicare un servizio remoto.
Il
OpenAIResponsesAgent
sarà presto disponibile.
Per configurare il modello usato dall'API Risposte OpenAI o OpenAI di Azure, vengono introdotte nuove variabili di ambiente:
OPENAI_RESPONSES_MODEL_ID=""
AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME=""
Impostare la variabile appropriata a seconda del provider in uso.
Suggerimento
La versione minima consentita dell'API OpenAI di Azure è 2025-03-01-preview
. Visitare il collegamento seguente per visualizzare la disponibilità dell'area, il supporto del modello e altri dettagli.
Per creare un AzureResponsesAgent
oggetto da usare con i modelli OpenAI di Azure:
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",
)
In alternativa, per creare un OpenAIResponsesAgent
oggetto da usare con i modelli 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",
)
Funzionalità attualmente non disponibile in Java.
Utilizzo di un OpenAIResponsesAgent
Il
OpenAIResponsesAgent
sarà presto disponibile.
L'API Risposte OpenAI supporta l'archiviazione remota facoltativa delle conversazioni. Per impostazione predefinita, quando si usa un ResponsesAgentThread
, le risposte vengono archiviate in modalità remota. In questo modo è possibile usare l'API delle Risposte previous_response_id
per mantenere il contesto tra le chiamate.
Ogni conversazione viene considerata come un thread, identificata da un ID stringa univoco. Tutte le interazioni con OpenAIResponsesAgent
sono limitate a questo identificatore di thread.
I meccanismi sottostanti del thread API Responses vengono astratti dalla ResponsesAgentThread
classe , che implementa l'interfaccia AgentThread
.
Il OpenAIResponsesAgent
supporta attualmente solo i thread di tipo ResponsesAgentThread
.
È possibile richiamare il OpenAIResponsesAgent
senza specificare un AgentThread
, per avviare un nuovo thread e un nuovo AgentThread
verrà restituito come parte della risposta.
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
Funzionalità attualmente non disponibile in Java.
Gestione dei messaggi intermedi con un OpenAIResponsesAgent
Il kernel OpenAIResponsesAgent
semantico è progettato per richiamare un agente che soddisfa le query o le domande degli utenti. Durante la chiamata, l'agente può eseguire strumenti per derivare la risposta finale. Per accedere ai messaggi intermedi generati durante questo processo, i chiamanti possono fornire una funzione di callback che gestisce le istanze di FunctionCallContent
o FunctionResultContent
.
Il
OpenAIResponsesAgent
sarà presto disponibile.
La configurazione del on_intermediate_message
callback all'interno agent.invoke(...)
o agent.invoke_stream(...)
consente al chiamante di ricevere messaggi intermedi generati durante il processo di simulazione della risposta finale dell'agente.
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())
Di seguito viene illustrato l'output di esempio del processo di chiamata dell'agente:
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!
Funzionalità attualmente non disponibile in Java.
Specifica dichiarativa
La documentazione sull'uso delle specifiche dichiarative sarà presto disponibile.
Importante
Questa funzionalità si trova nella fase sperimentale. Le funzionalità in questa fase sono in fase di sviluppo e soggette a cambiamenti prima di passare alla fase di anteprima o alla versione candidata al rilascio.
OpenAIResponsesAgent
supporta l'instanziazione da una specifica dichiarativa YAML. L'approccio dichiarativo consente di definire le proprietà, le istruzioni, la configurazione del modello, gli strumenti e altre opzioni in un singolo documento controllabile. Ciò rende la composizione dell'agente portatile e facilmente gestita in ambienti diversi.
Annotazioni
Tutti gli strumenti, le funzioni o i plug-in elencati nel YAML dichiarativo devono essere disponibili per l'agente in fase di costruzione. Per i plug-in basati su kernel, questo significa che devono essere registrati nel kernel. Per gli strumenti predefiniti, ad esempio Interprete codice o Ricerca file, è necessario specificare la configurazione e le credenziali corrette. Il caricatore dell'agente non creerà funzioni da zero. Se manca un componente obbligatorio, la creazione dell'agente avrà esito negativo.
Come usare la specifica dichiarativa
Anziché enumerare ogni possibile configurazione YAML, questa sezione descrive i principi chiave e fornisce collegamenti a esempi di concetti che mostrano codice completo per ogni tipo di strumento. Fare riferimento a questi esempi di concetti per le implementazioni end-to-end di un oggetto OpenAIResponsesAgent
con specifiche dichiarative:
AzureResponsesAgent
Campioni:
OpenAIResponsesAgent
Campioni:
Esempio: Creazione di un'istanza di AzureAIAgent da un file YAML
Una specifica dichiarativa YAML minima potrebbe essere simile alla seguente:
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
Per informazioni dettagliate su come collegare l'agente, consultare gli esempi di codice completi precedenti.
Punti chiave
- Le specifiche dichiarative consentono di definire la struttura dell'agente, gli strumenti e il comportamento in YAML.
- Tutti gli strumenti e i plug-in a cui si fa riferimento devono essere registrati o accessibili in fase di esecuzione.
- Gli strumenti predefiniti, ad esempio Bing, Ricerca file e Interprete del codice, richiedono la configurazione e le credenziali appropriate (spesso tramite variabili di ambiente o argomenti espliciti).
- Per esempi completi, vedere i collegamenti di esempio forniti che illustrano scenari pratici, tra cui la registrazione del plug-in, la configurazione delle identità di Azure e l'uso avanzato degli strumenti.
Questa funzionalità non è disponibile.