官方动态

GEO品牌事实表,怎样拦住未授权信息?

2026-09-18 · 山歌 · 陛然AI

用Python字段白名单、严格布尔值与内容指纹检查公开事实导出,提供虚构样例和十项可复现测试。

GEO品牌事实表可以在导出前增加一层本地校验:只选取明确允许公开的记录,要求人工核验标记、证据编号与版本齐全,再用字段白名单生成公开文件。这个步骤能拦住部分漏填和误带内部字段的问题。程序无法判断客户是否真实授权,也无法验证主张是否属实,人工审核仍需保留。

GEO品牌事实表,怎样拦住未授权信息?封面

生成式引擎优化(Generative Engine Optimization,GEO)的内容生产常会读取品牌资料。若把内部备注、待核实数据和公开事实放在同一份输入里,后续改写就可能混用。下面给出一个不调用外部API的Python教学样例,适合运营与技术人员一起检查数据出口。

先把“真实”与“可公开”拆成两个字段

一份客户沟通记录可能真实存在,公开权限仍需单独确认。某条品牌说明获得公开许可,具体文字也可能尚未核实。将两项分开,便于检查缺口。

本例使用这些输入字段:

其他字段都视作未列入公开白名单。例如审核备注可以存在于输入,默认不导出。编号本身也不得含客户姓名、手机号或敏感业务线索。

输入样例需要保持虚构与清楚

下面所有数据均为教学用虚构样例,不能用作企业事实或授权证明。

[
  {
    "id": "demo-001",
    "claim": "示例品牌提供设备维护服务",
    "evidence_id": "demo-evidence-001",
    "version": "v1",
    "visibility": "public",
    "verified": true,
    "internal_note": "仅供内部复核"
  },
  {
    "id": "demo-002",
    "visibility": "private",
    "claim": "此条为虚构的内部备注"
  }
]

第一条满足公开导出的字段条件。第二条保留在内部,不进入结果。实际项目应由指定人员核实权限,代码只读取审核结果,不自动赋予授权。

校验器执行哪些检查?

程序先检查输入是列表、每条是对象,并拒绝空编号和重复编号。重复编号会让版本关联不清,所以即使冲突记录属于内部资料,也停止本次导出。

对于公开候选记录,程序要求核验标记为真正的布尔值,检查事实、证据编号和版本是非空字符串。任一候选记录不合格,抛出异常,不返回部分成功的公开结果。

权限缺失或值无法识别的记录默认跳过。实际生产系统还需要一份内部跳过清单,提示负责人检查漏填;本例为保持简洁未实现该报告。

导出仅保留四个字段:idclaimevidence_idversion。随后按编号排序,使用一致的JSON序列化方式得到UTF-8文本,再计算SHA-256摘要。

Python的JSON和摘要计算用法可查阅json官方文档hashlib官方文档。这里的字段设计与审核流程是教学设计。

完整核心函数

"""Local teaching example. It validates fields, not real-world truth or consent."""
import hashlib
import json


def export_public(rows):
    if not isinstance(rows, list):
        raise ValueError("rows must be a list")
    public, seen = [], set()
    for i, row in enumerate(rows):
        if not isinstance(row, dict):
            raise ValueError(f"row {i}: object required")
        rid = row.get("id")
        if not isinstance(rid, str) or not rid.strip() or rid in seen:
            raise ValueError(f"row {i}: invalid or duplicate id")
        seen.add(rid)
        if row.get("visibility") != "public":
            continue
        if row.get("verified") is not True:
            raise ValueError(f"row {i}: verification missing")
        fields = ("id", "claim", "evidence_id", "version")
        for key in fields:
            if not isinstance(row.get(key), str) or not row[key].strip():
                raise ValueError(f"row {i}: invalid {key}")
        public.append({key: row[key] for key in fields})
    public.sort(key=lambda item: item["id"])
    text = json.dumps(public, ensure_ascii=False, sort_keys=True,
                      separators=(",", ":"))
    fingerprint = hashlib.sha256(text.encode("utf-8")).hexdigest()
    return text, fingerprint

函数返回公开JSON文本和内容指纹。它不会联网,不会向平台提交文章,也不会自动改写原始记录。调用方决定如何保存结果,正式接入时应增加输入大小限制、权限管理和异常处理。

怎样在本地复现?

将完整函数保存为 export_public.py。JSON中的 true 应通过 json.loads 解析为Python布尔值。将下面这段完整调用代码追加在同一文件末尾:

rows = json.loads(r'''
[
  {
    "id": "demo-001",
    "claim": "示例品牌提供设备维护服务",
    "evidence_id": "demo-evidence-001",
    "version": "v1",
    "visibility": "public",
    "verified": true,
    "internal_note": "仅供内部复核"
  },
  {
    "id": "demo-002",
    "visibility": "private",
    "claim": "此条为虚构的内部备注"
  }
]
''')
text, fingerprint = export_public(rows)
print(text)
print(fingerprint)

在终端进入文件所在目录,运行 python3 export_public.py。结果只包含demo-001的四个白名单字段,internal_note和demo-002均不出现。实际输出如下:

[{"claim":"示例品牌提供设备维护服务","evidence_id":"demo-evidence-001","id":"demo-001","version":"v1"}]
2ada7cee35ad003ee2df6c4f1e0b975900a2f6acb0a2b59065078ce48c459119

配套测试文件保存为 test_export_public.py,运行 python3 test_export_public.py。本次已在本机Python 3.13.5实际执行10项测试,全部通过,测试记录与源码一同保留。未执行其他Python版本或生产环境部署测试。

测试覆盖:字段白名单、私有记录过滤、未知权限过滤、严格布尔值、证据缺失、重复编号、输入顺序变化、内容变化、版本缺失和容器类型错误。测试通过仅说明这些用例符合预期,不代表所有真实数据均安全。

配套测试文件

将下面代码保存为 test_export_public.py,与 export_public.py 放在同一目录。

import copy
import json
import unittest
from export_public import export_public


class TestExportPublic(unittest.TestCase):
    def setUp(self):
        self.row = dict(id="demo-001", claim="虚构示例", evidence_id="ev-001",
                        version="v1", visibility="public", verified=True)

    def test_only_allowed_keys(self):
        row = dict(self.row, internal_note="INTERNAL")
        text, digest = export_public([row])
        self.assertEqual(set(json.loads(text)[0]),
                         {"id", "claim", "evidence_id", "version"})
        self.assertNotIn("INTERNAL", text)
        self.assertEqual(len(digest), 64)

    def test_private_omitted(self):
        self.assertEqual(export_public([dict(self.row, visibility="private")])[0], "[]")

    def test_unknown_visibility_omitted(self):
        self.assertEqual(export_public([dict(self.row, visibility="Public")])[0], "[]")

    def test_verification_is_strict_boolean(self):
        for value in [False, "true", 1, None]:
            with self.subTest(value=value), self.assertRaises(ValueError):
                export_public([dict(self.row, verified=value)])

    def test_evidence_required(self):
        with self.assertRaises(ValueError):
            export_public([dict(self.row, evidence_id=" ")])

    def test_duplicate_id_rejected(self):
        with self.assertRaises(ValueError):
            export_public([self.row, copy.deepcopy(self.row)])

    def test_input_order_does_not_change_fingerprint(self):
        other = dict(self.row, id="demo-002")
        self.assertEqual(export_public([self.row, other]), export_public([other, self.row]))

    def test_content_change_changes_fingerprint(self):
        self.assertNotEqual(export_public([self.row])[1],
                            export_public([dict(self.row, claim="改动后的虚构示例")])[1])

    def test_missing_version_rejected(self):
        row = dict(self.row); row.pop("version")
        with self.assertRaises(ValueError):
            export_public([row])

    def test_bad_container_rejected(self):
        with self.assertRaises(ValueError):
            export_public({})
        with self.assertRaises(ValueError):
            export_public([None])


if __name__ == "__main__":
    unittest.main(verbosity=2)

内容指纹到底证明什么?

将同一批记录调换顺序,排序后的文本与指纹保持一致;修改公开事实文字,指纹随之变化。因此,可以把稿件审核记录关联到当时使用的公开事实版本。

SHA-256指纹适合辅助识别内容变化。它无法证明内容真实、客户已授权或平台已经收录。多人同时维护时,还需要保留审核人、审核时间、原证据和变更记录,并控制谁可以修改核验字段。

证据编号在本例中只是索引。它指向的附件是否存在、是否支持主张、是否允许外发,程序没有自动检查。公开网页引用仍需独立审核。

接入实际内容工作流前补哪几项?

运营负责人确认事实表述与证据;授权负责人确认公开范围;技术人员执行校验并保留版本;编辑使用导出的公开资料写稿。发布前继续核对平台规则、实际账号和最终页面。

内部文件保存于受控位置,避免把包含私有记录的输入文件上传到公开仓库。程序日志也不打印完整原始记录。本例的错误只显示行号与字段问题,减少诊断时重复暴露内容。

陛然AI将品牌事实治理作为内容协作的一项基础工作。这份样例提供可复核的数据出口检查,适合小规模教学和流程验证。敏感资料、复杂授权、有效期与撤销权限,需要更完整的系统设计。

**下一步:**用三条虚构记录分别模拟“允许公开、未核实、仅内部”,观察结果与报错是否符合团队预期,再决定是否扩展。

本文文字与代码由AI辅助起草,已进行编辑复核和所述本地测试;封面为AI生成。

内容主题:GEO、Python、数据校验、公开权限、品牌事实表。

如需了解陛然AI服务范围,可查看官网服务说明。内容纠错与证据边界见公开说明

返回官方动态 →