opennars
基于非公理化推理理论的通用人工智能引擎,支持知识学习、逻辑推理与目标规划
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于非公理化推理理论的通用人工智能引擎,支持知识学习、逻辑推理与目标规划
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你可能见过很多"通用人工智能(AGI)"的 Demo,但大多数只是在特定任务上表现惊艳——换个场景就歇菜。OpenNARS 走的是完全不同的路线:它不是针对某个任务的专用工具,而是一个能够在不确定环境中持续学习、推理和规划的通用智能系统。
传统 AI 系统有一个致命弱点——依赖完美的前提假设。一个象棋 AI 默认棋规是完备的,一个问答系统假设知识库是准确的。但现实世界没有完美假设:信息不完整、来源不可靠、结论随时可能被推翻。
OpenNARS 的理论基础来自天普大学(Temple University)计算机系教授 裴逸(Pei Wang) 提出的非公理化推理(Non-Axiomatic Reasoning, NAR) 理论。该理论的核心主张是:智能不是完美推理,而是资源有限的系统在不完备信息下做出合理决策的能力。
裴逸从 1990 年代开始这项研究,2006 年左右开源社区接过接力棒,由 Patrick Hammer、Tony Lofthouse 等核心贡献者持续维护至今。2016 年,OpenNARS 的实现论文发表在 AGI 国际会议(AGI-16)上,成为 AGI 领域的标志性开源项目。
类比理解:传统 AI 像一个在标准化考场里考高分的学生(依赖固定规则和充足知识),而 OpenNARS 像一个在陌生城市里靠有限线索导航的旅行者——没有地图,但有常识、有学习能力、会从错误中修正路线。
OpenNARS 的技术实现围绕NAL(Narsese Acquisition Language) 形式语言展开,这是一套为非公理化推理专门设计的表现语言(representation language)。
NAL 使用类似 <A --> B> 的结构表达关系,例如:
<鸟 --> 动物> 表示"鸟是动物的一种"(继承关系)<{Swan} --> [黑白]> 表示"天鹅具有黑白属性"(属性关系)<乒乓球 --> [运动, 竞技, 室内]> 表示"乒乓球具有多种属性"这种语法允许表达复合概念(And、Or、Difference 等)、时间关系(先后、同时、期间)以及概率真值。关键在于:每个陈述都附有一个置信度(confidence),而不是非真即假的布尔值。
OpenNARS 的推理引擎由三个核心模块组成:
1. Memory(记忆模块)
记忆模块存储一组"概念(Concept)",每个概念对应一个 Term(项)。概念包含该 Term 的所有相关信念(belief)、目标(goal)和问题(question)。记忆系统还维护一个任务缓冲区(buffer),新的输入首先进入缓冲区,等待推理引擎调度处理。
所有选择过程都是概率性的:每个任务、信念或概念都附带优先级值(priority),系统根据优先级加权概率决定当前周期处理哪个任务。这模拟了人类注意力的有限性——一次只能专注少数几件事。
2. Inference Engine(推理引擎)
核心推理规则定义在 RuleTables.java、LocalRules.java、StructuralRules.java、CompositionalRules.java、SyllogisticRules.java 等文件中。NAL 定义了 9 个推理级别(NAL-1 到 NAL-9),每升一级支持更复杂的推理形式:
| NAL 级别 | 推理类型 | 示例 |
|---|---|---|
| NAL-1 | 命题逻辑 | 陈述与否定 |
| NAL-2 | 继承关系 | 鸟 → 动物 |
| NAL-3 | 时间推理 | 先后、同时 |
| NAL-4 | 空间推理 | 位置关系 |
| NAL-5 | 事件推理 | 因果链 |
| NAL-6 | 语义复合 | And/Or 组合 |
| NAL-7 | 语法复合 | 元规则 |
| NAL-8 | 量词推理 | 全称/存在 |
| NAL-9 | 混合高阶 | 综合推理 |
3. Control Mechanism(控制机制)
控制机制负责协调推理过程,核心类 GeneralInferenceControl.java 负责:
temporal 包下的规则(TemporalInferenceControl.java、TemporalRules.java)专门处理时间维度的推理——这是很多 AGI 系统忽略但至关重要的能力。
项目代码位于 src/main/java/org/opennars/,共 18 个 Java 包:
/) 、事件输出(Events)^say、^want等)和可扩展操作符接口依赖极少:仅 junit:junit、commons-lang3、guava 三个第三方库,保持了核心逻辑的高度自洽。
OpenNARS 不是一个静态的"推理机",它设计为嵌入式认知引擎:
opennars-lab(实验室版):提供完整 GUI,包括:
opennars-applications:面向实际应用,如与机器人 Henry 集成,实现感知-推理-行动闭环。
opennars-gui:独立的 GUI 前端,用于人机交互和系统监控。
所有形态共享同一个 Nar.java 核心 API,开发者可以通过 addInput("陈述") 直接向系统注入知识和问题。
必须承认,OpenNARS 并非没有批评:
尽管如此,OpenNARS 在 AGI 探索路线中占据独特位置:它是唯一一个持续维护超过 10 年、理论与代码完整对应的非符号主义 AGI 开源实现。
近年来 NARS 思想对多个研究领域产生了影响:
如果你对"AGI 到底怎么实现"这个问题感到好奇,OpenNARS 是一个值得深入研究的窗口——它代表了一种严肃的、非炒作的路线。