Обзор
Крупные языковые модели обладают широкими общими знаниями, но им неизвестны специфические метрики вашей предметной области, схемы баз данных или формулы вычислений. Без этого контекста модель делает предположения, что приводит к некорректным 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
Это гарантирует, что модель получает схему инструмента и инструкции по его использованию одновременно и точно в срок, что позволяет поддерживать базовый набор инструментов в оптимальном состоянии.
Пример: Привязка запроса к перегрузке сети
- Пользователь спрашивает: «Насколько загружена улица Сторроу Драйв в часы пик вечером?»
- В базовой системе подсказки отображается только название и описание каждого навыка, поэтому агент видит, что
rmi-traffic-metrics-groundingохватывает "заторы", и вызываетload_skillдля получения полных инструкций для этого запроса. - После загрузки навыка агент применяет определение TTI и предоставленный им проверенный SQL-шаблон, вычисляя соотношение относительно
historical_travel_timeвместо того, чтобы угадывать формулу.
Поскольку содержимое навыка извлекается только тогда, когда это необходимо для выполнения запроса, навыки, которые агент никогда не использует, никогда не попадают в контекст, что позволяет сохранить небольшой размер подсказки базовой системы.
Основные выводы
- Обоснование с учетом предметной области : Предоставляйте четкие инструкции, ограничения и бизнес-логику, а не полагайтесь на общие предположения модели.
- Используйте модульные навыки : разделите знания на целенаправленные навыки вместо одного большого системного запроса, чтобы сэкономить токены, уменьшить задержку и повысить точность.
- Пишите понятные описания : включайте в описание каждого навыка конкретные триггерные фразы и ключевые слова, чтобы агент мог надежно его загрузить.
- Включайте конкретные примеры : добавляйте проверенные примеры и справочные рабочие процессы в описания навыков, чтобы обеспечить согласованность и точность результатов.
- Объединение инструментов для обеспечения детерминизма : прикрепление исполняемых инструментов к навыкам для обработки строгой проверки и выполнения, сохраняя при этом базовый набор инструментов минимальным.
Следующие шаги
- Изучите продвинутые шаблоны навыков : ознакомьтесь с руководством разработчика по созданию агентов ADK с навыками, чтобы узнать о навыках ADK.
Авторы
Натаниэль Томас | Стажер-разработчик программного обеспечения, платформа Google Maps