为什么这个新闻值得你关注

NBC一锤子新闻里夹了一条容易被忽略的技术信号:New concerns over use of A.I. to draft police reports。说白了,美国舆论开始担心AI写警情报告会瞎编、会泄露隐私。这不是新闻,而是第一波产品合规大考来了

对开发者来说,这意味着:谁先做出能生成结构化、可溯源、带审核的报告系统,谁就拿到了政府/企业客户的门票

下面我直接给一个能跑起来的Demo,包含:

  • 输入口语化对话片段 → 输出JSON格式的标准化报告
  • 流式输出,前端实时显示
  • 内置幻觉过滤+敏感信息脱敏(核心)

产品Demo:警情报告生成器

用户粘贴一段对话(比如报警录音转文本),点击生成,页面流式输出结构化报告:

json
1 2 3 4 5 6 7 8 9 10 11
{
  "case_id": "20260524-001",
  "incident_type": "噪声扰民",
  "location": { "address": "123 Main St", "gps": [40.7128, -74.0060] },
  "summary": "报警人称邻居凌晨2点开派对,影响休息",
  "involved_persons": [
    { "role": "报案人", "name": "张三", "id_number": "***1234" }
  ],
  "action_taken": "警员已到场调解,派对已于3:15结束",
  "confidence": 0.87
}

技术选型

组件 选择 理由
模型 GPT-4o-mini 响应快、便宜,单次调用约$0.002,对结构化任务足够
前端 Streamlit 3行代码可交互,适合MVP验证
流式 OpenAI SSE 用户体验好,减少等待焦虑
脱敏 正则+实体识别 手机号、身份证、地址自动打码
幻觉校验 强制JSON Schema + 后处理 防止AI编造不存在的人物或事件

核心代码实现(关键片段)

1. 流式生成结构化JSON

python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
import json
from openai import OpenAI

client = OpenAI()

def stream_report(transcript: str):
    system_prompt = """你是一个警情报告生成器。根据用户输入的对话,输出严格遵循以下JSON Schema的报告:
{
  "case_id": "YYYYMMDD-序号",
  "incident_type": "类别",
  "location": {"address": str, "gps": [float, float]},
  "summary": "50字以内",
  "involved_persons": [{"role": str, "name": str, "id_number": "***后4位"}],
  "action_taken": str,
  "confidence": float
}
重要规则:
- 如果对话中没有明确的人名,用"未知",绝不虚构。
- 身份证号只保留最后4位,其余打码为*。
- 地址必须包含粗略GPS坐标(可基于城市估算)。
不要输出任何解释,仅输出JSON。"""
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": transcript}
        ],
        stream=True,
        response_format={"type": "json_object"}
    )
    
    full_content = ""
    for chunk in response:
        if chunk.choices[0].delta.content:
            delta = chunk.choices[0].delta.content
            full_content += delta
            yield delta
    
    # 后处理:校验JSON并脱敏
    yield from validate_and_sanitize(full_content)

2. 幻觉过滤+脱敏函数

python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import re

def validate_and_sanitize(raw_json_str: str):
    try:
        report = json.loads(raw_json_str)
    except json.JSONDecodeError as e:
        yield "\n\n[ERROR]输出不是合法JSON,请重试"
        return

    # 规则1:confidence必须在0到1之间
    if not (0 <= report.get("confidence", 0) <= 1):
        report["confidence"] = 0.5
    
    # 规则2:身份证号码脱敏
    for person in report.get("involved_persons", []):
        id_raw = person.get("id_number", "")
        if len(id_raw) == 18:
            person["id_number"] = "**************" + id_raw[-4:]
    
    # 规则3:地址中若出现具体门牌号,替换为模糊位置
    address = report.get("location", {}).get("address", "")
    if re.search(r'\d+号', address):
        address = re.sub(r'\d+号', 'XX号', address)
        report["location"]["address"] = address
    
    yield f"\n\n### 审核后报告\n```json\n{json.dumps(report, ensure_ascii=False, indent=2)}\n```"

3. Streamlit前端(关键部分)

python
1 2 3 4 5 6 7 8 9 10 11 12
import streamlit as st

st.title("AI警情报告生成器")
transcript = st.text_area("粘贴对话文本", height=200)
if st.button("生成报告"):
    with st.spinner("正在生成..."):
        # 流式输出
        response_placeholder = st.empty()
        full_text = ""
        for delta in stream_report(transcript):
            full_text += delta
            response_placeholder.markdown(full_text)

项目结构

text
1 2 3 4 5 6
police-report-gen/
├── app.py                # Streamlit入口
├── stream_report.py      # 核心生成逻辑
├── sanitizer.py          # 脱敏+校验
├── requirements.txt
└── .env                  # OPENAI_API_KEY

requirements.txt 就三行:

text
1 2 3
streamlit
openai
python-dotenv

上线要特别注意的坑

  1. 幻觉无法100%消除:即使有JSON Schema,模型还是可能编造地址或人物。建议加一个人工确认步骤:前端输出报告后,要求警员修改并签名。这是合规底线。

  2. 敏感信息脱敏要彻底:除了身份证,还有电话号码、车牌号、社保号。用 spaCy 的实体识别 + 正则双重保护。

  3. 计费限制:GPT-4o-mini 虽便宜,但如果每天10万次调用,月费约6000元。考虑用小模型(如 Llama 3.1 8B)本地部署,通过ollama+流式。代码几乎不改,只需换 openai 客户端为 ollama

  4. 记录的不可否认性:必须对每次生成记录日志(原始输入+输出+模型版本+时间戳),防止滥用。

我的看法

“AI起草警察报告”这件事,技术上已经成熟到可以上线MVP。真正卡脖子的不是模型能力,而是信任机制 —— 你怎么让执法人员相信AI不会胡编?我的方案是:AI只做初稿,所有输出必须经人工审核并留痕。这不是退步,而是AI落地的正确姿势。开发者现在就应该把“审核链路”写进产品的核心代码里,否则等到合规找上门就晚了。

police report draft approval workflow