Semantica:智能体的开源Palantir

下一个问题是让代理随着时间的推移承担责任,而不仅仅是可解释。Semantica是将这些原语打包到一层的更完整的开源尝试之一。

Semantica:智能体的开源Palantir
梯形图转SCL | AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

提示词、工具调用、令牌、延迟、追踪,甚至给定答案背后的检索块,都可以检查。

但六个月后,当有人问更难的问题"为什么代理会做出这个决策?"时,答案就是一个重建练习。

你搜索日志、重放提示词、检查向量存储命中,并希望底层数据自那时以来没有发生变化。

对于做出重要决策的AI系统来说,这是一个糟糕的架构。

这正是Semantica试图解决的问题,有趣的部分在于其数据模型。

Semantica将代理上下文(即事实、关系、决策、来源、规则和因果链接)转换成一个可以稍后查询的图。

决策成为一等公民。

None

这改变了你可以问的问题:

  • 做出这个决策时有哪些事实可用?
  • 哪个早期决策导致或影响了它?
  • 这些事实来自哪里,它们后来是否发生了变化?
  • 我们以前是否做过类似的决策?
  • 哪些下游决策依赖于这个决策?
  • 它是否通过了确定性策略检查?

对于代理来说,这是一个比记忆更有用的原语,因为它是一个决策图

1、大多数代理栈中缺失的一层

典型的生产栈运行:用户事件 → 代理框架 → LLM → 工具和API → 向量数据库 → 日志和追踪。

它工作得很好,直到代理开始做出关键决策。

向量数据库或跟踪系统不是为回答以下问题而设计的:系统相信什么,它决定了什么,是什么导致了那个决策,以及因为那个决策发生了什么?

None

Semantica在栈中插入了一个图原生层:

数据源
  ↓  摄入 → 解析 → 标准化 → 分割 → 提取
  ↓  冲突检测 → 去重
  ↓  知识图谱
  ↓  本体 + 推理 + 来源 + 决策
  ↓  丰富的上下文图
  ↓  向量存储 / 图存储 / RDF存储
  ↓  REST / MCP / CLI / 资源管理器 / 你的代理

该仓库提供独立的模块,用于摄入、提取、图构建、推理、来源、决策智能、本体管理、向量搜索、时间查询、导出和可视化。

这个想法是将代理状态提升为结构化数据。

2、上下文图不是更好的RAG

很容易将Semantica归类为GraphRAG,但这低估了它。

核心抽象是上下文图,其中实体、关系、事实、决策、因果链接和时间状态都存在于一个可查询的结构中,旁边还有一个向量存储用于语义回忆。

你不再需要在嵌入和图之间做出选择。

每一层回答不同的问题:

  • 向量检索:"什么看起来相似?"
  • 上下文图:"什么是连接的?"
  • 来源:"这个来自哪里?"
  • 决策智能:"我们决定了什么,为什么?"
  • 因果图:"什么影响了什么?"
  • 确定性规则:"哪些策略暗示了这个结果?"
  • 时间图:"在那个时间点什么是真实的?"
None

Semantica使LLM周围的基础设施可检查和可重现。

编辑注: 如果你想深入了解本地LLM和代理栈,可以加入我们的Agent Foundry项目,获得实践深入培训。

3、设置和版本注意事项

pip install semantica
semantica doctor

# 所有内容,包括可选集成
pip install "semantica[all]"

一个注意事项:这个项目发展很快。

固定你验证过的版本,如果你需要未发布的行为,从源代码检出安装并固定提交。

4、快速开始:将决策转化为数据

from semantica.context import ContextGraph

ctx = ContextGraph(advanced_analytics=True)

decision_id = ctx.record_decision(
    category="vendor_selection",
    scenario="Choose a model provider for a regulated workflow",
    reasoning="Provider B supports required deployment controls and data residency",
    outcome="selected_provider_b",
    confidence=0.92,
)

chain = ctx.trace_decision_chain(decision_id)
precedents = ctx.find_similar_decisions("regulated model-provider selection", max_results=5)
impact = ctx.analyze_decision_impact(decision_id)

它看起来几乎太简单了。

重点是record_decision()在架构上的意义:你不再将自由形式的推理转储到日志行中,并希望你的可观测性后端永远保持规范记录。

你明确建模类别、场景、理由、结果、信心和与其他决策的链接。

一个警告: 不要使用reasoning字段来持久化隐藏的模型思维链,而是使用你的应用程序准备捍卫的理由:考虑的证据、应用的策略、超过的阈值、人类覆盖。

这在生产中更有用。

5、因果决策链

一个决策很有趣,但一个链是基础设施。

以一个代理采购工作流为例:安全代理对供应商进行评分,合规代理检查驻留,采购代理选择,财务代理批准合同。

大多数系统存储四个独立的追踪。

Semantica使关系显式化:

security_id = ctx.record_decision(
    category="security_review",
    scenario="Evaluate Vendor B for production AI workload",
    reasoning="SOC 2 controls verified; private networking available",
    outcome="security_approved",
    confidence=0.95,
)

selection_id = ctx.record_decision(
    category="vendor_selection",
    scenario="Choose provider after security and compliance review",
    reasoning="Vendor B passed required controls and residency constraints",
    outcome="selected_vendor_b",
    confidence=0.91,
)

contract_id = ctx.record_decision(
    category="contract_approval",
    scenario="Approve annual Vendor B platform agreement",
    reasoning="Selected vendor is approved; budget within threshold",
    outcome="contract_approved",
    confidence=0.97,
)

ctx.add_causal_relationship(security_id, selection_id, relationship_type="CAUSED")
ctx.add_causal_relationship(selection_id, contract_id, relationship_type="INFLUENCED")

why_contract = ctx.trace_decision_chain(contract_id)
blast_radius = ctx.analyze_decision_impact(selection_id)

该API目前支持三种关系类型:CAUSED(导致)、INFLUENCED(影响)和PRECEDENT_FOR(作为先例)。

现在想象一下供应商B在下个季度未通过安全审查。

你不再问"哪些追踪提到了供应商B?",而是问:哪些后续决策受到了原始选择的影响?

None

这就是决策的爆炸半径分析,正是代理从副驾驶转变为自主批准、路由、购买、部署和拒绝系统所需的操作。

6、从真实数据构建图

当决策记录附加到真实的知识图谱而不是手写事实时,它们变得更有价值。

Semantica为文件、网页内容、数据库、流、Git仓库、电子邮件、Parquet、Snowflake和Databricks提供摄入器:

from semantica.ingest import FileIngestor
from semantica.kg import GraphBuilder

sources = FileIngestor().ingest_directory("./contracts/", recursive=True)
kg = GraphBuilder(merge_entities=True, enable_temporal=True).build(sources)

该管道标准化、分割、提取实体和关系、标记冲突事实、去重并构建图。

None

7、来源是why变得可辩护的地方

因果链告诉你决策B依赖于决策A,但你仍然需要知道什么证据支持了决策A。

Semantica的来源模块建立在W3C PROV-O之上,这是表示来源的标准本体:

from semantica.provenance import ProvenanceManager

prov = ProvenanceManager(storage_path="./provenance.db")

prov.track_entity(
    entity_id="vendor_b",
    source="security/vendor_b_assessment_2026.pdf",
    metadata={"page": 12, "extractor": "NamedEntityRecognizer", "confidence": 0.98},
)

lineage = prov.get_lineage("vendor_b")

因果关系解释依赖性,来源解释起源。

你需要两者来重构决策而不猜测。

来源条目现在是哈希链接的,每个条目都带有序列ID和到前一个条目的校验和链接,verify_chain()可以检测历史中的中断。

事实可以被无效化而不是硬删除:

integrity = prov.verify_chain()

prov.invalidate(
    "vendor_b",
    agent_id="human_security_reviewer",
    reason="Certificate expired; prior approval no longer valid",
)

一个可变的approved=false行告诉你当前的事实。

None

审计日志还告诉你批准曾经存在,谁撤销了它,以及为什么。

这是一个不同的要求,也是高风险代理状态的正确要求。

8、确定性推理:将策略保持在提示词之外

Semantica提供前向链接、Rete、Datalog和SPARQL引擎。

重点是:不要要求LLM即兴发挥你的系统已经知道的规则。

from semantica.reasoning import ReteEngine, Rule, Fact, RuleType

engine = ReteEngine()

engine.build_network([
    Rule(
        rule_id="manual_review",
        name="Escalate high-value restricted transactions",
        conditions=[
            {"field": "amount", "operator": ">", "value": 10000},
            {"field": "risk_tier", "operator": "in", "value": ["high", "critical"]},
        ],
        conclusion="require_manual_review",
        rule_type=RuleType.IMPLICATION,
    )
])

engine.add_fact(Fact("tx_001", "transaction", [{"amount": 25000, "risk_tier": "high"}]))
matches = engine.match_patterns()

如果策略决策来自确定性规则,你将规则ID记录在决策元数据中,以后可以重现结果。

None

LLM仍然提取事实并提出操作,策略门控不再是提示词形式的英语。

一个注意事项:Rete条件匹配器是故意简单的,你应该在将其连接到生产合规门之前,针对你的真实规则集验证match_patterns()。

不要在没有测试的情况下将演示规则引擎变成监管控制。

9、标准比框架更持久

Semantica依赖W3C PROV-O进行来源,RDF进行表示,SPARQL进行查询,SHACL进行图约束,OWL进行本体。

这在最新的代理SDK旁边看起来不时髦,这正是它有用的原因。

代理框架不断变化,但审计要求不会。

你的监管机构不关心哪个代理循环产生了决策。

开放标准使记录与模型提供者和当月框架解耦。

10、MCP将图转化为代理工具

Semantica通过模型上下文协议服务器暴露一切:

python -m semantica.mcp_server
# 或
semantica-mcp
{
  "mcpServers": {
    "semantica": {
      "command": "python",
      "args": ["-m", "semantica.mcp_server"]
    }
  }
}

该服务器公开实体和关系提取、决策记录和查询、先例搜索、因果链、图编辑、推理、分析和导出。

你的代理调用标准化工具来记录或检查状态。

11、它在你的栈中的位置

Semantica将自己定位在底层作为持久上下文和责任层:代理运行时在顶部,决策、因果链接、来源、推理和约束在中间,图和向量存储在底部。

None

虽然LLM保持概率性,但它周围的状态不再是短暂的。

12、可观测性是不够的

你仍然需要追踪、指标、评估和令牌核算,但可观测性是以执行为中心的:它告诉你软件在一次运行中做了什么。

决策图是以领域为中心的:它记录系统作为业务状态一部分所做出的决定。

None

考虑一个承保代理。

追踪显示模型调用了信用API并返回了approved

决策图表示:

申请人
 ├── 收入 → $85k
 ├── DTI → 31%
 └── 信用历史 → clean_36_months

决策: proceed_to_underwriting
 ├── 基于 → 申请人事实
 ├── 来源 → 申请 + 信用报告
 └── 导致 → 承保决策

决策: approved
 ├── 受制于 → 贷款策略
 └── 影响 → 利率决策

你可以几个月后检查它,而无需重放原始模型对话。

企业已经将订单、交易、批准和会计事件视为持久的领域实体。

AI决策应该加入它们。

13、结束语

下一个问题是让代理随着时间的推移承担责任,而不仅仅是可解释。

作为架构的责任:决策 → 因果父级 → 证据 → 来源 → 策略评估 → 下游效应 → 后续修正。

Semantica是将这些原语打包到一层的更完整的开源尝试之一。


原文链接:Open Source Palantir for AI Agents

汇智网翻译整理,转载请标明出处