Transcription
Представьте, что вы создали идеального агента для вашей команды блоггеров. Теперь ваша команда социальных сетей хочет его использовать, но им нужны другие подсказки, другие модели и другие инструменты. Но модификация вашего исходного кода для каждого случая использования не только отнимает много времени, но и подвержена ошибкам. Это создаёт две отдельные проблемы. Разработчики застревают в постоянных циклах изменения кода, что замедляет итерацию, а бизнес-команды не могут экспериментировать без поддержки инженеров. Вот тут-то и появляются помощники Langraph. Сегодня я покажу вам, как они помогут вам решить обе проблемы, разделив архитектуру ваших агентов от их конфигурации.
С помощью Langraph Assistance вы можете повторно использовать одну и ту же архитектуру агента в совершенно разных случаях использования. Разработчики могут проводить A/B-тестирование разных конфигураций без развёртывания отдельных кодовых баз, а бизнес-команды могут мгновенно адаптировать существующих агентов для новых сценариев. Вы можете настраивать разные подсказки, модели, инструменты и многое другое, никогда не касаясь вашего исходного кода. Это означает, что разработчики могут экспериментировать с новыми моделями или стратегиями подсказок за считанные минуты, а не часы. А бизнес-команды могут точно настраивать поведение агента через интуитивно понятный визуальный интерфейс Studio.
Когда вы будете готовы, вы сможете развёртывать эти вариации за считанные минуты на платформе Langraph. Разработчики могут отправлять изменения конфигурации прямо в продакшн без развёртывания кода. А бизнес-команды могут перейти от идеи к живому помощнику всего за несколько минут. А для разработчиков, которые хотят полного программного управления, вы можете автоматизировать жизненные циклы помощников, развёртывать конфигурации в разных средах, управлять сотнями помощников в масштабе и интегрировать управление помощниками непосредственно в ваши существующие конвейеры CI/CD и инфраструктуру.
Позвольте мне показать вам эту концепцию визуально, потому что понимание этого фундамента откроет всё, что мы собираемся создавать сегодня. Чтобы упростить задачу, вы можете рассматривать ваш граф как архитектуру вашего агента, например, этот агент в стиле React, который у нас есть здесь. Граф определяет поток. Ваш агент получает вопрос, обдумывает его, может использовать инструменты столько раз, сколько ему нужно, а затем отвечает. Эта модель рассуждения остаётся неизменной независимо от конкретной задачи вашего агента.
Но вот ключевое понимание. В то время как структура вашего графа остаётся неизменной, детали должны быть гибкими. Вот тут-то и вступает в игру конфигурация. Конфигурация — это то, как мы можем указать эти настраиваемые детали в нашем графе. Например, для этого агента ячейки React мы установили разные подсказки. Мы можем установить разные модели для использования, и мы можем установить разные инструменты, к которым имеет доступ наша модель. Кроме того, вы можете определить любые поля конфигурации, которые хотите. Это позволяет вам иметь один и тот же граф с совершенно разными возможностями на основе его конфигурации времени выполнения.
Помощник — это то, что вы получаете, когда объединяете свой граф с конкретной конфигурацией. Это сохранённая именованная версия, например, социальный медиа-помощник v1, которую вы можете развёртывать и повторно использовать. Каждый помощник представляет собой специализированную версию вашего графа. Итак, для помощника социальных сетей вы можете видеть, что у нас есть подсказка, которая предназначена для генерации контента для социальных сетей. Мы выбрали модель, которая подходит для этой задачи. Кроме того, мы предоставили ему доступ к некоторым инструментам, чтобы помочь ему выполнить это. Теперь это сохранено и versioned, и мы можем использовать его в любом месте наших приложений.
Вот аналогия, чтобы связать всё это воедино. Итак, вы можете рассматривать свой граф как конкретную модель автомобиля. Итак, скажем, купе, которое вы видите на экране. Когда вы пойдёте покупать этот конкретный автомобиль, вам предложат несколько вариантов. Вы можете рассматривать их как настраиваемые поля или вашу конфигурацию. Вас спросят, какой уровень отделки вы хотели бы, разные варианты цвета, разные двигатели и, возможно, даже механическую или автоматическую трансмиссию. Вы можете рассматривать конфигурацию как варианты, которые производитель хотел предоставить конечному потребителю. Помощник — это теперь конкретный автомобиль, который вы фактически купите, или конкретная конфигурация автомобиля, который вы хотите купить. Итак, для этого мы выбрали синюю машину со спортивной отделкой, двигателем V6 и механической коробкой передач. Это одно и то же базовое транспортное средство с совершенно разными ощущениями от вождения в зависимости от того, как вы его настроили.
Давайте теперь перейдём прямо к нашему проекту, и мы увидим, как конфигурация может ускорить нашу разработку. Итак, переходя к этому проекту, вы можете сразу же увидеть, что мы импортируем некоторые инструменты из файла инструментов, который мы создали. Мы импортируем предварительно созданный create react agent. А затем мы загружаем нашу модель чата с помощью утилиты, которую мы создали просто для упрощения загрузки чата. Далее мы собираемся создать наш граф с помощью предварительно созданного. Но сначала нам нужно инициализировать несколько переменных. Сначала давайте инициализируем наш LLM, используя импортированную функцию загрузки модели чата. Мы начнём с жёсткого кодирования OpenAI GPT-4 1 mini. Оттуда мы импортируем несколько наших инструментов, включая базовый инструмент поиска и получение сегодняшней даты. Мы также инициализируем нашу подсказку о том, как мы хотим создавать наш контент для социальных сетей. Отлично.
Следующий шаг — использовать create react agent pre-built, указать нашу модель, инструменты и подсказку. И это всё. Нам просто нужно вернуть нашу переменную графа из этой функции, и мы сможем скомпилировать и собрать это в Lingraph Studio. Итак, давайте попробуем и перейдём в Studio. Теперь, в Langraph Studio, нашей визуальной IDE агента, мы можем визуализировать, как именно работает этот агент. Для получения дополнительной информации о Langraph Studio я обязательно укажу ссылки на дополнительные ресурсы документации ниже. Первое, что мы можем сделать в Studio, это проверить нашего агента и посмотреть, как он работает. Отлично. Итак, вы видите, что наш агент работал по назначению. Он смог использовать некоторые инструменты и вернуться к нам с публикацией в социальных сетях о сегодняшних спортивных новостях.
Если бы мы хотели повторно использовать эту архитектуру для другого случая использования или для другой цели, может быть, для генерации длинного контента, может быть, наша финансовая команда хочет использовать его и имеет доступ к другим инструментам, нам пришлось бы зайти в наш исходный код, внести изменения для каждого случая использования и развернуть отдельные агенты для каждой из этих команд. Вот тут-то и вступает в игру концепция помощи и конфигурации. С Langraph мы можем указать настраиваемые поля в нашем приложении, что позволяет нам программным способом создавать разные конфигурации наших агентов, называемых помощниками. Давайте вернёмся к нашему коду, и я покажу вам, как мы можем изменить наш текущий граф для использования конфигурации.
Давайте установим некоторые настраиваемые поля в нашем проекте, и я покажу вам, как мы можем внедрить это в наш существующий граф. Итак, вы можете видеть в этом конфигурационном файле, что мы будем определять класс, называемый конфигурацией, и мы будем использовать базовую модель Pantic для начала. Первое настраиваемое поле, которое мы определим, — это наша системная подсказка. Мы предоставим подсказку системы по умолчанию и краткое описание. Далее мы можем определить нашу модель как настраиваемое поле со списком вариантов. Последнее настраиваемое поле, которое мы определим, — это наши выбранные инструменты. Мы предоставим список различных вариантов, из которых могут выбирать наши пользователи. Далее мы можем перейти к нашему графу, и мы можем показать, как мы можем вводить эти настраиваемые поля во время выполнения.
Вы можете видеть, что мы добавили несколько вещей. Первое — это функция get tools, которая будет преобразовывать список имён инструментов в фактические функции инструментов для нашего использования в нашем графе. Далее мы импортируем наш класс конфигурации и запускаемую конфигурацию из lang chain core. Вы можете видеть нашу функцию make graph. Теперь мы определяем новый параметр, называемый config. Затем мы можем инициализировать переменную, называемую configurable, с нашей конфигурацией. Теперь, вместо жёсткого кодирования этих значений, мы можем фактически получать их из нашей конфигурации. Таким образом, мы можем указать наш LLM на основе того, что есть в нашей конфигурации, выбранных инструментов, к которым имеет доступ наша модель, и самой подсказки. Я также могу указать имя из нашей конфигурации, чтобы мы могли отслеживать, какие графы мы строим. Наконец, мы будем использовать create react agent pre-built. Вы можете видеть, что мы добавили новый параметр, называемый config schema, и мы просто передаём наш класс конфигурации туда, чтобы lang graph и langraph studio знали, что есть в нашей конфигурации. Следующий шаг — снова запустить langraph dev, и мы можем сразу же вернуться в studio.
То, что делает этот подход таким мощным, заключается в том, что теперь вы можете мгновенно экспериментировать с различными конфигурациями вашего агента прямо в studio. Независимо от того, проводим ли мы локальную отладку или извлекаем развёртывание в продакшн на платформе langraph прямо в studio. Вы можете сохранять и versioned каждую из этих конфигураций для повторного использования и надёжного контроля версий. Мы можем мгновенно развёртывать новые конфигурации без каких-либо изменений кода. Мы можем создавать, управлять и использовать наших помощников программным способом через SDK или API в продакшн. Из одной архитектуры у нас теперь есть неограниченное количество специализаций. Давайте увидим это в действии визуально в Langraph Studio ещё раз.
Мы снова вернулись в Langraph Studio, и теперь у нас есть кнопка управления помощниками в левом нижнем углу. Это открывает нашу игровую площадку для конфигурации, где мы можем создавать специализированные версии нашего агента. Как вы можете видеть, первое, к чему у нас есть доступ, — это наша конфигурация по умолчанию, которую мы определили в нашем коде. Что ещё более интересно, так это то, что я могу перейти к этому примеру спортивного писателя, который я уже создал, и активировать его. Отсюда вы можете видеть, что у меня уже создана системная подсказка для спортивного писателя для хардкорных спортивных новостей. Кроме того, я определил более крупную модель и выбрал несколько соответствующих инструментов для начала. Итак, давайте попробуем. Я могу нажать на вкладку сообщений здесь, и я могу попросить его рассказать мне о потенциальных сделках с Кевином Дюрантом. Вы видите, что он сначала получит сегодняшнюю дату, а затем рекурсивно вызовет наш расширенный инструмент поиска, пока не соберет достаточно информации о слухах о сделках с Кевином Дюрантом, чтобы ответить мне. Как вы можете видеть, это отличный ответ и именно так я хочу, чтобы мои спортивные новости были написаны для меня. [Музыка]
Далее, если я вернусь на вкладку управления помощниками, мы можем увидеть другого помощника, которого я создал для написания сообщений в социальных сетях. Давайте активируем нашего писателя для социальных сетей. И вы можете видеть, что у нас есть расширенная системная подсказка специально для написания сообщений в социальных сетях. Мы используем меньшую, но более дешёвую модель. И мы используем более базовые инструменты поиска. Давайте откроем новую тему, и я могу попробовать это. Итак, снова мы собираемся спросить его о сегодняшних спортивных новостях. И вы можете видеть, что он будет использовать инструмент получения сегодняшней даты, проведет небольшой поиск, а затем ответит мне. Отлично. Итак, вы можете видеть, что наша команда социальных сетей хочет контент для всех различных платформ, на которых мы можем публиковать. И у нас всё это создано за одно обращение.
Теперь давайте откроем нашу вкладку управления помощниками и давайте создадим нового помощника. Итак, вы увидите здесь, вверху слева, у нас есть эта новая кнопка. Мы можем указать нового помощника. Итак, я собираюсь сказать, что это помощник финансового писателя. У меня есть конкретная системная подсказка о том, как я хочу, чтобы он проводил финансовые исследования и анализ. Итак, я вставлю это. Я могу указать нашу модель здесь. Итак, я собираюсь использовать 41. Выберите наш инструмент финансового исследования, наш расширенный инструмент исследования и инструмент получения сегодняшней даты. И этого должно быть достаточно. Итак, я могу нажать «Сохранить». И вы увидите, что у нас создан помощник финансового писателя. Кроме того, заполнен идентификатор помощника. Поскольку это уже развёрнутый граф, но немного позже об этом. Я снова могу вызвать этого помощника. Итак, я попрошу его получить последние финансовые новости в сфере высоких технологий. Я собираюсь посмотреть, как это работает в реальном времени. [Музыка] Отлично. Мы видим, что он ответил нам последними финансовыми новостями в сфере высоких технологий, именно так, как мы и хотели.
Мы теперь видели, как мы можем взять одну и ту же архитектуру графа и создать совершенно разные личности и возможности наших агентов, называемых помощниками. Я могу мгновенно переключаться между ними и немедленно тестировать. Давайте теперь перейдём к небольшой боковой панели о том, как мы можем улучшить нашу конфигурацию, чтобы немного упростить визуализацию многоагентных или сложных архитектур в studio. Для сложных многоагентных систем мы можем настраивать отдельные узлы по отдельности. Итак, давайте перейдём к этому конфигурационному файлу, который предназначен для архитектуры типа «супервайзер». Вы можете видеть, что здесь не так много изменилось по сравнению с нашими другими графами, кроме нескольких дополнительных полей. Итак, вы увидите, что мы указываем определённую подсказку и модель только для нашего супервайзера. Но кроме того, мы указываем это дополнительное поле JSON schema. Это позволяет нам определить, к какому узлу принадлежат эти разные поля конфигурации. Итак, вы можете видеть, что у нас то же самое для конфигурации наших финансовых субагентов, нашей конфигурации исследовательских субагентов [Музыка] и для нашей конфигурации писательских субагентов. Магия заключается в этом дополнительном параметре JSON schema, где мы определяем субагент или агент, которому принадлежат эти настраиваемые поля.
Давайте теперь запустим langraph dev. Итак, мы можем увидеть архитектуру супервайзера в langraph studio. Вернувшись в langraph studio, вы можете видеть, что наш агент-супервайзер имеет доступ к этим трём субагентам. Но мы можем видеть дополнительно теперь, что у нас есть эти маленькие шестерёнки на каждом из наших агентов. Если я нажму на него, откроется наша конфигурация узла. Теперь вы можете видеть, что у нас есть конфигурация, которая специфична только для нашего супервайзера. Это позволяет нам изменять только настраиваемые поля нашего супервайзера, чтобы оптимизировать конкретного агента или субагента. Кроме того, я могу открыть любого из этих субагентов, и мы можем увидеть их конкретную конфигурацию. Кроме того, если я открою нашу панель управления помощниками, мы сможем увидеть каждый узел, которому принадлежит каждое поле конфигурации. Это делает сложные многоагентные системы такими же простыми в конфигурации, как и отдельные агенты, и даёт нам дополнительную информацию, когда мы переходим к управлению нашей конфигурацией в studio. Давайте проверим агента-супервайзера, и мы увидим, как работает эта конфигурация. Отлично. Итак, вы можете видеть, что наш агент-супервайзер работает по назначению. Он вызвал наших субагентов, сгенерировал отличный ответ и ответил нашему пользователю.
Давайте теперь посмотрим, как мы можем взять эту концепцию помощи и конфигурации и применить её к нашим продакшн-развёртываниям на платформе Langraph. Я развернул агент React, с которым мы работали ранее, на платформе Langraph. Langraph Platform — это корпоративное решение Langchain для разработки, развёртывания и управления вашими агентами ИИ. Для получения дополнительной информации о платформе Langraph я обязательно укажу ссылки на дополнительные ресурсы и документацию ниже. Теперь, когда у нас развёрнут наш агент, вот где всё становится действительно захватывающим с нашими помощниками. Я могу перейти прямо на нашу вкладку помощников здесь, и вы увидите, что у меня уже есть несколько помощников, но давайте создадим нового помощника. Всё, что мне нужно сделать, это нажать кнопку «Новый помощник» здесь. Я могу указать, какой граф я хочу использовать. Указать имя. Итак, давайте назовём это нашим финансовым писателем. Мы дадим ему описание. Вставим нашу системную подсказку снова. Выберите модель, которую мы хотим использовать, различные инструменты, к которым мы хотим предоставить ему доступ, и мы можем нажать «Создать помощника». И вот так мы развернули готовую к продакшну версию нашего помощника. Если я открою нашу вкладку управления помощниками в Studio, вы увидите, что у нас уже есть идентификатор помощника для этого. Я могу указать другого помощника прямо в studio и сохранить его. И если я вернусь на нашу вкладку помощников в нашем развёртывании, вы увидите, что наш спортивный писатель и наш финансовый писатель сохранены и готовы к продакшн-трафику. Мы можем получить доступ к этим помощникам через наш готовый к продакшну URL API. И мы можем перейти к нашей документации API, чтобы посмотреть, как мы можем создавать, управлять и обновлять наших помощников программным способом.
Переходя к нашей спецификации API, вы увидите целый раздел, посвящённый нашим помощникам. Мы можем легко создать помощника. Мы можем искать существующих помощников. Мы можем получить конкретного помощника. И мы также можем установить последнюю версию помощника. Кроме того, когда я начинаю запуск с нашим агентом, мы можем указать конкретный идентификатор помощника, который мы хотим использовать. Давайте вернёмся к нашему развёртыванию, и мы узнаем немного больше о versioning наших помощников. Вернувшись на платформу LGRA, как я уже упоминал ранее, всякий раз, когда мы создаём или обновляем наших помощников, мы создаём новые версии. Это позволяет использовать надёжный контроль версий и откат, если они нам нужны. Итак, если я изменю нашего помощника здесь [Музыка] и сохраню его, [Музыка] перейду в studio, вы увидите, что у нас создана новая версия нашего финансового писателя. Я могу переключиться на первую версию этого помощника и установить её как активную версию. Мы можем сделать это также программным способом через API, и я покажу вам это через несколько минут. По мере того как мы улучшаем наших помощников, versioning защищает нас. Каждое изменение конфигурации создаёт новую версию с полной историей. Это даёт мне полную историю изменений для аудита, мгновенный откат, если версии работают плохо, и возможность проводить A/B-тестирование между различными конфигурациями. Это позволяет нам бесстрашно экспериментировать с сетями безопасности.
Теперь давайте переключимся и посмотрим, как мы можем управлять, создавать и использовать этих помощников программным способом. Мы собрали этот ноутбук, чтобы продемонстрировать, как легко создавать, использовать и управлять вашими помощниками через наш SDK и API. Давайте перейдём прямо к нему. Итак, первое, что мы сделаем, это импортируем get client из нашего SDK lane graph. Затем мы сохраним несколько переменных, чтобы начать работу, включая наш URL развёртывания, наш API-ключ и наш идентификатор графа. [Музыка] Далее мы используем функцию get client и передаём наш URL и API-ключ, чтобы подключиться к нашему серверу Langraph. Теперь, когда мы подключены к нашему серверу LN graph, мы можем использовать метод create в нашем модуле assistance, чтобы создать нового помощника. Всё, что нам нужно сделать, это передать наш идентификатор графа, наши настраиваемые значения через config, а затем имя для нашего помощника. Давайте попробуем. Как вы можете видеть, мы можем успешно создать нашего помощника, и он вернул нам идентификатор помощника. Теперь мы можем использовать этот идентификатор помощника, чтобы использовать его в продакшн. Первое, что нам нужно сделать, чтобы использовать это в продакшн, — это создать новую тему. Итак, мы будем использовать метод create в модуле threads, чтобы создать новую тему. Затем мы можем указать некоторые входные данные. Итак, для этого у меня будет сообщение от человека, в котором говорится: «Изучите последние новости в мире искусства». Далее, чтобы вызвать нашего агента, мы будем использовать client.runs.stream, чтобы передать результаты нашему пользователю. Всё, что нам нужно сделать здесь, это передать наш идентификатор темы, наш идентификатор помощника, входные данные и режим потока, который мы хотим использовать. Давайте попробуем. Вы увидите, что наш помощник принял запрос. Затем он вызвал расширенный инструмент поиска, а затем ответил нам. Это кажется отличным ответом, связанным с последними новостями в мире искусства. [Музыка]
Теперь допустим, у меня этот помощник развёрнут, и наши пользователи могут управлять им в интерфейсе. Возможно, они захотят изменить некоторые настраиваемые поля, такие как обновление модели или системной подсказки. То, что мы можем сделать, — это теперь использовать метод update в модуле assistance, чтобы обновить нашу конфигурацию. Мы можем передать обновлённые настраиваемые поля, а затем запустить его оттуда. Как вы можете видеть, мы сохранили тот же идентификатор помощника, но теперь мы находимся в новой версии, и наш помощник имеет новую личность, в которой он отвечает каламбурами. Итак, то, что мы можем сделать отсюда, это создать новую тему, а затем снова вызвать нашего помощника. На этот раз мы спросим: «Если бы вы были животным, каким бы вы были и почему?» [Музыка] Как вы можете видеть, на этот раз мы не использовали никаких инструментов, но он ответил, что он был бы выдрой, потому что они совершенно очаровательны, и так далее, и так далее. Это здорово, но, возможно, эта новая версия помощника — не совсем то, что мы ищем. То, что мы можем сделать, это вернуться к предыдущей версии нашего помощника очень легко, используя метод set latest. Чтобы сделать это, я просто передам наш идентификатор помощника и версию, к которой мы хотим вернуться. И как вы можете видеть, мы вернулись к нашему оригинальному помощнику по исследованиям.
Наш SDK позволяет нам интегрироваться с существующими приложениями и системами, программным способом создавать, использовать и управлять нашими помощниками и, в конечном итоге, управлять полным жизненным циклом наших агентов и помощников из кода. Кроме того, всё, что мы только что продемонстрировали с помощью SDK, также доступно через полную спецификацию REST API платформы Langraph, которую мы показали ранее, поэтому вы можете интегрироваться с любым языком или любой платформой. Как мы видели, помощники Langraph создают мощное разделение между вашей основной архитектурой агента и его конфигурацией. Мы можем мгновенно экспериментировать с Langraph Studio, сохранять и versioned этих помощников, развёртывать новых помощников с помощью платформы Langraph, а затем создавать, управлять и использовать этих помощников программным способом через наш SDK или API в продакшн. Попробуйте Langraph Assistance сегодня и измените способ построения, итерации и развёртывания ваших агентов в масштабе. Спасибо за просмотр и удачного построения.