llm-guard-server/doc/open-api-interface.md

8.2 KiB
Raw Blame History

LLM Guard OpenAPI 对外接口文档

1. 文档说明

  • 文档版本v1.0
  • 适用服务:llm-guard-open-api
  • 基础路径:/openapi
  • 字符集:UTF-8
  • 请求/响应格式:application/json

1.1 测试环境信息

  • 接口地址:http://49.233.48.5:6201/open-api/openapi/guard/check
  • X-Api-Keyak_3ebc8929866e41689ab373c2c1a383b6
  • X-Api-Secretsk_6fde3569aaa44b29b226a7264623778e0a95e22677b746969f97f193ac4ae581

2. 认证方式

2.1 Header 鉴权

每次请求必须携带以下请求头:

  • X-Api-Key
  • X-Api-Secret

2.2 凭证发放与生命周期

  • 凭证来源:system 用户管理。
  • 用户新增时:若凭证为空,系统自动生成 apiKey/apiSecret
  • 用户编辑时:默认保持原值不变;仅当凭证字段被设置为空时,重新生成。
  • 服务启动时:会对缺失凭证的用户自动初始化。

2.3 认证失败返回

  • HTTP 状态:200
  • 业务码:code=401
  • 示例:
{
  "code": 401,
  "msg": "apiSecret 错误"
}

3. 检测接口

3.1 接口定义

  • 方法:POST
  • 路径:/openapi/guard/check
  • 说明:统一执行 ACL、ATTACK、CONTENT 三类规则检测;命中时自动落库告警日志。
  • 兼容性:顶层固定为 reqDatareqData 内支持原始网关请求体原样提交,不强制重组字段。

3.2 请求体

{
  "sourceIp": "10.0.0.1",
  "path": "/api/llm/chat/completion/V2",
  "method": "POST",
  "interfaceType": "LLM",
  "callerId": "partner-a",
  "reqData": {
    "messages": [
      {
        "role": "user",
        "content": "please union select password and email test_user@demo.com"
      }
    ],
    "model": "通义千问2.5-72B",
    "stream": false
  }
}

3.3 请求字段说明

说明:

  • 顶层固定字段:sourceIppathmethodinterfaceTypecallerIdreqData
  • reqData 内部可直接放三类网关原始入参,不强制重组。
  • 系统会优先使用顶层字段做 ACL 与审计,reqData 用于内容检测与原文追溯。
字段 类型 必填 说明
sourceIp string 来源 IPACL IP 规则依赖)
path string 请求路径ACL 接口规则依赖)
method string 请求方法ACL 接口规则依赖)
interfaceType string 接口类型:AGENT / LLM / VLM(分流)
callerId string 调用方标识(调用方追踪)
reqData object 业务原始请求体
reqData.requestId string 请求唯一标识;为空时系统自动生成
reqData.traceId string 链路追踪标识;为空时系统自动生成
reqData.scopeCode string 规则作用域;默认 GLOBAL
reqData.stream boolean 是否流式;默认 false
reqData.text/messages/files/metadata/payload/其他任意字段 mixed 原始业务参数,统一纳入规则匹配语料

4. 响应体

4.1 成功响应结构

{
  "code": 200,
  "msg": "来源IP不在白名单命中攻击特征命中内容DLP规则",
  "data": {
    "requestId": "req-001",
    "traceId": "trace-001",
    "decision": "BLOCK",
    "alerted": true,
    "hits": [
      {
        "moduleType": "ACL",
        "eventType": "ACL_IP_WHITELIST",
        "ruleId": null,
        "ruleCode": null,
        "action": "BLOCK",
        "message": "来源IP不在白名单"
      },
      {
        "moduleType": "ATTACK",
        "eventType": "ATTACK_SIGNATURE",
        "ruleId": "sig_multi_1",
        "ruleCode": "ATTACK_SQL_MULTI",
        "action": "ALERT",
        "message": "命中攻击特征"
      },
      {
        "moduleType": "CONTENT",
        "eventType": "CONTENT_DLP",
        "ruleId": "dlp_multi_1",
        "ruleCode": "DLP_EMAIL_MULTI",
        "action": "ALERT",
        "message": "命中内容DLP规则"
      }
    ]
  }
}

4.2 响应字段说明

字段 类型 说明
code number 业务码;200 成功,401 认证失败
msg string 命中说明汇总(hits.message 去重后以 拼接);未命中时为“未命中规则,允许通过”
data.requestId string 请求 ID
data.traceId string 链路 ID
data.decision string 最终决策:ALLOW / BLOCK
data.alerted boolean 是否命中任意规则
data.hits array 命中明细列表
data.hits[].moduleType string 模块:ACL / ATTACK / CONTENT
data.hits[].eventType string 事件类型
data.hits[].ruleId string 命中的规则/特征 ID
data.hits[].ruleCode string 命中的规则编码
data.hits[].action string 命中动作:ALLOW / BLOCK / ALERT / MASK / REPLACE
data.hits[].message string 命中说明

4.3 判定规则(调用方重点)

  • 是否允许放行:看 data.decision
    • ALLOW:允许通过
    • BLOCK:不允许通过
  • 是否触发告警:看 data.alerted
    • true:已触发告警并写日志
    • false:未触发告警
  • 命中明细:看 data.hits[]
    • 可用于前端展示、审计留痕、二次策略路由。

5. 检测范围与执行逻辑

5.1 检测模块

  • ACLIP 白黑名单、接口封堵、自定义组合规则
  • ATTACK攻击规则 + 特征签名(如 SQL 注入、越狱等)
  • CONTENTDLP邮箱/手机号/证件等)、内容策略、脱敏模板策略

5.2 语料拼接范围

系统会将下列字段聚合后参与规则匹配:

  • text
  • path
  • method
  • callerId
  • messages(递归提取)
  • files(递归提取)
  • metadata(递归提取)
  • payload(递归提取)

6. 告警与审计

命中规则时,系统自动写入:

  • 事件表:d_log_alert_event
  • 命中明细表:d_log_alert_hit

写入内容包含请求标识、模块类型、事件类型、动作、命中说明、来源 IP、调用方等字段可直接用于审计与报表。

7. 三类网关报文适配建议

7.1 智能体接口AGENT

  • 建议映射:textfilesmetadata
  • 原始结构可同时放入 payload 便于追溯。

7.2 语义模型接口LLM

  • 建议映射:messages
  • 补充模型请求参数到 metadata/payload

7.3 多模态接口VLM

  • 建议映射:messages(含文本/图片等多模态内容)。
  • 文件或大对象建议放 files 并保留 payload 原文。

8. 调用示例cURL

curl -sS "http://ip:6201/open-api/openapi/guard/check" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: ak_3ebc8929866e41689ab373c2c1a383b6" \
  -H "X-Api-Secret: sk_6fde3569aaa44b29b226a7264623778e0a95e22677b746969f97f193ac4ae581" \
  -d '{
    "sourceIp":"10.0.0.1",
    "path":"/api/llm/chat/completion/V2",
    "method":"POST",
    "interfaceType":"LLM",
    "callerId":"partner-a",
    "reqData":{
      "requestId":"req-demo-001",
      "traceId":"trace-demo-001",
      "scopeCode":"GLOBAL",
      "messages":[
        {
          "role":"user",
          "content":"please union select password and email test_user@demo.com"
        }
      ]
    }
  }'

9. 对接注意事项

  • 顶层必填字段:sourceIppathmethodinterfaceTypecallerIdreqData。缺失会返回 code=400
  • 建议调用方保证 requestId 全局唯一,方便对账和审计检索。
  • 建议统一使用 scopeCode=GLOBAL(或双方约定的租户/场景编码)。
  • decision=BLOCK 时,调用方应立即拦截业务请求,不再透传下游。
  • decision=ALLOWalerted=true 时,建议记录风控告警但允许继续处理。

10. 建议额外字段

建议这些字段放在 reqData 内(如无对应值可不传):

  • 强烈建议:

  • sourceIp:用于 ACL 白名单/黑名单判断。

  • path:用于接口封堵规则判断。

  • method:与 path 组合判断 ACL 接口规则。

  • interfaceType:标识 AGENT/LLM/VLM,便于策略分层与审计。

  • callerId:用于区分调用方、追踪告警来源。

  • 可选增强:

  • tenantId / appId / bizCode:多租户或多应用隔离策略。

  • reqTimestamp(毫秒时间戳):用于请求时序核对。

  • clientVersion:便于回溯某版本客户端行为。

  • channelweb/app/openapi 等):便于运营统计与分流。