
# Динамический синтез политики с LLM и контекстом риска в реальном времени

**Аннотация** – Опросники по безопасности поставщиков являются известным узким местом для SaaS‑компаний. Традиционные статические репозитории фиксируют политики во времени, заставляя команды вручную редактировать ответы каждый раз, когда появляется новый сигнал риска. В этой статье представляем *Динамический синтез политики* (DPS), план, который объединяет крупные языковые модели (LLM), непрерывную телеметрию риска и слой оркестрации, реагирующий на события, чтобы выдавать актуальные, контекстно‑зависимые ответы по требованию. К концу чтения вы поймёте основные компоненты, поток данных и практические шаги по внедрению DPS на платформе Procurize.

---

## 1. Почему статические библиотеки политик не выдерживают современные аудиты

1. **Задержка изменений** – Новая уязвимость в стороннем компоненте может аннулировать пункт, одобренный шесть месяцев назад. Статические библиотеки требуют ручного цикла правок, который может занять дни.  
2. **Несоответствие контексту** – Один и тот же контроль может интерпретироваться по‑разному в зависимости от текущего ландшафта угроз, объёма контракта или регионального регулирования.  
3. **Давление масштабируемости** – Быстро растущие SaaS‑компании получают десятки опросников в неделю; каждый ответ должен соответствовать последнему состоянию рискового профиля, что невозможно гарантировать вручную.

Эти болевые точки требуют *адаптивной* системы, способной **извлекать** и **внедрять** риск‑инсайты в реальном времени и автоматически переводить их в соответствующий язык политик.

---

## 2. Основные столпы Динамического синтеза политики

| Столп | Функция | Типичный стек технологий |
|--------|----------|--------------------|
| **Потребление телеметрии риска** | Потоковое получение уязвимостей, предупреждений threat‑intel и внутренних метрик безопасности в единый озеро данных. | Kafka, AWS Kinesis, ElasticSearch |
| **Контекстный движок** | Нормализует телеметрию, обогащает её инвентаризацией активов и вычисляет *риск‑балл* для каждой области контроля. | Python, Pandas, Neo4j Knowledge Graph |
| **Генератор запросов для LLM** | Формирует специализированные запросы, включающие актуальный риск‑балл, нормативные ссылки и шаблоны политик. | OpenAI GPT‑4, Anthropic Claude, LangChain |
| **Слой оркестрации** | Координирует события‑триггеры, запускает LLM, сохраняет сгенерированный текст и уведомляет проверяющих. | Temporal.io, Airflow, Serverless Functions |
| **Аудиторский журнал и версионирование** | Сохраняет каждый сгенерированный ответ с криптографическими хешами для проверки. | Git, Immutable Object Store (например, S3 с Object Lock) |

В совокупности они образуют замкнутый конвейер, преобразующий сырые риск‑сигналы в готовые к использованию ответы на опросники.

---

## 3. Поток данных (и‑люстрация)

```mermaid
flowchart TD
    A["Источники риск‑фидов"] -->|Kafka Stream| B["Озеро необработанной телеметрии"]
    B --> C["Нормализация и обогащение"]
    C --> D["Система оценки риска"]
    D --> E["Контекстный пакет"]
    E --> F["Конструктор запросов"]
    F --> G["LLM (GPT‑4)"]
    G --> H["Черновой пункт политики"]
    H --> I["Центр человеческого обзора"]
    I --> J["Хранилище одобренных ответов"]
    J --> K["Интерфейс опросников Procurize"]
    K --> L["Отправка поставщиком"]
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style L fill:#9f9,stroke:#333,stroke-width:2px
```

*Текст каждого узла заключён в двойные кавычки, как требует синтаксис.*

---

## 4. Создание генератора запросов

Качественный запрос – главный «секретный соус». Ниже показан фрагмент Python, демонстрирующий, как собрать запрос, объединяющий контекст риска с переиспользуемым шаблоном.

```python
import json
from datetime import datetime

def build_prompt(risk_context, template_id):
    # Load a stored clause template
    with open(f"templates/{template_id}.md") as f:
        template = f.read()

    # Insert risk variables
    prompt = f"""
You are a compliance specialist drafting a response for a security questionnaire.
Current risk score for the domain "{risk_context['domain']}" is {risk_context['score']:.2f}.
Relevant recent alerts: {", ".join(risk_context['alerts'][:3])}
Regulatory references: {", ".join(risk_context['regulations'])}

Using the following template, produce a concise, accurate answer that reflects the latest risk posture.

{template}
"""
    return prompt.strip()

# Example usage
risk_context = {
    "domain": "Data Encryption at Rest",
    "score": 0.78,
    "alerts": ["CVE‑2024‑1234 affecting AES‑256 modules", "New NIST guidance on key rotation"],
    "regulations": ["ISO 27001 A.10.1", "PCI DSS 3.2"]
}
print(build_prompt(risk_context, "encryption_response"))
```

Сформированный запрос затем передаётся LLM через API, а полученный текст сохраняется как *черновик*, ожидающий быстрой проверки человеком.

---

## 5. Оркестрация в реальном времени с Temporal.io

Temporal обеспечивает «workflow‑as‑code», позволяя определить надёжный, устойчивый к ошибкам конвейер.

```goat
workflow DynamicPolicyWorkflow(riskEvent RiskEvent, questionnaireID string) {
    // Step 1: Build context package
    contextPkg := Activity(BuildContextPackage, riskEvent)

    // Step 2: Generate LLM prompt
    prompt := Activity(BuildPrompt, contextPkg, questionnaireID)

    // Step 3: Call LLM
    draft := Activity(CallLLM, prompt)

    // Step 4: Store draft and notify reviewer
    Activity(StoreDraftAndNotify, draft, questionnaireID)

    // Optional: Auto‑approval if risk score < 0.2
    if contextPkg.Score < 0.2 {
        Activity(AutoApprove, draft, questionnaireID)
    }
}
```

Рабочий процесс гарантирует точно‑однократное выполнение, автоматические повторные попытки при временных сбоях и прозрачную визуализацию через Temporal UI – что особенно важно для аудиторов соответствия.

---

## 6. Управление человеком в цикле (HITL)

Даже лучшая LLM может «галлюцинировать». DPS включает лёгкий шаг Human‑In‑The‑Loop:

1. **Рецензент получает уведомление в Slack/Teams** с бок‑о‑бок просмотром черновика и исходного риск‑контекста.  
2. **Одно‑клик‑утверждение** записывает окончательный ответ в неизменяемое хранилище и обновляет UI опросника.  
3. **Отказ** запускает обратную связь, аннотирует запрос и улучшает будущие генерации.

Журналы аудита фиксируют ID рецензента, метку времени и криптографический хеш одобренного текста, удовлетворяя требования SOC 2 и ISO 27001.

---

## 7. Версионирование и проверяемые доказательства

Каждый сгенерированный пункт фиксируется в Git‑совместимом хранилище со следующими метаданными:

```json
{
  "questionnaire_id": "Q-2025-09-14",
  "control_id": "C-ENCR-01",
  "risk_score": 0.78,
  "generated_at": "2025-10-22T14:03:12Z",
  "hash": "sha256:9f8d2c1e...",
  "reviewer": "alice.smith@example.com",
  "status": "approved"
}
```

Неизменяемое хранилище (S3 Object Lock) гарантирует, что доказательства нельзя изменить после факта, обеспечивая надёжную цепочку хранилища для аудитов.

---

## 8. Оценка выгоды (в цифрах)

| Показатель | До DPS | После DPS (12 мес) |
|------------|-------|--------------------|
| Среднее время ответа | 3,2 дня | 3,5 часа |
| Человеческие часы редактирования | 25 ч в неделю | 6 ч в неделю |
| Пробелы в доказательствах аудита | 12 % | < 1 % |
| Охват соответствия (контролей) | 78 % | 96 % |

Эти данные получены в пилотном проекте с тремя средними SaaS‑компаниями, интегрировавшими DPS в среду Procurize.

---

## 9. Чек‑лист внедрения

- **[ ]** Настроить платформу потоковой передачи (Kafka) для риск‑фидов.  
- **[ ]** Построить граф знаний Neo4j, связывающий активы, контролы и threat‑intel.  
- **[ ]** Создать переиспользуемые шаблоны пунктов в Markdown.  
- **[ ]** Развернуть микросервис генератора запросов (Python/Node).  
- **[ ]** Обеспечить доступ к LLM (OpenAI, Azure OpenAI и пр.).  
- **[ ]** Настроить рабочий процесс Temporal или DAG Airflow.  
- **[ ]** Интегрировать с UI проверки ответов в Procurize.  
- **[ ]** Включить неизменяемый журнал (Git + S3 Object Lock).  
- **[ ]** Провести безопасность кода оркестрации.

Следуя этим шагам, вы построите готовый к эксплуатации конвейер DPS за 6‑8 недель.

---

## 10. Перспективные направления

1. **Федеративное обучение** – Обучать специализированные адаптеры LLM без вывода сырых телеметрических данных за пределы корпоративного периметра.  
2. **Дифференциальная конфиденциальность** – Добавлять шум к риск‑баллам перед их попаданием в генератор запросов, сохраняя полезность при защите данных.  
3. **Доказательства с нулевым разглашением** – Позволять поставщикам проверить, что ответ соответствует риск‑модели, не раскрывая сами данные.  

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

---

## 11. Заключение

Динамический синтез политики превращает утомительную, подверженную ошибкам задачу ответа на опросники безопасности в **службу в реальном времени с проверяемыми доказательствами**. Объединив живую телеметрию риска, контекстный движок и мощные LLM в оркестрированном рабочем процессе, организации могут резко сократить время ответа, поддерживать непрерывное соответствие и предоставлять аудиторам неизменные доказательства точности. При интеграции с Procurize DPS становится конкурентным преимуществом – превращая риск‑данные в стратегический актив, ускоряющий сделки и укрепляющий доверие.