---
title: "Rust 中面向智能体编辑的语义身份"
canonical: https://wavect.io/zh/blog/semantic-identity-rust-agent-edits/
language: zh
description: "SEMAPRAX 如何以 Rust 类型、稳定声明 ID、已检查 HIR、确定性图和可重放证据约束编码智能体编辑。"
image: "https://wavect.io/img/blog/headers/header_semantic-identity-rust-agent-edits.png"
---

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

8 分钟 阅读 · 2026年8月23日 最近审核 2026年8月23日

[**下一篇**](/zh/blog/programming-languages-matter-less-ai/)

# 智能体编辑为何需要语义身份：用 Rust 构建 SEMAPRAX

要点速览

文本位置很脆弱，因为格式化和邻近修改会让它漂移。SEMAPRAX 改为给声明分配持久身份，把源码解析为已检查 HIR，生成确定性的图视图，并将补丁绑定到特定修订版。Rust newtype 区分声明身份与表达式身份，有序集合和独立证据重放则让边界可复现。这是一个 pre-alpha 研究设计，不代表已经达到生产就绪或完整语言安全。

**编码智能体应按照声明的身份和预期语义进行编辑，而不是依赖可能已经过时的行号。**在 [SEMAPRAX](/zh/semaprax/) 中，持久声明 ID 不受普通源码移动影响，已检查 HIR 集中保存解析后的语义，绑定修订版的补丁则会在源码快照改变时封闭失败。Rust 类型系统让这些区别在编译器中变得明确。

本文讲解 pre-alpha 研究编译器中已经实现的设计。即使你不采用这种语言，这些边界也适用于重构引擎、编译器服务和需要把意图转化为可审查变更的智能体工具。

## 为什么行号和字节偏移不是可靠的编辑目标？

文本编辑通常表达为“替换第 418 到 463 字节”。这个地址只描述某个文件快照，而不是智能体真正想修改的程序实体。格式化、注释或并发编辑都会使它漂移。名称稍好，但作用域、重载和重命名也会让名称依赖上下文。

因此，SEMAPRAX 契约把人类可读的 `.spx` 源码作为规范 Git 投影，并把版本化语义图作为首选智能体接口。公共声明携带持久 `@id` 身份。表达式身份只在修订版内有效，因为让每个瞬时语法节点跨任意重写保持身份，会做出超出编译器能力的承诺。 [SEMAPRAX 语言与编译器契约](https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/docs/RFC-0001.md) 规定了这一区分。

## Rust 如何编码身份边界？

HIR 并非到处传递裸字符串，而是定义了不同的 newtype：

```
pub struct DeclarationId(String);
pub struct ExpressionId(String);

pub struct ResolvedFunction {
    pub id: DeclarationId,
    // 已检查的签名、函数体和效果
}
```

这个缩短后的示例对应已审计修订版 [`src/hir.rs` 中的类型](https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/src/hir.rs) 。需要持久声明目标的函数无法意外收到表达式地址。编译器必须执行显式转换，否则拒绝操作。

同一模块用 `BTreeMap` 保存声明索引，用 `BTreeSet` 保存关系集合。有序集合本身不足以保证确定性，但可以消除随机哈希迭代造成的输出漂移。在顺序影响执行时，仍必须保留语义顺序。

## 为什么只解析一次并生成已检查 HIR？

如果图导出器、原生后端和 Wasm 后端各自从语法重建含义，它们可能对类型、所有权或调用目标产生不同解释。SEMAPRAX 先解析和验证，再让下游投影使用已检查表示。公开的 [架构与信任边界文档](https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/docs/ARCHITECTURE.md) 描述了该流程，并区分已实现通道与未来权限。

1. 解析人类可读源码。
2. 把名称和持久身份解析为 HIR。
3. 验证当前语言子集允许的类型、效果、所有权规则和契约。
4. 从已检查语义生成确定性图 JSON 或目标产物。
5. 把变更绑定到源码修订版和预期语义目标。

图是编译器投影，不是第二个事实来源。Git 仍然审查源码，智能体则获得结构化上下文。

## 语义图如何做到确定性？

确定性是整个流水线的属性。如果边的顺序每次运行都变化，稳定节点 ID 也无济于事。SEMAPRAX 的 [Rust 图投影](https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/src/graph.rs) 使用有序索引、显式序列化、受限遍历和规范输出规则。

不能为了让 JSON 更美观而重新排序执行向量。求值和清理顺序属于语义。规范排序只适用于数学上无序的集合。

## 证据如何约束智能体补丁？

序列化证据胶囊应说明补丁为何可接受，但持有胶囊不能自动获得写权限。SEMAPRAX 将证明数据与拥有提交权限的组件分开。补丁路径先取得普通锁，独立重放精确且受限的证据，检查当前源码快照，然后才暂存候选变更。 [补丁证据实现](https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/src/patch_evidence.rs) 清楚地区分重放与应用。

- **过期意图：** 补丁只对旧修订版有效。
- **错误目标：** 文本仍然匹配，但现在指向另一项声明。
- **伪造置信：** 调用方给出貌似可信的报告，却没有复现检查。

独立重放不能证明某项功能值得实现。它证明一个更窄且可测试的事实：受限提案仍满足其证据所绑定的编译器检查。

## Rust 编译器和智能体工具可以借鉴什么？

1. **使用领域 newtype：** 在类型层区分持久实体、修订版局部节点、摘要和能力。
2. **保持单一已检查语义核心：** 让图和后端使用解析后的含义。
3. **明确设计确定性：** 规定顺序、序列化、诊断与失败行为，并逐字节比较重复运行。
4. **把编辑绑定到快照：** 没有源码摘要的语义目标仍会漂移。
5. **让证据不带权限：** 在权限边界内重放证据，然后才能暂存变更。
6. **公开限制：** 完成矩阵可以避免把单一通道的证据扩张为针对所有目标的声明。

SEMAPRAX 通过证据门控的 [完成矩阵](https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/docs/COMPLETION-MATRIX.md) 实践最后一项。

## SEMAPRAX 尚未证明什么？

SEMAPRAX v0.2 是实验性 pre-alpha 研究。当前仓库记录了受限的原生 C11/Clang 与 WebAssembly Core 通道、确定性语义工具和不断扩展的已验证子集。它不声称生产就绪、完整内存安全、支持所有操作系统、完整所有权系统、全面生态互操作、公开 Component Model 运行时或真实经济权限。

评估项目时应检查源码与带日期的证据，而不是从远期目标推断。请从 [SEMAPRAX 架构概览](/zh/semaprax/architecture/) 开始，并将公开声明与固定编译器修订版对照。

## 如何复现本文过程？

```
git clone https://github.com/wavect/semaprax.git
cd semaprax
git checkout ca339feffcadf77a679abe2f159376287cf2e22c
cargo run -- graph examples/hello.spx
```

该命令检查本文所用精确修订版的图投影。只有运行仓库记录的质量门后，才能把本地修改视为证据。

*编辑披露：OpenAI Codex 协助了起草和翻译。Wavect 对照 SEMAPRAX 提交 `ca339fe`核查了技术声明与代码引用。本文没有从模型输出推断性能或安全声明。*

## 最终思考

可靠的智能体编辑始于明确要修改的实体、它所在的修订版以及必须继续成立的检查。Rust 可以直接编码这些区别：持久声明身份不是表达式地址，已检查 HIR 不是原始语法，证据也不是权限。

SEMAPRAX 是这一边界的实验性实现。它今天最有用的经验比长期语言目标更小：给智能体语义句柄，让所有投影保持确定性，并在含义或源码状态移动时封闭失败。

## 你可能也喜欢..

[**AI 时代编程语言是否不再重要？** 当智能体编写更多代码时，哪些语言抽象仍然重要。](/zh/blog/programming-languages-matter-less-ai/) [**AI 赋能与通用 AI 咨询对比** 比较以实施为核心的合作与仅提供战略的咨询方式。](/zh/compare/ai-enablement-vs-generic-ai-consultancy/)

智能体工程

## 继续浏览此集群

编程智能体、MCP、上下文系统、评估与可靠自动化控制。

[从核心文章开始**AI 智能体的图工程：知识图谱什么时候值得做？**](/zh/blog/graph-engineering-ai-agents/)

- [OpenViking 2026 评测：文件系统式记忆适合生产吗？](/zh/blog/openviking-agent-memory-review/)
- [LLM-as-a-Verifier 详解：架构、成本与生产适用性](/zh/blog/llm-as-a-verifier/)
- [TrueForge 评测：开源 Agent Harness 是否达到生产要求？](/zh/blog/trueforge-agent-harness-review/)
- [智能体可读的网站：llms.txt、Markdown 镜像，以及会坏在哪里](/zh/blog/agent-readable-website-llms-txt-markdown-mirrors/)
- [本地化 URL 会搞坏 hreflang：只保留一个英文 slug](/zh/blog/english-slugs-vs-localized-urls-hreflang/)

只收重要内容

## 关注与你相关的内容

每当我们发布新文章，你会收到一封简短邮件。你可以关注整个博客，也可以只选感兴趣的主题。

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

8 分钟 阅读 · 2026年8月23日 最近审核 2026年8月23日

[**下一篇**](/zh/blog/programming-languages-matter-less-ai/)

邮件订阅新文章 ×

×

通过邮件获取新文章

我们发布时给你一封简短邮件。免费，不做跟踪。

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/blog/semantic-identity-rust-agent-edits/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-08-23",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-08-23",
      "url": "https://wavect.io/zh/blog/semantic-identity-rust-agent-edits/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "文本位置很脆弱，因为格式化和邻近修改会让它漂移。SEMAPRAX 改为给声明分配持久身份，把源码解析为已检查 HIR，生成确定性的图视图，并将补丁绑定到特定修订版。Rust newtype 区分声明身份与表达式身份，有序集合和独立证据重放则让边界可复现。这是一个 pre-alpha 研究设计，不代表已经达到生产就绪或完整语言安全。",
  "articleBody": " 博客概览/AI 与智能体/智能体工程 智能体编辑为何需要语义身份：用 Rust 构建 SEMAPRAX 要点速览 文本位置很脆弱，因为格式化和邻近修改会让它漂移。SEMAPRAX 改为给声明分配持久身份，把源码解析为已检查 HIR，生成确定性的图视图，并将补丁绑定到特定修订版。Rust newtype 区分声明身份与表达式身份，有序集合和独立证据重放则让边界可复现。这是一个 pre-alpha 研究设计，不代表已经达到生产就绪或完整语言安全。 编码智能体应按照声明的身份和预期语义进行编辑，而不是依赖可能已经过时的行号。在 SEMAPRAX 中，持久声明 ID 不受普通源码移动影响，已检查 HIR 集中保存解析后的语义，绑定修订版的补丁则会在源码快照改变时封闭失败。Rust 类型系统让这些区别在编译器中变得明确。 本文讲解 pre-alpha 研究编译器中已经实现的设计。即使你不采用这种语言，这些边界也适用于重构引擎、编译器服务和需要把意图转化为可审查变更的智能体工具。 为什么行号和字节偏移不是可靠的编辑目标？ 文本编辑通常表达为“替换第 418 到 463 字节”。这个地址只描述某个文件快照，而不是智能体真正想修改的程序实体。格式化、注释或并发编辑都会使它漂移。名称稍好，但作用域、重载和重命名也会让名称依赖上下文。 因此，SEMAPRAX 契约把人类可读的 .spx 源码作为规范 Git 投影，并把版本化语义图作为首选智能体接口。公共声明携带持久 @id 身份。表达式身份只在修订版内有效，因为让每个瞬时语法节点跨任意重写保持身份，会做出超出编译器能力的承诺。SEMAPRAX 语言与编译器契约规定了这一区分。 Rust 如何编码身份边界？ HIR 并非到处传递裸字符串，而是定义了不同的 newtype： pub struct DeclarationId(String); pub struct ExpressionId(String); pub struct ResolvedFunction { pub id: DeclarationId, // 已检查的签名、函数体和效果 } 这个缩短后的示例对应已审计修订版 src/hir.rs 中的类型。需要持久声明目标的函数无法意外收到表达式地址。编译器必须执行显式转换，否则拒绝操作。 同一模块用 BTreeMap 保存声明索引，用 BTreeSet 保存关系集合。有序集合本身不足以保证确定性，但可以消除随机哈希迭代造成的输出漂移。在顺序影响执行时，仍必须保留语义顺序。 为什么只解析一次并生成已检查 HIR？ 如果图导出器、原生后端和 Wasm 后端各自从语法重建含义，它们可能对类型、所有权或调用目标产生不同解释。SEMAPRAX 先解析和验证，再让下游投影使用已检查表示。公开的架构与信任边界文档描述了该流程，并区分已实现通道与未来权限。 解析人类可读源码。 把名称和持久身份解析为 HIR。 验证当前语言子集允许的类型、效果、所有权规则和契约。 从已检查语义生成确定性图 JSON 或目标产物。 把变更绑定到源码修订版和预期语义目标。 图是编译器投影，不是第二个事实来源。Git 仍然审查源码，智能体则获得结构化上下文。 语义图如何做到确定性？ 确定性是整个流水线的属性。如果边的顺序每次运行都变化，稳定节点 ID 也无济于事。SEMAPRAX 的 Rust 图投影使用有序索引、显式序列化、受限遍历和规范输出规则。 不能为了让 JSON 更美观而重新排序执行向量。求值和清理顺序属于语义。规范排序只适用于数学上无序的集合。 证据如何约束智能体补丁？ 序列化证据胶囊应说明补丁为何可接受，但持有胶囊不能自动获得写权限。SEMAPRAX 将证明数据与拥有提交权限的组件分开。补丁路径先取得普通锁，独立重放精确且受限的证据，检查当前源码快照，然后才暂存候选变更。补丁证据实现清楚地区分重放与应用。 过期意图：补丁只对旧修订版有效。 错误目标：文本仍然匹配，但现在指向另一项声明。 伪造置信：调用方给出貌似可信的报告，却没有复现检查。 独立重放不能证明某项功能值得实现。它证明一个更窄且可测试的事实：受限提案仍满足其证据所绑定的编译器检查。 Rust 编译器和智能体工具可以借鉴什么？ 使用领域 newtype：在类型层区分持久实体、修订版局部节点、摘要和能力。 保持单一已检查语义核心：让图和后端使用解析后的含义。 明确设计确定性：规定顺序、序列化、诊断与失败行为，并逐字节比较重复运行。 把编辑绑定到快照：没有源码摘要的语义目标仍会漂移。 让证据不带权限：在权限边界内重放证据，然后才能暂存变更。 公开限制：完成矩阵可以避免把单一通道的证据扩张为针对所有目标的声明。 SEMAPRAX 通过证据门控的完成矩阵实践最后一项。 SEMAPRAX 尚未证明什么？ SEMAPRAX v0.2 是实验性 pre-alpha 研究。当前仓库记录了受限的原生 C11/Clang 与 WebAssembly Core 通道、确定性语义工具和不断扩展的已验证子集。它不声称生产就绪、完整内存安全、支持所有操作系统、完整所有权系统、全面生态互操作、公开 Component Model 运行时或真实经济权限。 评估项目时应检查源码与带日期的证据，而不是从远期目标推断。请从 SEMAPRAX 架构概览开始，并将公开声明与固定编译器修订版对照。 如何复现本文过程？ git clone https://github.com/wavect/semaprax.git cd semaprax git checkout ca339feffcadf77a679abe2f159376287cf2e22c cargo run -- graph examples/hello.spx 该命令检查本文所用精确修订版的图投影。只有运行仓库记录的质量门后，才能把本地修改视为证据。 编辑披露：OpenAI Codex 协助了起草和翻译。Wavect 对照 SEMAPRAX 提交 ca339fe核查了技术声明与代码引用。本文没有从模型输出推断性能或安全声明。 最终思考 可靠的智能体编辑始于明确要修改的实体、它所在的修订版以及必须继续成立的检查。Rust 可以直接编码这些区别：持久声明身份不是表达式地址，已检查 HIR 不是原始语法，证据也不是权限。 SEMAPRAX 是这一边界的实验性实现。它今天最有用的经验比长期语言目标更小：给智能体语义句柄，让所有投影保持确定性，并在含义或源码状态移动时封闭失败。 你可能也喜欢.. AI 时代编程语言是否不再重要？ 当智能体编写更多代码时，哪些语言抽象仍然重要。 AI 赋能与通用 AI 咨询对比 比较以实施为核心的合作与仅提供战略的咨询方式。 智能体工程 继续浏览此集群 编程智能体、MCP、上下文系统、评估与可靠自动化控制。 从核心文章开始AI 智能体的图工程：知识图谱什么时候值得做？ OpenViking 2026 评测：文件系统式记忆适合生产吗？ LLM-as-a-Verifier 详解：架构、成本与生产适用性 TrueForge 评测：开源 Agent Harness 是否达到生产要求？ 智能体可读的网站：llms.txt、Markdown 镜像，以及会坏在哪里 本地化 URL 会搞坏 hreflang：只保留一个英文 slug 集群中的下一篇OpenViking 2026 评测：文件系统式记忆适合生产吗？ 查看相关服务： AI 咨询 看看生产环境中的应用: Twinsoft AI 先做决定: 如何为 MVP 选择技术栈 只收重要内容 关注与你相关的内容 每当我们发布新文章，你会收到一封简短邮件。你可以关注整个博客，也可以只选感兴趣的主题。 Company 电子邮箱 你希望接收哪些内容？ 完整的 Wavect 博客接收六个主题下的每一篇新文章。 仅接收所选主题请在下方选择一个或多个分类。 选择主题 AI 与智能体 产品与 MVP 交付与 QA 领导力与团队 商业与监管 Web3 与隐私 我希望接收所选的 Wavect 博客邮件，并已阅读 隐私信息。我可以随时退订。 发送确认邮件→ 免费、双重确认、不使用跟踪像素。 ",
  "articleSection": "Engineering",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "citation": [
    {
      "@type": "WebPage",
      "name": "SEMAPRAX 语言与编译器契约",
      "url": "https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/docs/RFC-0001.md"
    },
    {
      "@type": "WebPage",
      "name": "src/hir.rs 中的类型",
      "url": "https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/src/hir.rs"
    },
    {
      "@type": "WebPage",
      "name": "架构与信任边界文档",
      "url": "https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/docs/ARCHITECTURE.md"
    },
    {
      "@type": "WebPage",
      "name": "Rust 图投影",
      "url": "https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/src/graph.rs"
    },
    {
      "@type": "WebPage",
      "name": "补丁证据实现",
      "url": "https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/src/patch_evidence.rs"
    },
    {
      "@type": "WebPage",
      "name": "完成矩阵",
      "url": "https://github.com/wavect/semaprax/blob/ca339feffcadf77a679abe2f159376287cf2e22c/docs/COMPLETION-MATRIX.md"
    }
  ],
  "dateModified": "2026-08-23",
  "datePublished": "2026-08-23",
  "description": "文本位置很脆弱，因为格式化和邻近修改会让它漂移。SEMAPRAX 改为给声明分配持久身份，把源码解析为已检查 HIR，生成确定性的图视图，并将补丁绑定到特定修订版。Rust newtype 区分声明身份与表达式身份，有序集合和独立证据重放则让边界可复现。这是一个 pre-alpha 研究设计，不代表已经达到生产就绪或完整语言安全。",
  "headline": "智能体编辑为何需要语义身份：用 Rust 构建 SEMAPRAX",
  "image": "https://wavect.io/img/blog/headers/header_semantic-identity-rust-agent-edits.svg",
  "inLanguage": "zh",
  "keywords": "Rust, 编译器, AI 智能体",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/zh/blog/semantic-identity-rust-agent-edits/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/zh/blog/semantic-identity-rust-agent-edits/",
  "wordCount": 233
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/overview/",
      "name": "博客概览",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/topics/ai-agents/",
      "name": "AI 与智能体",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/clusters/agent-engineering/",
      "name": "智能体工程",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/semantic-identity-rust-agent-edits/",
      "name": "Rust 中面向智能体编辑的语义身份 | ",
      "position": 5
    }
  ]
}
```
