## 连锁互锁:确保安全与顺序
**连锁互锁**是一种安全机制,在系统的两个部分之间建立相互依赖关系,只有在满足特定条件后才能进行操作。这些可以是机械的、电气的,甚至是计算机化的,旨在保护操作人员和设备免受损坏。
一个常见的例子是**钥匙锁连锁互锁**,用于工业环境。该系统要求操作人员遵循精确的顺序,释放和取回钥匙以访问和控制机器——确保在进行维护(例如电窑)之前隔离电源。
连锁互锁不仅限于工业应用。汽车方向盘使用钥匙激活的机械连锁互锁,而发电机转换开关可以防止危险的反向馈电到电网。更高级的系统包括用于机器和安全设置(如使用门或生物识别访问的“人困笼”)的双按钮启动。
即使是“可绕过”的连锁互锁也存在,允许合格人员使用工具绕过安全措施,电压高达600伏。连锁互锁还在计算机体系结构中发挥作用,防止处理流水线中的数据危害。最终,有效的连锁互锁需要操作人员的配合,并解决在压力下绕过安全协议的倾向。
## 在模糊测试中接口异步 Rust 与同步 C++
Antithesis 使用确定性虚拟机(“Determinator”)和模糊测试器来查找软件中的错误。模糊测试器最初用单线程 C++ 编写,通过发送控制信号来控制 Determinator。为了利用 Rust 的优势来实现新的控制策略,他们将异步、多线程 Rust 代码与现有的 C++ 核心集成。这带来了由于同步/异步不匹配和线程安全问题而产生的挑战。
该解决方案利用 `cxx` crate 进行互操作,定义 Rust 暴露的 C++ 类型,反之亦然。最初,管理跨线程的 C++ 对象生命周期由于 C++ 非线程安全的引用计数而证明很困难。这通过 `CppOwner` 和 `CppBorrower` 结构体来解决,后来使用 `SendWrapper` 进行改进,以安全地将 C++ 对象跨线程传递,并将删除推迟到主线程。
第二个挑战来自于 C++ 函数本身并非线程安全的。他们引入了 `SYNC` 和 `UNSYNC` 宏来对 C++ 方法进行分类,相应地标记不安全的 Rust 函数,并使用 `MainThreadToken` 提供安全的替代方案,以确保在主线程上执行。这种方法将线程安全的责任转移到 C++ 侧进行定义,同时允许 Rust 编译器强制正确的使用。
最终设计优先考虑“Rust 风格”的方法,利用编译器进行安全检查,并允许其他开发人员用于生产。后续文章详细介绍了这些原语的正式验证。
## 从泥土到现代墙壁:建筑的历史
尽管《我的世界》存在局限性,但用泥土建造的想法并非牵强——历史上,我们确实这样做过!古老的编织枝条和泥土的土坯墙结构,展示了一种6000年前的墙体建造技术。这演变成了石膏板和木条,这是一个劳动密集且容易开裂、难以悬挂物品的过程。
20世纪初,石膏板(石膏板)兴起,这在建筑领域是一项变革。与它的前身不同,石膏板的生产旨在保证一致性和易于安装。这种“不可食用的冰淇淋三明治”(由石膏和纸制成)提供了一个坚固、光滑的表面,简化了从绘画到悬挂装饰的各个方面。
石膏板还在墙内释放了空间,以改善隔热和布线。虽然最初容易受水损坏,但创新仍在继续,产生了防霉、防火,甚至带有集成传感器的“智能”石膏板。尽管看似平凡,但墙体结构的演变凸显了重要的建筑进步往往不为人注意,默默地改善着我们的日常生活。
## 多语言LLM安全护栏评估:摘要
有效评估大型语言模型 (LLM) 需要根据特定语境、语言、任务和领域进行调整。随着开发者越来越依赖定制基准和“安全护栏”——确保安全且符合语境输出的工具,一个关键问题出现了:这些安全护栏是否在不同语言中保持一致性?
本研究结合了Mozilla的多语言AI安全评估和开源`any-guardrail`框架,使用模拟来自寻求庇护者的实际问题的情景,并将其翻译成波斯语,来调查安全护栏的行为。对三种安全护栏(FlowJudge、Glider 和 AnyLLM)进行了测试,分别使用英语和波斯语策略,并将它们的性能与人工评估进行比较。
结果显示存在显著的不一致性。仅基于策略语言(英语 vs. 波斯语),Glider 和 FlowJudge 显示出很大的分数差异,即使语义含义相同。AnyLLM 表现出分类差异。定性分析强调了安全护栏的“幻觉”——捏造信息——和有偏差的假设,尤其是在使用波斯语策略时。
该研究强调需要具有事实核查搜索能力的护栏、为了可靠性进行多次评估,以及针对特定用例(包括语言特定示例)定制的策略。最终,确保对难民等弱势群体的AI安全,需要超越以英语为中心的基准,并优先进行上下文感知、多语言评估。