의미 체계 커널
중요합니다
이 기능은 실험 단계에 있습니다. 이 단계의 기능은 개발 중이며 미리 보기 또는 릴리스 후보 단계로 넘어가기 전에 변경될 수 있습니다.
현재 Java에서 기능을 사용할 수 없습니다.
AzureAIAgent무엇인가요?
AzureAIAgent 의미 체계 커널 프레임워크 내의 특수 에이전트로, 원활한 도구 통합을 통해 고급 대화형 기능을 제공하도록 설계되었습니다. 도구 호출을 자동화하여 수동 구문 분석 및 호출이 필요하지 않습니다. 또한 에이전트는 스레드를 사용하여 대화 기록을 안전하게 관리하여 상태 유지 관리 오버헤드를 줄입니다. 또한 AzureAIAgent Bing, Azure AI Search, Azure Functions 및 OpenAPI를 통한 파일 검색, 코드 실행 및 데이터 상호 작용을 비롯한 다양한 기본 제공 도구를 지원합니다.
AzureAIAgent사용하려면 Azure AI Foundry 프로젝트를 활용해야 합니다. 다음 문서에서는 Azure AI Foundry, 프로젝트를 만들고 구성하는 방법 및 에이전트 서비스에 대한 개요를 제공합니다.
개발 환경 준비
AzureAIAgent개발을 계속하려면 적절한 패키지로 개발 환경을 구성합니다.
프로젝트에 Microsoft.SemanticKernel.Agents.AzureAI 패키지를 추가합니다.
dotnet add package Microsoft.SemanticKernel.Agents.AzureAI --prerelease
Azure.Identity 패키지를 포함할 수도 있습니다.
dotnet add package Azure.Identity
semantic-kernel 패키지를 설치합니다.
pip install semantic-kernel
현재 Java에서 기능을 사용할 수 없습니다.
AI 프로젝트 클라이언트 구성
AzureAIAgent에 액세스하려면 먼저 특정 Foundry 프로젝트에 맞게 구성된 클라이언트를 생성해야 하며, 일반적으로는 프로젝트 엔드포인트(Azure AI Foundry SDK: 프로젝트 시작)를 제공하는 방식으로 이루어집니다.
PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient("<your endpoint>", new AzureCliCredential());
루트 디렉터리의 .env 파일을 수정하여 다음을 포함하도록 합니다.
AZURE_AI_AGENT_ENDPOINT = "<example-endpoint>"
AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME = "<example-model-deployment-name>"
구성이 정의되면 클라이언트를 만들 수 있습니다.
from semantic_kernel.agents import AzureAIAgent
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# Your operational code here
endpoint가 구성된 경우 기본 값이 Pydantic 설정에 의해 선택됩니다. 그렇지 않으면 create_client() 메서드에 명시적으로 전달할 수 있습니다.
from semantic_kernel.agents import AzureAIAgent
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint="<your-endpoint>") as client,
):
# Your operational code here
현재 Java에서 기능을 사용할 수 없습니다.
AzureAIAgent 생성하기
AzureAIAgent을 만들기 위해서 먼저 Azure Agent 서비스를 통해 Foundry 프로젝트를 설정하고 초기화한 다음 Semantic Kernel과 통합합니다.
PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient("<your endpoint>", new AzureCliCredential());
// 1. Define an agent on the Azure AI agent service
PersistentAgent definition = await agentsClient.Administration.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 import AzureAIAgent, AzureAIAgentSettings
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=AzureAIAgentSettings().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,
)
현재 Java에서 기능을 사용할 수 없습니다.
AzureAIAgent과의 상호작용
AzureAIAgent 상호 작용은 간단합니다. 에이전트는 스레드를 사용하여 대화 기록을 자동으로 유지 관리합니다.
Azure AI 에이전트 스레드 세부 사항은 Microsoft.SemanticKernel.Agents.AzureAI.AzureAIAgentThread구현인 Microsoft.SemanticKernel.Agents.AgentThread 클래스를 통해 추상화됩니다.
중요합니다
Azure AI 에이전트 SDK에는 클래스가 있습니다 PersistentAgentThread .
Microsoft.SemanticKernel.Agents.AgentThread는 모든 스레드 유형에 대한 일반적인 의미 체계 커널 에이전트의 추상화이므로 혼동해서는 안 됩니다.
AzureAIAgent 현재 AzureAIAgentThread형식의 스레드만 지원합니다.
AzureAIAgentThread agentThread = new(agent.Client);
try
{
ChatMessageContent message = new(AuthorRole.User, "<your user input>");
await foreach (ChatMessageContent response in agent.InvokeAsync(message, agentThread))
{
Console.WriteLine(response.Content);
}
}
finally
{
await agentThread.DeleteAsync();
await agent.Client.DeleteAgentAsync(agent.Id);
}
Azure AI 에이전트 스레드 세부 사항은 AzureAIAgentThread구현인 AgentThread 클래스를 통해 추상화됩니다.
USER_INPUTS = ["Hello", "What's your name?"]
thread: AzureAIAgentThread = AzureAIAgentThread()
try:
for user_input in USER_INPUTS:
response = await agent.get_response(messages=user_inputs, thread=thread)
print(response)
thread = response.thread
finally:
await thread.delete() if thread else None
필요에 따라 에이전트를 다음과 같이 호출할 수 있습니다.
for user_input in USER_INPUTS:
async for content in agent.invoke(messages=user_input, thread=thread):
print(content.content)
thread = response.thread
메시지 목록을 get_response(...), invoke(...)또는 invoke_stream(...) 메서드에 전달할 수도 있습니다.
USER_INPUTS = ["Hello", "What's your name?"]
thread: AzureAIAgentThread = AzureAIAgentThread()
try:
for user_input in USER_INPUTS:
response = await agent.get_response(messages=USER_INPUTS, thread=thread)
print(response)
thread = response.thread
finally:
await thread.delete() if thread else None
에이전트는 스트리밍된 응답을 생성할 수도 있습니다.
ChatMessageContent message = new(AuthorRole.User, "<your user input>");
await foreach (StreamingChatMessageContent response in agent.InvokeStreamingAsync(message, agentThread))
{
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)
현재 Java에서 기능을 사용할 수 없습니다.
AzureAIAgent을 사용하여 플러그인 사용
의미 체계 커널은 향상된 기능을 위해 사용자 지정 플러그 인을 사용하여 AzureAIAgent 확장할 수 있습니다.
KernelPlugin plugin = KernelPluginFactory.CreateFromType<YourPlugin>();
PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient("<your endpoint>", new AzureCliCredential());
PersistentAgent definition = await agentsClient.Administration.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"
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
agent_definition = await client.agents.create_agent(
model=AzureAIAgentSettings().model_deployment_name,
)
agent = AzureAIAgent(
client=client,
definition=agent_definition,
plugins=[SamplePlugin()]
)
현재 Java에서 기능을 사용할 수 없습니다.
고급 기능
AzureAIAgent 다음과 같은 고급 도구를 활용할 수 있습니다.
코드 인터프리터
코드 인터프리터를 사용하면 에이전트가 샌드박스 실행 환경에서 Python 코드를 작성하고 실행할 수 있습니다(Azure AI 에이전트 서비스 코드 인터프리터).
PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient("<your endpoint>", new AzureCliCredential());
PersistentAgent definition = await 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.agents.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,
)
현재 Java에서 기능을 사용할 수 없습니다.
파일 검색
파일 검색은 모델 외부에서 정보를 사용하여 에이전트를 보강합니다(Azure AI 에이전트 서비스 파일 검색 도구).
PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient("<your endpoint>", new AzureCliCredential());
PersistentAgent definition = await 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.agents.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,
)
현재 Java에서 기능을 사용할 수 없습니다.
OpenAPI 통합
에이전트를 외부 API에 연결합니다(OpenAPI 지정 도구Azure AI 에이전트 서비스를 사용하는 방법).
PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient("<your endpoint>", new AzureCliCredential());
string apiJsonSpecification = ...; // An Open API JSON specification
PersistentAgent definition = await 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.agents.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,
)
현재 Java에서 기능을 사용할 수 없습니다.
AzureAI Search 통합
에이전트와 함께 기존 Azure AI Search 인덱스 사용(기존 AI Search 인덱스사용).
PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient("<your endpoint>", new AzureCliCredential());
PersistentAgent definition = await agentsClient.CreateAgentAsync(
"<name of the the model used by the agent>",
name: "<agent name>",
description: "<agent description>",
instructions: "<agent instructions>",
tools: [new AzureAISearchToolDefinition()],
toolResources: new()
{
AzureAISearch = new()
{
IndexList = { new AISearchIndexResource("<your connection id>", "<your index name>") }
}
});
AzureAIAgent agent = new(definition, agentsClient);
from azure.ai.agents.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"},
)
현재 Java에서 기능을 사용할 수 없습니다.
Bing Grounding
예제는 곧 제공될 예정입니다.
from azure.ai.agents.models import BingGroundingTool
from azure.identity.aio import DefaultAzureCredential
from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Enter your Bing Grounding Connection Name
bing_connection = await client.connections.get(connection_name="<your-bing-grounding-connection-name>")
conn_id = bing_connection.id
# 2. Initialize agent bing tool and add the connection id
bing_grounding = BingGroundingTool(connection_id=conn_id)
# 3. Create an agent with Bing grounding on the Azure AI agent service
agent_definition = await client.agents.create_agent(
name="BingGroundingAgent",
instructions="Use the Bing grounding tool to answer the user's question.",
model=AzureAIAgentSettings().model_deployment_name,
tools=bing_grounding.definitions,
)
# 4. Create a Semantic Kernel agent for the Azure AI agent
agent = AzureAIAgent(
client=client,
definition=agent_definition,
)
Bing Grounding 도구를 사용할 때, FunctionCallContent가 on_intermediate_message 콜백으로 전달되면 함수 이름이 "bing_grounding"로 설정됩니다. 실행이 완료되면, 호출이 표준인지 스트리밍인지에 따라 ChatMessageContent.items 목록에는 AnnotationContent 또는 StreamingAnnotationContent이 포함됩니다. 이러한 주석 항목에는 에이전트가 응답 중에 방문한 링크에 대한 정보가 포함되어 있으며, 이는 FunctionCallContent에 포함된 정보와 유사합니다.
자세한 내용은 다음 개념 샘플을 참조하세요.
현재 Java에서 기능을 사용할 수 없습니다.
기존 AzureAIAgent 검색하기
기존 에이전트는 도우미 ID를 지정하여 검색하고 다시 사용할 수 있습니다.
PersistentAgent definition = await agentsClient.Administration.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)
현재 Java에서 기능을 사용할 수 없습니다.
AzureAIAgent을 삭제하기
에이전트 및 연결된 스레드는 더 이상 필요하지 않은 경우 삭제할 수 있습니다.
await agentThread.DeleteAsync();
await agentsClient.Administration.DeleteAgentAsync(agent.Id);
await client.agents.delete_thread(thread.id)
await client.agents.delete_agent(agent.id)
벡터 저장소 또는 파일로 작업하는 경우 다음과 같이 삭제될 수 있습니다.
await agentsClient.VectorStores.DeleteVectorStoreAsync("<your store id>");
await agentsClient.Files.DeleteFileAsync("<your file id>");
await client.agents.files.delete(file_id=file.id)
await client.agents.vector_stores.delete(vector_store_id=vector_store.id)
현재 Java에서 기능을 사용할 수 없습니다.
파일 검색 도구에 대한 자세한 내용은 Azure AI 에이전트 서비스 파일 검색 도구 문서에 설명되어 있습니다.
사용 방법
AzureAIAgent사용하는 실제 예제는 GitHub의 코드 샘플을 참조하세요.
현재 Java에서 기능을 사용할 수 없습니다.
AzureAIAgent를 사용하여 중간 메시지 처리
의미 체계 커널 AzureAIAgent 은 사용자 쿼리 또는 질문을 충족하는 에이전트를 호출하도록 설계되었습니다. 호출하는 동안 에이전트는 도구를 실행하여 최종 답변을 파생시킬 수 있습니다. 이 프로세스 중에 생성된 중간 메시지에 액세스하기 위해 호출자는 FunctionCallContent 또는 FunctionResultContent 인스턴스를 처리하는 콜백 함수를 제공할 수 있습니다.
AzureAIAgent에 대한 콜백 설명서는 곧 제공될 예정입니다.
on_intermediate_message 또는 agent.invoke(...) 안에서 agent.invoke_stream(...) 콜백을 구성하면, 호출자는 에이전트의 최종 응답을 작성하는 과정에서 생성된 중간 메시지를 수신할 수 있습니다.
import asyncio
from typing import Annotated
from azure.identity.aio import DefaultAzureCredential
from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import 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() -> None:
ai_agent_settings = AzureAIAgentSettings()
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint=ai_agent_settings.endpoint) as client,
):
AGENT_NAME = "Host"
AGENT_INSTRUCTIONS = "Answer questions about the menu."
# Create agent definition
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.deployment_name,
name=AGENT_NAME,
instructions=AGENT_INSTRUCTIONS,
)
# Create the AzureAI Agent
agent = AzureAIAgent(
client=client,
definition=agent_definition,
plugins=[MenuPlugin()], # add the sample plugin to the agent
)
# Create a thread for the agent
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread: AzureAIAgentThread = None
user_inputs = [
"Hello",
"What is the special soup?",
"How much does that cost?",
"Thank you",
]
try:
for user_input in user_inputs:
print(f"# User: '{user_input}'")
async for response in agent.invoke(
messages=user_input,
thread=thread,
on_intermediate_message=handle_intermediate_steps,
):
print(f"# Agent: {response}")
thread = response.thread
finally:
# Cleanup: Delete the thread and agent
await thread.delete() if thread else None
await client.agents.delete_agent(agent.id)
if __name__ == "__main__":
asyncio.run(main())
다음은 에이전트 호출 프로세스의 샘플 출력을 보여 줍니다.
User: 'Hello'
Agent: Hi there! How can I assist you today?
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
Agent: The special soup is Clam Chowder. Would you like to know anything else about the menu?
User: 'How much does that cost?'
Function Call:> MenuPlugin-get_item_price with arguments: {"menu_item":"Clam Chowder"}
Function Result:> $9.99 for function: MenuPlugin-get_item_price
Agent: The Clam Chowder costs $9.99. Let me know if you would like assistance with anything else!
User: 'Thank you'
Agent: You're welcome! Enjoy your meal! 😊
현재 Java에서 기능을 사용할 수 없습니다.
선언적 사양
선언적 사양 사용에 대한 설명서는 곧 제공될 예정입니다.
중요합니다
이 기능은 실험 단계에 있습니다. 이 단계의 기능은 개발 중이며 미리 보기 또는 릴리스 후보 단계로 넘어가기 전에 변경될 수 있습니다.
YAML AzureAIAgent 선언적 사양에서 인스턴스화를 지원합니다. 선언적 접근 방식을 사용하면 감사 가능한 단일 문서에서 에이전트의 속성, 지침, 모델 구성, 도구 및 기타 옵션을 정의할 수 있습니다. 이렇게 하면 에이전트 컴퍼지션이 여러 환경에서 이식 가능하고 쉽게 관리할 수 있습니다.
비고
선언적 YAML에 나열된 모든 도구, 함수 또는 플러그 인은 생성 시 에이전트에서 사용할 수 있어야 합니다. 커널 기반 플러그 인의 경우 커널에 등록해야 합니다. Bing Grounding, File Search 또는 OpenAPI 도구와 같은 기본 제공 도구의 경우 올바른 구성 및 자격 증명을 제공해야 합니다. 에이전트 로더는 함수를 처음부터 만들지 않습니다. 필요한 구성 요소가 없으면 에이전트를 만들지 못합니다.
선언적 사양을 사용하는 방법
이 섹션에서는 가능한 모든 YAML 구성을 열거하는 대신 주요 원칙을 간략하게 설명하고 각 도구 유형에 대한 전체 코드를 보여 주는 개념 샘플에 대한 링크를 제공합니다. 선언적 사양을 사용하는 엔드 투 엔드 구현은 AzureAIAgent 다음 개념 샘플을 참조하세요.
예: YAML에서 AzureAIAgent 만들기
최소한의 YAML 선언적 사양은 다음과 같을 수 있습니다.
type: foundry_agent
name: MyAgent
instructions: Respond politely to the user's questions.
model:
id: ${AzureAI:ChatModelId}
tools:
- id: MenuPlugin.get_specials
type: function
- id: MenuPlugin.get_item_price
type: function
에이전트를 연결하는 방법에 대한 자세한 내용은 위의 전체 코드 샘플을 참조하세요.
요점
- 선언적 사양을 사용하면 YAML에서 에이전트 구조, 도구 및 동작을 정의할 수 있습니다.
- 모든 참조된 도구 및 플러그 인은 런타임에 등록되거나 액세스할 수 있어야 합니다.
- Bing, 파일 검색 및 코드 인터프리터와 같은 기본 제공 도구에는 적절한 구성 및 자격 증명(환경 변수 또는 명시적 인수를 통해)이 필요합니다.
- 포괄적인 예제는 플러그 인 등록, Azure ID 구성 및 고급 도구 사용을 비롯한 실제 시나리오를 보여 주는 제공된 샘플 링크를 참조하세요.
이 기능을 사용할 수 없습니다.