Белая книга "Агенты Google и основные приложения" (китайская версия)

Джулия Визингер, Патрик Марлоу и Владимир Вускович
Оригинал: https://www.kaggle.com/whitepaper-agents

 

каталог (на жестком диске компьютера)

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

Что такое интеллектуальное тело?

моделирование

артефакт

уровень оркестровки

Интеллигенция и моделирование

Когнитивная архитектура: как работает интеллект

Инструменты: наши ключи к внешнему миру

удлинители

Образцы расширений

функция (математика.)

пример использования

Пример кода функции

хранение данных

Реализация и применение

Обзор инструментов

Повышение производительности модели за счет целенаправленного обучения

Быстрый запуск Intelligentsia с LangChain

Производственные приложения, использующие интеллектуальный искусственный интеллект Vertex

резюме


 

Эта комбинация рассуждений, логики и доступа к внешней информации, связанная с генеративными моделями ИИ, приводит к концепции интеллекта.

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

Люди очень хорошо справляются со сложными задачами распознавания образов. Однако, прежде чем сделать вывод, они часто прибегают к помощи инструментов - книг, поисковых систем Google или калькуляторов, - которые дополняют их предварительные знания.

Как и люди, генеративные модели ИИ могут быть обучены использовать инструменты для доступа к информации в реальном времени или предлагать реальные действия. Например, модели могут использовать инструменты поиска по базам данных для получения доступа к конкретной информации, такой как история покупок клиента, чтобы генерировать индивидуальные рекомендации по покупкам.

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

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

 

Что такое интеллектуальное тело?

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

 

Чтобы понять внутреннюю работу интеллекта, давайте сначала опишем базовые компоненты, которые определяют его поведение, действия и решения. Сочетание этих компонентов можно назвать когнитивной архитектурой, и существует множество таких архитектур, которые могут быть реализованы путем смешивания и сочетания этих компонентов. Если сосредоточиться на основных функциях, то в когнитивной архитектуре разумного тела есть три основных компонента, как показано на рисунке 1.

谷歌Agents与基础应用白皮书(中文版)

Рисунок 1. Архитектура и компоненты общей разведки

моделирование

В контексте интеллигенции модель - это языковая модель (ЯМ), которая будет использоваться в качестве централизованной системы принятия решений для процессов интеллигенции. Модели, используемые Интеллигенцией, могут представлять собой одну или несколько ЛМ любого размера (малые/большие), способных следовать основанным на инструкциях рассуждениям и логическим схемам, таким как ReAct, Chain of Thought или Thinking Tree. Модели могут быть общими, мультимодальными или точно настроенными под нужды вашей конкретной архитектуры смарт-тела. Для достижения наилучших результатов следует использовать модель, которая наилучшим образом подходит для вашего предполагаемого конечного применения и в идеале была обучена на сигнатурах данных, связанных с инструментами, которые вы планируете использовать в своей когнитивной архитектуре. Важно отметить, что модель обычно не обучается на конкретных настройках конфигурации (например, выбор инструментов, параметры оркестровки/рассуждений) интеллектов. Однако модель может быть дополнительно оптимизирована для выполнения задач интеллектуального тела путем предоставления ей примеров, демонстрирующих функциональность интеллектуального тела, включая случаи, когда интеллектуальное тело использует определенные инструменты или шаги рассуждения в различных контекстах.

артефакт

Базовая модель, несмотря на впечатляющие возможности генерации текстов и изображений, все еще ограничена неспособностью взаимодействовать с внешним миром. Инструменты устраняют этот пробел, позволяя интеллекту взаимодействовать с внешними данными и сервисами и открывая более широкий спектр операций, выходящих за рамки базовой модели. Инструменты могут принимать различные формы и иметь разную глубину сложности, но обычно они соответствуют распространенным методам Web API, таким как GET, POST, PATCH и DELETE. Например, инструменты могут обновлять информацию о клиенте в базе данных или получать данные о погоде, чтобы повлиять на рекомендации по поездкам, которые интеллект предоставляет пользователю. С помощью инструментов интеллекты могут получать и обрабатывать информацию из реального мира. Это позволяет им поддерживать более специализированные системы, такие как генерация с расширенным поиском (RAG), которые значительно расширяют возможности интеллектов за пределы того, что может достичь базовая модель сама по себе. Более подробно об инструментах мы поговорим ниже, но важно понимать, что инструменты сокращают разрыв между внутренними функциями интеллекта и внешним миром, открывая более широкий спектр возможностей.

уровень оркестровки

Уровень оркестровки описывает циклический процесс, который управляет тем, как интеллектуальный организм получает информацию, выполняет некоторые внутренние рассуждения и использует их для принятия следующего действия или решения. Как правило, этот цикл продолжается до тех пор, пока интеллектуальный организм не достигнет своей цели или точки остановки. Сложность уровня оркестровки может сильно варьироваться в зависимости от интеллектов и выполняемых ими задач. Некоторые циклы могут представлять собой простые вычисления с правилами принятия решений, в то время как другие могут содержать цепочечную логику, включать дополнительные алгоритмы машинного обучения или реализовывать другие методы вероятностного рассуждения. Более подробно мы рассмотрим реализацию уровня оркестровки интеллигенции в разделе "Когнитивная архитектура".

Интеллигенция и моделирование

Чтобы яснее представить себе разницу между интеллектом и моделями, рассмотрим следующую схему:

моделированиеумное тело
Знания ограничены тем, что имеется в обучающих данных.Знания расширяются за счет подключения к внешним системам с помощью инструментов.
Односессионные рассуждения/предсказания на основе пользовательских запросов. Нет управления историей сеанса или непрерывным контекстом, если это не реализовано явно для модели. (например, история чата).Управление историей сеансов (т. е. журналами чатов), позволяющее проводить несколько раундов рассуждений/предсказаний на основе запросов пользователей и решений, принятых на уровне оркестровки. В данном случае "раунд" определяется как взаимодействие между взаимодействующей системой и интеллектуальным органом. (т. е. 1 входящее событие/запрос и 1 ответ интеллектуального органа).
Не существует собственной реализации инструмента.Инструменты реализованы в собственной архитектуре "умного тела".
Не реализован собственный логический слой. Пользователи могут формировать подсказки в виде простых вопросов или использовать фреймворки выводов (CoT, ReAct и т. д.) для формирования сложных подсказок, чтобы направлять модель при составлении прогнозов.Родные когнитивные архитектуры используют фреймворки выводов, такие как CoT, ReAct, или другие готовые фреймворки интеллектуальных тел, такие как LangChain.

 

Когнитивная архитектура: как работает интеллект

Представьте себе шеф-повара на оживленной кухне. Его цель - создать вкусные блюда для посетителей ресторана, что включает в себя цикл планирования, выполнения и корректировки.

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

 

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

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

  • ReAct, система разработки подсказок, предоставляет языковым моделям стратегию мыслительного процесса для рассуждений и действий по запросам пользователей, как с контекстными примерами, так и без них. Было показано, что подсказки ReAct превосходят множество базовых моделей SOTA и повышают эффективность действий человека и достоверность больших языковых моделей.
  • Цепочка мыслей (ЦМ) - это система разработки подсказок, которая обеспечивает возможность рассуждения с помощью промежуточных шагов. Существуют различные подтехники ЦМ, включая самореференцию, активную подсказку и мультимодальную ЦМ, каждая из которых имеет свои преимущества и недостатки в зависимости от конкретного применения.
  • Древо мышления (ДМ), инженерная система подсказок, идеально подходит для исследовательских или стратегических задач предвидения. Она обобщает подсказки цепочки мыслей и позволяет моделям исследовать различные цепочки мыслей, которые выступают в качестве промежуточных шагов к общему решению проблем с помощью языковых моделей.

 

Интеллектуальный организм может использовать один из вышеперечисленных методов рассуждения или многие другие, чтобы выбрать следующее наилучшее действие для данного запроса пользователя. Например, давайте рассмотрим запрограммированный на использование ReAct Фреймворк подбирает нужные действия и инструменты в соответствии с пользовательским запросом. Последовательность событий может выглядеть следующим образом:

  1. Пользователь посылает запрос умному телу
  2. Разведка начинает последовательность ReAct
  3. Интеллектуальное тело дает подсказку модели, требуя сгенерировать следующий ReAct
    Один из этапов и соответствующий ему выход:
    a. Вопросы: ввод вопросов из запросов пользователя, снабженных подсказками
    b. Размышления: моделирование размышлений о том, что следует делать дальше
    c. Операция: решение модели о том, какое действие предпринять дальше
    i. Здесь можно выбрать инструменты
    ii. Например, действие может быть [Flight, Search, Code, None], где первые три представляют собой известные инструменты, из которых модель может выбирать, а последнее означает "без выбора инструмента".
    d. Операционные входы: решения модели о том, какие входы предоставлять инструменту, если таковые имеются.
    e. Наблюдения: результаты операций/манипуляций с входными последовательностями
    i. Это мышление/операция/ввод/наблюдение может повторяться столько раз, сколько необходимо. ii.
    f. Окончательный ответ: окончательный ответ на исходный запрос пользователя, предоставленный моделью.
    4. цикл ReAct завершается, и пользователю выдается окончательный ответ PS:Практическое занятие по логике реализации ReAct
谷歌Agents与基础应用白皮书(中文版)

Рисунок 2. Пример использования Intelligentsia ReAct Reasoning на уровне оркестровки

Как показано на рисунке 2, модель, инструмент и интеллект настроены на совместную работу, чтобы предоставить пользователю обоснованный, лаконичный ответ, основанный на его первоначальном запросе. В то время как модель может угадать ответ на основе своих априорных знаний (создавая иллюзию), она использует инструмент (полеты) для поиска внешней информации в реальном времени. Эта дополнительная информация предоставляется модели, чтобы она могла принимать более обоснованные решения на основе реальных фактических данных, которые агрегируются и передаются пользователю.

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

Инструменты: наши ключи к внешнему миру

Хотя языковые модели хорошо обрабатывают информацию, им не хватает способности напрямую воспринимать и влиять на реальный мир. Это ограничивает их полезность в ситуациях, когда им необходимо взаимодействовать с внешними системами или данными. Это означает, что в определенном смысле языковая модель хороша лишь настолько, насколько она усваивает обучающие данные. Однако сколько бы данных мы ни вводили в наши модели, им все равно не хватает базовой способности взаимодействовать с внешним миром. Как же наделить наши модели способностью взаимодействовать с внешними системами в режиме реального времени и с учетом контекста? Функции, расширения, хранилища данных и плагины - все это способы предоставить моделям эту важную возможность.

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

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

 

удлинители

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

谷歌Agents与基础应用白皮书(中文版)

Рисунок 3. Как интеллекты взаимодействуют с внешними API?

 

Одним из подходов может быть реализация пользовательского кода, который принимает входящий запрос пользователя, анализирует его на предмет релевантной информации, а затем выполняет вызов API. Например, в случае с бронированием авиабилетов пользователь может сказать: "Я хочу забронировать билет из Остина в Цюрих". В этом случае наше пользовательское решение должно извлечь из запроса пользователя слова "Остин" и "Цюрих" как релевантные сущности, прежде чем попытаться выполнить вызов API. Но что произойдет, если пользователь скажет: "Я хочу забронировать билет до Цюриха", не указав при этом город вылета? Без необходимых данных вызов API будет неудачным, и придется внедрять больше кода, чтобы учесть такие крайние и экстремальные случаи. Такой подход не масштабируется и может легко потерпеть неудачу в любой ситуации, которая выходит за рамки реализованного пользовательского кода.

Более надежным подходом является использование расширений. Расширения сокращают разрыв между интеллектами и API следующим образом:

  1. Используйте примеры, чтобы научить интеллектуалов использовать конечные точки API.
  2. Научите интеллект, какие параметры необходимы для успешного вызова конечной точки API.
谷歌Agents与基础应用白皮书(中文版)

Рисунок 4. Расширение для подключения интеллектов к внешним API

 

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

谷歌Agents与基础应用白皮书(中文版)

Рисунок 5. Отношения "один ко многим" между Intelligentsia, расширениями и API

Это можно понять так: разработчик программного обеспечения решает, какую конечную точку API использовать при решении проблемы пользователя. Если пользователь хочет забронировать билет на самолет, разработчик может использовать API Google Flights, а если пользователь хочет узнать, где находится ближайшая кофейня относительно его местоположения, разработчик может использовать API Google Maps. Таким же образом Intelligentsia/Model Stack использует набор известных расширений, чтобы решить, какое из них лучше всего подходит для запроса пользователя. Если вы хотите увидеть расширения в действии, вы можете найти их в Близнецы Попробуйте их в приложении, перейдя в Настройки > Расширения и включив любое расширение, которое вы хотите протестировать. Например, вы можете включить расширение Google Flights и попросить Gemini "показать рейсы из Остина в Цюрих в следующую пятницу".

 

Образцы расширений

Чтобы упростить использование расширений, Google предлагает ряд готовых расширений, которые можно быстро импортировать в проект и использовать с минимальными настройками. Например, расширение интерпретатора кода в Code Snippet 1 позволяет генерировать и запускать код Python из описаний на естественном языке.

Python

import vertexai
import pprint
PROJECT_ID = "YOUR_PROJECT_ID"
REGION = "us-central1"
vertexai.init(project=PROJECT_ID, location=REGION)
from vertexai.preview.extensions import Extension
extension_code_interpreter = Extension.from_hub("code_interpreter")
CODE_QUERY = """Write a python method to invert a binary tree in O(n) time."""
response = extension_code_interpreter.execute(
operation_id = "generate_and_execute",
operation_params = {"query": CODE_QUERY}
)
print("Generated Code:")
pprint.pprint({response['generated_code']})
# The above snippet will generate the following code.
# Generated Code:
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right

Python

def invert_binary_tree(root):
"""
Inverts a binary tree.
Args:
root: The root of the binary tree.
Returns:
The root of the inverted binary tree.
"""
if not root:
return None
# Swap the left and right children recursively
root.left, root.right = \
invert_binary_tree(root.right), invert_binary_tree(root.left)
return root
# Example usage:
# Construct a sample binary tree
#     4
#    / \
#   2   7
#  / \ / \
# 1  3 6  9
root = TreeNode(4)
root.left = TreeNode(2)
root.right = TreeNode(7)
root.left.left = TreeNode(1)
root.left.right = TreeNode(3)
root.right.left = TreeNode(6)
root.right.right = TreeNode(9)
# Invert the binary tree
inverted_root = invert_binary_tree(root)

Фрагмент кода 1. Расширение интерпретатора кода генерирует и запускает код Python.

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

 

функция (математика.)

В области программной инженерии функции определяются как автономные модули кода, которые используются для выполнения конкретных задач и могут быть повторно использованы по мере необходимости. Когда разработчики программного обеспечения пишут программы, они обычно создают множество функций для выполнения различных задач. Они также определяют логику вызова функций function_a и function_b, а также ожидаемые входы и выходы.

Функции работают в области интеллекта очень похожим образом, но вместо разработчиков программного обеспечения мы можем использовать модели. Модели могут брать набор известных функций и, основываясь на их спецификации, решать, когда использовать каждую функцию и какие аргументы она принимает. Функции отличаются от расширений несколькими особенностями:

  1. Функции вывода модели и их параметры, но без вызовов API в реальном времени.
  2. Функции выполняются на стороне клиента, а расширения - на стороне smartbody.
    На примере Google Flights простая настройка функции может выглядеть так, как показано на рисунке 7.
谷歌Agents与基础应用白皮书(中文版)

Рисунок 7. Как функции взаимодействуют с внешними API?

 

Обратите внимание, что главное отличие здесь в том, что ни функции, ни интеллекты не взаимодействуют напрямую с API Google Flights. Как же на самом деле происходят вызовы API?

При использовании функций логика и выполнение вызова конечной точки API передается от интеллекта к клиентскому приложению, как показано на рисунках 8 и 9 ниже. Это обеспечивает разработчику более детальный контроль над потоком данных в приложении. Существует множество причин, по которым разработчик может выбрать использование функций вместо расширений, но некоторые общие случаи использования таковы:

  • API необходимо вызывать на другом уровне стека приложений, а не непосредственно в процессе разработки архитектуры агента (например, с помощью системы промежуточного ПО, внешнего фреймворка и т. д.).
  • Ограничения безопасности или аутентификации, которые не позволяют агенту напрямую вызывать API (например, API не доступен в Интернете, или инфраструктура агента не имеет доступа к API).
  • Ограничения по времени или последовательности операций, которые не позволяют агентам обращаться к API в режиме реального времени (например, пакетные операции, ручные процессы проверки и т. д.).
  • Для ответов API, которые агент не может выполнить, требуется дополнительная логика преобразования данных. Например, некоторые конечные точки API не предоставляют механизмов фильтрации для ограничения количества возвращаемых результатов. Использование функций на стороне клиента предоставляет разработчикам дополнительные возможности для выполнения таких преобразований.
  • Разработчики хотят повторять разработку прокси без развертывания дополнительной инфраструктуры для конечных точек API (например, вызовы функций можно использовать в качестве "симуляторов старта" для API).

 

Хотя с точки зрения внутренней архитектуры, как показано на рисунке 8, различия между этими двумя подходами более тонкие, вызовы функций обеспечивают дополнительный контроль и снижают зависимость от внешней инфраструктуры, что делает их привлекательным вариантом для разработчиков.

谷歌Agents与基础应用白皮书(中文版)

Рисунок 8. Элементы управления на стороне клиента и Smartbody, описывающие расширения и вызовы функций

 

пример использования

Модели могут использоваться для вызова функций, чтобы обрабатывать сложные процессы выполнения на стороне клиента для конечных пользователей, когда разработчик интеллектуального тела может не хотеть, чтобы языковая модель управляла выполнением API (как в случае с расширениями). Рассмотрим следующий пример, в котором интеллектуальное тело обучается как туристический консьерж, чтобы взаимодействовать с пользователем, который хочет забронировать путевку на отдых. Цель состоит в том, чтобы разумное тело сформировало список городов, который мы можем использовать в нашем промежуточном приложении для загрузки изображений, данных и т. д. для планирования путешествия пользователя. Пользователь может сказать:

Я хотел бы отправиться с семьей на лыжную прогулку, но не знаю, куда поехать.

В типичном запросе для модели вывод может быть следующим:

Конечно, вот список городов, которые стоит рассмотреть для семейной лыжной поездки:

  • Крестед-Батте, штат Колорадо, Соединенные Штаты Америки
  • Уистлер, Британская Колумбия, Канада
  • Церматт, Швейцария

 

Хотя приведенный выше вывод содержит нужные нам данные (названия городов), его формат не подходит для разбора. С помощью вызова функции мы можем научить модель форматировать этот вывод в структурированном стиле (например, JSON), который будет легче разобрать другой системе. При той же подсказке от пользователя пример вывода JSON из функции может выглядеть как фрагмент кода 5.

неисправленный

function_call {
name: "display_cities"
args: {
"cities": ["Crested Butte", "Whistler", "Zermatt"],
"preferences": "skiing"
}
}

 

Сниппет кода 5. Образец вызова функции Load для отображения списка городов и предпочтений пользователя Этот JSON-груз генерируется моделью и затем отправляется на наш клиентский сервер для выполнения любого действия, которое мы хотим с ним произвести. В данном конкретном случае мы обратимся к API Google Places, чтобы получить города, предоставленные моделью, найти изображения, а затем предоставить их нашим пользователям в виде отформатированного богатого контента. Обратитесь к диаграмме последовательности действий на рисунке 9, где подробно показаны шаги вышеописанного взаимодействия.

谷歌Agents与基础应用白皮书(中文版)

Рисунок 9. Диаграмма последовательностей, показывающая жизненный цикл вызова функции

 

В результате примера на рисунке 9 модель используется для "заполнения пробелов" параметрами, необходимыми клиентскому пользовательскому интерфейсу для вызова API Google Places. Клиентский пользовательский интерфейс использует параметры, предоставленные моделью в возвращаемой функции, для управления фактическим вызовом API. Это лишь один из примеров использования вызовов функций, но есть множество других сценариев, которые следует рассмотреть, например:

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

Главное, что нужно помнить о функциях, - это то, что они предназначены для предоставления разработчику большего контроля над выполнением вызовов API и общим потоком данных в приложении. В примере на рисунке 9 разработчик решил не возвращать информацию API интеллекту, поскольку она не имеет отношения к действиям, которые интеллект может предпринять в будущем. Однако, в зависимости от архитектуры приложения, может иметь смысл возвращать данные о внешних вызовах API интеллектуальному органу, чтобы повлиять на будущие рассуждения, логику и выбор действий. В конечном итоге разработчик приложения должен сам выбрать, что подходит для конкретного приложения.

 

Пример кода функции

Чтобы получить вышеуказанный результат от нашей сцены лыжного праздника, давайте создадим каждый компонент для работы с нашей моделью gemini-1.5-flash-001. Во-первых, мы определим функцию display_cities как простой метод Python.

Python

def display_cities(cities: list[str], preferences: Optional[str] = None):
"""根据用户的搜索查询和偏好提供城市列表。
Args:
preferences (str): 用户的搜索偏好, 例如滑雪、
海滩、餐馆、烧烤等。
cities (list[str]): 推荐给用户的城市列表。
Returns:
list[str]: 推荐给用户的城市列表。
"""
return cities

Фрагмент кода 6. Пример метода Python для функции, которая выводит список городов.

Далее мы инстанцируем нашу модель, создадим инструмент, а затем передадим в модель запрос пользователя и инструмент. Выполнение приведенного ниже кода приведет к результату, показанному в нижней части фрагмента кода.

Python

from vertexai.generative_models import GenerativeModel, Tool, FunctionDeclaration
model = GenerativeModel("gemini-1.5-flash-001")
display_cities_function = FunctionDeclaration.from_func(display_cities)
tool = Tool(function_declarations=[display_cities_function])
message = "I'd like to take a ski trip with my family but I'm not sure where to go."
res = model.generate_content(message, tools=[tool])
print(f"Function Name: {res.candidates[0].content.parts[0].function_call.name}")
print(f"Function Args: {res.candidates[0].content.parts[0].function_call.args}")
> Function Name: display_cities
> Function Args: {'preferences': 'skiing', 'cities': ['Aspen', 'Vail',
'Park City']}

Фрагмент кода 7. Создает инструмент, отправляет его в модель вместе с пользовательским запросом и позволяет выполнять вызовы функций

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

хранение данных

Представьте себе языковую модель как огромную библиотеку, содержащую обучающие данные. Однако в отличие от библиотеки, которая постоянно пополняется новыми книгами, эта библиотека остается статичной, в ней хранятся только знания, полученные при первоначальном обучении. Это сложная задача, поскольку знания о реальном мире постоянно пополняются
Развитие. Хранение данных устраняет это ограничение, обеспечивая доступ к более динамичной и актуальной информации и гарантируя, что ответы модели всегда основаны на фактах и актуальности.

Рассмотрим распространенный сценарий, в котором разработчику может потребоваться предоставить небольшой объем дополнительных данных для модели, возможно, в виде электронной таблицы или PDF-файла.

谷歌Agents与基础应用白皮书(中文版)

Рисунок 10. Как интеллекты взаимодействуют со структурированными и неструктурированными данными?

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

谷歌Agents与基础应用白皮书(中文版)

Рисунок 11. Хранилища данных подключают интеллектуальные системы к различным типам новых источников данных в режиме реального времени.

Реализация и применение

В контексте генеративных ИИ-интеллектов хранение данных часто реализуется в виде векторных баз данных, к которым, как ожидают разработчики, интеллект будет иметь доступ во время выполнения. Хотя мы не будем подробно останавливаться на векторных базах данных, главное понять, что они хранят данные в виде векторных вкраплений, которые являются высокоразмерными векторами или математическими представлениями предоставленных данных. В последние годы одним из наиболее типичных примеров использования хранилищ данных с языковыми моделями стали приложения Retrieval Augmented Generation (RAG). Эти приложения пытаются расширить широту и глубину знаний модели, предоставляя модели доступ к данным в различных форматах, например:

  • Содержание сайта
  • Структурированные данные в PDF, документах Word, CSV, электронных таблицах и других форматах.
  • Неструктурированные данные в форматах HTML, PDF, TXT и других.
谷歌Agents与基础应用白皮书(中文版)

Рисунок 12. Отношения "один ко многим" между интеллектами и хранилищами данных, которые могут представлять различные типы предварительно проиндексированных данных

Основной процесс каждого цикла запроса пользователя и ответа интеллектуального органа обычно моделируется, как показано на рисунке 13.

    1. Пользовательский запрос отправляется в модель встраивания для создания встраивания запроса
    2. Затем вложение запроса сопоставляется с содержимым векторной базы данных с помощью алгоритма сопоставления (например, ScaNN).
    3. Получение совпадений из базы данных векторов в текстовом формате и отправка их обратно в интеллектуальное тело
    4. Интеллектуалы получают запросы пользователей и полученный контент, а затем формулируют ответы или действия.

5. отправьте окончательный ответ пользователю

谷歌Agents与基础应用白皮书(中文版)

Рисунок 13. Жизненный цикл запроса пользователя и ответа интеллектуального органа в приложениях на основе RAG

 

В итоге получается приложение, позволяющее интеллекту сопоставить запрос пользователя с известным хранилищем данных с помощью векторного поиска, получить необработанный контент и передать его на уровень оркестровки и модели для дальнейшей обработки. Следующим шагом может быть предоставление окончательного ответа пользователю или выполнение дополнительных векторных поисков для дальнейшей оптимизации результатов. Пример взаимодействия с интеллектуальным телом, реализующим RAG с функцией рассуждения/планирования ReAct, показан на рисунке 14.

谷歌Agents与基础应用白皮书(中文版)

Рисунок 14. Пример применения RAG с использованием рассуждений/планирования ReAct

 

Обзор инструментов

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

удлинителивызов функциихранение данных
осуществлятьИнтеллектуальная реализация боковой части кузоваВыполнение на стороне клиентаИнтеллектуальная реализация боковой части кузова
пример использования
  • Разработчикам нужны интеллекты для управления взаимодействием с конечными точками API
  • Полезно при использовании встроенных расширений (например, Vertex Search, Code Interpreter и т. д.).
  • Многоходовые расписания и вызовы API (т.е. следующая операция "умного тела" зависит от результатов предыдущей операции/вызова API)
  • Ограничения безопасности или аутентификации не позволяют интеллекту обращаться к API напрямую
  • Ограничения по времени или порядку работы не позволяют интеллекту осуществлять вызовы API в реальном времени. (например, пакетные операции, ручной просмотр циклов и т. д.)
  • API, не выходящие в Интернет или недоступные для систем Google
Разработчики хотят реализовать Retrieval Augmented Generation (RAG), используя любой из следующих типов данных:

  • Веб-контент с предварительно проиндексированных доменов и URL-адресов
  • Структурированные данные в PDF, документах Word, CSV, электронных таблицах и т. д.
  • Реляционные/нереляционные базы данных
  • Неструктурированные данные в форматах HTML, PDF, TXT и других.

 

Повышение производительности моделей и целенаправленное обучение

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

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

  • Контекстное обучение: этот подход обеспечивает общие модели подсказками, инструментами и небольшими образцами при рассуждениях, позволяя им учиться "на лету", как и когда использовать эти инструменты для решения конкретных задач. фреймворк ReAct является примером такого подхода в естественном языке.
  • Контекстное обучение на основе поиска: эта техника динамически наполняет подсказками модели, извлекая наиболее релевантную информацию, инструменты и связанные с ними примеры из внешних хранилищ. Примером может служить "хранилище примеров" в расширении Vertex AI или хранилище данных архитектуры RAG, о котором говорилось ранее.
  • Обучение на основе тонкой настройки: этот метод предполагает обучение модели на большом наборе данных с конкретными примерами до начала рассуждений. Это помогает модели понять, когда и как применять определенные инструменты, еще до получения запросов от пользователя.

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

  • Представьте, что шеф-повар получает конкретный рецепт (подсказка), несколько ключевых ингредиентов (сопутствующие инструменты) и несколько образцов блюд от клиентов (образцов меньше). Основываясь на этой ограниченной информации и общих кулинарных знаниях повара, он должен придумать, как приготовить "на лету" блюдо, которое наилучшим образом соответствует рецепту и предпочтениям клиента. Это и есть контекстуальное обучение.
  • Теперь представим себе нашего шеф-повара на хорошо укомплектованной кухне с кладовой (внешним хранилищем данных), полной ингредиентов и рецептов (примеров и инструментов). Теперь шеф-повар может динамически выбирать ингредиенты и рецепты из кладовой и лучше согласовывать их с рецептами и предпочтениями клиентов. Это позволяет поварам использовать существующие и новые знания для создания более интеллектуальных и сложных блюд. Это и есть контекстное обучение на основе поиска.
  • Наконец, представим, что мы отправляем шеф-повара обратно в школу для изучения новой кухни или блюд (предварительно обученных на большом наборе данных для конкретного примера). Это позволит шеф-повару подходить к будущим неизвестным рецептам клиентов с более глубоким пониманием. Если мы хотим, чтобы шеф-повар
    Этот подход идеально подходит, если вы преуспеваете в определенной кухне (области знаний). Это обучение, основанное на тонкой настройке.

 

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

Быстрый запуск Intelligentsia с LangChain

Чтобы представить пример реального запуска исполняемого смартбоди, мы будем использовать LangChain и LangGraph Библиотеки для создания быстрого прототипа. Эти популярные библиотеки с открытым исходным кодом позволяют пользователям создавать клиентские интеллекты, "связывая" последовательности логики и рассуждений вместе, а также вызывая инструменты для ответа на запросы пользователя. Мы будем использовать нашу модель gemini-1.5-flash-001 и некоторые простые инструменты для ответа на многоэтапный запрос пользователя, как показано в фрагменте кода 8.

Мы используем такие инструменты, как SerpAPI (для поиска Google) и Google Places API. Вы можете увидеть пример вывода в фрагменте кода 9 после выполнения нашей процедуры в фрагменте кода 8.

Python

from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool
from langchain_community.utilities import SerpAPIWrapper
from langchain_community.tools import GooglePlacesTool
os.environ["SERPAPI_API_KEY"] = "XXXXX"
os.environ["GPLACES_API_KEY"] = "XXXXX"
@tool
def search(query: str):
"""Use the SerpAPI to run a Google Search."""
search = SerpAPIWrapper()
return search.run(query)
@tool
def places(query: str):
"""Use the Google Places API to run a Google Places Query."""
places = GooglePlacesTool()
return places.run(query)
model = ChatVertexAI(model="gemini-1.5-flash-001")
tools = [search, places]
query = "Who did the Texas Longhorns play in football last week? What is the address of the other team's stadium?"
agent = create_react_agent(model, tools)
input = {"messages": [("human", query)]}
for s in agent.stream(input, stream_mode="values"):
message = s["messages"][-1]
if isinstance(message, tuple):
print(message)
else:
message.pretty_print()

Сниппет кода 8. Примеры использования инструментов LangChain и LangGraph Intelligentsia

неисправленный

=============================== 用户消息 ================================
德克萨斯长角牛队上周的橄榄球赛对手是谁?对方球队体育场的地址是什么?
================================= AI 消息 =================================
工具调用:搜索
参数:
查询:德克萨斯长角牛队橄榄球赛程
================================ 工具消息 ================================
名称:搜索
{...结果:“NCAA 一级橄榄球联赛,佐治亚州,日期...”}
================================= AI 消息 =================================
德克萨斯长角牛队上周与佐治亚斗牛犬队进行了比赛。
工具调用:地点
参数:
查询:佐治亚斗牛犬队体育场
================================ 工具消息 ================================
名称:地点
{...桑福德体育场地址:桑福德路 100 号...}
================================= AI 消息 =================================
佐治亚斗牛犬队体育场的地址是佐治亚州雅典市桑福德路 100 号,邮编 30602。

Фрагмент кода 9. Выход программы из фрагмента кода 8.

 

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

 

Производственные приложения, использующие интеллектуальный искусственный интеллект Vertex

Платформа Vertex AI от Google упрощает этот процесс, предоставляя полностью хостинговую среду, включающую все основные элементы, описанные ранее. Используя интерфейс на естественном языке, разработчики могут быстро определить ключевые элементы своих интеллектов - цели, описания задач, инструменты, субинтеллекты для делегирования задач и примеры - для того, чтобы легко построить желаемое поведение системы. Кроме того, платформа предоставляет набор инструментов разработки, которые можно использовать для тестирования, оценки, измерения производительности интеллектов, отладки и повышения общего качества разработанных интеллектов. Это позволяет разработчикам сосредоточиться на создании и оптимизации своих интеллектов, в то время как сложность инфраструктуры, развертывания и сопровождения регулируется самой платформой.

На рисунке 15 представлен пример архитектуры интеллекта, построенного на платформе Vertex AI, в котором используются различные функции, такие как Vertex Agent Builder, Vertex Extensions, Vertex Function Calls и Vertex Example Storage. Архитектура включает в себя множество различных компонентов, необходимых для готовых к производству приложений.

谷歌Agents与基础应用白皮书(中文版)

Рисунок 15. Пример архитектуры сквозного интеллекта, построенного на платформе Vertex AI

Вы можете попробовать этот пример готовой архитектуры smartbody из нашей официальной документации.

резюме

В этом обзоре мы рассмотрим основные строительные блоки генеративных интеллектов ИИ, их состав и эффективные способы их реализации в виде когнитивных архитектур. Среди основных выводов, сделанных в этом обзоре, можно выделить следующие:

  • Интеллектуалы расширяют функциональность языковых моделей, используя инструменты для доступа к информации в реальном времени, предлагая практические действия, а также автономно планируя и выполняя сложные задачи. Интеллектуалы могут использовать одну или несколько языковых моделей для определения того, когда и как переходить в другое состояние, а также использовать внешние инструменты для выполнения любого количества сложных задач, которые было бы сложно или невозможно выполнить самостоятельно.
  • В основе работы интеллектуального тела лежит слой оркестровки - когнитивная архитектура, которая строит рассуждения, планирование, принятие решений и руководит его действиями. Различные методы рассуждений (например, ReAct, цепочки мыслей и деревья мыслей) обеспечивают структуру для получения информации, проведения внутренних рассуждений и создания обоснованных решений или ответов для оркестровочного слоя.
  • Инструменты (например, расширения, функции и хранилища данных) служат для интеллектов ключами к внешнему миру, позволяя им взаимодействовать с внешними системами и получать доступ к знаниям, выходящим за рамки их учебных данных. Расширения служат связующим звеном между интеллектами и внешними API.Это позволяет выполнять вызовы API и получать информацию в режиме реального времени. Функции предоставляют разработчикам более детальный контроль за счет разделения ответственности, позволяя интеллекту генерировать параметры функции, которые могут быть выполнены на клиенте. Хранилища данных предоставляют интеллекту доступ к структурированным или неструктурированным данным для поддержки приложений, управляемых данными.

Будущее разумных тел таит в себе захватывающие перспективы, и мы еще только начали изучать возможные варианты. По мере совершенствования инструментов и расширения возможностей рассуждения интеллекты смогут решать все более сложные задачи. Кроме того, стратегический подход "цепочки интеллектов" будет продолжать набирать обороты. Объединив специализированные интеллекты, каждый из которых преуспевает в определенной области или задаче, мы сможем добиться превосходных результатов во всех отраслях и проблемных областях.

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

сноска

  • Shafran, I., Cao, Y. et al., 2022, 'ReAct: Synergising Reasoning and Acting in Language Models'. Available at.
    https://arxiv.org/abs/2210.03629
  • Wei, J., Wang, X. et al., 2023, 'Chain-of-Thought Prompting Elicits Reasoning in Large Language Models'.
    Доступно на сайте: https://arxiv.org/pdf/2201.11903.pdf.
  • Wang, X. et al., 2022, 'Self-Consistency Improves Chain of Thought Reasoning in Language Models'.
    Доступно на сайте: https://arxiv.org/abs/2203.11171.
  • Diao, S. et al., 2023, 'Active Prompting with Chain-of-Thought for Large Language Models'. Available at.
    https://arxiv.org/pdf/2302.12246.pdf.
  • Zhang, H. et al., 2023, 'Multimodal Chain-of-Thought Reasoning in Language Models'. Available at.
    https://arxiv.org/abs/2302.00923.
  • Яо, С. и др., 2023, "Дерево мыслей: целенаправленное решение проблем с помощью больших языковых моделей". Available at.
    https://arxiv.org/abs/2305.10601.
  • Лонг, X., 2023, 'Большая языковая модель, управляемая деревом мысли'. Available at.
    https://arxiv.org/abs/2305.08291.
  • **Google. 'Приложение Google Gemini'. Доступно по адресу: **http://gemini.google.com.
  • **Swagger. 'Спецификация OpenAPI'. Доступно по адресу: **https://swagger.io/specification/.
  • Xie, M., 2022, "Как работает обучение в контексте? Концепция для понимания различий от
    Традиционное контролируемое обучение". Доступно по адресу: https://ai.stanford.edu/blog/understanding-incontext/.
  • Google Research. 'ScaNN (Scalable Nearest Neighbors)'. Доступно по адресу.
    https://github.com/google-research/google-research/tree/master/scann.
  • **LangChain. 'LangChain'. Доступно по адресу: **https://python.langchain.com/v0.2/docs/introduction/.
© заявление об авторских правах

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

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

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