Урок 05 · планирование

Знания предметной области загружаются по требованию

「Don't put everything in the system prompt. Load on demand.」

⏱ ~10 мин · 📝 3 интерактивных компонента · 🧑‍💻 На основе shareAI-lab · s05_skill_loading.py

Ошибка «полной системной подсказки»

У вас есть 20 навыков, каждый из которых подробно описан: pdf-processing (как читать PDF), code-review (контрольный список проверки), git-workflow (часто используемые git-подпрограммы)... Интуитивный метод: поместите их все в системную подсказку, чтобы в любой момент можно было просмотреть модель.

Результат:

<ул>
  • Сжигайте 15–30 тысяч жетонов ввода за каждый звонок (даже если задача вообще не требует каких-либо навыков).
  • Внимание модели размыкается — соблюдение правил, упомянутых в длинной системной подсказке, снизится.
  • Измените навык, и кеш всех исторических разговоров станет недействительным.
  • Способ создания s05 заключается в разделении его на два слоя.

    двухуровневая архитектура

    Уровень 1 · Дешево: в системную подсказку помещаются только название навыка и описание, состоящее из одного предложения (около 100 жетонов каждый). 20 навыков = 2 тыс. жетонов, приемлемо.

    # список навыков в системной подсказке
    Доступные навыки:
      - pdf: обработка PDF-файлов. Извлечение текста, таблиц, метаданных.
      - проверка кода: контрольный список систематической проверки кода.
      - git-workflow: общие шаблоны ветвления и перебазирования git.

    Уровень 2 · По требованию. Когда модели необходимо использовать определенный навык, вызовите load_skill(name="pdf"), и полное тело навыка (возможно, 5–10 тысяч токенов) вставляется в контекст черезtool_result. Ни один из жетонов неиспользованных навыков не загружается.

    #tool_result возвращает полный навык
    <название навыка="pdf">
      Шаг 1. Используйте pdfplumber для извлечения...
      Шаг 2. При необходимости выполните резервное копирование OCR...
      Шаг 3. Структурируйте вывод в виде таблицы Markdown...
    </skill>

    Сравните стоимость токенов

    Протестируйте это в реальном сценарии. Предположим, у вас есть 20 навыков и на каждом теле в среднем по 3000 жетонов. Пользователь задает вопрос (типа «Исправить ошибку в интерфейсе входа») — этот вопрос, вероятно, не требует каких-либо навыков.

    SKILL.md формат

    Файлы навыков используют заголовок + тело YAML:

    ---
    название: PDF
    описание: Обработка PDF-файлов. Извлечение текста, таблиц, метаданных.
    тэги: документ, парсинг
    ---
    
    Шаг 1: Используйте pdfplumber для извлечения. Обработка макетов с несколькими столбцами...
    Шаг 2. Для отсканированных PDF-файлов вернитесь к распознаванию текста через tesseract...

    Фронтальная часть предназначена для уровня 1 (имя/описание/теги), а тело — для уровня 2. Этот метод написания вдохновлен статическими блогами (Джекилл, Хьюго), и люди, знакомые с ним, могут понять его с первого взгляда.

    Интерактив

    Виджет 1 · Экономика токенов · Сравнение двух архитектур

    Слева: Полная системная подсказка. Справа: двухуровневая архитектура. Посмотрите на накопленные жетоны после 20 разговоров.

    全塞 system prompt
    System prompt: 60000 tokens
    (20 × 3000 token 的 skill 全塞入)
    × 对话次数: 1

    总计: 60000 tokens
    两层架构
    System prompt: 2000 tokens
    (20 个描述 × ~100 token 每个)
    + 按需加载的 skill body: 0 tokens
    (每 5 次对话触发一次)

    总计: 2000 tokens
    1
    省 0%
    Интерактив

    Виджет 2 · Frontmatter Parser · Извлечение метаданных навыков

    Введите SKILL.md и используйте логику синтаксического анализа фронтмена YAML в s05, чтобы увидеть, что получают уровни 1 и 2 соответственно.

    SKILL.md(可编辑)
    Layer 1 · system prompt 里塞这个
    
              
    Layer 2 · load_skill 时的 tool_result
    
              
    Интерактив

    Виджет 3 · Доступность · Модель можно найти только после написания описания навыка.

    Описание уровня 1 является основой выбора навыков для модели. Дайте вам 3 набора сравнений, выберите тот, который лучше написан — некоторые методы письма могут привести к тому, что модель никогда не обретет этот навык.

    答对 0 / 3