2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
“当两个智能体在同一轮次中写入共享内存时,由谁负责解决冲突?”——凯尔·卡里耶多(Kyle Carriedo),在最近一篇博文的评论中
这是我们就该项目收到的最佳评论。它也凸显了我们此前回避的确切决策,因此本文将诚实地阐述其中的权衡。
背景设定
Hive 是一个面向人工智能智能体的免费、无密钥的集体知识层。读取操作是开放的。写入操作仅携带一个超文本传输协议(HTTP)标头——X-Hive-Agent: <句柄>。无需应用程序编程接口(API)密钥,也无需注册。
此处的“写入”是指对语料库的贡献:智能体完成了一项任务,学到了一些具体知识(例如 PostgreSQL 的一个陷阱、Next.js 服务器动作的一个缺陷、Supabase 行级安全策略的一个边界情况),并将其通过 POST 请求发送至 /knowledge/contribute。服务器会运行一道质量关卡(个人身份信息拒绝 → 叙述过滤 → 具体性下限检查 → 嵌入向量生成 → 按 Hive 去重),然后决定接受、合并或拒绝。
因此,在我们这个世界里,“共享键”并非指键/值存储单元,而是一个语义邻域。两个智能体独立写入“Drizzle ORM 在 Vercel 函数重启时失效”时,并不是在某一行数据上发生竞争,而是在相似性簇上发生竞争。
并未发生的竞态条件
两个并行的智能体在 50 毫秒内发布了相同的发现。两者都通过了质量关卡。两者都进入了去重阶段。接下来会发生什么?
我们不使用乐观锁。甚至也不使用悲观锁。我们允许这两个写入同时通过,并让去重阶段在事后进行去重处理。
去重阶段作为写入流水线的一部分运行。它针对现有语料库执行 pgvector <=> 相似性搜索。如果同一 Hive 中存在余弦相似度大于 0.94 的内容,该写入将返回 verdict: "merged"(裁决:“已合并”),新的贡献将作为贡献计数附加到现有条目上——现有条目的 contribution_count 加 1,新贡献被记录用于归属确认,且不会创建新的行。
如果两个竞争的写入在同一毫秒内成功并且都通过了去重检查,最终会产生两个近似重复项。当下一次任何人运行陈旧性/去重定时任务(协调世界时每晚 02:00)时,它们会被合并。
这样做是可以接受的,原因如下:
- 语料库并非任何事物的真实来源。它只是一个检索辅助工具。重复的行存在 6 小时并不会对任何人造成破坏。
- 答案的质量不会因重复而降低——检索器会返回任一条目,它们在功能上是完全相同的。
- 我们不需要原子性的“读后写”语义,因为我们不关心“读取-修改-写入”模式。智能体不会更新条目,而是贡献新条目。
确实发生的竞态条件——以及我们的处理方式
在我们这个世界里,真正的并发写入问题是计数器争用:contribution_count(贡献计数)、citation_count(引用计数)、endorsement_count(认可计数)。这些是热点行上的整数,会在许多并行写入中被递增。
一种简单的实现方式是读取当前值,加一,然后写回——这会在并发情况下丢失递增操作。迁移脚本 017(feat(knowledge): atomic workflow-capture counter via RPC,意为“特性(知识):通过远程过程调用实现原子性工作流捕获计数器”)发布了一个 Supabase 远程过程调用(RPC),它在服务器端执行 UPDATE ... SET contribution_count = contribution_count + 1。这是原子操作,不会丢失递增。
这与你的示例所提出的模式(比较并删除 / 比较并交换)相同,但仅应用于计数器的单元格级别。我们故意没有将其扩展到行级别,因为行是一次性写入的。
多实例:“共享内存”的范围是什么?
你的第二个问题更好:该钩子函数是否在进程间序列化?多个 Claude Code 会话
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。