Обучение агентов RMI ADK основам предметной области с помощью соответствующих навыков.

Обзор

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

Агент RMI ADK решает эту проблему с помощью навыков . Рассмотрим пользователя, который спрашивает : «Насколько загружена была дорога Сторроу Драйв вчера?» . Чтобы ответить, агент должен знать, что RMI выражает загруженность как индекс времени в пути (TTI) , отношение текущей duration_in_seconds к статической static_duration_in_seconds в таблице historical_travel_time . Агент без навыков может вместо этого придумать столбец average_speed (RMI сообщает только категориальную скорость, никогда не км/ч) или применить неправильную формулу, получив уверенный, но неверный ответ.

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

Ограничения больших системных запросов

Размещение всех правил и схем домена в одной командной строке системы приводит к ряду проблем:

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

Навыки

Навыки агента организуют знания предметной области в модульные папки, которые агент загружает только при необходимости. Каждый навык представляет собой каталог, содержащий файл SKILL.md с инструкциями в формате Markdown и заголовком YAML.

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

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

Анатомия навыка

Файл SKILL.md состоит из двух частей: заголовка YAML для маршрутизации и тела Markdown для инструкций.

1. Заголовок YAML

---
name: rmi-traffic-metrics-grounding
description: >
  Standard traffic performance metrics computable from RMI BigQuery
  tables. Covers congestion severity (TTI), delay, travel time
  reliability (LOTTR, BTI, PTI, CoV), congestion frequency, speed
  breakdowns, and network-wide congestion rates. Use when the user asks
  about traffic conditions, congestion, reliability, delay, or network
  health.
---

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

2. Тело документа в формате Markdown

В основной части инструкции содержатся указания, специфичные для предметной области, которым следует модель после загрузки. В состав инструкции по метрикам RMI входит точная формула TTI ( duration_in_seconds / static_duration_in_seconds ), проверенный шаблон SQL BigQuery для каждой метрики, а также триггерные фразы, сопоставляющие намерения пользователя с нужной метрикой. Предоставление структурированных, проверенных инструкций позволяет модели оставаться в рамках заданных параметров и предотвращает попытки угадать детали схемы или формулы.

Зарегистрируйте навыки с помощью ADK

Сгруппируйте навыки в набор SkillToolset и добавьте их в список инструментов агента:

from google.adk import skills
from google.adk.tools import skill_toolset

rmi_skill_toolset = skill_toolset.SkillToolset(
    skills=[
        # TRAFFIC_METRICS_SKILL_DIR points to the skill's SKILL.md folder.
        skills.load_skill_from_dir(TRAFFIC_METRICS_SKILL_DIR),
    ],
)

# root_agent = llm_agent.Agent(..., tools=[*bq_tools, rmi_skill_toolset])

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

Объедините инструменты с навыками.

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

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

Вы можете привязать определенные инструменты непосредственно к навыку в его YAML-заголовке:

metadata:
  adk_additional_tools:
    - calculate_custom_metric

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

Пример: Привязка запроса к перегрузке сети

  1. Пользователь спрашивает: «Насколько загружена улица Сторроу Драйв в часы пик вечером?»
  2. В базовой системе подсказки отображается только название и описание каждого навыка, поэтому агент видит, что rmi-traffic-metrics-grounding охватывает "заторы", и вызывает load_skill для получения полных инструкций для этого запроса.
  3. После загрузки навыка агент применяет определение TTI и предоставленный им проверенный SQL-шаблон, вычисляя соотношение относительно historical_travel_time вместо того, чтобы угадывать формулу.

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

Основные выводы

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

Следующие шаги

Авторы

Натаниэль Томас | Стажер-разработчик программного обеспечения, платформа Google Maps