1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
# pylint: disable=line-too-long,useless-suppression
# ------------------------------------
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# ------------------------------------
"""
DESCRIPTION:
This sample demonstrates how to use agent operations with the
Azure AI Search tool from the Azure agents service using a synchronous client.
PREREQUISITES:
You will need an Azure AI Search Resource.
If you already have one, you must create an agent that can use an existing Azure AI Search index:
https://learn.microsoft.com/azure/ai-services/agents/how-to/tools/azure-ai-search?tabs=azurecli%2Cpython&pivots=overview-azure-ai-search
If you do not already have an agent Setup with an Azure AI Search resource, follow the guide for a Standard agent setup:
https://learn.microsoft.com/azure/ai-services/agents/quickstart?pivots=programming-language-python-azure
USAGE:
python sample_agents_azure_ai_search.py
Before running the sample:
pip install azure-ai-projects azure-identity
Set these environment variables with your own values:
1) PROJECT_ENDPOINT - The Azure AI Project endpoint, as found in the Overview
page of your Azure AI Foundry portal.
2) MODEL_DEPLOYMENT_NAME - The deployment name of the AI model, as found under the "Name" column in
the "Models + endpoints" tab in your Azure AI Foundry project.
3) AI_SEARCH_CONNECTION_NAME - The connection name of the AI Search connection to your Foundry project,
as found under the "Name" column in the "Connected Resources" tab in your Azure AI Foundry project.
"""
import os
from azure.ai.agents import AgentsClient
from azure.identity import DefaultAzureCredential
from azure.ai.agents.models import AzureAISearchQueryType, AzureAISearchTool, ListSortOrder, MessageRole
agents_client = AgentsClient(
endpoint=os.environ["PROJECT_ENDPOINT"],
credential=DefaultAzureCredential(),
)
# [START create_agent_with_azure_ai_search_tool]
conn_id = os.environ["AI_AZURE_AI_CONNECTION_ID"]
print(conn_id)
# Initialize agent AI search tool and add the search index connection id
ai_search = AzureAISearchTool(
index_connection_id=conn_id, index_name="sample_index", query_type=AzureAISearchQueryType.SIMPLE, top_k=3, filter=""
)
# Create agent with AI search tool and process agent run
with agents_client:
agent = agents_client.create_agent(
model=os.environ["MODEL_DEPLOYMENT_NAME"],
name="my-agent",
instructions="You are a helpful agent",
tools=ai_search.definitions,
tool_resources=ai_search.resources,
)
# [END create_agent_with_azure_ai_search_tool]
print(f"Created agent, ID: {agent.id}")
# Create thread for communication
thread = agents_client.threads.create()
print(f"Created thread, ID: {thread.id}")
# Create message to thread
message = agents_client.messages.create(
thread_id=thread.id,
role="user",
content="What is the temperature rating of the cozynights sleeping bag?",
)
print(f"Created message, ID: {message.id}")
# Create and process agent run in thread with tools
run = agents_client.runs.create_and_process(thread_id=thread.id, agent_id=agent.id)
print(f"Run finished with status: {run.status}")
if run.status == "failed":
print(f"Run failed: {run.last_error}")
# Fetch run steps to get the details of the agent run
run_steps = agents_client.run_steps.list(thread_id=thread.id, run_id=run.id)
for step in run_steps:
print(f"Step {step['id']} status: {step['status']}")
step_details = step.get("step_details", {})
tool_calls = step_details.get("tool_calls", [])
if tool_calls:
print(" Tool calls:")
for call in tool_calls:
print(f" Tool Call ID: {call.get('id')}")
print(f" Type: {call.get('type')}")
azure_ai_search_details = call.get("azure_ai_search", {})
if azure_ai_search_details:
print(f" azure_ai_search input: {azure_ai_search_details.get('input')}")
print(f" azure_ai_search output: {azure_ai_search_details.get('output')}")
print() # add an extra newline between steps
# Delete the agent when done
agents_client.delete_agent(agent.id)
print("Deleted agent")
# [START populate_references_agent_with_azure_ai_search_tool]
# Fetch and log all messages
messages = agents_client.messages.list(thread_id=thread.id, order=ListSortOrder.ASCENDING)
for message in messages:
if message.role == MessageRole.AGENT and message.url_citation_annotations:
placeholder_annotations = {
annotation.text: f" [see {annotation.url_citation.title}] ({annotation.url_citation.url})"
for annotation in message.url_citation_annotations
}
for message_text in message.text_messages:
message_str = message_text.text.value
for k, v in placeholder_annotations.items():
message_str = message_str.replace(k, v)
print(f"{message.role}: {message_str}")
else:
for message_text in message.text_messages:
print(f"{message.role}: {message_text.text.value}")
# [END populate_references_agent_with_azure_ai_search_tool]
|