技术专题 03 / 2026-10-16 / 参考实现

自定义监测与API分析:把原始结果变成可解释的数据集

让业务团队定义命中条件,让开发者通过现有AI监控接口取回结果,再在自有系统完成分析。

现有API路径来自本站文档;标准化数据模型为方案设计,需根据真实响应编写适配器。示例数据不用于实际投标、政策申报或业务判断。

技术档案

档案编号YM-TECH-20261016-03 / v1.0
作者与发布主体合肥域明科技有限责任公司
实现状态设计文章 + 浏览器离线演示 + Python参考实现;不代表新增生产服务上线。
运行环境Python 3.10及以上,标准库;浏览器演示无构建依赖。
测试与范围10项Python单元测试;演示页面使用5条固定样本。没有验证真实来源覆盖率或邮件送达率。

架构与流程

自定义目标与API四阶段架构图
图1:定义监测目标 → 提交或导入结果 → 可解释规则匹配 → JSON导出与分析。每一步保留来源和处理依据。

实现逻辑

先划清两种数据来源

现有AI监控API面向问题与平台任务,可以提交问题、查询状态并获取任务结果。它不能被直接等同于政府公告实时订阅接口。招标与政策信息需要独立的来源采集适配器,两类数据进入分析层之前都应保留来源、时间和原始响应。本文将已记录在文档中的接口与拟议的标准化数据层分别描述,避免使用虚构的线上接口路径。

目标规则:业务人员决定关心什么

目标由关键词、任一或全部匹配方式、排除词和地区组成。演示在标题与证据片段中执行不区分大小写的子串匹配,并返回命中的词与排除原因;它不是分词引擎,也不衡量真实语义相似度。实际业务可加品牌别名词典、语言归一化和人工标注集,观察误报与漏报后再扩展。空关键词会阻止执行,避免一次误配置匹配所有信息。

接口接入:HTTP成功和任务完成是两件事

后端从环境变量读取域名与Token,提交任务后保存taskId。轮询应有间隔和总次数限制,只有业务状态为completed才获取完整结果;失败或未知状态停止并报告。网络超时不意味着任务没有创建,示例不会自动重试可能计费的POST。现有状态枚举需在实际联调时确认,示例对未知状态采用停止策略。Token不放在网页、不写入截图,也不随跨域重定向转发。

标准化层:保留原始结果,再生成分析记录

不同平台或版本的返回字段可能不同,应以实际响应编写适配器,将结果映射为source、id、platform、title、text、source_url与时间字段。此处展示的records结构属于参考分析模型,不是现有API响应格式承诺。下载的API客户端保留原始JSON;离线monitor.py接受已标准化的fixture数据。两者之间的字段映射需要在取得真实样本后实现并测试。

分析与分发:指标必须说明样本口径

演示导出每条记录的判断、命中词和证据,并按matched、review、excluded统计。匹配数除以样本数只是当前数据集的规则命中比例,不能称为市场份额或行业覆盖率。客户可在自有环境进一步做分组分析、趋势比较和报表。若引入客户隔离、Webhook或邮件分发,需要额外实现权限、签名校验、重放防护、发件队列和回执记录;本页面不保存真实密钥或发起付费接口请求。

参考数据结构

下表是本专题的标准化字段,不是新发布的线上API响应契约。

字段含义处理要求
taskId现有API任务标识状态查询与结果获取使用
source / platform来源 / 平台标准化分析模型字段
rule_version / reasons规则版本 / 命中依据记录分析时采用的条件
raw_response / source_url原始结果 / 引用地址保留证据,不把模型表述当事实
查看完整样本记录
{
  "id": "signal-1",
  "kind": "signal",
  "source": "fixture",
  "title": "示例品牌产品信息更新",
  "text": "品牌产品新增参数说明,来源为模拟AI回答。",
  "region": "安徽",
  "budget": null,
  "status": "published",
  "deadline": null,
  "updated_at": "2026-10-16T08:00:00+08:00",
  "published_at": "2026-10-16T07:30:00+08:00",
  "fetched_at": "2026-10-16T08:05:00+08:00",
  "application_open": null,
  "platform": "DeepSeek",
  "source_url": "https://example.invalid/signal/1"
}

核心代码

已有AI监控API:有界轮询与结果读取。完整文件和测试见资料包。

def wait_result(task_id, attempts=12, interval=5):
    if attempts < 1 or interval < 1:
        raise ValueError('Polling limits must be positive')
    identifier = quote(task_id, safe='')
    for attempt in range(attempts):
        data = call('GET', '/api/business/monitor/task/status/' + identifier)
        state = data.get('status')
        if state == 'completed':
            return call('GET', '/api/business/monitor/task/result/' + identifier)
        if state not in ('pending', 'running', 'processing', 'queued'):
            raise RuntimeError('Task is terminal or unknown: ' + str(state))
        if attempt < attempts - 1:
            time.sleep(interval)
    raise TimeoutError('Polling budget exhausted; keep task ID and resume later')

复现方式

python -m unittest -v
python monitor.py custom-monitoring-api.json --output output/custom-monitoring-api

在资料包的 examples 目录运行,生成 analysis.json 与 digest.eml。没有真实采集或邮件发送。

已有接口接入示例

python api_client.py --submit request.example.json
python api_client.py --task-id YOUR_TASK_ID

先在服务器环境设置 MONITOR_API_ORIGIN 与 MONITOR_API_TOKEN。submit会创建任务并可能计费,本文未执行真实调用。首次提交成功后保留taskId,不要反复提交相同任务。

页面展示

自定义目标与API交互演示页面:规则配置、命中状态与证据
图2:本专题实际可操作的离线演示页面,不是生产环境截图。
调整目标并查看结果

验收口径与实现边界

  • 客户端只在completed状态获取结果
  • 轮询次数耗尽后停止,不无限等待
  • 失败或未知任务状态明确报错
  • 网页导出包括规则、口径与每条判断
  • 未配置真实域名和Token时不发起接口调用

生产化还需要来源适配器、权限与租户隔离、审核记录、调度、持久化和异常告警。建议记录抓取成功率、解析缺失率、人工复核通过率及投递失败率;不要用页面演示数据宣称覆盖率或准确率。

技术参考

配套发布文案

公众号导读

监测能力可以通过API进入企业自己的分析流程。本文展示自定义目标、异步任务查询、结果标准化与JSON分析的完整边界:现有AI监控API用于获取AI任务结果,公告和政策仍需专门采集;规则匹配模型不冒充官方响应结构。提供Python客户端、离线分析器、模拟测试和可交互页面。开发者可以先用样本复现,再对照真实响应实现适配器。

朋友圈摘要

不只看一个看板,也可以自己拿数据分析。自定义监测技术专题:目标规则可配置、命中依据可查看、JSON可导出,并附现有AI监控API的Python接入示例。

配图建议:架构图用于说明流程,交互页面图用于说明配置与结果。发布时保留“离线演示”与样本口径。