
# 可组合 AI 微服务架构用于可扩展的安全问卷自动化

企业正被源源不断增长的安全问卷、供应商评估和合规审计淹没。传统的单体工具难以跟上，尤其是当它们必须与各种产品生态系统集成、支持多语言请求并提供实时审计追踪时。  

一个 **可组合微服务架构**，围绕大型语言模型（LLM）和检索增强生成（RAG）构建，提供了一种在保持受监管行业所需的灵活性和治理的前提下实现自动化扩展的方式。在本指南中，我们将：

* 阐述保持系统 **安全、可审计且可扩展** 的核心设计原则。  
* 通过 Mermaid 图展示参考实现。  
* 演示如何在 Kubernetes、无服务器 FaaS 或边缘运行时独立部署每个服务。  
* 提供数据治理、可观测性和持续改进的具体最佳实践建议。

> **TL;DR：** 将问卷自动化平台拆分为若干小而明确的服务，让 LLM 置于无状态推理层后端，使用事件驱动管道维护证据和版本控制的唯一真实来源。

---

## 1. 为什么要组合而不是构建巨型单体？

| 单体方式 | 可组合微服务 |
|---------------------|---------------------------|
| 单一代码库，难以针对特定工作负载（如 LLM 推理）进行扩展。 | 独立扩展——AI 推理可以运行在 GPU 节点上，而存储仍使用成本效益高的对象存储。 |
| 紧耦合导致更新风险；UI 中的一个 bug 可能导致整个系统宕机。 | 通过异步事件或 HTTP API 实现松耦合，故障被隔离。 |
| 语言集成受限——往往锁定在单一技术栈。 | 多语言支持——每个服务可使用最适合其任务的语言（如 Go 负责身份认证，Python 负责 LLM 编排，Rust 负责高吞吐管道）。 |
| 日志交织，审计与合规成为噩梦。 | 集中的事件存储 + 不可变审计日志为监管机构提供清晰、可查询的追踪。 |

**可组合** 模型秉持 “**按需构建，需要时替换**” 的哲学。它契合安全问卷的动态特性，新控制框架（如 [ISO 27001 Rev 2](https://www.iso.org/standard/27001)）会定期出现，团队必须快速适配。

---

## 2. 核心架构支柱

1. **无状态 API 网关** – UI、SaaS 连接器和外部工具的入口。处理身份验证、请求校验和流控。  
2. **领域特定微服务** – 每个服务封装一个有界上下文：  
   * **问卷服务** – 存储问卷元数据、版本以及任务分配。  
   * **证据服务** – 在不可变对象存储中管理政策、截图、审计日志等制品。  
   * **AI 编排服务** – 组织提示、运行 RAG 流水线并返回答案草稿。  
   * **变更检测服务** – 监听证据更新，触发受影响答案的重新评估。  
   * **通知服务** – 将 Slack、Teams 或电子邮件事件推送给利益相关者。  
3. **事件总线（Kafka / Pulsar）** – 确保领域事件（如 `EvidenceUploaded`、`AnswerDrafted`）至少一次投递。  
4. **可观测性栈** – OpenTelemetry 跨服务追踪、Prometheus 指标、Loki 日志。  
5. **Policy‑as‑Code 引擎** – 在答案标记为 “最终” 之前使用 Rego 或 OPA 对合规规则进行评估。  

所有服务通过 **gRPC**（低延迟）或 **REST**（对外集成）进行通信。设计遵循 *“蠢管道，聪端点”*——业务逻辑驻留在对应服务，管道仅负责搬运消息。

---

## 3. 数据流 – 从问题到可审计答案

下面的 Mermaid 图展示了典型请求生命周期。

```mermaid
flowchart TD
    subgraph UI["用户界面"]
        UI1["\"Web UI\""] -->|提交问卷| AG["\"API 网关\""]
    end

    AG -->|认证与校验| QMS["\"问卷服务\""]
    QMS -->|获取模板| AIOS["\"AI 编排服务\""]
    AIOS -->|检索相关证据| ES["\"证据服务\""]
    ES -->|证据对象| AIOS
    AIOS -->|生成答案草稿| RAG["\"RAG 流水线\""]
    RAG -->|LLM 输出| AIOS
    AIOS -->|存储草稿| QMS
    QMS -->|发出 AnswerDrafted| EB["\"事件总线\""]
    EB -->|触发| CDS["\"变更检测服务\""]
    CDS -->|如果证据改变则重新运行| AIOS
    CDS -->|发出 AnswerUpdated| EB
    EB -->|通知| NS["\"通知服务\""]
    NS -->|推送至 Slack/Email| UI

    style UI fill:#f9f,stroke:#333,stroke-width:2px
    style AG fill:#bbf,stroke:#333,stroke-width:1px
    style QMS fill:#bfb,stroke:#333,stroke-width:1px
    style AIOS fill:#ffb,stroke:#333,stroke-width:1px
    style ES fill:#fbb,stroke:#333,stroke-width:1px
    style RAG fill:#fdd,stroke:#333,stroke-width:1px
    style CDS fill:#ddf,stroke:#333,stroke-width:1px
    style NS fill:#cfc,stroke:#333,stroke-width:1px
```

**流程关键节点**：

1. **用户提交** 新问卷或选择已有问卷。  
2. **API 网关** 验证 JWT、检查速率限制后转发至问卷服务。  
3. **问卷服务** 拉取问卷模板并向 AI 编排服务发送事件。  
4. **AI 编排** 执行 *检索步骤*——查询证据服务以获取与当前控制项相关的所有制品（使用向量相似度或关键词匹配）。  
5. 检索到的上下文连同提示模板输入 **RAG 流水线**（例如 `openAI/gpt‑4o‑preview`）。  
6. 草稿答案存回问卷服务，并标记为 *“待审阅”。*  
7. **变更检测服务** 监视新证据上传。若政策更新，则重新触发 RAG 流水线针对受影响答案。  
8. 最终审阅者接受或编辑草稿；接受后 **Policy‑as‑Code 引擎** 验证答案满足所有规则约束，随后提交至不可变审计日志。  

---

## 4. 实现细节

### 4.1. API 网关（Envoy + OIDC）

* **路由** – `POST /questionnaires/:id/answers` → `questionnaire-service`。  
* **安全** – 强制作用域（`questionnaire:write`）。  
* **流控** – 每租户每分钟 100 次请求，以保护下游 LLM 成本。

### 4.2. 问卷服务（Go）

```go
type Questionnaire struct {
    ID          string            `json:"id"`
    Version     int               `json:"version"`
    Controls    []Control        `json:"controls"`
    Drafts      map[string]Answer `json:"drafts"` // key = control ID
    AssignedTo  map[string]string `json:"assigned_to"` // userID
}
```

* 使用 **PostgreSQL** 进行关系数据存储，**EventStoreDB** 记录领域事件。  
* 暴露 gRPC 方法 `GetTemplate`、`SaveDraft`、`FinalizeAnswer`。

### 4.3. 证据服务（Python + FastAPI）

* 将文件存储于 **MinIO** 或 **AWS S3**，并使用 bucket‑level 加密。  
* 将内容索引到 **Qdrant**（向量数据库）以实现相似度搜索。  
* 提供 `POST /search` 接口，接受查询并返回前 K 个制品 ID。

### 4.4. AI 编排服务（Python）

```python
def generate_answer(question: str, evidence_ids: List[str]) -> str:
    evidence = fetch_evidence(evidence_ids)
    context = "\n".join(evidence)
    prompt = f"""你是一名合规专家。
使用以下证据，简明扼要地回答问题：\n{context}\n\n问题: {question}"""
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role":"system","content":prompt}]
    )
    return response.choices[0].message.content
```

* **RAG** – 结合向量搜索与系统提示，指示模型引用证据 ID。  
* **缓存** – 将生成的响应在 24 小时内缓存，以避免重复 LLM 调用。

### 4.5. 变更检测服务（Rust）

* 订阅 `EvidenceUploaded` 事件。  
* 计算新制品的 **哈希**，并与每个控制项已关联的证据进行 **差异检测**。  
* 若差异超过可配置阈值，发布 `AnswerRequiresRegen`。

### 4.6. 通知服务（Node.js）

* 监听 `AnswerDrafted`、`AnswerFinalized`、`AnswerRequiresRegen`。  
* 将 Slack Block、Teams Adaptive Card 或邮件模板格式化。  
* 支持 **去重**——每次更改对每个问卷仅通知一次。

---

## 5. 安全与治理

| 关注点 | 缓解措施 |
|---------|------------|
| **数据泄露** – LLM 提示可能包含敏感政策文本。 | 使用 **本地 LLM 推理**（如 Llama 3.2）置于 VPC 内部；在发送至外部 API 前对 PII 进行脱敏。 |
| **未授权证据访问** | 在证据服务中使用 OPA 策略实施细粒度 ACL。 |
| **模型漂移** – 随时间答案质量下降。 | 定期使用基准语料库进行 **评估**，并重新调整提示模板。 |
| **审计可追溯** | 每一次状态转换都记录在不可变事件日志中，存放于 **WORM S3**。 |
| **GDPR/CCPA 合规** | 实现 **删除权** 工作流，清除用户特定证据在向量库和对象存储中的记录（[GDPR](https://gdpr.eu/)）。 |
| **ISO 27001 合规** | 验证证据保存、加密和访问控制策略符合 ISO 27001 标准。 |
| **HIPAA / SOC 2** | 为医疗或 SaaS 提供商扩展 OPA 规则，强制执行所需的安全防护。 |

---

## 6. 扩展策略

1. **水平 Pod 自动伸缩（HPA）** – 根据 GPU 使用率（`nvidia.com/gpu`）扩展 AI 编排 Pod。  
2. **突发队列** – 使用 Kafka 分区将高流量租户隔离。  
3. **降低冷启动** – 为 LLM 推理服务器保留热容器池（例如使用 **KEDA** + 自定义 scaler）。  
4. **成本控制** – 对每个租户实行 **代币预算**；自动限流或计费超额使用。

---

## 7. 可观测性与持续改进

* **分布式追踪** – OpenTelemetry 跨从 UI 请求 → API 网关 → AI 编排 → RAG → 证据服务的完整链路。  
* **指标** – `answer_draft_latency_seconds`、`evidence_upload_bytes`、`llm_token_usage`。  
* **日志聚合** – 使用结构化 JSON 日志并在所有服务间传播 `request_id`。  
* **反馈回路** – 答案最终确认后，收集审阅者评论（`review_score`），将其输入 **强化学习** 模型，以调整提示温度或选择备用证据源。

---

## 8. 现有团队的分阶段迁移路径

| 阶段 | 目标 | 关键活动 |
|-------|------|------------|
| **0 – 发现** | 绘制当前问卷工作流。 | 识别数据源，定义控制框架分类。 |
| **1 – 打底** | 部署 API 网关、身份验证及基础服务。 | 将 `questionnaire-service` 与 `evidence-service` 容器化。 |
| **2 – 引入 AI** | 在一份试点问卷上运行 RAG。 | 使用 sandbox LLM，人工验证草稿。 |
| **3 – 事件驱动自动化** | 接入变更检测管道。 | 在证据更新时自动触发答案重新生成。 |
| **4 – 加固治理** | 添加 OPA 策略、不可变审计日志。 | 切换至生产 LLM（本地部署）。 |
| **5 – 扩展与优化** | 自动伸缩 GPU Pod，实施成本控制。 | 部署可观测性栈，设定 SLO。 |

通过分阶段采纳可组合架构，团队可避免“一刀切”风险，并能迅速展示 ROI（通常可实现 **30‑50 %** 的问卷处理时间缩减）。

---

## 9. 为未来做好准备

* **联邦学习** – 在不迁出原始证据的前提下，对每个租户的数据训练轻量适配器，提升答案相关性并尊重数据主权。  
* **零信任服务网格** – 使用 **Istio** 或 **Linkerd** 实现双向 TLS，确保服务间通信安全。  
* **语义治理** – 将 Policy‑as‑Code 引擎扩展至不仅验证答案内容，还验证证据与控制语言的 **语义相似度**。  
* **生成可追溯** – 将具体的 LLM 温度、top‑p、系统提示与每个答案一同存储，以供法务审查。

---

## 10. 结论

可组合微服务架构将安全问卷自动化从 **繁重的手工任务** 转变为 **可扩展、可审计且持续改进的引擎**。通过解耦职责、在无状态 RAG 层利用 LLM、并以事件驱动骨干网统一管理证据与版本控制，组织能够：

* 在几分钟内响应供应商评估，而非数天。  
* 通过自动变更检测保持合规证据始终最新。  
* 为监管机构提供清晰、不可变的审计轨迹。  

从小处着手、快速迭代，让微服务哲学指引你迈向把合规视为 **功能** 而非瓶颈的未来。

---

## 参考链接

- [OPA Policy‑as‑Code for Micro‑services](https://www.openpolicyagent.org/docs/latest/policy-language/)