
这次我们来看一个名为“百万行代码编排神经网络即神经符号架构”的项目。这个名字听起来很宏大它探讨的核心是如何将传统的、基于规则和符号的编程逻辑与数据驱动的神经网络进行深度融合与编排。简单来说它不是一个新的单一模型而是一种架构思想或框架旨在解决复杂推理任务中纯神经网络“黑箱”不可控与纯符号系统灵活性不足的问题。对于开发者而言这个项目的价值在于提供了一套方法论和潜在的代码库让你能够像编排乐高积木一样将神经网络模块负责感知、模式识别和符号逻辑模块负责规则、推理、知识表示组合起来共同完成一项任务。这尤其适用于需要可解释性、强逻辑约束或处理结构化知识的AI应用场景比如复杂决策系统、科学计算、代码生成与理解等。本文将带你深入理解这一架构的核心思想并基于常见的开源生态演示如何搭建一个简易的神经符号系统原型。我们会重点关注其设计理念、组件划分、以及如何利用现有工具如PyTorch、逻辑编程库进行实践。虽然它不直接涉及显存占用或一键启动但我们会给出清晰的环境配置、代码示例和验证流程确保你能跑通一个从感知到推理的完整链条。1. 核心能力速览首先我们通过一个表格快速把握“神经符号架构”的核心特征与能力边界。这有助于你判断它是否是你当前需要的技术方案。能力项说明项目类型架构范式 / 编程框架 / 方法论而非单一可执行软件包。核心目标实现神经网络感性、模式识别与符号系统理性、逻辑推理的协同工作与相互增强。关键组件神经组件CNN、RNN、Transformer等负责从原始数据图像、文本中提取特征或进行初步分类。符号组件知识库、推理引擎如Prolog风格、规则引擎负责基于逻辑规则进行演绎、推理和决策。编排层负责神经与符号组件之间的通信、数据转换如将神经网络的输出转化为逻辑命题、任务调度。输入/输出输入原始数据如图片、自然语言 领域知识/规则。输出可解释的推理结果、决策或带有置信度的符号化陈述。典型应用场景需要可解释性的AI决策医疗诊断、金融风控、复杂游戏AI如星际争霸、机器人任务规划、代码语义理解与生成、科学发现符号回归。硬件门槛取决于集成的神经组件规模。轻量级原型可在CPU上运行集成大型视觉或语言模型则需要相应GPU资源。启动/使用方式无统一启动脚本。通常需要根据设计分别启动神经模型服务如ONNX Runtime, TorchServe和符号推理服务并通过自定义的编排逻辑Python脚本连接两者。是否支持API是但需自行封装。最终的推理管道可以封装为REST API或gRPC服务。是否支持批量任务是架构设计上天然支持批处理。神经组件可批量处理数据符号组件可批量处理推理请求。开源生态依赖主流深度学习框架PyTorch, TensorFlow和逻辑编程库如pyDatalog,sympy。也有相关研究框架如DeepProbLog、Neuro-Symbolic Concept Learner等可供参考。2. 适用场景与使用边界神经符号架构并非万能银弹理解其适用与不适用场景是决定是否采用它的第一步。它非常适合以下场景需要可解释性与可信度的决策例如在信贷审批中系统不仅需要预测用户违约风险神经网络还需要给出基于明确规则如收入负债比、征信记录的拒绝或通过理由符号系统。处理混合型任务任务的一部分是感知如图像中识别物体另一部分是规划如根据物体位置规划机器人抓取路径。神经网络负责感知符号系统负责规划。知识密集型推理问答系统需要结合从文本中抽取的事实神经和常识知识库符号进行推理。例如“如果小明在北京而北京在中国那么小明在中国吗”强化学习中的抽象动作在游戏AI中神经网络可以学习低级操作移动、攻击而符号系统可以定义高级策略“如果敌人血量低于30%则优先使用终结技”。它可能不是最佳选择的情况端到端学习已足够对于图像分类、机器翻译等纯模式匹配任务端到端的深度模型通常更高效、性能更好。规则极度复杂或动态变化如果业务规则每分钟都在变维护符号知识库的成本可能过高。对延迟要求极其苛刻神经与符号组件间的多次通信和数据转换可能引入额外开销。缺乏明确的领域知识当无法将问题形式化为清晰的规则或逻辑时符号系统无从下手。合规与安全边界知识来源符号系统中嵌入的规则和知识必须来自合法、合规的领域专家或公开知识库避免引入偏见或错误逻辑。数据隐私神经组件处理的数据需遵守相关隐私法规。整个架构的数据流应设计安全。责任归属系统的最终决策应由人类监督特别是在医疗、司法等高风险领域。架构的可解释性特性应服务于审计和问责。3. 环境准备与前置条件要实践神经符号架构你需要一个能够同时运行深度学习代码和逻辑推理代码的环境。以下是通用准备清单操作系统Linux (Ubuntu 20.04/22.04 LTS推荐) macOS 或 Windows (WSL2推荐)。Linux环境在依赖管理上最顺畅。Python环境推荐使用 Python 3.8-3.10。使用conda或venv创建独立的虚拟环境是必须的。深度学习框架选择 PyTorch 或 TensorFlow。本文以 PyTorch 为例。# 例如安装PyTorch (CUDA 11.8版本) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118逻辑编程/符号计算库pyDatalog一个在Python中实现逻辑编程的库语法类似Prolog适合做知识推理。sympy符号数学库可用于公式推导、方程求解。kanren一个用于关系/逻辑编程的微型库。pip install pyDatalog sympy其他工具库Flask/FastAPI用于将来封装API服务。requests用于HTTP通信测试。numpy,pandas基础数据处理。硬件CPU现代多核处理器即可。内存建议16GB以上用于加载模型和处理中间数据。GPU可选如果集成的神经模型较大如ResNet-50, BERT则需要具备足够显存的NVIDIA GPU如RTX 3060 12G或更高。CPU推理也可行但速度较慢。磁盘空间预留至少10-20GB空间用于安装库、下载预训练模型和存储数据。4. 设计一个简易神经符号系统原型由于“百万行代码编排”是一个宏观概念我们通过一个具体的、简化的例子来揭示其核心工作流程。我们将构建一个“视觉问答”系统原型系统看到一张图片能回答关于图片内容的逻辑问题。系统设计神经组件感知使用一个预训练的图像分类模型如ResNet识别图片中的主要物体。符号组件知识推理定义一个小的知识库包含物体属性和关系如“狗是动物”“动物可以移动”。使用pyDatalog进行逻辑推理。编排层连接器将神经网络输出的物体标签如“dog”转化为逻辑事实如is_a(‘dog’, ‘animal’)送入符号推理引擎。根据用户问题如“Can it move?”触发推理并返回答案。4.1 步骤一搭建神经感知模块首先我们实现图片分类部分。# neural_perception.py import torch import torchvision.transforms as transforms from torchvision import models from PIL import Image class NeuralPerception: def __init__(self): # 加载预训练的ResNet18模型并置于评估模式 self.model models.resnet18(pretrainedTrue) self.model.eval() # ImageNet数据集的预处理转换 self.preprocess transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ]) # 加载ImageNet类别标签实际项目中需下载 # 这里用一个简化的映射示例 self.labels {0: tench fish, 1: goldfish, 2: great white shark, ... , 207: golden retriever, ... , 281: tabby cat} def predict(self, image_path): 输入图片路径返回预测的主要物体标签 image Image.open(image_path).convert(RGB) input_tensor self.preprocess(image) input_batch input_tensor.unsqueeze(0) # 增加一个批次维度 with torch.no_grad(): output self.model(input_batch) # 获取概率最高的类别索引 _, index torch.max(output, 1) predicted_label self.labels.get(index.item(), unknown object) return predicted_label # 测试神经模块 if __name__ __main__: detector NeuralPerception() result detector.predict(./test_image.jpg) # 准备一张包含狗或猫的图片 print(fNeural Perception Output: {result}) # 输出可能为: Neural Perception Output: golden retriever4.2 步骤二搭建符号推理模块接着我们使用pyDatalog建立一个简单的知识库和推理引擎。# symbolic_reasoner.py from pyDatalog import pyDatalog class SymbolicReasoner: def __init__(self): pyDatalog.clear() # 清除之前的事实和规则 # 定义逻辑变量 pyDatalog.create_terms(X, Y, Z, is_a, can, color) # 1. 定义事实 (知识库) # 物体类别关系 is_a(dog, animal) is_a(cat, animal) is_a(golden retriever, dog) is_a(tabby cat, cat) is_a(animal, living_thing) is_a(car, vehicle) is_a(vehicle, machine) # 属性与能力 can(animal, move) can(animal, breathe) can(machine, operate) color(golden retriever, golden) color(tabby cat, striped) # 2. 定义规则 (推理逻辑) # 传递性规则如果X是YY是Z那么X是Z is_a(X, Z) is_a(X, Y) is_a(Y, Z) # 继承性规则如果Y能C且X是Y那么X也能C can(X, C) is_a(X, Y) can(Y, C) def query(self, fact_pattern): 查询知识库。例如 query(is_a(X, animal)) 或 query(can(dog, Y)) try: answers pyDatalog.ask(fact_pattern).answers return list(answers) if answers else [] except Exception as e: return [fQuery error: {e}] def add_fact(self, fact): 动态添加新事实到知识库。例如 add_fact(is_a(poodle, dog)) try: pyDatalog.load(fact) return True except Exception as e: print(fFailed to add fact: {e}) return False # 测试符号模块 if __name__ __main__: reasoner SymbolicReasoner() print(Query: What are all animals?) print(reasoner.query(is_a(X, animal))) # 输出: [(dog,), (cat,), (golden retriever,), (tabby cat,)] print(\nQuery: What can a dog do?) print(reasoner.query(can(dog, Y))) # 输出: [(move,), (breathe,)] print(\nAdding a new fact: poodle is a dog.) reasoner.add_fact(is_a(poodle, dog)) print(reasoner.query(is_a(poodle, animal))) # 输出: [(poodle,)] # 通过推理得出4.3 步骤三实现编排层并完成端到端流程编排层是系统的“大脑”它负责协调神经和符号组件。这里我们实现一个简单的管道。# orchestrator.py from neural_perception import NeuralPerception from symbolic_reasoner import SymbolicReasoner import re class NeuroSymbolicOrchestrator: def __init__(self): self.neural_engine NeuralPerception() self.symbolic_engine SymbolicReasoner() # 一个简单的映射将神经网络输出的自然语言标签映射到知识库中的符号 self.label_to_symbol { golden retriever: golden retriever, tabby cat: tabby cat, car: car, # ... 可以扩展更多映射 } def _extract_object_symbol(self, neural_label): 将神经网络的输出转换为知识库符号。这是一个简化版本。 for key, symbol in self.label_to_symbol.items(): if key in neural_label.lower(): return symbol # 如果未匹配尝试提取主要名词非常简单的实现 words neural_label.split() return words[-1] if words else unknown def process_image_and_question(self, image_path, question): 端到端处理流程 1. 神经感知图片 - 物体标签 2. 符号转换标签 - 知识库符号 3. 问题解析自然语言问题 - 逻辑查询 4. 符号推理执行查询 5. 返回答案 # 1. 神经感知 print(f[Step 1] Neural Perception on {image_path}...) detected_label self.neural_engine.predict(image_path) print(f Detected: {detected_label}) # 2. 符号转换 object_symbol self._extract_object_symbol(detected_label) print(f[Step 2] Mapped to symbol: {object_symbol}) # 3. 问题解析 (极度简化的规则匹配) query None if move in question.lower(): query fcan({object_symbol}, move) elif color in question.lower(): query fcolor({object_symbol}, Y) elif what is in question.lower() or type in question.lower(): query fis_a({object_symbol}, Y) else: return fSorry, I cannot answer the question: {question}. Try asking about move, color, or what is it. # 4. 符号推理 print(f[Step 3] Executing symbolic query: {query}) answers self.symbolic_engine.query(query) # 5. 生成答案 if not answers: answer fI dont know based on my knowledge. elif query.startswith(can): answer fYes, {object_symbol} can move. if answers else fNo, {object_symbol} cannot move. elif query.startswith(color): colors [ans[0] for ans in answers] answer fThe color of {object_symbol} is {, .join(colors)}. elif query.startswith(is_a): types [ans[0] for ans in answers] answer f{object_symbol} is a {, .join(types)}. else: answer str(answers) return answer # 运行端到端测试 if __name__ __main__: orchestrator NeuroSymbolicOrchestrator() # 假设有一张金毛犬的图片 test_dog.jpg image_path ./test_dog.jpg questions [ Can it move?, What color is it?, What type of thing is it? ] for q in questions: print(f\n Question: {q} ) result orchestrator.process_image_and_question(image_path, q) print(fAnswer: {result})预期输出示例 Question: Can it move? [Step 1] Neural Perception on ./test_dog.jpg... Detected: golden retriever [Step 2] Mapped to symbol: golden retriever [Step 3] Executing symbolic query: can(golden retriever, move) Answer: Yes, golden retriever can move. Question: What color is it? ... Answer: The color of golden retriever is golden. Question: What type of thing is it? ... Answer: golden retriever is a dog, animal, living_thing.这个原型清晰地展示了神经符号架构的工作流感知神经网络- 符号化编排层- 推理符号系统- 回答编排层。5. 功能测试与效果验证对于一个神经符号系统我们需要从多个维度验证其功能是否按设计工作。5.1 测试1神经感知模块准确性目的确保神经网络能正确识别图片中的主要物体。方法使用包含明确物体的标准测试图片如ImageNet验证集图片。输入cat.jpg,car.jpg,dog.jpg。操作运行NeuralPerception.predict()。预期输出标签应与物体基本相符如‘tabby cat’, ‘car’, ‘golden retriever’。失败排查检查图片预处理尺寸、归一化是否与模型训练时一致。确认预训练模型标签文件是否正确加载。对于自定义物体可能需要微调fine-tune或更换模型。5.2 测试2符号知识库与推理正确性目的确保定义的事实和规则能产生正确的逻辑推论。方法直接对SymbolicReasoner进行多种查询。输入查询is_a(“poodle”, “animal”)在添加is_a(“poodle”, “dog”)事实后can(“cat”, X)查询猫的能力is_a(“car”, “living_thing”)应返回空因为汽车不是生物预期查询结果应符合常识和定义的知识库。失败排查检查事实和规则的语法是否正确。检查规则的逻辑如传递性、继承性是否正确定义。使用pyDatalog的pyDatalog.ask().answers打印中间结果调试。5.3 测试3端到端问答流程目的验证整个编排管道能否处理真实输入并给出合理回答。方法使用NeuroSymbolicOrchestrator.process_image_and_question。测试用例图片内容问题预期回答方向金毛犬“Can it move?”肯定回答是汽车“Can it move?”否定或未知取决于知识库是否定义车辆能‘operate’未知物体如杯子“What is it?”回答“I don‘t know”或映射失败失败排查神经到符号映射失败检查_extract_object_symbol函数可能需要更复杂的NLP技术如实体链接或更全的映射表。问题解析失败当前的简单关键词匹配非常脆弱。需要升级为更强大的自然语言理解NLU模块例如使用意图识别模型。推理结果与预期不符回溯检查知识库中相关事实和规则是否完整、正确。5.4 测试4系统扩展性动态添加知识目的验证系统能否在不重新训练神经网络的情况下通过更新知识库来获得新能力。方法运行reasoner.add_fact(‘is_a(“elephant”, “animal”)’)。运行reasoner.add_fact(‘can(“elephant”, “use_trunk”)’)。查询can(“elephant”, “move”)和can(“elephant”, “use_trunk”)。预期第一个查询应通过继承性规则返回True第二个查询应返回新添加的能力。意义这展示了符号系统的灵活性新知识可以快速注入这是纯神经网络系统难以做到的。6. 接口API封装与批量任务处理要将原型转化为可用的服务需要封装API并支持批量处理。6.1 使用FastAPI封装REST API# main_api.py from fastapi import FastAPI, File, UploadFile, HTTPException from pydantic import BaseModel from orchestrator import NeuroSymbolicOrchestrator import tempfile import os from typing import List app FastAPI(titleNeuro-Symbolic VQA API) orchestrator NeuroSymbolicOrchestrator() # 全局初始化实际生产环境需考虑并发和负载 class QuestionRequest(BaseModel): question: str app.post(/v1/query) async def query_image(file: UploadFile File(...), question: str None): 上传图片并提问 if not question: raise HTTPException(status_code400, detailQuestion parameter is required.) # 保存上传的临时文件 suffix os.path.splitext(file.filename)[-1] with tempfile.NamedTemporaryFile(deleteFalse, suffixsuffix) as tmp: tmp.write(await file.read()) tmp_path tmp.name try: answer orchestrator.process_image_and_question(tmp_path, question) finally: os.unlink(tmp_path) # 清理临时文件 return {image: file.filename, question: question, answer: answer} app.post(/v1/batch_query) async def batch_query(requests: List[dict]): 批量处理请求。每个请求是 {image_path: /path/to/img.jpg, question: ...} results [] for req in requests: img_path req.get(image_path) ques req.get(question) if not os.path.exists(img_path): results.append({error: fFile not found: {img_path}}) continue try: answer orchestrator.process_image_and_question(img_path, ques) results.append({image: img_path, question: ques, answer: answer}) except Exception as e: results.append({image: img_path, question: ques, error: str(e)}) return {batch_results: results} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)启动API服务python main_api.py服务将在http://127.0.0.1:8000启动。访问http://127.0.0.1:8000/docs可查看交互式API文档。6.2 批量任务处理建议对于大规模任务仅靠单线程API是不够的。任务队列使用CeleryRedis/RabbitMQ。将图片路径和问题作为任务发布到队列由多个工作进程并发处理。输入/输出管理设计清晰的目录结构如./batch_input/,./batch_output/。使用CSV或JSON文件定义任务清单。输出结果保存为结构化的JSON文件包含输入、输出、时间戳和状态。示例批量处理脚本# batch_processor.py import json import concurrent.futures from orchestrator import NeuroSymbolicOrchestrator def process_single_task(task, engine): img_path task[image_path] question task[question] try: answer engine.process_image_and_question(img_path, question) return {task_id: task.get(id), status: success, answer: answer} except Exception as e: return {task_id: task.get(id), status: failed, error: str(e)} if __name__ __main__: # 加载任务列表 with open(tasks.json, r) as f: tasks json.load(f) # 初始化引擎每个进程可独立初始化避免共享状态问题 orchestrator NeuroSymbolicOrchestrator() # 使用线程池并行处理 results [] with concurrent.futures.ThreadPoolExecutor(max_workers4) as executor: future_to_task {executor.submit(process_single_task, task, orchestrator): task for task in tasks} for future in concurrent.futures.as_completed(future_to_task): results.append(future.result()) # 保存结果 with open(results.json, w) as f: json.dump(results, f, indent2) print(fProcessed {len(results)} tasks.)7. 资源占用与性能观察神经符号系统的性能瓶颈通常出现在神经组件。显存占用观察工具在Linux下使用nvidia-smi在Python中可使用torch.cuda.memory_allocated()。主要占用者加载的神经网络模型如ResNet-50约100MB大型语言模型可达数GB。符号推理引擎如pyDatalog内存占用通常很小。优化方向使用更小的模型如MobileNet, EfficientNet。使用模型量化Quantization技术。在CPU上运行神经组件速度慢但无显存压力。推理延迟神经部分图片前向传播通常在毫秒到百毫秒级GPU。符号部分逻辑查询通常在微秒到毫秒级。编排开销数据序列化/反序列化、进程间通信如果组件是独立服务。这是主要的额外开销来源。优化方向将神经组件部署为高性能推理服务如TorchServe, Triton Inference Server。使用gRPC替代REST进行组件间通信以减少延迟。对神经组件的结果进行缓存如果相同图片被多次查询。CPU/内存符号推理和编排逻辑会消耗CPU和内存但相对于现代神经模型这部分开销通常可以忽略。批量处理时需注意Python进程的内存增长。8. 常见问题与排查方法在开发和运行神经符号系统时你可能会遇到以下典型问题。问题现象可能原因排查方式解决方案神经模块预测标签始终错误1. 图片预处理与模型训练不一致。2. 模型未置于eval模式。3. 标签映射文件错误或缺失。1. 检查预处理步骤尺寸、归一化值。2. 检查model.eval()是否调用。3. 打印原始输出logits看最高概率是否合理。1. 严格对齐预处理。2. 确保推理时无梯度计算(torch.no_grad)。3. 下载正确的标签文件。符号推理查询无结果或错误1.pyDatalog事实/规则语法错误。2. 查询中的变量名未提前创建。3. 逻辑规则定义有误如循环依赖。1. 逐行检查加载的事实和规则字符串。2. 使用pyDatalog.create_terms确保所有谓词和变量已定义。3. 简化规则分步测试。1. 使用简单的原子事实测试。2. 参考pyDatalog官方文档和示例。编排层映射失败物体符号为unknown神经输出标签与label_to_symbol映射表不匹配。打印detected_label检查其字符串格式。1. 扩展映射表。2. 使用更鲁棒的映射方法如基于词向量相似度。API服务调用超时或崩溃1. 神经模型加载耗时过长。2. 单次推理内存泄漏。3. 并发请求过多。1. 查看服务启动日志和请求日志。2. 使用htop或docker stats监控内存。3. 使用压力测试工具如locust。1. 实现模型预热启动时加载。2. 检查代码确保无全局变量累积。3. 增加服务实例使用负载均衡。批量任务处理速度慢1. 单线程顺序处理。2. 每任务重复加载模型。3. I/O瓶颈频繁读图。1. 分析代码耗时使用cProfile。2. 观察磁盘I/O和CPU使用率。1. 采用多进程/多线程注意GIL。2. 共享模型实例注意线程安全。3. 使用异步I/O或提前将图片加载到内存。系统无法回答新类型问题问题解析模块关键词匹配覆盖度不足。收集未回答的问题样例分析模式。升级问题解析模块可引入轻量级NLU模型如Rasa NLU或基于BERT的意图分类。9. 最佳实践与使用建议基于原型开发经验以下建议有助于构建更健壮、可维护的神经符号系统。组件解耦与接口标准化将神经组件、符号组件、编排层定义为独立的微服务。使用Protobuf定义清晰的数据交换接口。这便于单独升级、替换和扩展每个组件。知识库的版本化管理将符号知识库事实和规则用版本控制系统如Git管理。可以区分通用常识库和领域专用知识库。可解释性日志在关键决策点记录日志。例如记录神经网络输出的原始置信度、符号转换结果、触发的推理规则、最终答案。这对调试和系统审计至关重要。持续集成与测试为神经模块、符号模块和端到端流程编写单元测试和集成测试。确保知识库更新或模型升级后核心功能依然正确。处理不确定性神经网络的输出具有概率性。在编排层可以设计机制来处理低置信度的情况例如当分类置信度低于阈值时返回“不确定”或触发人工审核流程。安全与合规神经模型确保使用的预训练模型和训练数据来源合法。知识库确保注入的规则和事实符合伦理、法律和业务规范定期审核。输入过滤对API接收的图片和文本进行安全检查如恶意文件、注入攻击。从原型到生产性能用更高效的推理引擎如ONNX Runtime, TensorRT替换原型中的PyTorch直接推理。可扩展性使用Docker容器化每个组件并用Kubernetes编排。监控引入APM工具监控服务健康、延迟和错误率。10. 总结与下一步“百万行代码编排神经网络即神经符号架构”所描绘的愿景是通过精心的软件工程将数据驱动的学习能力与符号化的推理能力深度融合。本文通过一个具体的视觉问答原型拆解了其核心三要素神经感知、符号推理和智能编排。这个架构最值得尝试的点在于它打破了端到端神经网络的“黑箱”让AI系统的决策过程变得可追溯、可解释、可干预。对于需要将AI嵌入到高可靠性、高合规性业务流程中的开发者来说这是一条必经之路。如果你刚开始探索建议按以下路径进行第一步跑通本文的原型代码理解数据从“像素”到“符号”再到“答案”的完整流转。第二步替换更强的神经组件。例如将图像分类器换成目标检测模型YOLO使其能识别图片中的多个物体及其关系。第三步强化符号组件。引入更丰富的知识图谱如ConceptNet和更强大的推理引擎。第四步优化编排层。用正式的NLU模块替换简单的关键词匹配实现更灵活的自然语言交互。最容易踩的坑是神经与符号之间的“语义鸿沟”——如何准确地将神经网络输出的分布式表示映射到符号逻辑的离散空间。这需要精心设计映射规则甚至引入“神经符号接口”层进行学习。下一步你可以探索更前沿的框架如IBM的Neuro-Symbolic Concept Learner、微软的LNN (Logical Neural Networks)或关注将大型语言模型LLM作为“软”符号推理器的研究。神经符号AI的道路依然漫长但它的工程实践已经开始并且为解决下一代可信AI的挑战提供了切实可行的工具箱。