一、监管来问「为什么」的那一天
设想一个已经在很多银行跑起来的场景:一个贷款审批 Agent 拒了一份申请。十四个月后,申请人投诉到监管机构,监管要求这家银行说明当时依据了什么。
技术团队去翻记录,能翻到的通常是三样东西。应用日志里有一行 decision=reject, score=0.62。向量库里有当时召回的几个 chunk 的 id,但索引已经重建过两次,同一个 id 现在指向别的内容。LLM 那次调用的 prompt 和 response 存了,是两段自然语言,里面写着「综合考虑申请人的负债收入比与就业稳定性」。
这三样东西凑不出监管要的答案。监管问的不是「模型输出了什么」,是「哪些事实进了这个决定、哪些被排除了、依据哪条政策、上游是谁触发的」。日志答不了因果,向量库答不了溯源,LLM 的那段自然语言答不了「这句话背后对应的是哪条记录」。
欧盟 AI Act 第 12 条对高风险 AI 系统的要求写得很具体:系统要有自动记录事件的能力,记录要能支撑运行过程的可追溯,格式要能被主管机关利用。第 13 条进一步要求部署方能理解系统的能力与边界。信贷评分、招聘筛选、教育评估、关键基础设施,都在 Annex III 的高风险清单里。

问题很清楚:Agent 做完决定就走了,系统里没有任何一层负责留下可追问的记录。
二、现有解决方案
按出现顺序,大致四条路。
应用日志和可观测性。把决策当成一条结构化日志打进 Datadog 或 CloudWatch,加上 trace id。这是绝大多数团队现在的做法,因为它零成本、复用现有基建。
向量记忆。把对话、事实、历史决策都嵌入成向量存起来,需要时按相似度召回。Mem0、Pinecone 这一路。它解决的是「Agent 上次说过什么」。
知识图谱记忆。2026 年这条线已经很热闹。Zep 的 Graphiti 做时序知识图谱,给边挂上 valid-time 和 transaction-time 两个时间轴,事实变了不删旧边而是作废它,保留「当时知道什么」的痕迹。Cognee 走 ingest-cognify-search 的管线,把 PDF、Slack、Notion 这些异构语料抽成图。微软的 GraphRAG 做实体图加 Leiden 社区检测,预生成层级摘要。LightRAG 是可增量更新的轻量版本。
闭源商业平台。Palantir Foundry 的 Ontology 层是这个方向最成熟的产品,本体建模、血缘、审计一整套都有。
三、这四条路各自卡在哪
日志的问题是它是可变。运维能改,攻击者能删,而 Article 12 要的是能支撑追溯的记录,业界普遍的解读是需要防篡改。更根本的是,日志是一条一条平铺的,它记得住「发生了什么」,记不住「这件事导致了那件事」。你没法对一堆 log 行提问「把这个决定的全部上游给我」。
向量库的问题是结构性的。它存的是相似度,不是含义。两条互相矛盾的事实进来,后写的覆盖先写的,因为一堆 chunk 之间本来就没有「这两条冲突」这个概念。它也没有溯源——召回一个 chunk,你问不出它是从哪份文件的第几页抽出来的、抽取器的置信度是多少。决策历史根本不在它的职责范围内。
图谱记忆这条线已经把多跳推理和时间维度做掉了,但重心偏在「Agent 记住了什么」,不在「Agent 的决定能不能被追问」。决策本身通常不是一等对象,因果链、判例检索、策略闸门这几件事没有对应物。还有一个绕不开的成本:这些方案的图构建普遍依赖 LLM 抽取,每份文档进来都要跑几趟模型。延迟和 token 开销都比纯向量高,而且——对高风险场景来说更麻烦——图的构建过程本身变成了一个不确定的、需要被解释的环节。你为了解释 Agent,引入了另一个需要被解释的东西。
Palantir 的问题不在技术,在部署形态。数据得进它的地盘,价格和锁定都是另一回事。金融、医疗、政府这几类最需要审计的客户,恰恰是最不能把数据交出去的。
那么需要什么就浮现出水面了:一个确定性的、可自托管的、把「决策」当成一等公民的数据层。semantica 就是来填补这个空白的。
四、semantica的设计思路
架构是一条完整的数据管线:

真正让它区别于前面那些方案的,是四个设计选择。
决策是一等图节点,不是日志行。record_decision() 写进去的是 category、scenario、reasoning、outcome、confidence 五个字段,返回一个 id。然后 add_causal_relationship() 把决策之间连起来,关系类型限定在 CAUSED、INFLUENCED、PRECEDENT_FOR 三种。围绕这个节点有一组查询:trace_decision_chain() 回溯全部上游,analyze_decision_impact() 给下游影响图,find_similar_decisions() 做判例检索,check_decision_rules() 是策略闸门。
我实际跑了一遍两级决策链,trace_decision_chain() 返回的结构比我预想的更丰富:除了 hop 列表和跳数,还给了 confidence_decay(置信沿链的衰减)、weakest_link(链上最弱的那一环)、distance_band。
整条链不需要 LLM。图构建、推理、溯源三件事都是确定性的。这一条直接回应了上一节说的那个矛盾:解释性组件自己不能是黑箱。代价是抽取质量比 LLM 方案差,好处是同样的输入永远得到同样的图,而且能在断网的内网里跑。
溯源走 W3C PROV-O。万维网联盟的标准本体,合规体系认这个。单独跑
ProvenanceManager.export_prov(),输出中规中矩:
ex:patient_P4821 a prov:Entity ;
prov:qualifiedGeneration [ a prov:Generation ;
prov:activity ex:entity_tracking ] ;
prov:wasAttributedTo ex:semantica .
prov:Entity、prov:Activity、prov:Agent、qualifiedAssociation 都在,rdflib 序列化,挑不出毛病。
双时间轴与时间旅行。valid_from / valid_until 记事实在世界上何时成立,recorded_at 记系统何时知道它。state_at("2024-01-01") 直接返回那一天的图快照。这个模型和 Graphiti 是同一个思路,区别在 semantica 把它接到了决策节点上——你能回放「做这个决定的那一刻,图长什么样」。
存储层是多态的:RDF 三元组库(Oxigraph、Blazegraph、Jena、RDF4J)和标签属性图(Neo4j、FalkorDB、Apache AGE、Neptune)都支持,换后端不动代码。对外有 REST API、MCP server、CLI,还有一个基于 React 19 加 Sigma.js 的浏览器工作台,能拖时间轴看图演化、看每个决策的因果链、审核重复实体。
设计层面,它没去和 Mem0 抢记忆,也没去和 LangGraph 抢编排,它占的是「决策可追问」这个还没人认真对待的问题。
五、跑一遍示例
这一节是最有趣的部分。
我把仓库 clone 下来,装了最小依赖,把 README 里几个旗舰示例挨个执行。结果和文档写的完全对不上。
Rete 规则引擎是个空壳。 README 有一段反洗钱示例:三笔交易,规则是金额超过一万且收款国在制裁名单里就标记,预期输出是 tx_101 被命中。我照抄跑,返回空列表,三笔一笔没标出来。
改成只留一个条件(金额大于一万),再跑,两笔都被标记了——包括那笔金额四千五、收款国德国的。
读代码就明白了。AlphaNode._matches() 的函数体是一行 return True,注释写着「简单匹配,后续可增强」,BetaNode._can_join() 同理。任何事实都能通过任何条件。而多条件返回空是另一个 bug:_add_rule_to_network() 建了 beta 节点,却从来没把它挂进 alpha 节点的 children,事实进网络后遍历到的是空列表,走不下去。我打印过网络结构,两个 alpha 节点的 children 长度都是 0,网络是断的。
README 对此有一行免责声明,说 alpha 节点的条件匹配「在本版本中有意做得简单」。这个措辞不准确。它不是筛得不够细,是完全不筛,以及多条件下完全不通。
最能说明问题的是测试。5240 个测试函数,grep -r ReteEngine tests/ 结果是零。tests/reasoning/ 下三个文件测 datalog、测通用 reasoner、测专用 reasoner,唯独没有 Rete。这个模块从写出来那天起就没被验证过。
对照组是 Datalog。同一个目录下,我跑那个递归祖先查询 ancestor(X,Z) :- parent(X,Y), ancestor(Y,Z),返回 bob、ann、pat,一个不多一个不少,日志显示走的是半朴素求值。这是正经实现,而且它有测试。
旗舰审计示例导出的文件里没有溯源。 README 把「记录一条药物相互作用决策链、附溯源、导出成监管能收的 PROV-O」摆在最显眼的位置。我完整跑完,拿到的 audit_trail.ttl 是 602 字节:
<8cff02c1> a ;
semantica:text "warfarin+amiodarone" ;
semantica:confidence "1"^^xsd:decimal .
三个问题一起看。整个文件没有一个 PROV-O 词,示例里那个 ProvenanceManager 建出来了、track_entity() 也调了,但内容从头到尾没进导出文件。我传的 confidence=0.91 变成了 1。最要命的是 reasoning 和 outcome 两个字段整个消失。
我追到 to_kg_dict() 那一层,是好的,properties 里 reasoning、outcome、0.91 都在。丢在 RDFExporter 这一步——它只序列化 text 和 type,其余不看。
一份要交给监管的审计文件,丢掉了「决定是什么」和「为什么这么定」。回到本文第一节:这恰好是监管唯一要问的那两件事。
公道地说,零件是好的,上一节那段合规的 PROV-O 输出就是同一个仓库里的东西。问题在装配说明书——README 那个示例调错了导出器。
42 个必装依赖里有一半用不上。 pip install semantica 会拉 torch、transformers、spacy、faiss-cpu、opencv-python、librosa、gensim、matplotlib、seaborn、plotly、ipywidgets 等 42 个包。我在整个 semantica/ 下搜了一遍:librosa 零处引用,cv2 零处,seaborn 零处,ipywidgets 零处。一个知识图谱库的必装清单里躺着一个音频分析库和一个计算机视觉库。
torch 更说明问题。它只出现在一个文件里,懒加载,import 失败时抛的提示是「torch is required for HuggingFaceLLMProvider. Install with: pip install torch」。写这行的人清楚知道它是可选的,可 pyproject 里 47 个 extras 分组偏偏没给它留位置。
我实测跑通 semantica.context 和 semantica.reasoning 只装了六个包。真实的最小依赖面比声明的小一个数量级。
六、大趋势来看看
第一件事,监管的时钟刚刚被推后了十六个月。
本文第一节说的 8 月 2 日高风险义务生效,实际上没有生效。欧盟的 Digital Omnibus on AI(Regulation (EU) 2026/1744)2026 年 7 月 24 日刊登在官方公报、7 月 27 日生效,比原定的 8 月 2 日早六天。Annex III 独立高风险系统的合规期限推到 2027 年 12 月 2 日,嵌入受管制产品的推到 2028 年 8 月 2 日。
时间点很微妙。semantica 是 8 月 9 日上的 Trendshift 日榜和周榜,8 月 10 日冲到 GitHub Trending 全站第一,星标两周从三千多涨到一万出头。也就是说,把它推上榜的那波需求,来自一个刚刚被推迟的截止日期。
我的判断是:延期削弱的是紧迫感,不是需求本身。义务条文一个字没改,只是给了准备时间。真正的影响是,这个领域从「十周内必须交付」变成了「有一年半可以做对」。对 semantica 这种代码和文档还没对齐的项目,这十六个月是运气。对整个「决策留痕」赛道,这意味着接下来会有更多、也更成熟的竞争者进来。
第二件事,这一层会不会被别人吃掉。
从上面吃:Agent 编排框架自己往下长。LangGraph 已经有 checkpointer 做状态持久化,往前一步就是决策记录。从下面吃:OpenTelemetry 的 GenAI 语义约定在推进,如果 trace 里能标准化地表达「这个决定用了哪些上下文」,那可观测性厂商会把这块顺手做掉。从侧面吃:Zep、Cognee 这些图谱记忆项目往决策方向走一步,就覆盖了大半。
semantica 现在的护身符是确定性和自托管——不需要 LLM、数据不出内网。这两条恰好是最难被 SaaS 化的可观测性方案和最依赖 LLM 的记忆框架都给不了的。能不能守住,看它一年半内能不能把 v1.0 的 API 做好、把测试补齐。
第三件事,也是我读完这个仓库真正想说的。
18 万行代码、10 万行测试、2439 次提交、68 个贡献者,一年。这个产能在 AI 辅助开发之前不可想象。仓库里有 .claude/skills/ 目录,CHANGELOG 里能看到 Qodo 代码审查的痕迹,提交记录里有 OpenAI Codex 的署名。作者没藏着,工具用得很足。
产能上来了,验证没跟上。README 描述的是产品应该长成的样子,代码是它现在长成的样子,中间那道对齐过去靠人一行行读。现在生成的速度快过了验证的速度,问题就来了。Rete 引擎那句 return True 和它上面「后续可增强」的注释,是这个缺陷最清楚的切片:占位符写下去了,README 里对应的段落也写下去了,但没人回来把两件事对上,因为没有一个对应的测试。
这件事的讽刺之处在于,semantica 要解决的问题和它自己得的病,是同一个病——系统做了一件事,但没有留下能证明它确实做了的记录。它想给 Agent 补的那一层,它自己的 Rete 模块也缺。
解药同样在这个仓库里。CHANGELOG 那种写法就是解药:把每个 bug 的因果链、影响版本、修复路径、以及「这个断言其实没覆盖到那两个术语」全写下来。写不出这种 CHANGELOG,说明没真的验证过。
想用的话
按我跑下来的情况分三档。
能用的:ContextGraph 的决策记录和因果链、DatalogReasoner、
ProvenanceManager.export_prov()、conflicts 冲突检测、deduplication 实体消解、Knowledge Explorer。
要自己验的:RDFExporter,导出后打开文件确认 reasoning 和 outcome 在不在,别照抄 README 的审计流程。GraphBuilder 的默认抽取方法在 0.6.6 从 llm 改回了 ml/pattern,升级前后行为不一样。
暂时别碰的:ReteEngine。没有测试,条件不生效,多条件返回空。
装的时候先起 venv,pip install semantica 会把 torch 和 opencv 一起拖下来。
semantica 想做开源版的 Palantir Ontology 层,把决策变成图上可追问的一等节点。但经过简单的试用,缺陷还很大,这个方向非常吸引人,让我们关注一下这个项目之后的发展。
参考
- http://github.com/semantica-agi/semantica/blob/main/CHANGELOG.md.
- “EU AI Act’s High-Risk Deadline: Deferred, Not Cancelled.” Cloud Security Alliance Labs, labs.cloudsecurityalliance.org.
- “EU AI Act unpacked #34: The final Digital Omnibus on AI.” Freshfields, 10 July 2026, freshfields.com.
- Kaif, Mohd. “Semantica — FLOSS/fund Grant Application.” semantica-agi/semantica-grant, GitHub, http://github.com/semantica-agi/semantica-grant.
- “Knowledge-Graph Memory for AI Agents.” Mnemoverse Docs, 7 July 2026, http://mnemoverse.com/docs/library/knowledge-graph-memory-for-agents.
- MoClaw. “Semantica: A Knowledge Graph for AI Agents.” MoClaw Blog, 10 Aug. 2026, moclaw.ai/blog/what-is-semantica.
- Regulation (EU) 2024⁄1689 (Artificial Intelligence Act), Art. 12–13.
- “semantica-agi/semantica.” GitHub, 21 Aug. 2026, http://github.com/semantica-agi/semantica.
- “semantica-agi/semantica — GitHub trending stats & insights.” Trendshift, http://trendshift.io/repositories/18986.

发表评论 取消回复