ym88659208ym87991671
Отображение сообщений в чате с агентом | Документация для разработчиков

Отображение сообщений в чате с агентом

Обновлено 22 апреля 2026

Диалоговый интерфейс GigaLab умеет отображать сложные элементы (карточки, ход рассуждений модели, саджесты) на основе их описания, которое передается в соответствующем сообщении.

Для этого в сообщение нужно добавить дополнительные поля additional_kwargs с описанием элементов.

Вы также можете изменять диалоговый интерфейс агента с помощью специальных функций SDK.

Функциональность работает в чате с агентом, после публикации в любом окружении: DEV, IFT или ПРОМ.

Поддерживается отображение сообщений заданных типов:

  • пользователя — тип human;
  • агента — тип ai;
  • сообщение, сгенерированное в процессе работы функции GigaChat — тип tool.

Также возможно отображение собственных типов, например, для отображения логов.

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

Сообщения пользователя

Сообщение пользователя передается с типом human.

Пример сообщения в чате с агентом:

Отображение сообщения type=human

Пример кода для формирования сообщения:

import uuid
from langchain_core.messages import HumanMessage


def make_human_message(content: str) -> HumanMessage:
return HumanMessage(
id=str(uuid.uuid4()),
content=content,
additional_kwargs={},
)

Приложенные файлы

Если агент может работать с файлами, которые передал пользователь, они также будут отображаться в чате. Пример отображения сообщения пользователя с приложенными файлами:

Отображение сообщения type=human с прикрепленными файлами

Пример кода для формирования сообщения:

import uuid
from langchain_core.messages import HumanMessage

def make_human_with_files(content: str, files: list[dict]) -> HumanMessage:
# files: [{"id": "...", "filename": "...", "url": "..."}]
return HumanMessage(
id=str(uuid.uuid4()),
content=content,
additional_kwargs={"attached_files": files},
)

Сообщения агента

GigaLab автоматически отрисовывает MDX-контент сгенерированный агентом и переданный в сообщении с типом ai. Поддерживаются таблицы, картинки, ссылки, математические формулы и другое форматирование.

Пример кода для формирования сообщения:

from langchain_core.messages import AIMessage


def make_ai_message(content: str) -> AIMessage:
return AIMessage(content=content)

Вы также можете отображать дополнительные элементы, например процесс размышления агента или возможные варианты запроса пользователя (саджесты).

Отображение размышлений

Если агент поддерживает размышления (thinking), то вы сможете отобразить шаги его рассуждений. Для этого в сообщении с типом ai нужно передать специальный тег <thinking>.

В интерфейсе это будет выглядеть так:

Отображение рассуждение в сообщение type=ai

Пример кода для формирования сообщения:

from langchain_core.messages import AIMessage

def make_ai_thinking_message(text: str) -> AIMessage:
mdx_content = f"<thinking>\n{text}\n</thinking>"
return AIMessage(content=mdx_content)

Отображение источников

В ответах агента можно отображать источники, списки ссылок и карточки. Для этого нужно использовать соответствующие структуры, переданные в объекте additional_kwargs.

Отображение источников интерфейсе:

Отображение сообщения type=ai с источниками

Для отображения источников используйте структуру additional_kwarg.shelves:

Пример кода для формирования сообщения:

from langchain_core.messages import AIMessage
from pydantic import BaseModel
from typing import List, Optional


class SearchDocument(BaseModel):
title: Optional[str] = None
url: Optional[str] = None
snippet: Optional[str] = None
source: Optional[str] = None # "tg", "facts", "news" и т.п.


class Shelf(BaseModel):
shelfName: str
documents: List[SearchDocument]


def make_ai_with_shelves(answer: str, shelves: List[Shelf]) -> AIMessage:
shelves_json = [shelf.model_dump() for shelf in shelves]
return AIMessage(
content=answer,
additional_kwargs={"shelves": shelves_json},
)

Отображение карточек

Карточки в интерфейсе:

Отображение сообщения type=ai с каруселью карточек

Пример таких карточек можно найти в чате с агентом помощником туриста.

Для отображения карточек используйте структуру additional_kwargs.carousels.

Пример кода для формирования сообщения:

from langchain_core.messages import AIMessage


def make_ai_with_carousel(cards: list[dict]) -> AIMessage:
# cards: [{"title": "...", "image_urls": ["..."], "additional_data": {...}}, ...]
carousels = [
{
"type": "CARD",
"sub_type": "EXCURSION",
"priority": 2,
"data": cards,
}
]
return AIMessage(
content="Описание и рекомендации по найденным вариантам.",
additional_kwargs={"frontend_data": {"carousels": carousels, "sources": []}},
)

Отображение ссылок

Ссылки в интерфейсе:

Отображение сообщения type=ai с артефактами

Для отображения ссылок используйте структуру additional_kwargs.artifacts

Пример кода для формирования сообщения:

from langchain_core.messages import AIMessage


def make_ai_with_artifacts(layout: str, artifact_links: list[dict]) -> AIMessage:
# artifact_links: [{"type": "pdf" | "docx" | "markdown", "link": "<url>"}]
return AIMessage(
content=layout,
additional_kwargs={"artifacts": artifact_links},
)

Сообщения функций

Сообщения, сгенерированные в результате работы функций можно отобразить с помощью типа tool:

Отображение сообщения type=tool

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

Пример кода для формирования сообщения:

from langchain_core.messages import ToolMessage
import json
import uuid


def make_tool_message(result: dict, tool_call_id: str) -> ToolMessage:
return ToolMessage(
id=str(uuid.uuid4()),
tool_call_id=tool_call_id,
content=json.dumps(result, ensure_ascii=False),
)

Добавление подсказок

Подсказки (suggests) — кнопки с вариантами продолжения диалога, которые появляются после ответа агента.

Подробный пример формирования и добавления подсказок в ответы агента.

Пример демонстрирует работу со структурированными данными. Чтобы получить ответ единым блоком и корректно обработать его, перед вызовом модели отключается потоковая передача токенов llm.disable_streaming = True .

По умолчанию потоковая передача токенов включена.

Пример JSON-схемы подсказок:

{
"json_schema_extra": {
"examples": [
{
"should_suggest": True,
"suggests": [
{
"label": "Уточнить свежие новости по теме",
"prompt": "Используй DuckDuckGo и найди последние новости",
"position": 0,
}
],
},
{
"should_suggest": False,
"suggests": [],
},
]
}
}

Собственные сообщения

Интерфейс чата также может отображать произвольные сообщения event=custom. Например, лог работы агента:

Отображение логов

Пример кода для формирования сообщения:

from langgraph.types import StreamWriter
from agent_lab_sdk.schema import LogMessage


async def run_step(state, writer: StreamWriter):
writer(LogMessage("🔍 Запуск исследования для 'Привет'..."))
# ... полезная работа ...
writer(LogMessage("✅ Обработка завершена"))
return state

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.