Microsoft AI 에이전트 입문 과정: 디자인 패턴을 사용하는(호출하는) 도구

코스 정보게시됨 6 개월 전 AI 공유 서클
2.1K 00

도구는 AI 인텔리전스가 더 넓은 범위의 기능을 가질 수 있게 해준다는 점에서 흥미롭습니다. 도구를 추가하면 인공지능은 더 이상 수행할 수 있는 제한된 작업 집합에 국한되지 않고 다양한 작업을 수행할 수 있습니다. 이 장에서는 AI 인텔리전스가 특정 도구를 사용하여 목표를 달성하는 방법을 설명하는 도구 사용 디자인 패턴에 대해 살펴봅니다.

개요

이 과정에서는 다음과 같은 질문에 답하고자 합니다:

  • 도구 사용 디자인 패턴이란 무엇인가요?
  • 어떤 사용 사례에 적용할 수 있나요?
  • 이 디자인 패턴을 구현하려면 어떤 요소/빌딩 블록이 필요하나요?
  • 디자인 패턴을 사용하여 신뢰할 수 있는 AI 인텔리전스를 구축하기 위해 도구를 사용할 때 특별히 고려해야 할 사항은 무엇인가요?

학습 목표

이 과정을 완료하면 다음을 수행할 수 있습니다:

  • 도구의 디자인 패턴 사용과 그 목적을 정의합니다.
  • 도구 사용 디자인 패턴이 적용되는 사용 사례를 파악하세요.
  • 이 디자인 패턴을 구현하는 데 필요한 핵심 요소를 이해합니다.
  • 이 디자인 패턴을 사용할 때 AI 지능의 신뢰성을 보장하기 위한 고려 사항을 인식하세요.

 

도구 사용 디자인 패턴이란 무엇인가요?

디자인 패턴을 사용하는 도구 LLM(대규모 언어 모델)에 특정 목표를 달성하기 위해 외부 도구와 상호 작용할 수 있는 기능을 제공하는 데 중점을 둡니다. 도구는 인텔리전스가 작업을 수행하기 위해 실행할 수 있는 코드입니다. 도구는 단순한 함수(예: 계산기)일 수도 있고 타사 서비스에 대한 API 호출(예: 주가 조회 또는 일기 예보)일 수도 있습니다. AI 인텔리전스의 맥락에서 도구는 다음에 대한 응답으로 인텔리전스가 실행하도록 설계됩니다. 모델 생성을 위한 함수 호출.

 

어떤 사용 사례에 적용할 수 있나요?

인공지능은 도구를 사용하여 복잡한 작업을 수행하거나 정보를 검색하거나 의사 결정을 내릴 수 있습니다. 도구 사용 디자인 패턴은 일반적으로 데이터베이스, 웹 서비스 또는 코드 인터프리터와 같은 외부 시스템과의 동적 상호 작용이 필요한 시나리오에서 사용됩니다. 이 기능은 다음과 같은 다양한 사용 사례에 유용합니다:

  • 동적 정보 검색: 인텔리전트는 외부 API 또는 데이터베이스를 쿼리하여 최신 데이터를 얻을 수 있습니다(예: 데이터 분석을 위한 SQLite 데이터베이스 쿼리, 주가 또는 날씨 정보 가져오기).
  • 코드 실행 및 해석: 인텔리전트는 코드나 스크립트를 실행하여 수학 문제를 풀고, 보고서를 생성하거나, 시뮬레이션을 수행할 수 있습니다.
  • 워크플로 자동화: 작업 스케줄러, 이메일 서비스 또는 데이터 파이프라인과 같은 도구를 통합하여 반복적이거나 여러 단계의 워크플로우를 자동화하세요.
  • 고객 지원: 인텔리전스는 CRM 시스템, 작업 지시 플랫폼 또는 지식 기반과 상호 작용하여 사용자 쿼리를 해결할 수 있습니다.
  • 콘텐츠 생성 및 편집: 지식인은 문법 검사기, 텍스트 요약기 또는 콘텐츠 보안 평가기와 같은 도구를 활용하여 콘텐츠 제작 작업을 지원할 수 있습니다.

 

디자인 패턴을 사용하기 위한 도구를 구현하려면 어떤 요소/빌딩 블록이 필요하나요?

이러한 빌딩 블록을 통해 AI 인텔리전스는 다양한 작업을 수행할 수 있습니다. 디자인 패턴을 사용하는 도구를 구현하는 데 필요한 핵심 요소를 살펴보겠습니다:

  • 함수/도구 호출대규모 언어 모델(LLM)이 도구와 상호 작용할 수 있는 주요 방식입니다. 함수 또는 도구는 인텔리전스가 작업을 수행하는 데 사용하는 재사용 가능한 코드 블록입니다. 여기에는 간단한 함수(예: 계산기)나 타사 서비스에 대한 API 호출(예: 주가 조회 또는 일기 예보1 )이 포함될 수 있습니다.
  • 동적 정보 검색인텔리전트는 외부 API나 데이터베이스에 최신 데이터를 쿼리할 수 있습니다. 이는 데이터 분석, 주가 또는 날씨 정보 가져오기1와 같은 작업에 유용합니다.
  • 코드 실행 및 해석지능은 코드나 스크립트를 실행하여 수학 문제를 해결하거나 보고서를 생성하거나 시뮬레이션을 수행할 수 있습니다 1.
  • 워크플로 자동화작업 스케줄러, 이메일 서비스 또는 데이터 파이프라인과 같은 도구를 통합하여 반복적이거나 다단계 워크플로우를 자동화하는 것입니다1.
  • 고객 지원인텔리전스는 CRM 시스템, 작업 지시 플랫폼 또는 지식 기반과 상호 작용하여 사용자 쿼리를 해결할 수 있습니다 1.
  • 콘텐츠 생성 및 편집: 지성인은 문법 검사기, 텍스트 요약기 또는 콘텐츠 보안 평가기와 같은 도구를 활용하여 콘텐츠 제작 작업을 지원할 수 있습니다..

다음으로 함수/도구 호출을 좀 더 자세히 살펴보겠습니다.

함수/도구 호출

함수 호출은 대규모 언어 모델(LLM)이 도구와 상호 작용할 수 있도록 하는 주요 방법입니다. '함수'(재사용 가능한 코드 블록)는 인텔리전스가 작업을 수행하는 데 사용하는 '도구'이기 때문에 '함수'와 '도구'를 혼용하여 사용하는 경우가 많습니다. 도구". 함수의 코드를 호출하기 위해 대규모 언어 모델(LLM)은 사용자의 요청을 함수의 설명과 비교해야 합니다. 이를 위해 사용 가능한 모든 함수 설명이 포함된 스키마가 LLM으로 전송됩니다. 그러면 LLM(대규모 언어 모델)이 작업에 가장 적합한 함수를 선택하고 그 이름과 매개 변수를 반환합니다. 선택한 함수가 호출되고 그 응답이 다시 LLM(대규모 언어 모델)으로 전송되면 이 정보를 사용하여 사용자의 요청에 응답합니다.

인텔리전스에 대한 함수 호출을 구현하는 개발자에게는 다음이 필요합니다:

  1. 함수 호출을 지원하는 LLM(대규모 언어 모델) 모델
  2. 함수 설명이 포함된 패턴
  3. 설명된 각 기능에 대한 코드

도시의 현재 시간을 가져오는 예를 들어 설명해 보겠습니다:

  1. 함수 호출을 지원하는 대규모 언어 모델(LLM)을 초기화합니다:
    모든 모델이 함수 호출을 지원하는 것은 아니므로 사용 중인 대규모 언어 모델(LLM)이 함수 호출을 지원하는지 확인하는 것이 중요합니다.Azure OpenAI 함수 호출 지원. Azure OpenAI 클라이언트를 초기화하는 것으로 시작할 수 있습니다.

    # Initialize the Azure OpenAI client
    client = AzureOpenAI(
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-05-01-preview"
    )
    
  2. 함수 패턴 만들기::
    다음으로 함수 이름, 함수에 대한 설명, 함수 매개변수의 이름과 설명이 포함된 JSON 스키마를 정의하겠습니다. 그런 다음 이 스키마를 가져와 사용자의 요청과 함께 샌프란시스코의 시간을 찾기 위해 이전에 생성한 클라이언트에 전달합니다. 한 가지 중요한 점은 반환값이 도구 호출(수학.) 속보다는 질문에 대한 최종 답변입니다. 앞서 언급했듯이 LLM(대규모 언어 모델)은 작업에 대해 선택한 함수의 이름과 함수에 전달될 인수를 반환합니다.
# Function description for the model to read
tools = [
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "Get the current time in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco",
},
},
"required": ["location"],
},
}
}
]
# Initial user message
messages = [{"role": "user", "content": "What's the current time in San Francisco"}] 
# First API call: Ask the model to use the function
response = client.chat.completions.create(
model=deployment_name,
messages=messages,
tools=tools,
tool_choice="auto",
)
# Process the model's response
response_message = response.choices[0].message
messages.append(response_message)
print("Model's response:")  
print(response_message)
Model's response:
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_pOsKdUlqvdyttYB67MOj434b', function=Function(arguments='{"location":"San Francisco"}', name='get_current_time'), type='function')])
  1. 작업을 수행하는 데 필요한 기능의 코드입니다:
    이제 LLM(대규모 언어 모델)에서 실행해야 할 함수를 선택했으므로 작업을 수행하기 위한 코드를 구현하고 실행해야 합니다. 현재 시간을 가져오는 코드를 파이썬으로 구현할 수 있습니다. 또한 최종 결과를 얻기 위해 응답 메시지에서 이름과 매개 변수를 추출하는 코드를 작성해야 합니다.

    def get_current_time(location):
    """Get the current time for a given location"""
    print(f"get_current_time called with location: {location}")  
    location_lower = location.lower()
    for key, timezone in TIMEZONE_DATA.items():
    if key in location_lower:
    print(f"Timezone found for {key}")  
    current_time = datetime.now(ZoneInfo(timezone)).strftime("%I:%M %p")
    return json.dumps({
    "location": location,
    "current_time": current_time
    })
    print(f"No timezone data found for {location_lower}")  
    return json.dumps({"location": location, "current_time": "unknown"})
    
    # Handle function calls
    if response_message.tool_calls:
    for tool_call in response_message.tool_calls:
    if tool_call.function.name == "get_current_time":
    function_args = json.loads(tool_call.function.arguments)
    time_response = get_current_time(
    location=function_args.get("location")
    )
    messages.append({
    "tool_call_id": tool_call.id,
    "role": "tool",
    "name": "get_current_time",
    "content": time_response,
    })
    else:
    print("No tool calls were made by the model.")  
    # Second API call: Get the final response from the model
    final_response = client.chat.completions.create(
    model=deployment_name,
    messages=messages,
    )
    return final_response.choices[0].message.content
    
    get_current_time called with location: San Francisco
    Timezone found for san francisco
    The current time in San Francisco is 09:24 AM.
    

함수 호출은 대부분의(전부는 아니지만) 스마트 바디 도구 사용 설계의 핵심이지만, 처음부터 구현하는 것은 때때로 어려울 수 있습니다. 앞서 살펴본 것처럼 레슨 2 앞서 살펴본 바와 같이 에이전트 프레임워크는 도구 사용을 가능하게 하는 사전 구축된 빌딩 블록을 제공합니다.

 

에이전트 프레임워크를 사용한 도구 사용 예시

다음은 다양한 에이전트 프레임워크 구현 도구에서 디자인 패턴을 사용하는 방법에 대한 몇 가지 예입니다:

시맨틱 커널

시맨틱 커널은 대규모 언어 모델(LLM)을 사용하는 .NET, Python 및 Java 개발자를 위한 오픈 소스 AI 프레임워크입니다. 대규모 언어 모델(LLM)을 사용하는 .NET, Python 및 Java 개발자를 위한 오픈 소스 AI 프레임워크입니다. 직렬화 프로세스는 함수와 그 인수를 모델에 자동으로 설명하므로 함수 호출을 사용하는 프로세스가 간소화됩니다. 또한 모델과 코드 간의 앞뒤 통신도 처리합니다. 시맨틱 커널과 같은 에이전트 프레임워크 사용의 또 다른 장점은 다음과 같은 사전 구축된 도구에 액세스할 수 있다는 것입니다. 문서 검색 노래로 응답 코드 인터프리터.

다음 다이어그램은 시맨틱 커널을 사용하여 함수를 호출하는 과정을 보여줍니다:

微软 AI Agent 入门课程:工具使用(调用)设计模式

시맨틱 커널에서 함수/도구는 다음과 같이 호출됩니다. 인터포즈조각. 앞서 살펴본 내용을 다음과 같이 결합하여 이를 수행할 수 있습니다. get_current_time 함수를 클래스로 가져와서 그 안에 배치하여 플러그인으로 변환할 수 있습니다. 또한 kernel_function 데코레이터를 사용하여 함수에 대한 설명을 받습니다. 그런 다음 GetCurrentTimePlugin을 사용하여 커널을 생성하면 커널이 함수와 인수를 자동으로 직렬화하여 그 과정에서 LLM(대규모 언어 모델)으로 전송할 스키마를 생성합니다.

from semantic_kernel.functions import kernel_function
class GetCurrentTimePlugin:
async def __init__(self, location):
self.location = location
    @kernel_function(
description="Get the current time for a given location"
)
def get_current_time(location: str = ""):
...
from semantic_kernel import Kernel
# Create the kernel
kernel = Kernel()
# Create the plugin
get_current_time_plugin = GetCurrentTimePlugin(location)
# Add the plugin to the kernel
kernel.add_plugin(get_current_time_plugin)

Azure AI 에이전트 서비스

Azure AI 에이전트 서비스는 개발자가 기본 컴퓨팅 및 스토리지 리소스를 관리하지 않고도 고품질의 확장 가능한 AI 인텔리전스를 안전하게 빌드, 배포 및 확장할 수 있도록 설계된 새로운 에이전트 프레임워크입니다. 엔터프라이즈급 보안을 갖춘 완전 관리형 서비스이므로 엔터프라이즈 애플리케이션에 특히 유용합니다.

Azure AI 에이전트 서비스는 LLM(대규모 언어 모델) API로 직접 개발하는 것보다 다음과 같은 몇 가지 이점을 제공합니다:

  • 자동화된 도구 호출 - 도구 호출을 구문 분석하고, 도구를 호출하고, 응답을 처리할 필요 없이 이제 이 모든 작업이 서버 측에서 이루어집니다!
  • 안전하게 관리되는 데이터 - 대화 상태를 직접 관리하지 않고 스레드에 필요한 모든 정보를 저장할 수 있습니다.
  • 기본 제공 도구 - Bing, Azure AI 검색 및 Azure 함수와 같은 데이터 원본과 상호 작용하는 데 사용할 수 있는 도구입니다.

Azure AI 에이전트 서비스에서 사용할 수 있는 도구는 두 가지 범주로 나눌 수 있습니다:

  1. 지식 도구:
    • 기본 처리를 위해 Bing 검색 사용
    • 문서 검색
    • Azure AI 검색
  2. 운영 도구:
    • 함수 호출
    • 코드 인터프리터
    • OpenAI로 정의된 도구
    • Azure 기능

에이전트 서비스를 통해 이러한 도구를 다음과 같이 함께 사용할 수 있습니다. toolset. 또한 threads 를 사용하여 특정 대화의 메시지 내역을 추적할 수 있습니다.

여러분이 콘토소 코퍼레이션의 영업 에이전트라고 가정해 보겠습니다. 판매 데이터에 대한 질문에 답변할 수 있는 대화 에이전트를 개발하려고 합니다.

다음 다이어그램은 Azure AI 에이전트 서비스를 사용하여 판매 데이터를 분석하는 방법을 보여 줍니다:

微软 AI Agent 入门课程:工具使用(调用)设计模式

이러한 도구를 서비스와 함께 사용하려면 클라이언트를 만들고 도구 또는 도구 집합을 정의하면 됩니다. 실제로 이를 위해 다음 Python 코드를 사용할 수 있습니다. 대규모 언어 모델(LLM)은 도구 집합을 살펴보고 사용자가 만든 함수를 사용할지 여부를 결정할 수 있습니다. fetch_sales_data_using_sqlite_query 또는 사용자 요청에 따라 미리 빌드된 코드 인터프리터를 사용할 수 있습니다.

import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from fecth_sales_data_functions import fetch_sales_data_using_sqlite_query # fetch_sales_data_using_sqlite_query function which can be found in a fetch_sales_data_functions.py file.
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
# Initialize function calling agent with the fetch_sales_data_using_sqlite_query function and adding it to the toolset
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset = ToolSet()
toolset.add(fetch_data_function)
# Initialize Code Interpreter tool and adding it to the toolset. 
code_interpreter = code_interpreter = CodeInterpreterTool()
toolset = ToolSet()
toolset.add(code_interpreter)
agent = project_client.agents.create_agent(
model="gpt-4o-mini", name="my-agent", instructions="You are helpful agent", 
toolset=toolset
)

 

디자인 패턴을 사용하여 신뢰할 수 있는 AI 인텔리전스를 구축하기 위해 도구를 사용할 때 특별히 고려해야 할 사항은 무엇인가요?

대규모 언어 모델(LLM)용 동적으로 생성된 SQL의 일반적인 문제는 보안, 특히 SQL 인젝션 또는 데이터베이스 삭제 또는 변조와 같은 악의적인 작업의 위험입니다. 이러한 우려는 정당한 것이지만 데이터베이스 액세스 권한을 적절히 구성하면 효과적으로 완화할 수 있습니다. 대부분의 데이터베이스의 경우 데이터베이스를 읽기 전용으로 구성하면 됩니다. PostgreSQL 또는 Azure SQL과 같은 데이터베이스 서비스의 경우 애플리케이션에 읽기 전용(SELECT) 역할을 할당해야 합니다.

보안 환경에서 애플리케이션을 실행하면 보호 기능을 더욱 강화할 수 있습니다. 엔터프라이즈 시나리오에서 데이터는 운영 시스템에서 추출되어 사용자 친화적인 스키마를 갖춘 읽기 전용 데이터베이스 또는 데이터 웨어하우스로 변환되는 경우가 많습니다. 이 접근 방식은 데이터를 안전하게 보호하고 성능과 접근성을 최적화하며 애플리케이션의 읽기 전용 액세스를 제한합니다.

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...