尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

具身智能系统架构:钉核与上下文的设计原理与工程实践

具身智能系统架构:钉核与上下文的设计原理与工程实践 1. 项目概述从“钉核”与“上下文”看MiniClaw的架构哲学最近在深入研读OpenClaw具身硬件项目中的MiniClaw部分特别是关于“钉核”和“上下文”这两个核心概念的文档。这不仅仅是两个技术名词它们共同构成了MiniClaw作为智能体运行框架的骨架与灵魂。对于任何想要深入理解或动手搭建一个可靠、高效具身智能系统的开发者来说吃透这两部分就等于拿到了打开系统设计大门的钥匙。简单来说“钉核”是MiniClaw的稳定基石与执行引擎。你可以把它想象成一个高度专业化、永不宕机的“中央调度与执行单元”。它负责接管所有需要确定性、高可靠性和实时响应的任务比如硬件的直接控制、传感器数据的实时处理、安全规则的强制执行等。它确保了无论上层的AI模型如何“天马行空”底层的执行永远是稳定、可控的。而“上下文”则是MiniClaw的“记忆”与“情境感知”系统。它远不止是大语言模型LLM的那个上下文窗口。在MiniClaw的体系里上下文是一个结构化的、动态流动的数据集合它包含了智能体感知到的环境信息如摄像头画面、传感器读数、历史交互记录、当前任务目标、可用的技能Skills与规则Rules甚至包括与其他智能体或服务的通信状态。这个上下文是驱动AI模型做出合理决策的“燃料”和“地图”。为什么要把这两者放在一起讲因为它们的协作模式定义了MiniClaw的工作流钉核基于稳定的上下文做出可靠执行而上下文的更新又依赖于钉核执行后反馈的现实世界结果。这种设计巧妙地将AI的“思考”与硬件的“行动”解耦又通过上下文紧密耦合是实现“具身智能”从虚拟对话走向物理交互的关键架构。2. 核心概念深度解析钉核与上下文的角色与交互2.1 钉核确定性执行的守护神“钉核”这个概念非常形象它意味着将系统最核心、最不能出错的部分像钉子一样“楔入”底层牢牢固定。在MiniClaw的实现中钉核通常不是一个独立的物理芯片而是一个在软件架构上被严格隔离和优先保障的逻辑层或进程。2.1.1 钉核的核心职责硬件抽象与驱动管理钉核直接与机器人硬件如电机、舵机、摄像头、各类传感器的驱动程序交互。它提供一套统一的、稳定的API给上层隐藏不同硬件厂商、不同通信协议如UART, I2C, PWM的复杂性。例如上层只需要发送“机械爪移动到50%开度”的指令钉核负责将其转换为具体的PWM信号脉宽并发送给舵机控制器。实时控制与安全监控这是钉核的“生命线”功能。它运行着高优先级的控制循环例如一个100Hz的PID控制循环确保机械臂的运动平滑、稳定。同时它持续监控关键安全参数如关节角度极限、电机电流、温度。一旦检测到异常如电流过大可能意味着卡住钉核会立即触发安全规则如断电、回退到安全位置而无需等待上层AI模型的缓慢响应。基础技能Primitive Skills的执行钉核内置了一系列原子化的、不可再分的基础动作我们称之为“基础技能”。比如“移动关节A到角度X”、“读取力传感器Y的值”、“以速度Z直线移动”。这些技能是构建更复杂任务如“抓取杯子”的基石。钉核确保这些基础技能的执行是精确且可重复的。上下文数据的采集与预处理钉核是原始环境数据的“第一入口”。它从传感器读取数据可能是原始的ADC值、字节流进行必要的预处理如滤波、校准、坐标转换然后将其格式化注入到系统的“上下文”中供决策层使用。2.1.2 钉核的设计考量与实现要点在设计钉核时有几个关键决策点编程语言与运行时为了追求极致性能和确定性钉核部分常用C、C或Rust编写甚至直接运行在实时操作系统RTOS或利用Linux的实时内核补丁PREEMPT_RT上。这与上层可能使用Python、Node.js的AI决策层形成鲜明对比。通信机制钉核与上层通常称为“决策核”或“AI核”需要通过高效的进程间通信IPC进行数据交换。常见选择包括共享内存用于高频数据流如视频、ZeroMQ或gRPC用于指令与状态。文档中提到的“上下文数据流图”其源头往往是钉核内的数据发布者。容错与恢复钉核必须具备“看门狗”机制防止自身死锁。同时它需要设计状态快照和恢复逻辑以便在异常重启后能快速恢复到安全可控的状态而不是让机器人“抽风”。注意不要把钉核等同于整个机器人的“主板”或“主控”。它是一个逻辑概念。在资源受限的MiniClaw上钉核的功能可能和一个实时任务运行在同一块微控制器如ESP32、STM32上而在更复杂的系统里它可能是一个独立的实时计算单元。2.2 上下文智能体的动态感知内存如果说钉核是“小脑”负责协调运动那么上下文就是“大脑皮层”负责整合感知、记忆和规划。在MiniClaw的架构中上下文是一个中心化的、结构化的数据存储与分发系统。2.2.1 上下文的层次与内容上下文并非一团乱麻的数据而是有清晰结构的环境上下文这是最动态的部分由钉核实时更新。包括感知数据摄像头帧可能附带物体检测结果、激光雷达点云、关节编码器读数、力/力矩传感器数据、麦克风音频流等。本体状态机器人自身所有关节的角度、速度、扭矩底盘的位置、朝向、电量执行器如夹爪的当前开合状态。任务上下文描述智能体当前正在做什么。目标当前需要完成的高级目标如“将红色积木放到蓝色盒子内”。计划为达成目标而分解出的步骤序列可能由AI模型生成如“1. 识别红色积木2. 移动到积木上方3. 抓取4. 识别蓝色盒子...”。当前步骤正在执行计划中的哪一步。历史上下文记录过去的交互。对话历史与用户或其他智能体的对话记录。行动历史执行过的基础技能序列及其结果成功/失败附带传感器反馈。关键事件如任务开始、结束、遇到错误、安全规则触发等。技能与规则上下文描述智能体“能做什么”和“不能做什么”。技能清单所有已注册、可调用的技能Skill的描述、参数接口、前置条件。这就像是机器人的“技能库”。规则清单所有激活的规则Rule包括安全规则如“关节角度不得超过±90度”、行为约束规则如“移动速度不得超过0.5m/s”和业务逻辑规则。规则由钉核或专门的规则引擎监控。2.2.2 上下文的管理与流动上下文不是静态数据库而是一个数据流图。文档中提到的“上下文数据流图的分解”正是其精髓。生产者钉核是主要的生产者生产环境状态AI模型、用户输入、其他服务也可以是生产者生产任务目标、对话内容。消费者AI决策模型是核心消费者它读取上下文来理解现状并做出决策。钉核本身也会消费一部分上下文如当前任务目标来调整其控制策略。可视化调试工具也是消费者用于监控系统状态。存储与同步上下文需要一个高效的存储后端。对于MiniClaw这类系统可能会采用混合模式高频的传感器数据放在内存或Redis中历史记录和元数据存入SQLite或轻量级数据库。关键是要保证生产者和消费者之间数据的一致性和时效性。2.2.3 与大模型上下文窗口的关系这是一个容易混淆的点。像Claude、GPT这类大模型有自己的“上下文窗口”如128K tokens这是一个技术限制指模型一次性能“看到”多长的文本。 MiniClaw的“上下文”是一个业务概念它包含的信息量可能远超任何大模型的上下文窗口。因此在将上下文传递给大模型做决策前需要一个关键的步骤上下文摘要与裁剪。系统不会把所有的传感器原始数据和全部历史记录都塞给模型而是根据当前任务从全局上下文中提取最相关的片段。将非文本数据如图像、数值转换成模型能理解的描述性文本或结构化数据。将冗长的历史压缩成摘要。最终组装成一个精炼的、在模型上下文窗口长度内的提示词Prompt送给大模型。这本身就是“上下文工程”的核心工作。3. 实操解析构建MiniClaw的钉核与上下文系统理解了概念我们来看如何动手。假设我们要为一个简单的MiniClaw机械臂带一个摄像头和一个夹爪搭建这套系统。3.1 钉核的实现方案选型与搭建对于资源有限的MiniClaw我们可能采用单板计算机如树莓派作为主控。钉核功能可以通过一个高优先级的实时进程来实现。3.1.1 硬件抽象层实现首先我们需要一个硬件抽象层HAL来统一管理设备。这里可以用一个Python类虽然Python非实时但通过优化和合理设计可以满足许多教育或中低速场景或C程序来实现。# 示例简化的硬件抽象层类 (hal.py) import time from some_motor_lib import MotorDriver from some_camera_lib import Camera from some_sensor_lib import ForceSensor class MiniClawHAL: def __init__(self): self.joint_motors [MotorDriver(pin12), MotorDriver(pin13)] # 两个关节 self.gripper_servo MotorDriver(pin18, is_servoTrue) self.camera Camera(resolution(640, 480)) self.force_sensor ForceSensor(i2c_bus1, address0x28) self._safety_limits {joint0: (-90, 90), joint1: (0, 180), gripper: (0, 100)} def set_joint_angle(self, joint_id, angle_deg): 设置关节角度内部包含安全检查和运动插值 # 1. 安全检查 if not self._safety_limits[jointstr(joint_id)][0] angle_deg self._safety_limits[jointstr(joint_id)][1]: raise ValueError(fJoint {joint_id} angle {angle_deg} out of safety limits!) # 2. 转换为电机控制信号如PWM占空比 pwm_value self._angle_to_pwm(joint_id, angle_deg) # 3. 平滑移动可选在钉核中实现简单插值 self._smooth_move_to(joint_id, pwm_value) # 4. 更新内部状态 self.current_angles[joint_id] angle_deg def get_camera_frame(self): 获取一帧图像并做简单预处理如裁剪、颜色转换 raw_frame self.camera.capture() processed_frame self._preprocess_frame(raw_frame) # BGR转RGB 尺寸调整等 return processed_frame def get_force_reading(self): 读取力传感器值并做滤波 raw self.force_sensor.read() filtered self._low_pass_filter(raw) # 低通滤波去除噪声 return filtered def _smooth_move_to(self, joint_id, target_pwm): # 实现一个简单的线性插值让运动更平滑避免冲击 current self.joint_motors[joint_id].get_current_pwm() steps 10 for i in range(steps): interp_pwm current (target_pwm - current) * (i1) / steps self.joint_motors[joint_id].set_pwm(interp_pwm) time.sleep(0.01) # 10ms间隔构成一个粗略的100Hz控制环3.1.2 钉核主循环与通信钉核需要一个主循环不断执行1) 读取传感器2) 更新上下文3) 检查并执行来自上层的指令4) 执行安全监控。# 示例钉核主进程 (pin_core.py) import json import zmq # 使用ZeroMQ进行通信 from hal import MiniClawHAL from context_manager import ContextManager # 假设有一个上下文管理器 class PinCore: def __init__(self): self.hal MiniClawHAL() self.context ContextManager() # ZeroMQ设置用于接收决策核指令 self.context_zmq zmq.Context() self.socket self.context_zmq.socket(zmq.SUB) self.socket.connect(tcp://localhost:5555) # 订阅决策核指令 self.socket.setsockopt_string(zmq.SUBSCRIBE, ) # 用于发布上下文数据的socket (PUB) self.pub_socket self.context_zmq.socket(zmq.PUB) self.pub_socket.bind(tcp://*:5556) def run(self): print(PinCore started.) while True: # 1. 读取所有传感器数据 frame self.hal.get_camera_frame() force self.hal.get_force_reading() joints self.hal.get_all_joint_angles() # 2. 更新上下文存储本地 env_ctx { timestamp: time.time(), camera_frame: frame, # 注意实际传输可能用共享内存传递大图像数据 force_sensor: force, joint_states: joints } self.context.update(environment, env_ctx) # 3. 发布上下文更新到网络供决策核消费 ctx_message { type: environment_update, data: {force: force, joints: joints} # 图像可能单独通道传输 } self.pub_socket.send_string(json.dumps(ctx_message)) # 4. 非阻塞检查是否有新指令 try: cmd self.socket.recv_string(zmq.NOBLOCK) command json.loads(cmd) self._execute_command(command) except zmq.Again: pass # 没有新指令 # 5. 安全监控独立于指令的高优先级检查 self._safety_monitor() time.sleep(0.01) # 主循环频率 ~100Hz def _execute_command(self, cmd): 执行来自决策核的指令 if cmd[action] set_joint_angle: self.hal.set_joint_angle(cmd[joint], cmd[angle]) # 执行后将结果反馈回上下文 self.context.update(last_action, {action: cmd, result: success, timestamp: time.time()}) elif cmd[action] open_gripper: self.hal.set_gripper(100) # 全开 # ... 其他命令处理 def _safety_monitor(self): 安全规则检查 currents self.hal.get_motor_currents() for i, current in enumerate(currents): if current SAFETY_CURRENT_LIMIT: print(fEMERGENCY STOP! Motor {i} overcurrent: {current}A) self.hal.emergency_stop() # 将安全事件写入上下文 self.context.update(safety_events, {type: overcurrent, motor: i, current: current}) # 可以在这里触发警报或通知上层这个简化的钉核进程实现了数据采集、上下文更新、指令执行和安全监控的闭环。它通过ZeroMQ与决策核解耦确保了自身运行的独立性和稳定性。3.2 上下文系统的设计与集成上下文系统需要一个管理器来协调数据的存储、检索和分发。3.2.1 上下文管理器设计# 示例上下文管理器 (context_manager.py) import threading import time from collections import deque import numpy as np class ContextManager: def __init__(self, max_history_len100): # 上下文存储字典 self._store { environment: {}, # 环境状态 task: {}, # 任务状态 history: deque(maxlenmax_history_len), # 交互历史 skills: [], # 可用技能列表 rules: [] # 激活规则列表 } self._lock threading.Lock() # 保证线程安全 def update(self, domain, data): 更新某个领域的上下文 with self._lock: if domain history: self._store[domain].append({time: time.time(), data: data}) elif isinstance(self._store.get(domain), dict): self._store[domain].update(data) else: self._store[domain] data def get(self, domain, keyNone): 获取上下文 with self._lock: if domain not in self._store: return None if key is None: return self._store[domain].copy() # 返回副本 return self._store[domain].get(key) def get_relevant_for_task(self, task_description): 根据任务描述提取最相关的上下文片段上下文工程的核心 # 这是一个简化示例。实际中这里会实现更复杂的检索和摘要逻辑。 relevant_info {} # 1. 总是包含当前环境关键状态 relevant_info[current_state] { joint_angles: self.get(environment, joint_states), force: self.get(environment, force_sensor) } # 2. 从历史中提取与任务相关的最近几次行动 history list(self._store[history]) recent_actions [h for h in history[-5:] if action in h.get(data, {})] # 取最近5个动作 relevant_info[recent_actions] recent_actions # 3. 获取与任务可能相关的技能描述 task_keywords extract_keywords(task_description) relevant_skills [s for s in self._store[skills] if any(kw in s[description] for kw in task_keywords)] relevant_info[available_skills] relevant_skills[:3] # 最多返回3个最相关的 return relevant_info3.2.2 决策核如何利用上下文决策核运行AI模型的部分通过订阅钉核发布的上下文更新并结合自身逻辑生成控制指令。# 示例决策核片段 (decision_core.py) import zmq import json from openai import OpenAI # 或使用其他LLM API/本地模型 class DecisionCore: def __init__(self, llm_client): self.llm llm_client self.context {} # ZeroMQ订阅上下文更新 self.context_zmq zmq.Context() self.sub_socket self.context_zmq.socket(zmq.SUB) self.sub_socket.connect(tcp://localhost:5556) self.sub_socket.setsockopt_string(zmq.SUBSCRIBE, ) # ZeroMQ发布指令给钉核 self.pub_socket self.context_zmq.socket(zmq.PUB) self.pub_socket.bind(tcp://*:5555) def listen_and_think(self): 监听上下文并思考决策 while True: # 1. 接收最新的上下文更新 try: msg self.sub_socket.recv_string(zmq.NOBLOCK) update json.loads(msg) self._update_internal_context(update) except zmq.Again: pass # 2. 检查是否有新任务或需要决策 current_task self.context.get(task, {}).get(current) if current_task and self._is_task_step_finished(): # 3. 为LLM准备提示词注入相关上下文 prompt self._construct_prompt(current_task) # 4. 调用LLM获取下一步行动 response self.llm.chat.completions.create( modelgpt-4, messages[{role: user, content: prompt}] ) llm_output response.choices[0].message.content # 5. 解析LLM输出为结构化指令 command self._parse_llm_output(llm_output) # 6. 发送指令给钉核执行 self.pub_socket.send_string(json.dumps(command)) # 7. 更新任务上下文记录已执行步骤 self._update_task_progress(command) time.sleep(0.1) # 决策频率可以比钉核慢 def _construct_prompt(self, task): 构建给LLM的提示词这是上下文工程的关键 # 从全局上下文管理器中获取与当前任务最相关的信息 relevant_ctx context_manager.get_relevant_for_task(task[description]) prompt_template f 你是一个控制机械臂的AI。请根据以下情境决定下一步做什么。 **当前任务目标**{task[description]} **机器人当前状态** - 关节角度{relevant_ctx[current_state][joint_angles]} - 夹爪受力{relevant_ctx[current_state][force]} N - 摄像头画面中前方有一个红色方块和一个蓝色杯子。 **最近执行的动作** {format_history(relevant_ctx[recent_actions])} **你可以使用的技能** {format_skills(relevant_ctx[available_skills])} **安全规则**移动速度需平缓夹爪受力超过5N时需停止并回退。 请输出一个JSON对象包含下一步要执行的技能名称和参数。例如{{skill: move_to_position, params: {{x: 100, y: 50, z: 0}} }} 只输出JSON不要有其他文字。 return prompt_template这个流程清晰地展示了钉核提供稳定、实时的环境数据到上下文决策核从上下文中提取关键、相关的信息构造提示词给大模型大模型基于此做出决策决策核将其解析为具体指令发给钉核执行执行结果再作为历史更新回上下文。形成了一个完整的“感知-思考-行动”循环。4. 常见问题、调试技巧与进阶思考在实际搭建和运行这套系统时你会遇到各种各样的问题。以下是一些典型问题及解决思路。4.1 钉核相关典型问题问题1钉核控制循环不稳定机器人运动抖动。可能原因控制循环频率不稳定或过高导致计算超时电机/舵机控制指令发送间隔不均匀PID参数未调好。排查与解决测量循环时间在钉核主循环开始和结束处打时间戳计算实际循环周期。确保它稳定且符合预期如10ms±1ms。使用实时调度在Linux上可以使用os.sched_setscheduler将钉核进程设置为SCHED_FIFO实时优先级。但需谨慎设置不当可能导致系统锁死。检查硬件通信确保与电机驱动板的通信如UART、PWM没有受到其他进程的干扰。可以考虑给钉核进程独占一个CPU核心使用taskset命令。调整控制参数降低控制频率或者优化控制算法。对于许多舵机50Hz20ms间隔的控制频率已经足够平滑。问题2钉核与决策核通信延迟大导致指令响应慢。可能原因ZeroMQ/TCP通信存在缓冲网络序列化/反序列化JSON开销大决策核处理过慢。排查与解决使用更高效的序列化对于高频数据如关节角度考虑使用MessagePack或Protobuf替代JSON甚至直接传递二进制数组。分离数据通道将高频、低延迟的状态数据如关节角度和低频、高延迟的指令/图像数据使用不同的ZeroMQ Socket甚至不同的协议如状态用PUB/SUB指令用REQ/REP进行传输。共享内存对于图像等大数据量信息强烈建议使用共享内存Python的multiprocessing.shared_memory传递ZeroMQ只传递一个指针或键值。这是降低延迟最有效的方法。监控队列深度在决策核和钉核中监控指令队列和状态队列的积压情况积压过多说明处理不过来需要优化代码或降低频率。4.2 上下文相关典型问题问题1上下文数据庞杂导致传递给LLM的提示词过长超出模型限制。解决思路实现智能的上下文窗口管理。分层摘要对历史记录进行自动摘要。例如将过去100条“移动关节”的动作摘要为“机械臂已完成从A点到B点的粗略定位”。相关性过滤像上面get_relevant_for_task函数一样基于当前任务目标用向量检索或关键词匹配从历史和环境数据中筛选最相关的信息而不是全量发送。Token计数与裁剪在构造提示词后估算其token数量。如果超出限制优先裁剪或压缩最不重要的部分如过于久远的历史细节。问题2多线程/多进程下上下文数据读写冲突。解决思路确保上下文管理器的线程安全。使用锁如上文示例对_store的任何读写操作都用threading.Lock进行保护。使用线程安全的数据结构例如对于历史记录使用collections.deque并设置最大长度它在一定程度上是线程安全的但为了绝对安全仍需配合锁使用。考虑无锁编程或Actor模型对于高性能场景可以考虑使用asyncio的队列或者采用Ray、PyActor这类Actor框架每个Actor内部串行处理通过消息传递来更新上下文避免共享内存。问题3如何调试上下文数据流实用技巧可视化工具建立一个简单的WebSocket服务器将关键的上下文数据如关节状态、任务进度实时推送到一个网页仪表盘上。使用Plotly或ECharts绘制曲线图直观展示数据变化。上下文快照与回放实现一个功能可以随时将整个上下文状态保存到文件json.dump。当出现异常行为时保存快照。之后可以离线加载这个快照复现问题或者用于分析AI决策的依据。结构化日志不仅打印日志将重要的上下文变更如任务切换、规则触发、技能执行结果以结构化的格式JSON Lines记录到文件。方便用jq等工具进行事后分析。4.3 关于“Skills”、“Rules”与“MCP”的延伸思考在OpenClaw/MiniClaw的生态中Skills和Rules是上下文中的重要组成部分而MCP可能是其扩展性的关键。Skills的注册与管理技能不应该硬编码在钉核或决策核里。一个良好的设计是有一个“技能注册中心”。每个技能如move_to_position,pick_up_object都是一个独立的、符合一定接口规范的函数或类。系统启动时它们向中心注册自己的描述、参数和前置条件。决策核的LLM可以通过查询上下文中的技能列表知道当前能做什么并生成正确的调用参数。Rules的动态加载安全规则和行为规则也应该可配置、可热更新。例如可以通过一个YAML文件来定义规则“如果关节温度70度则设置最大速度为额定速度的50%”。钉核或一个独立的“规则引擎”进程负责解析并持续监控这些规则一旦触发立即执行预设动作如发送减速指令、记录告警到上下文。MCP的联想网络热词中提到了“MCP”。虽然不确定具体指代但在AI Agent领域Model Context Protocol是一个新兴标准用于标准化AI应用与各种工具、数据源之间的交互。在MiniClaw的上下文中可以设想将Skills和数据源如摄像头流、数据库都通过MCP服务器暴露出来。这样决策核中的AI模型可以通过标准的MCP协议来发现、调用技能和获取数据极大地增强了系统的模块化和可扩展性。上下文管理器则可以集成一个MCP客户端动态地获取可用的技能和资源列表并更新到上下文中。5. 部署与优化实战心得最后分享一些从概念到实际部署MiniClaw这类系统时积累的几点血泪教训。1. 从仿真起步绝对必要。不要一上来就折腾真机器人。在PyBullet、MuJoCo或ROS Gazebo中先搭建一个仿真环境把你的钉核逻辑控制仿真模型、上下文系统和决策核跑通。仿真可以让你安全、快速地进行算法迭代和压力测试避免硬件损坏的风险。2. 钉核的“稳定性”高于“性能”。在钉核代码里宁可多用一些try...except多做一些边界检查让循环慢几毫秒也绝不能因为一个未处理的异常或数组越界导致整个控制进程崩溃。记住它的首要任务是“不出错”。3. 上下文的版本化。考虑为上下文数据引入版本号或哈希。当多个模块如多个AI模型、规划器同时读写上下文时版本号可以帮助检测数据冲突实现乐观锁等并发控制机制。4. 做好数据记录与复盘。机器人的每一次运行尤其是失败案例都是黄金数据。除了记录上下文快照最好能同步录制摄像头画面和所有传感器数据流。这些数据对于后续调试、分析失败原因、以及进行模仿学习Imitation Learning来优化AI决策具有不可估量的价值。可以设计一个简单的数据记录模块在任务开始时自动开启录制存入带时间戳的文件中。5. 人类监督与接管Human-in-the-loop是安全阀。无论系统多么智能必须设计一个简单可靠的人类接管机制。可以是一个物理急停开关直接连入钉核也可以是一个软件指令通道允许人类操作员随时暂停任务、手动遥操作、或覆盖AI的决策。这个机制的状态也应该作为一条重要的规则反映在上下文中。通过拆解“钉核”与“上下文”我们看到的不仅仅是一个机器人软件架构更是一种处理复杂、不确定物理世界的工程方法论用确定性的“核”来锚定安全的底线用结构化的“上下文”来承载和传递智能的柔性。这套模式对于任何涉及AI与物理世界交互的系统都具有广泛的借鉴意义。
返回列表