Создание ограниченного агента LangGraph для диагностики инцидентов API
Создайте агент LangGraph для диагностики инцидентов: используйте инструменты только для чтения, ограничьте выполнение, показывайте ошибки и требуйте подтверждения перед рискованными действиями.
Кратко · TL;DR
Полезный агент для работы с инцидентами должен собирать данные, а не предпринимать неконтролируемые действия. В этом руководстве описан рабочий процесс LangGraph с диагностическими инструментами только для чтения, явными сигналами ошибок, ограниченным выполнением и проверкой человеком перед устранением неполадок.
Главное
- Диагностические инструменты должны работать только для чтения и возвращать структурированные данные, в том числе сведения об ошибках.
- Установите лимит выполнения и рассматривайте его как границу безопасности, а не как способ определить причину инцидента.
- Перед использованием инструментов, меняющих состояние production-среды, требуйте подтверждения человека.
- При использовании прерываний сохраняйте состояние графа, чтобы приостановленный запуск можно было продолжить.
- Сообщайте об ошибках инструментов и неполных данных, а не выдавайте предположения за результаты диагностики.
В этой статье (8)
Решение: автоматизировать диагностику, а устранение неполадок выполнять осознанно
Агент для работы с инцидентами API может сэкономить время, собирая данные из журналов, проверок работоспособности и метаданных недавних развертываний. Он не должен незаметно перезапускать службы, откатывать выпуски или менять конфигурацию. Более безопасная схема отделяет диагностику только для чтения от устранения неполадок с побочными эффектами, ограничивает действия агента и позволяет оператору видеть ошибки и отсутствующие данные.
Это практическое описание схемы, а не проверенная интеграция или готовый к production-среде сервис. Приведённые ниже тела инструментов служат примерами: замените их собственными клиентами систем наблюдаемости с аутентификацией и ограниченными разрешениями.
Предварительные требования и рабочий процесс
Вам понадобятся Python, настроенная в приложении чат-модель, совместимая с LangGraph, и клиентские функции для используемых вами диагностических систем. В этом примере предполагается, что эти функции возвращают данные или вызывают исключения. Он не рассчитан на какого-либо конкретного поставщика моделей, конечную точку или интеграцию инструментов.
Полезный запуск для работы с инцидентом следует ограниченному циклу:
- Соберите небольшой заранее определённый набор сигналов для затронутой службы и временного интервала.
- Пометьте каждый результат как успешный, неудачный или недоступный.
- Попросите модель обобщить данные и указать, что пока остаётся неизвестным.
- Остановитесь после ограниченного числа шагов графа; прежде чем выполнять действия, меняющие состояние, запросите проверку человека.
Поле статуса важно для эксплуатации: неудачный запрос к журналам не должен выглядеть как успешный поиск, при котором просто не нашлось подходящих событий.
Определите диагностические инструменты с явными сигналами ошибок
Контракт инструмента должен быть узким. Требуйте название службы и ограниченный временной интервал; не предоставляйте модели произвольный доступ к запросам, если достаточно фиксированного запроса. Возвращайте структурированные результаты, чтобы последующие узлы и отчёт об инциденте могли отличить отсутствие данных от ошибки инструмента.
from typing import Literal, TypedDict
from langchain.tools import tool
class Signal(TypedDict):
status: Literal["ok", "error", "unavailable"]
source: str
data: str
error: str | None
def query_logs(service: str, minutes: int) -> Signal:
if not 1 <= minutes <= 60:
return {
"status": "error", "source": "logs", "data": "",
"error": "minutes must be between 1 and 60",
}
try:
# Replace with a read-only, scoped observability client call.
rows = logs_client.search(service=service, minutes=minutes)
return {
"status": "ok", "source": "logs",
"data": str(rows), "error": None,
}
except TimeoutError as exc:
return {
"status": "unavailable", "source": "logs", "data": "",
"error": f"timeout: {exc}",
}
@tool
def inspect_api(service: str, minutes: int = 15) -> dict:
"""Collect scoped, read-only API incident signals."""
return query_logs(service, minutes)
Добавьте отдельные инструменты для проверок работоспособности или метаданных развертывания с той же структурой результата. Не перехватывайте все исключения и не возвращайте пустую строку: сохраняйте достаточно контекста ошибки, чтобы можно было диагностировать сбой интеграции, но не включайте секреты или конфиденциальные данные в журналы и контекст модели.
Ограничьте выполнение и показывайте незавершённые запуски
Для агента, созданного с помощью create_agent в LangGraph, задайте лимит рекурсии графа при вызове. Этот лимит ограничивает число шагов графа, но не гарантирует полезный ответ и не заменяет тайм-ауты на уровне инструментов. Обработайте достижение лимита во внешнем приложении и возвращайте понятный статус «не завершено», а не выдавайте запуск за завершённую диагностику.
from langchain.agents import create_agent
agent = create_agent(
model=your_configured_chat_model,
tools=[inspect_api],
system_prompt=(
"Diagnose API incidents using available evidence. "
"Report each source as ok, error, or unavailable. "
"Do not claim a cause without supporting evidence. "
"Do not perform remediation."
),
)
try:
result = agent.invoke(
{"messages": [{"role": "user", "content":
"Investigate elevated errors for payments-api over the last 15 minutes."}]},
config={"recursion_limit": 12},
)
except Exception as exc:
# Map known graph-limit and provider/tool failures to your app's
# incident-run status; do not expose credentials or raw secrets.
result = {"status": "incomplete", "reason": type(exc).__name__}
Указанное значение лимита приведено для примера и не является универсальной рекомендацией. Выбирайте его с учётом числа разрешённых инструментов и обращений к модели, а также задайте тайм-ауты и ограничения размера запросов на уровне инструментов и приложения. Записывайте ID запуска, выбранную службу и временной интервал, вызванные инструменты, их статусы и причину завершения. Эти данные позволяют оператору отличить ситуацию «ошибок не найдено» от ситуации «истёк тайм-аут серверной части журналов».
Добавьте проверку человеком перед устранением неполадок
Если позднее вы добавите инструменты, меняющие состояние production-среды, ограничьте их вызов с помощью middleware LangChain для human-in-the-loop и checkpointer. Документированное middleware может приостанавливать подходящие вызовы инструментов для подтверждения, редактирования, отклонения или прямого ответа. Состояние сохраняется, поэтому после принятия решения выполнение можно продолжить; для использования в production требуется постоянный checkpointer, а не показанный для прототипирования вариант в памяти. См. документацию LangChain по human-in-the-loop.
Практическая политика: разрешать диагностику только для чтения без прерывания, а для инструментов перезапуска, отката или изменения конфигурации требовать подтверждение. Отклоняйте предлагаемое действие именно как отклонённое: документация предупреждает, что вариант «respond» предназначен для выполнения действия от имени инструмента, а не для отказа от вызова с побочным эффектом. Проверяйте отредактированные аргументы в собственной реализации инструмента: документированное middleware не сверяет изменения с отображаемой схемой.
Какие сбои нужно учитывать
- Пустые результаты: сообщайте «подходящих событий не найдено», а не «служба работает нормально».
- Тайм-аут инструмента или ошибка авторизации: сохраняйте сведения о сбое источника и категорию ошибки; не повторяйте попытки бесконечно без уведомления.
- Повторные вызовы инструментов: ограничьте выполнение графа и задайте ограничения для входных данных инструментов. Если вы добавляете повторы, установите небольшую явную политику повторных попыток и показывайте число попыток.
- Не удаётся возобновить прерванный запуск: проверьте, настроен ли checkpointer и используется ли тот же идентификатор потока при возобновлении. В исходной документации указано, что для проверки человеком требуется сохранение контрольных точек.
- Вводящее в заблуждение итоговое резюме: требуйте, чтобы утверждения в отчёте ссылались на собранные сигналы, и перечисляйте недоступные источники и нерешённые вопросы.
Контрольный список для запуска при инциденте
Перед развертыванием убедитесь, что диагностические инструменты работают только для чтения и имеют ограниченную область доступа; временные интервалы и объём запросов ограничены; ошибки инструментов видны; выполнение графа ограничено; а каждое действие с побочными эффектами приостанавливается до решения человека. Проверьте сценарии тайм-аута, пустого результата, отклонённого действия и возобновления после прерывания. Хороший агент не просто предлагает правдоподобную первопричину — он показывает, какие данные действительно получил и где заканчиваются результаты диагностики.
Источники
- LangChain: middleware для human-in-the-loop — решения о прерывании, выборочная проверка вызовов инструментов, сохранение контрольных точек и возобновление приостановленного выполнения.
Вопросы
Как ограничить выполнение агента LangGraph?
Задайте лимит рекурсии в конфигурации вызова и обрабатывайте достижение лимита или ошибки выполнения во внешнем приложении. Также используйте тайм-ауты и ограничения входных данных на уровне инструментов: лимит графа не гарантирует завершённую диагностику.
Как агент для работы с инцидентами должен сообщать об ошибке диагностического инструмента?
Возвращайте структурированный статус, например error или unavailable, с безопасной категорией ошибки и названием источника. Отличайте его от успешного запроса, который не вернул подходящих событий.
Как требовать подтверждение перед тем, как инструмент LangGraph изменит production-среду?
Используйте middleware для human-in-the-loop, чтобы приостанавливать выбранные вызовы инструментов, и настройте checkpointer, чтобы граф мог приостанавливаться и возобновляться. Разрешите инструменты только для чтения без проверки, а для инструментов с побочными эффектами требуйте её.
Проверяет ли middleware для human-in-the-loop отредактированные аргументы инструмента?
В предоставленной документации указано, что middleware не сверяет изменения с отображаемой схемой ответа. Проверяйте аргументы в инструменте или приложении до выполнения действия.
Похожие статьи
Guides
Создание агента поддержки клиентов на LangGraph: вызов инструментов, одобрение человеком и ограничения выполнения
Практический шаблон LangGraph для маршрутизации обращений в поддержку: классификация запросов, вызов инструментов поиска, приостановка возвратов для одобрения человеком и ограничение выполнения графа.
Guides
Создайте в n8n процесс изменения кода с согласованием человеком и проверкой тестами
Настройте процесс в n8n, который предлагает изменения в репозитории, запрашивает согласие человека на запись и проверяет полученный коммит с помощью тестов.
Guides
Agentic RAG с LangGraph: вызов инструментов, указание источников и ограничение выполнения
Создайте агента LangGraph для ответов на вопросы по документам, который решает, когда нужен поиск, оценивает контекст, повторяет неудачный поиск и указывает источники без бесконтрольного выполнения.
Guides
Создайте в n8n процесс сортировки обращений в поддержку с подтверждением оператора
Настройте в n8n сортировку обращений в поддержку: API, совместимый с OpenAI, подготовит рекомендацию, а перед ответом или эскалацией процесс приостановится и дождётся решения оператора.