Примеры структур Vibe
В этом документе мы рассмотрим конкретные примеры, чтобы показать базовую структуру разных типов Vibe, которые обсуждались в «Главе 1: Vibes и их проявления». Каждый пример показывает Vibe как статическую запись, состоящую из input
(входные данные), поля schema
(которое содержит структуру самого Vibe или его определение) и solution
(содержимое, результат или конфигурация, соответствующая этой schema
).
Как эти Vibes создаются, развиваются или взаимодействуют динамически (например, через примитив refine
), подробно описано в следующих главах. Цель здесь — прояснить уникальную природу и типичное содержимое основных компонентов каждого типа Vibe.
Понимание ссылок на схемы ($ref
)
Схемы Vibe часто ссылаются на другие схемы с помощью ключевого слова $ref
. Эти ссылки используют формат, похожий на URI, и обычно начинаются с aug:
.
- Абсолютные и локальные ссылки:
- Абсолютная ссылка на общую глобальную схему начинается со слэша сразу после наименования схемы, например:
aug:/schemas/SharedSchemaName
. Они используются для общих, общесистемных определений. - Локальная ссылка (без слэша после наименования схемы, например:
aug:schemas/UserSpecificSchema
) считается зависимой от контекста (например, специфичной для пользователя или относящейся к текущему Vibe). В примерах этого документа большинство общих базовых схем будут использовать абсолютные пути.
- Абсолютная ссылка на общую глобальную схему начинается со слэша сразу после наименования схемы, например:
- «Вечнозеленые» и версионные ссылки:
- Чтобы сослаться на последнюю версию схемы («вечнозеленая» ссылка), опустите номер версии в конце, например:
aug:/schemas/BaseVibe
. Это типичный способ расширения базовых шаблонов, который гарантирует, что они всегда используют самое актуальное определение. - Чтобы закрепить определенную версию схемы, укажите номер версии, например:
aug:/schemas/SpecificDefinition:2
. Это полезно для ссылки на конкретные инструменты или наборы инструкций, где важна определенная версия.
- Чтобы сослаться на последнюю версию схемы («вечнозеленая» ссылка), опустите номер версии в конце, например:
Концептуально похожие Vibes (например, все Record Vibes типа «UserProfile» или все Vibes, определяющие «StandardProcess») обычно имеют одинаковые или очень похожие определения в своих полях schema
, что обеспечивает одинаковую структуру для Vibes одного и того же вида.
1. Пример Record Vibe: Профиль пользователя
Сценарий: Vibe, представляющий информацию профиля пользователя. Record Vibes в основном используются для структурированных данных.
Пример JSON-структуры UserProfileRecordVibe
(например, aug:users/user-789?1
):
{
"input": [
{
"type": "UserProfileContext",
"$id": "aug:user-789",
"query": "Инициализировать или обновить профиль пользователя. Если предпочтения не полностью известны или не предоставлены, попытаться вывести разумные значения по умолчанию или предложить варианты.",
"state": {
"displayName": "Jane Doe",
"email": "jane.doe@example.com"
// Поле 'preferences' намеренно опущено, чтобы LLM мог его предположить или предложить.
}
}
],
"schema": {
"title": "Запись профиля пользователя",
"description": "Определяет полную структуру информации профиля пользователя, включая идентификационные данные, метаданные и специфичные для пользователя детали. Составлена из базовых схем Vibe и RecordVibe с использованием «вечнозеленых» ссылок.",
"allOf": [
{
"$ref": "aug:/schemas/Vibe",
"$comment": "Базовая структура Vibe, ссылка без версии, чтобы всегда использовать последнюю. Предоставляет свойства, такие как $id, $type и $revision."
},
{
"$ref": "aug:/schemas/RecordVibe",
"$comment": "Базовая структура RecordVibe, ссылка без версии. Предоставляет общие свойства записи, такие как id, createdAt, lastModified."
},
{
"type": "object",
"title": "Детали контейнера",
"description": "Специфическая информация и предпочтения, связанные с пользователем.",
"properties": {
"displayName": {
"type": "string",
"title": "Отображаемое имя",
"description": "Имя, публично отображаемое для пользователя."
},
"email": {
"type": "string",
"format": "email",
"title": "Адрес электронной почты",
"description": "Основной адрес электронной почты пользователя для связи и входа."
},
"preferences": {
"type": "object",
"title": "Предпочтения пользователя",
"description": "Настройки и выборы, сделанные пользователем для кастомизации своего опыта.",
"properties": {
"newsletter": {
"type": "boolean",
"default": false,
"title": "Подписка на рассылку",
"description": "Указывает, желает ли пользователь получать новостные обновления."
},
"theme": {
"type": "string",
"enum": ["light", "dark"],
"default": "light",
"title": "Тема интерфейса",
"description": "Выбранная визуальная тема для пользовательского интерфейса (например, светлая или темная)."
}
}
}
// id, createdAt, lastModified наследуются от слоя RecordVibe
// $id, $revision, $type наследуются от слоя Vibe
},
"required": ["displayName", "email"]
}
]
// Итоговый список 'required' будет объединением списков 'required' со всех слоев:
// например: ["$type", "$id", "$revision", "createdAt", "lastModified", "designation", "primaryCapability"]
},
"solution": {
"$type": "UserProfileRecordVibe", // из слоя Vibe
"$id": "aug:vibes/user-profile-789", // из слоя Vibe, это уникальный ID самого Vibe
"$revision": 3, // из слоя Vibe
"id": "user-789", // из слоя RecordVibe, это ID записи пользователя
"displayName": "Jane Doe", // из данных пользователя
"email": "jane.doe@example.com", // из данных пользователя
"preferences": {
// из данных пользователя, возможно, дополнено LLM
"newsletter": false,
"theme": "light"
},
"createdAt": "2025-01-15T10:00:00Z", // из слоя RecordVibe
"lastModified": "2025-03-10T12:05:00Z" // из слоя RecordVibe
}
}
Объяснение:
- Поле
input
теперь является массивом объектов. Первый объект предоставляет контекст ($id
),query
для LLM (заменяяdirective
) и начальноеstate
(заменяяinitialData
).query
предлагает вывести недостающиеoperationalParameters
. - Поле
schema
теперь имеет массивallOf
на верхнем уровне:- Он ссылается (
$ref
) наaug:/schemas/Vibe
(предоставляя $type). - Он ссылается (
$ref
) наaug:/schemas/RecordVibe
(предоставляя $id, $revision,createdAt
,lastModified
). - Он включает встроенный объект, определяющий специфичные для контейнера детали (
designation
,primaryCapability
,operationalParameters
,capabilities
) с полямиtitle
иdescription
, понятными для UI.
- Он ссылается (
- Общие
title
иdescription
для составной схемыVesselProfileRecord
находятся на верхнем уровне объектаschema
. - Комментарии указывают, какие свойства ожидаются от слоев, на которые ведут ссылки.
solution
включает $type (изVibe
) и $id (изRecordVibe
), аoperationalParameters
вsolution
могут быть результатом вывода LLM, если их не было в исходном состоянии.
Эта структура делает цепочку наследования явной и использует «вечнозеленые» ссылки. Поля title
и description
предназначены для того, чтобы быть понятными как для пользовательских интерфейсов, так и для LLM.
Упомянутые базовые схемы (aug:/schemas/Vibe
и aug:/schemas/RecordVibe
) должны быть определены в другом месте. Например:
Гипотетическое определение для aug:/schemas/Vibe
(например, если его последняя версия — 1, он может храниться как aug:/schemas/Vibe?1
, но для «вечнозеленого» использования на него ссылаются как aug:/schemas/Vibe
):
2. Пример Role Vibe: Контейнер «Инвестиционный консультант»
Сценарий: Этот Vibe иллюстрирует контейнер «Инвестиционный консультант» — конкретный экземпляр, который обрабатывает запросы. Поле input
содержит запрос и любое начальное состояние (например, специфичные конфигурации для этого контейнера, такие как specialization
или clientContext
). Поле schema
определяет структуру этого контейнера, расширяя RoleVibe и добавляя конкретные возможности и выходные данные. Поле solution
показывает результаты, сгенерированные этим контейнером: на основе входного запроса некоторые возможности создают данные, а другие имеют значение null
, если они не относятся к конкретному запросу.
Пример JSON-структуры InvestmentAdvisorVesselVibe
(например, aug:vessels/advisor-vessel-acme-001
):
{
"input": [
{
"type": "text",
"text": "Вы — финансовый ассистент",
"role": "system"
},
{
"type": "query",
"query": "Предоставьте быстрый анализ рынка о влиянии прорыва ACME Corp в квантовых вычислениях."
},
{
"type": "state",
"state": {
"specialization": "Анализ технологического сектора",
"analysisDepth": "быстрый"
}
}
],
"schema": {
"title": "Контейнер «Инвестиционный консультант»",
"description": "Представляет экземпляр контейнера роли «Инвестиционный консультант». Он наследует общие свойства от базовых схем и определяет специфичные выходные данные, относящиеся к этому контейнеру.",
"allOf": [
{
"$ref": "aug:/schemas/Vibe",
"$comment": "Базовая структура Vibe. Предоставляет основные свойства $id, $type и $revision для этого Vibe-контейнера."
},
{
"$ref": "aug:/schemas/RoleVibe",
"$comment": "Базовая структура RoleVibe. Предоставляет общие свойства роли, такие как displayName, description, createdAt, lastModified. Расширяя ее, мы определяем этот Vibe как ролевой."
},
{
"type": "object",
"title": "Выходные данные контейнера",
"description": "Определяет специфичные выходные данные, являющиеся результатом обработки этого контейнера «Инвестиционный консультант».",
"properties": {
"specializationUsed": {
"type": "string",
"title": "Активная специализация",
"description": "Область фокуса, которая была активна для этого конкретного контейнера."
},
"analysisDepthUsed": {
"type": "string",
"enum": ["quick", "standard", "comprehensive"],
"title": "Глубина анализа",
"description": "Уровень детализации, использованный в анализе."
},
"_IntroductionNarrative": {
"type": "string",
"format": "markdown",
"title": "Введение к отчету",
"description": "Вступительный текст, который вводит в контекст анализа и задает тон."
},
"MarketAnalysis": {
"type": ["object", "null"],
"title": "Анализ рынка",
"description": "Результаты анализа рынка. Null, если анализ не проводился.",
"properties": {
"summary": {
"type": "string",
"title": "Резюме анализа",
"description": "Основные выводы из анализа рынка."
},
"sentiment": {
"type": "string",
"enum": ["very-negative", "negative", "neutral", "positive", "very-positive"],
"title": "Рыночное настроение",
"description": "Общая оценка рыночного настроения."
},
"impactScore": {
"type": "number",
"minimum": 0,
"maximum": 10,
"title": "Оценка влияния",
"description": "Численная оценка потенциального влияния на рынок."
}
},
"required": ["summary", "sentiment", "impactScore"]
},
"_RecommendationTransition": {
"type": "string",
"format": "markdown",
"title": "Контекст рекомендации",
"description": "Текст, который служит переходом от анализа к рекомендациям.",
"const": "На основе приведенного выше анализа рынка, следующая инвестиционная рекомендация учитывает как немедленные возможности, так и неотъемлемые риски, связанные с инвестициями в развивающиеся технологии."
},
"InvestmentRecommendation": {
"type": ["object", "null"],
"title": "Инвестиционная рекомендация",
"description": "Итоговая инвестиционная рекомендация. Null, если не запрашивалась.",
"properties": {
"recommendation": {
"type": "string",
"enum": ["strong-buy", "buy", "hold", "sell", "strong-sell"],
"title": "Рекомендация",
"description": "Рекомендация по инвестиционному действию."
},
"rationale": {
"type": "string",
"title": "Обоснование",
"description": "Объяснение рекомендации."
},
"confidenceLevel": {
"type": "number",
"minimum": 0,
"maximum": 1,
"title": "Уровень уверенности",
"description": "Уверенность в рекомендации (0-1)."
},
"timeHorizon": {
"type": "string",
"title": "Временной горизонт",
"description": "Предлагаемый временной горизонт инвестиций."
}
},
"required": ["recommendation", "rationale", "confidenceLevel", "timeHorizon"]
},
"RiskAssessment": {
"type": ["object", "null"],
"title": "Детальная оценка рисков",
"description": "Всесторонний анализ рисков. Null, если не запрашивался или если глубина анализа 'быстрый'.",
"properties": {
"overallRiskLevel": {
"type": "string",
"enum": ["very-low", "low", "moderate", "high", "very-high"],
"title": "Общий уровень риска"
},
"primaryRiskFactors": {
"type": "string",
"title": "Основные факторы риска",
"description": "Ключевые риски, выявленные в инвестиции."
},
"mitigationStrategies": {
"type": "string",
"title": "Стратегии смягчения рисков",
"description": "Рекомендуемые подходы к управлению выявленными рисками."
}
},
"required": ["overallRiskLevel", "primaryRiskFactors", "mitigationStrategies"]
},
"_ConclusionNarrative": {
"type": "string",
"format": "markdown",
"title": "Заключение отчета",
"description": "Заключительный текст, который подводит итоги."
}
},
"required": [
"specializationUsed",
"analysisDepthUsed",
"_IntroductionNarrative",
"MarketAnalysis",
"_RecommendationTransition",
"InvestmentRecommendation",
"RiskAssessment",
"_ConclusionNarrative"
]
}
]
},
"solution": {
"$type": "InvestmentAdvisorVesselVibe",
"$id": "aug:vessels/advisor-vessel-acme-001",
"$revision": 1,
"createdAt": "2025-03-18T10:00:00Z",
"lastModified": "2025-03-18T10:05:00Z",
"displayName": "Анализ влияния ACME Corp Quantum",
"description": "Быстрый анализ рынка прорыва ACME Corp в квантовых вычислениях.",
"specializationUsed": "Анализ технологического сектора",
"analysisDepthUsed": "быстрый",
"_IntroductionNarrative": "## Отчет об инвестиционном анализе\n\n*Сгенерированный анализ*\n\nЭтот отчет содержит анализ рынка и инвестиционные рекомендации на основе запрошенной оценки. Глубина анализа и фокусные области адаптированы к предоставленным параметрам запроса.",
"MarketAnalysis": {
"summary": "Прорыв ACME Corp в квантовых вычислениях представляет собой значительный технологический скачок с потенциалом для трансформации множества секторов, включая ИИ, фармацевтику и криптографию. Чип 'QuantumLeap' показывает 1000-кратное улучшение производительности по сравнению с текущими решениями, что делает ACME потенциальным лидером на рынке квантовых вычислений, который, по прогнозам, достигнет 65 миллиардов долларов к 2030 году.",
"sentiment": "очень позитивное",
"impactScore": 8.5
},
"_RecommendationTransition": "На основе приведенного выше анализа рынка, следующая инвестиционная рекомендация учитывает как немедленные возможности, так и неотъемлемые риски, связанные с инвестициями в развивающиеся технологии.",
"InvestmentRecommendation": {
"recommendation": "покупать",
"rationale": "Прорыв ACME делает их лидером на развивающемся рынке квантовых вычислений. Преимущество первопроходца и сильный портфель интеллектуальной собственности поддерживают позитивный прогноз, несмотря на типичные риски технологий на ранней стадии.",
"confidenceLevel": 0.75,
"timeHorizon": "12-18 месяцев"
},
"RiskAssessment": null,
"_ConclusionNarrative": "## Ключевые выводы\n\nЭтот анализ оценил инвестиционную возможность на основе доступной информации и указанных параметров анализа. Предоставленные рекомендации следует рассматривать в контексте вашей общей инвестиционной стратегии и толерантности к риску.\n\n*Примечание: Этот анализ был проведен на запрошенном уровне глубины. Для более всесторонней оценки могут быть доступны дополнительные возможности.*"
}
}
Объяснение: Этот расширенный Vibe представляет Контейнер «Инвестиционный консультант», который генерирует результат, похожий на статью:
-
Массив
input
содержит:- Системный контекст
- Запрос пользователя
- Конфигурацию состояния, где
specialization
иanalysisDepth
установлены на «быстрый»
-
schema
использует композициюallOf
с:- Базовыми схемами для фундаментальных свойств
- Повествовательными блоками, которые структурируют вывод:
_IntroductionNarrative
: Общее вступление, обеспечивающее единообразную структуру отчета_RecommendationTransition
: Фиксированный текст для перехода (используяconst
)_ConclusionNarrative
: Общее заключение, обеспечивающее единообразную структуру отчета
- Тремя возможностями:
MarketAnalysis
: Основная возможность анализаInvestmentRecommendation
: Рекомендация на основе анализаRiskAssessment
: Не активирована в этом примере (null), потому что в запросе был указан «быстрый» анализ
-
solution
демонстрирует:- Поток, похожий на статью: При чтении сверху вниз повествовательные блоки и секции данных создают целостный отчет
- Выборочное использование возможностей:
RiskAssessment
имеет значениеnull
, потому что он активируется только для «стандартной» или «всесторонней» глубины анализа - Форматирование Markdown в повествовательных блоках для правильной структуры документа
- Разделение структуры и содержания: Повествовательные блоки обеспечивают постоянную структуру контейнера, в то время как только фактические аналитические возможности (MarketAnalysis, InvestmentRecommendation) содержат контент, специфичный для запроса (например, детали о ACME Corp)
Этот паттерн показывает, как контейнеры могут создавать хорошо структурированные, читаемые результаты, при этом интеллектуально активируя только те возможности, которые релевантны для конкретного запроса.
Паттерн выборочного использования возможностей: Контейнер интеллектуально реагирует на входной запрос, используя только релевантные возможности. Это позволяет одному и тому же чертежу роли (Role Blueprint) эффективно обрабатывать различные типы запросов:
- Запросы на полный анализ будут использовать все возможности
- Запросы на быстрый анализ (как в этом примере) используют только основные возможности
- Запросы на использование конкретных инструментов могут использовать только эти конкретные возможности Этот паттерн обеспечивает эффективную обработку и четкие, сфокусированные результаты, соответствующие намерению пользователя.
Паттерн проектирования повествовательных блоков:
- Все повествовательные блоки (свойства, начинающиеся с нижнего подчеркивания): Обеспечивают единообразный структурный нарратив для контейнера, независимо от конкретного запроса. Они определяют структуру отчета контейнера.
_IntroductionNarrative
: Общее введение для любого отчета об инвестиционном анализе_RecommendationTransition
: Фиксированный текст для перехода (используяconst
в схеме)_ConclusionNarrative
: Общее заключение для любого отчета об инвестиционном анализе
- Контент, специфичный для запроса, появляется только в выходных данных возможностей (MarketAnalysis, InvestmentRecommendation и т.д.), а не в повествовательных блоках
- Такое разделение гарантирует, что контейнер сохраняет свою структурную идентичность, адаптируя при этом содержание анализа к различным запросам
3. Пример Capability Vibe: Распределение ресурсов и делегирование задач
Сценарий: Capability Vibes представляют собой делегированные полномочия с интегрированным распределением ресурсов. Они служат одновременно и разрешением на выполнение работы, и спецификацией того, какая работа может быть выполнена, причем ресурсы выделяются непосредственно внутри возможности, а не через отдельные Resource Vibes.
3.1 Возможность распределения бюджета: Маркетинговая кампания
Эта возможность представляет собой полномочия на расходование маркетингового бюджета с определенными ограничениями и распределениями.
Пример JSON-структуры MarketingCampaignBudgetCapability
(например, aug:capabilities/marketing-campaign-q1?1
):
{
"input": [
{
"type": "query",
"query": "Создать возможность, которая делегирует полномочия по маркетинговой кампании с выделением бюджета в $50K"
}
],
"schema": {
"title": "Возможность бюджета на маркетинговую кампанию",
"description": "Возможность, которая разрешает деятельность по маркетинговой кампании с выделенным бюджетом и ограничениями на ресурсы.",
"allOf": [
{
"$ref": "aug:/schemas/Vibe",
"$comment": "Базовая структура Vibe"
},
{
"$ref": "aug:/schemas/CapabilityVibe",
"$comment": "Базовая структура CapabilityVibe"
},
{
"type": "object",
"title": "Структура распределения бюджета",
"description": "Определяет параметры и ограничения распределения бюджета",
"properties": {
"authority": {
"type": "object",
"title": "Делегированные полномочия",
"description": "Источник и объем полномочий для этой возможности",
"properties": {
"grantedBy": {
"type": "string",
"title": "Кем выданы полномочия",
"description": "ID Vibe, выдавшего эту возможность"
},
"scope": {
"type": "string",
"enum": ["organization", "department", "project", "personal"],
"title": "Объем полномочий"
},
"expiresAt": {
"type": "string",
"format": "date-time",
"title": "Срок действия полномочий"
}
},
"required": ["grantedBy", "scope"]
},
"budget": {
"type": "object",
"title": "Выделенный бюджет",
"description": "Прямое распределение ресурсов внутри этой возможности",
"properties": {
"totalUsd": {
"type": "number",
"minimum": 0,
"maximum": 50000,
"title": "Общий бюджет в USD"
},
"usedUsd": {
"type": "number",
"minimum": 0,
"default": 0,
"title": "Уже использовано USD"
},
"remainingUsd": {
"type": "number",
"minimum": 0,
"title": "Остаток в USD"
},
"allocations": {
"type": "object",
"title": "Разбивка бюджета",
"properties": {
"contentCreation": {
"type": "number",
"minimum": 0,
"maximum": 20000,
"title": "Бюджет на создание контента"
},
"advertising": {
"type": "number",
"minimum": 0,
"maximum": 25000,
"title": "Бюджет на рекламу"
},
"analytics": {
"type": "number",
"minimum": 0,
"maximum": 5000,
"title": "Бюджет на аналитику"
}
},
"required": ["contentCreation", "advertising", "analytics"]
}
},
"required": ["totalUsd", "usedUsd", "remainingUsd", "allocations"]
},
"constraints": {
"type": "object",
"title": "Ограничения по расходам",
"properties": {
"maxSingleTransaction": {
"type": "number",
"maximum": 10000,
"title": "Максимальная разовая транзакция"
},
"approvalRequired": {
"type": "boolean",
"title": "Требуется утверждение для крупных расходов"
},
"approvalThreshold": {
"type": "number",
"title": "Порог для требования утверждения"
}
}
}
},
"required": ["authority", "budget", "constraints"]
}
]
},
"solution": {
"$type": "CapabilityVibe",
"$id": "aug:capabilities/marketing-campaign-q1-2025",
"$revision": 1,
"createdAt": "2025-01-10T09:00:00Z",
"lastModified": "2025-01-10T09:00:00Z",
"displayName": "Полномочия по бюджету маркетинговой кампании Q1",
"description": "Полномочия на выполнение маркетинговых кампаний с выделенным бюджетом в $50K",
"authority": {
"grantedBy": "aug:roles/marketing-director-sarah",
"scope": "department",
"expiresAt": "2025-04-01T00:00:00Z"
},
"budget": {
"totalUsd": 50000,
"usedUsd": 0,
"remainingUsd": 50000,
"allocations": {
"contentCreation": 15000,
"advertising": 25000,
"analytics": 10000
}
},
"constraints": {
"maxSingleTransaction": 10000,
"approvalRequired": true,
"approvalThreshold": 5000
}
}
}