De Semantische kernel-AzureAIAgent
verkennen
Belangrijk
Deze functie bevindt zich in de experimentele fase. Functies in deze fase zijn nog in ontwikkeling en kunnen worden gewijzigd voordat u naar de preview- of releasekandidaatfase gaat.
Gedetailleerde API-documentatie met betrekking tot deze discussie is beschikbaar op:
Bijgewerkte Semantic Kernel Python API Docs zijn binnenkort beschikbaar.
Agents zijn momenteel niet beschikbaar in Java.
Wat is een AzureAIAgent
?
Een AzureAIAgent
is een gespecialiseerde agent binnen het Semantische Kernel-framework, ontworpen om geavanceerde gespreksmogelijkheden te bieden met naadloze integratie van hulpprogramma's. Het automatiseert het aanroepen van hulpprogramma's, waardoor handmatig parseren en aanroepen niet meer nodig is. De agent beheert ook de gespreksgeschiedenis veilig met behulp van threads, waardoor de overhead van het onderhouden van de status wordt verminderd. Daarnaast biedt de AzureAIAgent
ondersteuning voor diverse ingebouwde hulpprogramma's, waaronder het ophalen van bestanden, het uitvoeren van code en gegevensinteractie via Bing, Azure AI Search, Azure Functions en OpenAPI.
Als u een AzureAIAgent
wilt gebruiken, moet een Azure AI Foundry-project worden gebruikt. De volgende artikelen bevatten een overzicht van Azure AI Foundry, het maken en configureren van een project en de agentservice:
- Wat is Azure AI Foundry?
- De Azure AI Foundry SDK
- Wat is Azure AI Agentendienst
- Quickstart: Een nieuwe agent maken
Uw ontwikkelomgeving voorbereiden
Als u wilt doorgaan met het ontwikkelen van een AzureAIAgent
, configureert u uw ontwikkelomgeving met de juiste pakketten.
Voeg het Microsoft.SemanticKernel.Agents.AzureAI
-pakket toe aan uw project:
dotnet add package Microsoft.SemanticKernel.Agents.AzureAI --prerelease
U kunt ook het Azure.Identity
-pakket opnemen:
dotnet add package Azure.Identity
Installeer het semantic-kernel
-pakket met de optionele Azure-afhankelijkheden:
pip install semantic-kernel[azure]
Agents zijn momenteel niet beschikbaar in Java.
De AI-projectclient configureren
Toegang tot een AzureAIAgent
vereist eerst dat er een projectclient wordt gemaakt die is geconfigureerd voor een specifiek Foundry-project, meestal door het verstrekken van een verbindingsreeks (De Azure AI Foundry SDK: Aan de slag met projecten).
AIProjectClient client = AzureAIAgent.CreateAzureAIClient("<your connection-string>", new AzureCliCredential());
De AgentsClient
is toegankelijk vanuit de AIProjectClient
:
AgentsClient agentsClient = client.GetAgentsClient();
Wijzig uw .env
-bestand in de root directory om het volgende op te nemen:
AZURE_AI_AGENT_PROJECT_CONNECTION_STRING = "<example-connection-string>"
AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME = "<example-model-deployment-name>"
of
AZURE_AI_AGENT_ENDPOINT = "<example-endpoint>"
AZURE_AI_AGENT_SUBSCRIPTION_ID = "<example-subscription-id>"
AZURE_AI_AGENT_RESOURCE_GROUP_NAME = "<example-resource-group-name>"
AZURE_AI_AGENT_PROJECT_NAME = "<example-project-name>"
AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME = "<example-model-deployment-name>"
Zodra de configuratie is gedefinieerd, kan de client worden gemaakt:
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# Your operational code here
Agents zijn momenteel niet beschikbaar in Java.
Een AzureAIAgent
maken
Als u een AzureAIAgent
wilt maken, begint u met het configureren en initialiseren van het agentproject via de Azure AI-service en integreert u het vervolgens met Semantische kernel:
AIProjectClient client = AzureAIAgent.CreateAzureAIClient("<your connection-string>", new AzureCliCredential());
AgentsClient agentsClient = client.GetAgentsClient();
// 1. Define an agent on the Azure AI agent service
Agent definition = agentsClient.CreateAgentAsync(
"<name of the the model used by the agent>",
name: "<agent name>",
description: "<agent description>",
instructions: "<agent instructions>");
// 2. Create a Semantic Kernel agent based on the agent definition
AzureAIAgent agent = new(definition, agentsClient);
from azure.identity.aio import DefaultAzureCredential
from semantic_kernel.agents.azure_ai import AzureAIAgent, AzureAIAgentSettings
ai_agent_settings = AzureAIAgentSettings.create()
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Define an agent on the Azure AI agent service
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
name="<name>",
instructions="<instructions>",
)
# 2. Create a Semantic Kernel agent based on the agent definition
agent = AzureAIAgent(
client=client,
definition=agent_definition,
)
Agents zijn momenteel niet beschikbaar in Java.
Interactie met een AzureAIAgent
Interactie met de AzureAIAgent
is eenvoudig. De agent onderhoudt automatisch de gespreksgeschiedenis met behulp van een thread:
AgentThread thread = await agentsClient.CreateThreadAsync();
try
{
ChatMessageContent message = new(AuthorRole.User, "<your user input>");
await agent.AddChatMessageAsync(threadId, message);
await foreach (ChatMessageContent response in agent.InvokeAsync(thread.Id))
{
Console.WriteLine(response.Content);
}
}
finally
{
await this.AgentsClient.DeleteThreadAsync(thread.Id);
await this.AgentsClient.DeleteAgentAsync(agent.Id);
}
USER_INPUTS = ["Hello", "What's your name?"]
thread = await client.agents.create_thread()
try:
for user_input in USER_INPUTS:
await agent.add_chat_message(thread_id=thread.id, message=user_input)
response = await agent.get_response(thread_id=thread.id)
print(response)
finally:
await client.agents.delete_thread(thread.id)
Optioneel kan een agent worden aangeroepen als:
for user_input in USER_INPUTS:
await agent.add_chat_message(thread_id=thread.id, message=user_input)
async for content in agent.invoke(thread_id=thread.id):
print(content.content)
Een agent kan ook een gestreamd antwoord produceren:
ChatMessageContent message = new(AuthorRole.User, "<your user input>");
await agent.AddChatMessageAsync(threadId, message);
await foreach (StreamingChatMessageContent response in agent.InvokeStreamingAsync(thread.Id))
{
Console.Write(response.Content);
}
for user_input in USER_INPUTS:
await agent.add_chat_message(thread_id=thread.id, message=user_input)
async for content in agent.invoke_stream(thread_id=thread.id):
print(content.content, end="", flush=True)
Agents zijn momenteel niet beschikbaar in Java.
Invoegtoepassingen gebruiken met een AzureAIAgent
Semantische Kernel ondersteunt het uitbreiden van een AzureAIAgent
met aangepaste plug-ins voor verbeterde functionaliteit.
Plugin plugin = KernelPluginFactory.CreateFromType<YourPlugin>();
AIProjectClient client = AzureAIAgent.CreateAzureAIClient("<your connection-string>", new AzureCliCredential());
AgentsClient agentsClient = client.GetAgentsClient();
Agent definition = agentsClient.CreateAgentAsync(
"<name of the the model used by the agent>",
name: "<agent name>",
description: "<agent description>",
instructions: "<agent instructions>");
AzureAIAgent agent = new(definition, agentsClient, plugins: [plugin]);
from semantic_kernel.functions import kernel_function
class SamplePlugin:
@kernel_function(description="Provides sample data.")
def get_data(self) -> str:
return "Sample data"
ai_agent_settings = AzureAIAgentSettings.create()
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
)
agent = AzureAIAgent(
client=client,
definition=agent_definition,
plugins=[SamplePlugin()]
)
Agents zijn momenteel niet beschikbaar in Java.
Geavanceerde functies
Een AzureAIAgent
kan gebruikmaken van geavanceerde hulpprogramma's zoals:
Code-interpreter
Met code-interpreter kunnen de agents Python-code schrijven en uitvoeren in een omgeving met sandboxuitvoering (Azure AI Agent Service Code Interpreter).
AIProjectClient client = AzureAIAgent.CreateAzureAIClient("<your connection-string>", new AzureCliCredential());
AgentsClient agentsClient = client.GetAgentsClient();
Agent definition = agentsClient.CreateAgentAsync(
"<name of the the model used by the agent>",
name: "<agent name>",
description: "<agent description>",
instructions: "<agent instructions>",
tools: [new CodeInterpreterToolDefinition()],
toolResources:
new()
{
CodeInterpreter = new()
{
FileIds = { ... },
}
}));
AzureAIAgent agent = new(definition, agentsClient);
from azure.ai.projects.models import CodeInterpreterTool
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
code_interpreter = CodeInterpreterTool()
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
tools=code_interpreter.definitions,
tool_resources=code_interpreter.resources,
)
Agents zijn momenteel niet beschikbaar in Java.
Zoeken naar bestanden
Bestandszoek verrijkt agents door kennis van buiten het model (Azure AI Agent Service File Search Tool).
AIProjectClient client = AzureAIAgent.CreateAzureAIClient("<your connection-string>", new AzureCliCredential());
AgentsClient agentsClient = client.GetAgentsClient();
Agent definition = agentsClient.CreateAgentAsync(
"<name of the the model used by the agent>",
name: "<agent name>",
description: "<agent description>",
instructions: "<agent instructions>",
tools: [new FileSearchToolDefinition()],
toolResources:
new()
{
FileSearch = new()
{
VectorStoreIds = { ... },
}
}));
AzureAIAgent agent = new(definition, agentsClient);
from azure.ai.projects.models import FileSearchTool
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
file_search = FileSearchTool(vector_store_ids=[vector_store.id])
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
tools=file_search.definitions,
tool_resources=file_search.resources,
)
Agents zijn momenteel niet beschikbaar in Java.
OpenAPI-integratie
Verbindt uw agent met een externe API (Azure AI Agent Service gebruiken met OpenAPI Specified Tools).
AIProjectClient client = AzureAIAgent.CreateAzureAIClient("<your connection-string>", new AzureCliCredential());
AgentsClient agentsClient = client.GetAgentsClient();
string apiJsonSpecification = ...; // An Open API JSON specification
Agent definition = agentsClient.CreateAgentAsync(
"<name of the the model used by the agent>",
name: "<agent name>",
description: "<agent description>",
instructions: "<agent instructions>",
tools: [
new OpenApiToolDefinition(
"<api name>",
"<api description>",
BinaryData.FromString(apiJsonSpecification),
new OpenApiAnonymousAuthDetails())
],
);
AzureAIAgent agent = new(definition, agentsClient);
from azure.ai.projects.models import OpenApiTool, OpenApiAnonymousAuthDetails
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
openapi_spec_file_path = "sample/filepath/..."
with open(os.path.join(openapi_spec_file_path, "spec_one.json")) as file_one:
openapi_spec_one = json.loads(file_one.read())
with open(os.path.join(openapi_spec_file_path, "spec_two.json")) as file_two:
openapi_spec_two = json.loads(file_two.read())
# Note that connection or managed identity auth setup requires additional setup in Azure
auth = OpenApiAnonymousAuthDetails()
openapi_tool_one = OpenApiTool(
name="<name>",
spec=openapi_spec_one,
description="<description>",
auth=auth,
)
openapi_tool_two = OpenApiTool(
name="<name>",
spec=openapi_spec_two,
description="<description>",
auth=auth,
)
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
tools=openapi_tool_one.definitions + openapi_tool_two.definitions,
)
Agents zijn momenteel niet beschikbaar in Java.
Integratie van AzureAI Search
Gebruik een bestaande Azure AI Search-index met uw agent (Een bestaande AI Search-index gebruiken).
AIProjectClient client = AzureAIAgent.CreateAzureAIClient("<your connection-string>", new AzureCliCredential());
AgentsClient agentsClient = client.GetAgentsClient();
ConnectionsClient cxnClient = client.GetConnectionsClient();
ListConnectionsResponse searchConnections = await cxnClient.GetConnectionsAsync(AzureAIP.ConnectionType.AzureAISearch);
ConnectionResponse searchConnection = searchConnections.Value[0];
Agent definition = agentsClient.CreateAgentAsync(
"<name of the the model used by the agent>",
name: "<agent name>",
description: "<agent description>",
instructions: "<agent instructions>",
tools: [new AzureAIP.AzureAISearchToolDefinition()],
toolResources: new()
{
AzureAISearch = new()
{
IndexList = { new AzureAIP.IndexResource(searchConnection.Id, "<your index name>") }
}
});
AzureAIAgent agent = new(definition, agentsClient);
from azure.ai.projects.models import AzureAISearchTool, ConnectionType
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
conn_list = await client.connections.list()
ai_search_conn_id = ""
for conn in conn_list:
if conn.connection_type == ConnectionType.AZURE_AI_SEARCH:
ai_search_conn_id = conn.id
break
ai_search = AzureAISearchTool(
index_connection_id=ai_search_conn_id,
index_name=AZURE_AI_SEARCH_INDEX_NAME,
)
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
instructions="Answer questions using your index.",
tools=ai_search.definitions,
tool_resources=ai_search.resources,
headers={"x-ms-enable-preview": "true"},
)
Agents zijn momenteel niet beschikbaar in Java.
Een bestaande AzureAIAgent
ophalen
Een bestaande agent kan worden opgehaald en opnieuw worden gebruikt door de bijbehorende assistent-id op te geven:
Agent definition = agentsClient.GetAgentAsync("<your agent id>");
AzureAIAgent agent = new(definition, agentsClient);
agent_definition = await client.agents.get_agent(assistant_id="your-agent-id")
agent = AzureAIAgent(client=client, definition=agent_definition)
Agents zijn momenteel niet beschikbaar in Java.
Een AzureAIAgent
verwijderen
Agents en de bijbehorende threads kunnen worden verwijderd wanneer ze niet meer nodig zijn:
await agentsClient.DeleteThreadAsync(thread.Id);
await agentsClient.DeleteAgentAsync(agent.Id);
await client.agents.delete_thread(thread.id)
await client.agents.delete_agent(agent.id)
Als u werkt met een vectorarchief of bestanden, kunnen ze ook worden verwijderd:
await agentsClient.DeleteVectorStoreAsync("<your store id>");
await agentsClient.DeleteFileAsync("<your file id>");
await client.agents.delete_file(file_id=file.id)
await client.agents.delete_vector_store(vector_store_id=vector_store.id)
Agents zijn momenteel niet beschikbaar in Java.
Meer informatie over het -hulpprogramma voor bestandszoekopdrachten wordt beschreven in het artikel over het Azure AI Agent Service-hulpprogramma voor bestandszoekopdrachten.
How-To
Zie onze codevoorbeelden op GitHub voor praktische voorbeelden van het gebruik van een AzureAIAgent
:
Agents zijn momenteel niet beschikbaar in Java.