Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Eksplorowanie jądra semantycznego
Ważne
Funkcje pojedynczego agenta, takie jak OpenAIAssistantAgent, znajdują się na etapie kandydata do wydania. Te funkcje są prawie kompletne i ogólnie stabilne, choć mogą przejść drobne udoskonalenia lub optymalizacje przed osiągnięciem pełnej ogólnej dostępności.
Wskazówka
Szczegółowa dokumentacja interfejsu API związana z tą dyskusją jest dostępna pod adresem:
Wskazówka
Szczegółowa dokumentacja interfejsu API związana z tą dyskusją jest dostępna pod adresem:
Funkcja jest obecnie niedostępna w języku Java.
Co to jest asystent?
Interfejs API Asystentów OpenAI to wyspecjalizowany interfejs przeznaczony dla bardziej zaawansowanych i interaktywnych funkcji sztucznej inteligencji, który umożliwia deweloperom tworzenie spersonalizowanych i wieloetapowych agentów zorientowanych na zadania. W przeciwieństwie do interfejsu API uzupełniania czatów, który koncentruje się na prostych wymianach konwersacyjnych, interfejs API Asystenta umożliwia dynamiczne interakcje oparte na celu z dodatkowymi funkcjami, takimi jak interpreter kodu i wyszukiwanie plików.
Przygotowywanie środowiska projektowego
Aby kontynuować tworzenie OpenAIAssistantAgent, skonfiguruj środowisko programistyczne za pomocą odpowiednich pakietów.
Dodaj pakiet Microsoft.SemanticKernel.Agents.OpenAI do projektu:
dotnet add package Microsoft.SemanticKernel.Agents.OpenAI --prerelease
Możesz również dołączyć pakiet Azure.Identity:
dotnet add package Azure.Identity
semantic-kernel Zainstaluj pakiet:
pip install semantic-kernel
Funkcja jest obecnie niedostępna w języku Java.
Tworzenie OpenAIAssistantAgent
Utworzenie OpenAIAssistant wymaga najpierw utworzenia klienta, aby móc komunikować się z usługą zdalną.
AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant =
await client.CreateAssistantAsync(
"<model name>",
"<agent name>",
instructions: "<agent instructions>");
OpenAIAssistantAgent agent = new(assistant, client);
from semantic_kernel.agents import AssistantAgentThread, AzureAssistantAgent, OpenAIAssistantAgent
from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings, OpenAISettings
# Set up the client and model using Azure OpenAI Resources
client = AzureAssistantAgent.create_client()
# Define the assistant definition
definition = await client.beta.assistants.create(
model=AzureOpenAISettings().chat_deployment_name,
instructions="<instructions>",
name="<agent name>",
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
# or
# Set up the client and model using OpenAI Resources
client = OpenAIAssistantAgent.create_client()
# Define the assistant definition
definition = await client.beta.assistants.create(
model=OpenAISettings().chat_model_id,
instructions="<instructions>",
name="<agent name>",
)
# Create the OpenAIAssistantAgent instance using the client and the assistant definition
agent = OpenAIAssistantAgent(
client=client,
definition=definition,
)
Funkcja jest obecnie niedostępna w języku Java.
Pobieranie elementu OpenAIAssistantAgent
Po utworzeniu identyfikator asystenta może być dostępny za pośrednictwem jego identyfikatora. Tego identyfikatora można użyć do utworzenia OpenAIAssistantAgent na podstawie istniejącej definicji asystenta.
W przypadku platformy .NET identyfikator agenta jest udostępniany jako string przez właściwość zdefiniowaną przez dowolnego agenta.
AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant = await client.GetAssistantAsync("<assistant id>");
OpenAIAssistantAgent agent = new(assistant, client);
# Using Azure OpenAI Resources
# Create the client using Azure OpenAI resources and configuration
client = AzureAssistantAgent.create_client()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=AzureOpenAISettings().chat_deployment_name,
name="<agent name>",
instructions="<instructions>",
)
# Store the assistant ID
assistant_id = definition.id
# Retrieve the assistant definition from the server based on the assistant ID
new_asst_definition = await client.beta.assistants.retrieve(assistant_id)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=new_asst_definition,
)
Funkcja jest obecnie niedostępna w języku Java.
Korzystanie z OpenAIAssistantAgent
Podobnie jak we wszystkich aspektach interfejsu API Asystenta konwersacje są przechowywane zdalnie. Każda konwersacja jest określana jako wątek i identyfikowana przez unikatowy string identyfikator. Interakcje z Twoim OpenAIAssistantAgent są powiązane z tym konkretnym identyfikatorem wątku. Specyfika wątku interfejsu API Asystenta jest abstrahowana przez klasę OpenAIAssistantAgentThread, która jest implementacją AgentThread.
Obecnie OpenAIAssistantAgent obsługuje tylko wątki typu OpenAIAssistantAgentThread.
Można wywołać element OpenAIAssistantAgent bez określenia elementu AgentThread, aby uruchomić nowy wątek, a nowy AgentThread zostanie zwrócony jako część odpowiedzi.
// Define agent
OpenAIAssistantAgent agent = ...;
AgentThread? agentThread = null;
// Generate the agent response(s)
await foreach (AgentResponseItem<ChatMessageContent> response in agent.InvokeAsync(new ChatMessageContent(AuthorRole.User, "<user input>")))
{
// Process agent response(s)...
agentThread = response.Thread;
}
// Delete the thread if no longer needed
if (agentThread is not null)
{
await agentThread.DeleteAsync();
}
Możesz również wywołać element OpenAIAssistantAgent za pomocą utworzonego elementu AgentThread .
// Define agent
OpenAIAssistantAgent agent = ...;
// Create a thread with some custom metadata.
AgentThread agentThread = new OpenAIAssistantAgentThread(client, metadata: myMetadata);
// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync(new ChatMessageContent(AuthorRole.User, "<user input>"), agentThread))
{
// Process agent response(s)...
}
// Delete the thread when it is no longer needed
await agentThread.DeleteAsync();
Można również utworzyć obiekt OpenAIAssistantAgentThread , który wznawia wcześniejszą konwersację według identyfikatora.
// Create a thread with an existing thread id.
AgentThread agentThread = new OpenAIAssistantAgentThread(client, "existing-thread-id");
from semantic_kernel.agents import AssistantAgentThread, AzureAssistantAgent
# Define agent
openai_agent = await ...
# Create a thread for the agent conversation
thread: AssistantAgentThread = None
# Generate the agent response(s)
async for response in agent.invoke(messages="user input", thread=thread):
# process agent response(s)...
thread = response.thread
# Delete the thread when it is no longer needed
await thread.delete() if thread else None
Funkcja jest obecnie niedostępna w języku Java.
Usuwanie OpenAIAssistantAgent
Ponieważ definicja asystenta jest przechowywana zdalnie, będzie ona utrwalana, jeśli nie zostanie usunięta.
Usunięcie definicji asystenta można wykonać bezpośrednio z klientem.
Uwaga: próba użycia wystąpienia agenta po usunięciu spowoduje wyjątek w działaniu usługi.
W przypadku platformy .NET, identyfikator agenta jest udostępniany jako string za pośrednictwem właściwości Agent.Id zdefiniowanej przez dowolnego agenta.
AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
await client.DeleteAssistantAsync("<assistant id>");
await client.beta.assistants.delete(agent.id)
Funkcja jest obecnie niedostępna w języku Java.
Obsługa komunikatów pośrednich za pomocą elementu OpenAIAssistantAgent
Jądro OpenAIAssistantAgent semantyczne jest przeznaczone do wywoływania agenta, który spełnia zapytania użytkownika lub pytania. Podczas wywołania agent może wykonywać narzędzia, aby uzyskać ostateczną odpowiedź. Aby uzyskać dostęp do komunikatów pośrednich generowanych podczas tego procesu, dzwoniący mogą dostarczyć funkcję zwrotną, która obsługuje wystąpienia FunctionCallContent lub FunctionResultContent.
Dokumentacja wywołania zwrotnego dla elementu
OpenAIAssistantAgentzostanie wkrótce udostępniona.
Skonfigurowanie wywołania zwrotnego on_intermediate_message w agent.invoke(...) lub agent.invoke_stream(...) umożliwia inicjującemu odbieranie komunikatów pośrednich generowanych podczas procesu formułowania ostatecznej odpowiedzi agenta.
import asyncio
from typing import Annotated
from semantic_kernel.agents import AssistantAgentThread, AzureAssistantAgent
from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings
from semantic_kernel.contents import AuthorRole, ChatMessageContent, FunctionCallContent, FunctionResultContent
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():
# Create the client using Azure OpenAI resources and configuration
client = AzureAssistantAgent.create_client()
# Define the assistant definition
definition = await client.beta.assistants.create(
model=AzureOpenAISettings().chat_deployment_name,
name="Host",
instructions="Answer questions about the menu.",
)
# Create the AzureAssistantAgent instance using the client and the assistant definition and the defined plugin
agent = AzureAssistantAgent(
client=client,
definition=definition,
plugins=[MenuPlugin()],
)
# Create a new thread for use with the assistant
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread: AssistantAgentThread = 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,
):
print(f"# {response.role}: {response}")
thread = response.thread
finally:
await thread.delete() if thread else None
await client.beta.assistants.delete(assistant_id=agent.id)
if __name__ == "__main__":
asyncio.run(main())
Poniżej przedstawiono przykładowe dane wyjściowe z procesu wywołania agenta:
AuthorRole.USER: 'Hello'
AuthorRole.ASSISTANT: Hello! How can I assist you 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
AuthorRole.ASSISTANT: The special soup is Clam Chowder. Would you like to know more about the specials or
anything else?
AuthorRole.USER: 'What is the special drink?'
AuthorRole.ASSISTANT: The special drink is Chai Tea. If you have any more questions, feel free to ask!
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
AuthorRole.ASSISTANT: The Chai Tea is priced at $9.99. If there's anything else you'd like to know,
just let me know!
AuthorRole.USER: 'Thank you'
AuthorRole.ASSISTANT: You're welcome! If you have any more questions or need further assistance, feel free to
ask. Enjoy your day!
Funkcja jest obecnie niedostępna w języku Java.
Specyfikacja deklaratywna
Dokumentacja dotycząca korzystania ze specyfikacji deklaratywnych jest dostępna wkrótce.
Ważne
Ta funkcja znajduje się na etapie eksperymentalnym. Funkcje na tym etapie są opracowywane i mogą ulec zmianie przed przejściem do etapu wersji zapoznawczej lub etapu kandydata do wydania.
Funkcja OpenAIAssistantAgent obsługuje tworzenie wystąpień ze specyfikacji deklaratywnej YAML. Podejście deklaratywne umożliwia zdefiniowanie właściwości, instrukcji agenta, konfiguracji modelu, narzędzi i innych opcji w jednym dokumencie z możliwością inspekcji. Dzięki temu kompozycja agenta jest przenośna i łatwo zarządzana w różnych środowiskach.
Uwaga / Notatka
Wszystkie narzędzia, funkcje lub wtyczki wymienione w deklaratywnym języku YAML muszą być dostępne dla agenta w czasie budowy. W przypadku wtyczek opartych na jądrach oznacza to, że muszą być zarejestrowane w jądrze. W przypadku wbudowanych narzędzi, takich jak interpreter kodu lub wyszukiwanie plików, należy podać poprawną konfigurację i poświadczenia. Moduł ładujący agenta nie utworzy funkcji od podstaw. Jeśli brakuje wymaganego składnika, tworzenie agenta zakończy się niepowodzeniem.
Jak używać specyfikacji deklaratywnej
Zamiast wyliczać każdą możliwą konfigurację YAML, w tej sekcji opisano kluczowe zasady i podano linki do przykładów koncepcji, które pokazują pełny kod dla każdego typu narzędzia. Zapoznaj się z tymi wzorcowymi przykładami kompleksowych implementacji OpenAIAssistantAgent z deklaratywnymi specyfikacjami.
AzureAssistantAgent Próbki:
- Interpreter kodów
- wyszukiwanie plików
- Funkcja wtyczki z pliku
- Załaduj istniejący identyfikator Asystenta
- Szablon monitu
OpenAIAssistantAgent Próbki:
- Interpreter kodów
- wyszukiwanie plików
- Funkcyjna wtyczka
- Funkcja wtyczki z pliku
- Załaduj istniejący identyfikator Asystenta
- Szablon monitu
Przykład: tworzenie modułu AzureAIAgent z poziomu yaML
Minimalna specyfikacja deklaratywna YAML może wyglądać następująco:
type: openai_assistant
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
Aby uzyskać szczegółowe informacje na temat sposobu podłącznia agenta, zapoznaj się z powyższymi pełnymi przykładami kodu.
Kwestie kluczowe
- Specyfikacje deklaratywne umożliwiają definiowanie struktury agenta, narzędzi i zachowania w języku YAML.
- Wszystkie przywoływalne narzędzia i wtyczki muszą być zarejestrowane lub dostępne w czasie wykonywania.
- Wbudowane narzędzia, takie jak Bing, wyszukiwanie plików i interpreter kodu, wymagają odpowiedniej konfiguracji i poświadczeń (często za pośrednictwem zmiennych środowiskowych lub jawnych argumentów).
- Aby zapoznać się z kompleksowymi przykładami, zapoznaj się z podanymi przykładowymi linkami, które przedstawiają praktyczne scenariusze, w tym rejestrację wtyczki, konfigurację tożsamości platformy Azure i zaawansowane użycie narzędzi.
Ta funkcja jest niedostępna.
Instrukcja
Aby zapoznać się z przykładem od początku do końca dla OpenAIAssistantAgent, zobacz:
- instrukcje : interpreter kodu
OpenAIAssistantAgent -
Instrukcje:
OpenAIAssistantAgentWyszukiwanie plików