Вводный курс Microsoft AI Agent: инструменты, использующие (вызывающие) шаблоны проектирования

Информация о курсеОпубликовано 6 месяцев назад Круг обмена ИИ
7.9K 00

Инструменты интересны тем, что позволяют интеллектам ИИ иметь более широкий спектр возможностей. Добавив инструменты, интеллект больше не ограничивается ограниченным набором операций, которые он может выполнять, а может выполнять широкий спектр операций. В этой главе мы рассмотрим паттерн проектирования "Использование инструментов", который описывает, как ИИ-интеллект может использовать тот или иной инструмент для достижения своих целей.

краткое содержание

В этом курсе мы надеемся ответить на следующие вопросы:

  • Что такое паттерны проектирования использования инструментов?
  • В каких случаях его можно применить?
  • Какие элементы/строительные блоки необходимы для реализации этого шаблона?
  • Каковы особенности использования инструментов для создания доверенных ИИ-интеллектов с помощью паттернов проектирования?

цель обучения

По завершении этого курса вы сможете:

  • Определите использование паттернов проектирования в инструменте и их назначение.
  • Определите, в каких случаях применяются шаблоны проектирования использования инструментов.
  • Поймите ключевые элементы, необходимые для реализации этого шаблона проектирования.
  • Узнайте, как обеспечить надежность интеллекта ИИ при использовании этого шаблона проектирования.

 

Что такое паттерны проектирования использования инструментов?

Инструменты для использования паттернов проектирования Сосредоточен на предоставлении большим языковым моделям (LLM) возможности взаимодействовать с внешними инструментами для достижения определенных целей. Инструмент - это код, который интеллект может выполнить для выполнения какого-либо действия. Инструментами могут быть простые функции (например, калькуляторы) или API-вызовы к сторонним сервисам (например, поиск цен на акции или прогноз погоды). В контексте искусственного интеллекта инструменты предназначены для выполнения интеллектом в ответ на Вызовы функций для создания модели.

 

В каких случаях его можно применить?

ИИ-интеллекты могут использовать инструменты для выполнения сложных задач, получения информации или принятия решений. Шаблон проектирования Tool Usage обычно используется в сценариях, требующих динамического взаимодействия с внешними системами, такими как базы данных, веб-сервисы или интерпретаторы кода. Эта особенность полезна для множества различных сценариев использования, включая:

  • Динамический поиск информации: Intelligentsia может запрашивать внешние API или базы данных для получения актуальных данных (например, запрос к базе данных SQLite для анализа данных, получения цен на акции или информации о погоде).
  • Выполнение и интерпретация кода: Intelligentsia может выполнять код или сценарии для решения математических задач, создания отчетов или моделирования.
  • Автоматизация рабочих процессов: Автоматизируйте повторяющиеся или многоэтапные рабочие процессы с помощью интеграции таких инструментов, как планировщики задач, службы электронной почты или конвейеры данных.
  • Поддержка клиентов: Intelligentsia может взаимодействовать с CRM-системами, платформами для обработки заказов или базами знаний для решения запросов пользователей.
  • Создание и редактирование контента: Intelligentsia может использовать такие инструменты, как программы проверки грамматики, обобщения текста или оценки безопасности контента, чтобы помочь в решении задач по созданию контента.

 

Какие элементы/строительные блоки необходимы для реализации инструмента для использования паттернов проектирования?

Эти строительные блоки позволяют искусственному интеллекту выполнять широкий спектр задач. Давайте рассмотрим ключевые элементы, необходимые для реализации инструмента, использующего паттерны проектирования:

  • Вызовы функций/инструментов: Это основной способ, с помощью которого большие языковые модели (LLM) могут взаимодействовать с инструментами. Функции или инструменты - это многократно используемые блоки кода, которые интеллекты используют для выполнения задач. Это могут быть простые функции (например, калькуляторы) или API-вызовы к сторонним сервисам (например, поиск цен на акции или прогноз погоды1 ).
  • Динамический поиск информацииIntelligentsia может запрашивать последние данные у внешних API или баз данных. Это полезно для таких задач, как анализ данных, получение котировок акций или информации о погоде1.
  • Выполнение и интерпретация кодаИнтеллектуалы могут выполнять код или скрипты для решения математических задач, создания отчетов или проведения симуляций 1.
  • Автоматизация рабочих процессов: Это автоматизация повторяющихся или многоэтапных рабочих процессов путем интеграции таких инструментов, как планировщики задач, почтовые службы или конвейеры данных1.
  • Поддержка клиентовИнтеллекты могут взаимодействовать с CRM-системами, платформами для обработки заказов или базами знаний для решения запросов пользователей 1.
  • Создание и редактирование контента: Intelligentsia может использовать такие инструменты, как программы проверки грамматики, обобщения текста или оценки безопасности контента, чтобы помочь в решении задач по созданию контента.

Далее рассмотрим вызовы функций/инструментов более подробно.

Вызовы функций/инструментов

Вызовы функций - это основной способ, с помощью которого большие языковые модели (LLM) взаимодействуют с инструментами. Часто можно встретить взаимозаменяемые слова "функция" и "инструмент", потому что "функции" (многократно используемые блоки кода) - это "инструменты", которые интеллект использует для выполнения задач. инструменты". Чтобы вызвать код функции, Большая языковая модель (LLM) должна сравнить запрос пользователя с описанием функции. Для этого в LLM отправляется схема, содержащая все доступные описания функций. Затем Большая языковая модель (LLM) выбирает функцию, которая лучше всего подходит для выполнения задачи, и возвращает ее имя и параметры. Выбранная функция вызывается, и ее ответ отправляется обратно в Большую языковую модель (LLM), которая использует эту информацию для ответа на запрос пользователя.

Для разработчиков, реализующих функцию вызова интеллекта, необходимо:

  1. Модель Large Language Model (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) выбрала функцию, которую нужно запустить, необходимо реализовать и выполнить код для выполнения этой задачи. Мы можем реализовать код для получения текущего времени в Python. Также нам нужно написать код для извлечения имени и параметров из response_message, чтобы получить конечный результат.

    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 Как мы узнали, фреймворк Agentic предоставляет нам готовые строительные блоки для использования инструментов.

 

Примеры использования инструментов с помощью фреймворка Agentic

Вот несколько примеров использования паттернов проектирования с различными инструментами реализации агентного фреймворка:

Семантическое ядро

Semantic Kernel - это open source AI framework для разработчиков .NET, Python и Java, использующих большие языковые модели (LLM). NET, Python и Java разработчиков, использующих большие языковые модели (LLM). сериализация Процесс автоматически описывает вашу функцию и ее аргументы в модели, тем самым упрощая процесс использования вызовов функций. Он также обрабатывает обратную связь между моделью и вашим кодом. Еще одно преимущество использования агентного фреймворка, такого как Semantic Kernel, заключается в том, что он позволяет вам получить доступ к готовым инструментам, таким как Поиск документов ответить пением интерпретатор кода.

Следующая диаграмма иллюстрирует процесс вызова функций с помощью Семантического ядра:

微软 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

Azure AI Agent Service - это новейший агентный фреймворк, позволяющий разработчикам безопасно создавать, развертывать и масштабировать высококачественные, масштабируемые интеллектуальные системы искусственного интеллекта без управления базовыми вычислительными ресурсами и ресурсами хранения. Она особенно полезна для корпоративных приложений, поскольку представляет собой полностью управляемую службу с безопасностью корпоративного уровня.

Служба Azure AI Agent Service обладает рядом преимуществ по сравнению с разработкой непосредственно с помощью API Large Language Model (LLM), в том числе:

  • Автоматизированные вызовы инструментов - не нужно разбирать вызовы инструментов, вызывать их и обрабатывать ответы; все это теперь делается на стороне сервера!
  • Безопасное управление данными - вы можете положиться на потоки для хранения всей необходимой информации, а не управлять состоянием собственного диалога.
  • Инструменты из коробки - инструменты, которые можно использовать для взаимодействия с источниками данных, например Bing, Azure AI Search и Azure Functions.

Инструменты, доступные в службе Azure AI Agent Service, можно разделить на две категории:

  1. Инструменты знаний:
    • Базовая обработка с помощью Bing Search
    • Поиск документов
    • Azure AI Search
  2. Операционные инструменты:
    • вызов функции
    • интерпретатор кода
    • Инструменты, определенные OpenAI
    • Функции Azure

Служба Agent Service позволяет нам использовать эти инструменты вместе, как toolset. Он также использует threads чтобы отслеживать историю сообщений в конкретном разговоре.

Предположим, вы являетесь торговым агентом корпорации Contoso. Вы хотите разработать диалоговый агент, который сможет отвечать на вопросы о ваших данных о продажах.

На следующей схеме показано, как можно использовать службу Azure AI Agent Service для анализа данных о продажах:

微软 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
)

 

Каковы особенности использования инструментов для создания доверенных ИИ-интеллектов с помощью паттернов проектирования?

Общей проблемой динамически генерируемого SQL для больших языковых моделей (LLM) является безопасность, а именно риск SQL-инъекций или вредоносных операций, таких как удаление или вмешательство в базу данных. Хотя эти опасения вполне обоснованны, их можно эффективно снизить, правильно настроив права доступа к базе данных. Для большинства баз данных это означает настройку базы данных как доступной только для чтения. Для таких служб баз данных, как PostgreSQL или Azure SQL, приложениям следует назначать роли только для чтения (SELECT).

Защита может быть дополнительно усилена за счет работы приложений в безопасной среде. В корпоративном сценарии данные часто извлекаются из операционных систем и преобразуются в базу данных, доступную только для чтения, или хранилище данных с удобной для пользователя схемой. Такой подход обеспечивает безопасность данных, их оптимизацию с точки зрения производительности и доступности, а также ограниченный доступ приложений только для чтения.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...