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

生成式引擎优化(Generative Engine Optimization,GEO)的内容生产常会读取品牌资料。若把内部备注、待核实数据和公开事实放在同一份输入里,后续改写就可能混用。下面给出一个不调用外部API的Python教学样例,适合运营与技术人员一起检查数据出口。
先把“真实”与“可公开”拆成两个字段
一份客户沟通记录可能真实存在,公开权限仍需单独确认。某条品牌说明获得公开许可,具体文字也可能尚未核实。将两项分开,便于检查缺口。
本例使用这些输入字段:
id:记录唯一编号。claim:准备公开的事实表述。evidence_id:内部证据索引,正式发布前还需核对证据内容。version:本条表述的版本。visibility:只有精确值public进入候选导出。verified:必须是布尔值true,字符串“true”不通过。
其他字段都视作未列入公开白名单。例如审核备注可以存在于输入,默认不导出。编号本身也不得含客户姓名、手机号或敏感业务线索。
输入样例需要保持虚构与清楚
下面所有数据均为教学用虚构样例,不能用作企业事实或授权证明。
[
{
"id": "demo-001",
"claim": "示例品牌提供设备维护服务",
"evidence_id": "demo-evidence-001",
"version": "v1",
"visibility": "public",
"verified": true,
"internal_note": "仅供内部复核"
},
{
"id": "demo-002",
"visibility": "private",
"claim": "此条为虚构的内部备注"
}
]
第一条满足公开导出的字段条件。第二条保留在内部,不进入结果。实际项目应由指定人员核实权限,代码只读取审核结果,不自动赋予授权。
校验器执行哪些检查?
程序先检查输入是列表、每条是对象,并拒绝空编号和重复编号。重复编号会让版本关联不清,所以即使冲突记录属于内部资料,也停止本次导出。
对于公开候选记录,程序要求核验标记为真正的布尔值,检查事实、证据编号和版本是非空字符串。任一候选记录不合格,抛出异常,不返回部分成功的公开结果。
权限缺失或值无法识别的记录默认跳过。实际生产系统还需要一份内部跳过清单,提示负责人检查漏填;本例为保持简洁未实现该报告。
导出仅保留四个字段:id、claim、evidence_id、version。随后按编号排序,使用一致的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、数据校验、公开权限、品牌事实表。

