006: Агент/Данные
- Требуется:
- Включает:
- Дополняется:
Постоянное контекстное сообщение, содержащее значение data
и необязательную schema
. Оно сохраняется на протяжении всего цикла выполнения агента для обеспечения стабильного, структурированного контекста.
Этот документ описывает протокол данных, низкоуровневый шаблон для предоставления структурированной, самоописываемой информации. Он служит основополагающим механизмом, используемым другими подсистемами, такими как Ввод и Состояние, для управления структурированными данными в context
агента. В отличие от временных сообщений, сообщения с Данными являются постоянными и сохраняются между итерациями цикла выполнения агента, обеспечивая стабильный контекст для многошаговых задач.
Сообщение с данными
Сообщение с Данными — это простая, но мощная конструкция для добавления структурированного контекста в Запрос. Это объект сообщения, который содержит следующие свойства:
data
: Любое значение JSON (например, строка, число, объект, массив), которое содержит полезную нагрузку.schema
: Необязательная JSON Schema, которая определяет структуру и семантическое значениеdata
.kind
: Необязательная строка, которая идентифицирует роль сообщения (например,"state"
,"input"
). Это позволяет системе и LLM различать различные типы данных в одном и том же контексте.
Сочетая данные с необязательной схемой, сообщение с Данными делает контекст машиночитаемым. schema
действует как черновик, объясняя LLM, что означает каждое свойство, каков его тип и какие ограничения применяются. Это не только направляет рассуждения LLM, но и служит формой документации, показывая пользователям, что можно изменить или настроить.
Слияние и идентичность
Протокол предназначен для обработки нескольких сообщений с Данными в рамках одного context
. Если система определяет, что несколько сообщений имеют одинаковую идентичность, они объединяются в один целостный объект. Это особенно полезно для сценариев, таких как применение серии исправлений состояния.
Идентичность сообщения в первую очередь определяется его kind
. Например, все сообщения с kind: "state"
без каких-либо других отличительных признаков считаются имеющими одинаковую идентичность. Эта идентичность может быть дополнительно уточнена другими протоколами, в первую очередь Экземплированием, которое позволяет выполнять параллельную обработку путем создания различных контекстов.
Когда присутствует несколько объединяемых сообщений (например, несколько объектов state
, представляющих исправления), система может обработать это двумя способами. Во-первых, цикл выполнения агента может явно объединить эти объекты в один целостный объект состояния перед тем, как представить его LLM. Это снижает когнитивную нагрузку на модель. Во-вторых, сама LLM может «мысленно объединить» информацию в своем скрытом пространстве, понимая, что отдельные сообщения представляют разные аспекты одной концепции.
Пример того, как сообщения с данными видит LLM
- Сообщение
text
передается как есть. - Сообщения
data
объединяются и преобразуются в одно сообщениеtext
Как выглядит код
Agent.Request(config, schema, [
{
type: 'text',
text: "Update the user's city to Austin",
},
// Схема сериализуется, чтобы LLM поняла семантику
{
type: 'data',
kind: 'user',
description: 'Represents the current user.',
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 },
},
]);
Что видит LLM
[
{
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" }
}
}`,
},
},
];
Взаимодействие с другими протоколами
Протокол Данных является основополагающим шаблоном, который специализируется и расширяется несколькими другими протоколами более высокого уровня.
-
Цикл: Цикл выполнения использует сообщения с Данными для поддержания непрерывности. Сообщение о Состоянии, специализированное сообщение с Данными, является основным средством для сохранения информации между тактами цикла.
-
Состояние: Протокол Состояния использует сообщение с Данными для представления постоянной, развивающейся памяти рабочего процесса.
schema
сообщения определяет структуру объекта состояния, включая доступные свойства и переменные. -
Экземплирование: Все сообщения с Данными подлежат Экземплированию. Свойство
_instance
действует как ключ, который ограничивает данные определенным потоком выполнения в рамках более крупной пакетной операции. Сообщения с Данными с разными значениями_instance
не будут объединяться, обеспечивая изоляцию данных между параллельными процессами. -
Ввод: Протокол Ввода использует сообщение с Данными для формального объявления параметров, которые принимает Запрос. Это механизм, который превращает статический Запрос в повторно используемый, подобный функции компонент.
От данных к динамическим связям
Протокол Данных предоставляет универсальный контейнер для структурированной информации. Утвердив эту основу, мы теперь можем исследовать, как динамически связывать эти фрагменты данных. Это критически важный шаг, который позволяет агенту создавать рабочие процессы, где вывод одного шага становится вводом для другого.
Следующий документ, 008: Агент/Переменные, описывает протокол, который делает возможными эти динамические связи.