Акты Становления

005: Агент/Данные

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

Протокол Данных — это как основной язык для общения с информацией. Он помогает раскладывать её по полочкам и объяснять, что она означает. Другие части системы, например Ввод и Состояние, используют его, чтобы управлять данными в «рабочем пространстве» агента. В отличие от обычных сообщений, которые появляются и тут же исчезают, сообщения с Данными остаются надолго. Это как доска с заметками, на которую агент может смотреть, выполняя сложную задачу из нескольких шагов.

Сообщение с данными

Сообщение с Данными — это простой, но очень полезный способ добавить в Запрос понятную и упорядоченную информацию. Это как контейнер с несколькими отделениями:

  • data: Сама информация (например, текст, число, объект или список).
  • schema: Необязательная инструкция или «чертёж», который объясняет, как устроены данные.
  • kind: Необязательная метка, которая говорит о роли сообщения (например, "state" — «состояние» или "input" — «ввод»). Это помогает системе и ИИ понимать, с каким типом данных они работают.

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

Слияние и идентичность

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

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

Когда система получает несколько таких сообщений, которые можно объединить (например, несколько кусочков «состояния»), она может поступить двумя способами. Первый — сама склеить их в один большой и понятный объект, прежде чем показывать ИИ. Это упрощает работу для модели. Второй — ИИ может сам мысленно «сложить» эти кусочки у себя в голове, понимая, что они описывают одну и ту же вещь с разных сторон.

Пример того, как ИИ видит сообщения с данными

  • Обычное текстовое сообщение (text) передаётся как есть.
  • Сообщения с данными (data) объединяются и превращаются в одно текстовое сообщение.

Как выглядит код

Agent.Request(config, schema, [
  {
    type: 'text',
    // Обнови город пользователя на Остин
    text: "Update the user's city to Austin",
  },

  // Схема передаётся ИИ, чтобы он понял смысл данных
  {
    type: 'data',
    kind: 'user',
    description: 'Представляет текущего пользователя.',
    data: { name: 'John Doe' },
    schema: {
      type: 'object',
      properties: {
        name: { type: 'string' },
        age: { type: 'number' },
        city: { type: 'string' },
      },
    },
  },

  // Второе сообщение 'user' сольётся с первым
  {
    type: 'data',
    kind: 'user',
    data: { age: 30 },
  },
]);

Что видит ИИ

[
  {
    role: 'user',
    content: {
      type: 'text',
      text: "Update the user's city to Austin",
    },
  },
  {
    role: 'user',
    content: {
      type: 'text',
      text: `
        ## Data: ¶user
        {
          "name": "John Doe",
          "age": 30
        }
        Represents the current user.
        Schema for ¶user:
        {
          "type": "object",
          "properties": {
            "name": { "type": "string" },
            "age": { "type": "number" },
            "city": { "type": "string" }
          }
        }`,
    },
  },
];

Специализация сообщений с данными

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

От общих данных к конкретным ролям

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

Следующий документ, 006: Агент/Ввод, описывает, как сообщение с Данными используется для создания структурированного запроса для агента.