
# ساخت خودکار سیاست‌های پویا با LLMها و زمینه ریسک زمان واقعی

**چکیده** – پرسش‌نامه‌های امنیتی فروشندگان یک گلوگاه شناخته‌شده برای شرکت‌های SaaS هستند. مخازن ایستای سنتی سیاست‌ها را در زمان قفل می‌کنند و تیم‌ها را مجبور می‌سازند هر بار که سیگنال ریسک جدیدی ظاهر می‌شود، پاسخ‌ها را به‌صورت دستی ویرایش کنند. این مقاله *ساخت خودکار سیاست‌های پویا* (DPS) را معرفی می‌کند؛ یک طرح کلی که مدل‌های زبان بزرگ (LLMها)، تلمتری ریسک پیوسته و لایهٔ ارکستراسیون مبتنی بر رویداد را ترکیب می‌کند تا پاسخ‌های به‌روز، آگاهی‌دار از زمینه را به‌صورت درخواست‑محور تولید کند. پس از مطالعهٔ این مقاله، اجزای اصلی، جریان داده و گام‌های عملی برای پیاده‌سازی DPS بر بستر پلتفرم Procurize را می‌دانید.

---

## 1. چرا کتابخانه‌های ایستای سیاست‌ها در ممیزی‌های مدرن شکست می‌خورند

1. **زمان‌برداری تغییر** – یک آسیب‌پذیری تازه کشف‑شده در یک مؤلفهٔ شخص ثالث ممکن است بندی را که شش ماه پیش تأیید شده بود، نامعتبر کند. کتابخانه‌های ایستا نیاز به چرخهٔ ویرایشی دستی دارند که می‌تواند روزها به طول بینجامد.  
2. **عدم تطابق زمینه‌ای** – همان کنترل می‌تواند بسته به چشم‌انداز تهدید جاری، دامنهٔ قراردادی یا مقررات جغرافیایی به‌طرز متفاوتی تفسیر شود.  
3. **فشار مقیاس‌پذیری** – شرکت‌های SaaS سریع‌الرشد هفتگی ده‌ها پرسش‌نامه دریافت می‌کنند؛ هر پاسخ باید با آخرین وضعیت ریسک همخوانی داشته باشد، چیزی که با فرآیندهای دستی تضمین آن غیرممکن است.

این نقاط درد، نیاز به سیستمی *سازگار* که بتواند بینش‌های ریسک را به‌صورت زمان‑واقعی **بکشاند** (pull) و **بفرستد** (push) و به‌طور خودکار به زبان سیاست‌های انطباقی ترجمه کند، ایجاد می‌کند.

---

## 2. ستون‌های اصلی ساخت خودکار سیاست‌های پویا

| ستون | عملکرد | فناوری معمول |
|--------|----------|--------------------|
| **ورودی تلمتری ریسک** | جریان‌سازی خوراک‌های آسیب‌پذیری، هشدارهای اطلاعات تهدید، و معیارهای امنیتی داخلی به یک دریاچهٔ دادهٔ یکپارچه. | 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["Risk Feed Sources"] -->|Kafka Stream| B["Raw Telemetry Lake"]
    B --> C["Normalization & Enrichment"]
    C --> D["Risk Scoring Engine"]
    D --> E["Context Package"]
    E --> F["Prompt Builder"]
    F --> G["LLM (GPT‑4)"]
    G --> H["Draft Policy Clause"]
    H --> I["Human Review Hub"]
    I --> J["Approved Answer Repository"]
    J --> K["Procurize Questionnaire UI"]
    K --> L["Vendor Submission"]
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style L fill:#9f9,stroke:#333,stroke-width:2px
```

*متن هر گره داخل علامت‌های دوتایی ("") مطابق نیاز است.*

---

## 4. ساخت مولد پرامپت

یک پرامپت با کیفیت، راز موفقیت است. در زیر یک قطعهٔ پایتون آمده که نشان می‌دهد چگونه یک پرامپت ترکیب‌کنندهٔ زمینهٔ ریسک و قالب قابل استفاده مجدد ساخته می‌شود.

```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) را می‌دهد و به ما اجازه می‌کند یک خط لولهٔ قابل اعتماد، با قابلیت retry را پیاده‌سازی کنیم.

```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 شفافیت کاملی برای حسابرسان فراهم می‌آورد.

---

## 6. حکمرانی «انسان‑در‑حلقه» (HITL)

حتی بهترین LLM نیز می‌تواند توهم (hallucination) داشته باشد. DPS یک گام سبک HITL را شامل می‌شود:

1. **بازبینی‌کننده** یک اعلان در Slack/Teams دریافت می‌کند که شامل نمایی کنار‑به‌کنار از پیش‌نویس و زمینهٔ ریسک زیرین است.  
2. **تأیید یک‑کلیک** متن نهایی را در مخزن غیرقابل تغییر می‌نویسد و UI پرسش‌نامه را به‌روز می‌کند.  
3. **رد** باعث ایجاد یک حلقهٔ بازخورد می‌شود که پرامپت را حاشیه‌نویسی می‌کند و نسل‌های آینده را بهبود می‌بخشد.

ثبت‌های حسابرسی شامل شناسهٔ بازبینی‌کننده، زمان‌بندی، و هش رمزنگاری‌شدهٔ متن تأییدشده است و الزامات شواهد بیشتر برای [SOC 2](https://secureframe.com/hub/soc-2/what-is-soc-2) و [ISO 27001](https://www.iso.org/standard/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 ماه) |
|--------|------------|-------------------|
| میانگین زمان پاسخ | ۳.۲ روز | ۳.۵ ساعت |
| زمان صرف شده برای ویرایش دستی | ۲۵ ساعت در هفته | ۶ ساعت در هفته |
| نقص‌های شواهد حسابرسی | ۱۲ % | کمتر از ۱ % |
| پوشش انطباق (کنترل‌ها) | ۷۸ % | ۹۶ % |

این اعداد از یک آزمایش‌پایلوت با سه شرکت SaaS متوسط که DPS را در محیط Procurize یکپارچه کردند، استخراج شده‌اند.

---

## 9. فهرست بررسی پیاده‌سازی

- **[ ]** پلتفرم استریمینگ (Kafka) برای خوراک‌های ریسک راه‌اندازی شود.  
- **[ ]** گراف دانش Neo4j برای پیوند دارایی‌ها، کنترل‌ها و اطلاعات تهدید ساخته شود.  
- **[ ]** قالب‌های بندهای قابل استفاده مجدد به صورت Markdown ذخیره شوند.  
- **[ ]** میکروسرویس سازنده پرامپت (Python/Node) پیاده‌سازی گردد.  
- **[ ]** دسترسی به LLM (OpenAI، Azure OpenAI و غیره) فراهم شود.  
- **[ ]** ورک‌فلو Temporal یا DAG Airflow پیکربندی شود.  
- **[ ]** یکپارچه‌سازی با UI بازبینی پاسخ Procurize انجام گیرد.  
- **[ ]** لاگ‌های غیرقابل تغییر (Git + S3 Object Lock) فعال شود.  
- **[ ]** بررسی امنیتی کدهای ارکستراسیون انجام شود.

دنبال کردن این گام‌ها به سازمان شما یک خط لولهٔ DPS آماده برای تولید در محیط تولید در ۶‑۸ هفته می‌دهد.

---

## 10. مسیرهای آینده

1. **یادگیری فدرال** – آموزش ادپترهای LLM مخصوص دامنه بدون جابجایی داده‌های خام ریسک خارج از دیوارهٔ حفاظتی سازمان.  
2. **حریم خصوصی تفاضلی** – افزودن نویز به امتیازهای ریسک قبل از رسیدن به سازنده پرامپت، به‌منظور حفظ محرمانگی در حالی که سودمندی حفظ می‌شود.  
3. **اثبات‌های صفر‑دانش** – اجازه به فروشندگان برای تأیید هم‌سویی یک پاسخ با مدل ریسک بدون افشای داده‌های پایه.

این زمینه‌های پژوهشی وعده می‌دهند که ساخت خودکار سیاست‌های پویا را حتی ایمن‌تر، شفاف‌تر و سازگارتر با مقررات کنند.

---

## 11. نتیجه‌گیری

ساخت خودکار سیاست‌های پویا کار خسته‌کننده و خطاپذیر پاسخ‌گویی به پرسش‌نامه‌های امنیتی را به یک **سرویس زمان‑واقعی، دارای شواهد، و سازگار** تبدیل می‌کند. با ترکیب تلمتری ریسک زنده، موتور زمینه، و LLMهای قدرتمند در داخل یک گردش‌کار ارکستراسیون‌شده، سازمان‌ها می‌توانند به‌طرز چشمگیری زمان پاسخ را کاهش دهند، انطباق مداوم را حفظ کنند و به حسابرسان شواهد غیرقابل تغییری از دقت ارائه دهند. وقتی با Procurize ترکیب شود، DPS یک مزیت رقابتی می‌شود—داده‌های ریسک را به دارایی استراتژیک تبدیل می‌کند که سرعت معامله‌ها را ارتقا می‌دهد و اعتماد را می‌سازد.