Skip to content

Сборка системных подсказок диалога и область редактирования ​

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

Системная секция «умного рассуждения» ​

Единая точка сборки — BuildSystemPromptSections в internal/agent/prompts.go, её используют и движок, и строковый совместимый интерфейс BuildSystemPromptWithOptions. Ниже секции перечислены в реальном порядке сборки; пустые секции опускаются в выводе.

Имя секцииИсточник и назначение
baseЯвный текст имеет приоритет; иначе для привязанной базы знаний — шаблон rag по умолчанию, без базы знаний — шаблон pure
steeringКак обрабатывать дополнительные сообщения пользователя в процессе ответа (уточнение, изменение или отмена), незавершённые задачи сохраняются; пользовательский текст передаётся аналогично
runtime_contractГраницы данных и инструкций, текущая область документов, условия завершения; при известном языке пользователя добавляется язык ответа по умолчанию
sourcesПравила выбора источников в зависимости от фактически зарегистрированного набора инструментов; в режиме установки навыков используются специальные инструкции проверки установки
toolsОбщие соглашения выполнения, файлов и песочницы; конкретные параметры остаются в описаниях инструментов
outputОбщий формат вывода, условия вывода изображений и проверка завершения
skillsМетаданные доступных навыков; добавляются только в не-установочном режиме навыков, при наличии read_file и наличии метаданных
memoryВоспоминания, извлечённые в текущем круге
protocolРукоятки источников и протокол ссылок на вывод

Пользовательский текст заменяет только base, не удаляет остальные runtime-секции и не расширяет права инструментов. Разбиение на секции — это не разные уровни прав API модели; набор вызываемых инструментов по-прежнему определяется регистрацией в бэкенде и путём выполнения. Контракт работы браузера хранится в описании инструмента local_browser, о подключении и работе см. Локальный браузер.

Плейсхолдеры base разворачиваются через renderPromptPlaceholdersWithStatus:

ПлейсхолдерТекущее поведение
Ссылается на каталог баз знаний в runtime_context сообщения пользователя, полный текст не разворачивается
Разворачивается в Enabled / Disabled в зависимости от того, зарегистрирован ли фактический инструмент web_search
Дата в формате YYYY-MM-DD
Название языка пользователя
Очищается; метаданные навыков предоставляются отдельной секцией

Контекст текущего круга и роли сообщений ​

internal/agent/observe.go добавляет в текущее сообщение пользователя runtime_context: дату, ID сессии, сводку привязанных баз знаний, закреплённые документы и источник вопроса — прочую информацию текущего круга; в историю инструкций оно не персистируется. Названия и описания баз знаний ограничиваются по длине и экранируются, а ответы FAQ и полный текст документов доступны только через инструменты поиска.

@MCP / @Skill порождают подсказку must_use текущего круга. Упоминание MCP задаёт приоритетную подсказку только для уже авторизованных сервисов и не удаляет прочие настроенные сервисы; ещё не открытые сервисы обнаруживаются через discover_mcp_tools. Подсказка при упоминании навыка сначала читает соответствующий SKILL.md. Эти выборы не могут уполномочить несвязанные действия и по-прежнему ограничены явно заданным пользователем выбором источников и правами бэкенда.

Сообщение, добавленное пользователем в процессе ответа и выбранное для немедленного дополнения, перед следующей итерацией присоединяется в конец списка сообщений как сообщение роли user: содержимое для модели оборачивается в <steer_message> с пояснением <continue_task> (types.SteerMessageContent), история сессии и интерфейс сохраняют исходный текст пользователя; секция steering определяет, как модель должна обращаться с такими сообщениями.

Штатные результаты инструментов сохраняют роль tool и ID вызова; непарные результаты при починке сообщений сохраняются в виде экранированного блока данных untrusted_tool_result и не могут быть повышены до системной инструкции. Ассистент, обычный вопрос-ответ и резервная генерация модели используют общие правила границ данных источников, но полный процесс сборки подсказок у них не совпадает.

При достижении лимита итераций или завершении по ошибке internal/agent/finalize.go продолжает текущий список сообщений, сохраняя историю, изображения и парность вызовов инструментов, затем добавляет финальный запрос. Последний вызов не предоставляет инструментов: задаётся tool_choice=none, отключается thinking.

Редактирование и сохранение ​

Редактор во фронтенде показывает итоговый текст, а frontend/src/utils/agentPromptTemplates.ts при сохранении различает ссылку на шаблон и пользовательское содержимое:

  • Текст полностью совпадает с известным шаблоном: сохраняются system_prompt_id / context_template_id, текст остаётся пустым.
  • Текст фактически изменён: сохраняется текст, старые ID шаблонов очищаются.
  • Переформулировка, резервные поля и текущий шаблон по умолчанию совпадают: сохраняется пустое значение, наследуется значение по умолчанию; подсказки намерений сохраняют только отклоняющиеся от умолчания переопределения.

Например, неизменённый шаблон Wiki сохраняется так:

json
{"agent_mode":"smart-reasoning","system_prompt_id":"wiki_researcher","system_prompt":""}

ResolveCustomAgentPrompts из internal/config/agent_prompts.go разрешает ссылки при запросе: явный текст всегда имеет приоритет, ссылки ищутся только в наборе шаблонов соответствующего поля и режима. Результат разрешения не записывается обратно в сохраняемый объект; неизвестная ссылка возвращает пустой текст, и вызывающая сторона использует путь по умолчанию.

Обновление шаблонов по умолчанию не затирает существующий пользовательский текст и не переносит исторические копии по умолчанию пакетно. Чтобы старая конфигурация снова следовала шаблону, восстановите значение по умолчанию в редакторе и сохраните.

Что проверять при обслуживании ​

Новому правилу сначала определите место: роли и предметные методы — в base, выбор источников — в sources, соглашения вызова — в описание инструмента или tools, форма вывода — в output, кодирование ссылок — в protocol. Избегайте дублирования одного правила в нескольких местах.

Логи [Agent][Prompt] section=... bytes=... помогают найти объём каждой секции; для проверки поведения необходимо также просмотреть итоговые сообщения модели, фактический реестр инструментов и права выполнения, а на задачах проверить выбор источников, восстановление после сбоев и формат вывода.

Версия v0.8.3 · MIT License