ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从语音到行动:拆解自然语言操控机器人的技术实现与工程实践

从语音到行动:拆解自然语言操控机器人的技术实现与工程实践 1. 这篇文章真正要解决的问题当“智能家居”和“扫地机器人”这两个词组合在一起时我们脑海中浮现的往往是那些在房间里随机游走、偶尔被卡住、需要你手动解救的“智障”设备。它们确实解放了双手但远未解放大脑。用户与机器的交互长期停留在“一键启动”或通过手机App划定虚拟墙的初级阶段指令是单向且粗粒度的。你有没有想过如果机器人能像人一样听懂你随口的、自然的一句话并精准执行那会是什么体验这正是 Matic 家用机器人试图回答的问题。它不仅仅是一个扫地机器人更是一个意图驱动的家庭服务入口。其核心卖点“指哪扫哪支持 70 种语言”听起来像营销话术但背后指向的是一个非常具体且棘手的工程问题如何让一个物理执行单元扫地机与人类模糊、多变、充满上下文依赖的自然语言指令进行无缝、可靠且安全的对齐。本文要解决的就是拆解这个“自然语言操控机器人”的魔法。我们将超越产品宣传从技术实现、开发者视角和实际应用场景出发探讨技术本质“指哪扫哪”和“70种语言”背后是哪些技术的组合是简单的语音识别还是更复杂的多模态理解与空间语义分割实现路径一个开发者或极客如何理解甚至尝试复现类似的能力需要什么样的硬件传感器、算法模型和软件架构落地挑战与坑点这项技术在实际家庭环境中会面临哪些“理想很丰满现实很骨感”的挑战比如光线变化、物体遮挡、指令歧义、安全边界等。对智能家居生态的启示Matic 的模式是否为下一代智能设备交互设立了新标杆它仅仅是噱头还是代表了真正的趋势如果你是一名对机器人学、计算机视觉、自然语言处理感兴趣的开发者或是一位正在思考如何为产品添加“真智能”的硬件产品经理这篇文章将为你提供一个从技术原理到工程实践的深度视角。2. 基础概念与核心原理要理解 Matic 这类机器人的工作原理我们需要先厘清几个关键概念它们共同构成了“听懂人话并执行”的技术栈。2.1 核心组件拆解一个能实现“指哪扫哪”的机器人其系统远比传统扫地机器人复杂。我们可以将其分解为四个核心层层级功能对应技术/组件在“指哪扫哪”场景中的作用感知层收集环境信息RGB摄像头、深度传感器如ToF、结构光、激光雷达、惯性测量单元构建家庭环境地图识别“哪”是哪里。摄像头用于识别物体和手势深度传感器和激光雷达用于精确测距和建图。理解层解析用户意图自动语音识别、自然语言理解、计算机视觉、多模态融合将“打扫沙发左边那个角落”的语音指令分解为“动作打扫”、“位置沙发左边的角落”。同时视觉信息帮助确认“沙发”和“角落”的具体空间坐标。决策与规划层生成行动方案路径规划算法、任务分解引擎、避障策略将“打扫沙发左边的角落”这个高层指令转化为一系列底层动作序列规划一条从当前位置到目标角落的路径并绕开中途的茶几、电线。执行层物理动作执行电机驱动、刷子/吸尘模块、舵机控制轮子移动到指定坐标启动清扫模块。“70种语言”的实现主要依赖于理解层的ASR和NLU模块。这通常不是机器人本地部署70个模型而是通过以下一种或多种方式实现云端大模型接口将语音流上传至云端如OpenAI Whisper for ASR GPT / Claude for NLU利用其强大的多语言能力进行解析再将结构化指令下发给机器人。这是目前最主流、效果最好的方式但对网络有依赖。本地化轻量模型在机器人主控芯片上部署经过裁剪和优化的多语言语音识别与理解模型。这对芯片算力要求高且可能牺牲一些对小语种或口音的识别精度。混合模式常用指令如“开始打扫”、“回充”用本地模型快速响应复杂、新颖的指令走云端。2.2 “指哪扫哪”的技术实现路径这是最具挑战的部分。用户说“打扫那里”并可能伴随一个手势。机器如何知道“那里”是哪里有两种主流技术路径路径一视觉定位与手势识别更直观技术挑战大手势追踪通过RGB摄像头识别用户的手势指向。视线估计结合用户面部朝向粗略估计指向方向。深度信息融合利用深度传感器获取手势指向方向上的物体距离。语义分割识别该位置是什么物体如“地板”、“地毯”、“角落”。坐标映射将图像像素坐标用户指的位置转换到机器人构建的2D或3D环境地图中的全局坐标。指令生成NLU模块将“打扫”“坐标(X,Y)”或“物体角落”组合成可执行任务。路径二基于已建图的语义标注更稳定依赖前期工作预先建图与标注机器人首次工作时通过SLAM技术构建高精度家庭地图。随后用户可以通过App手动或语音为地图上的区域添加语义标签如“客厅沙发区”、“厨房门口”、“主卧床底”。自然语言关联当用户说“打扫沙发左边”时NLU模块将“沙发左边”解析为预先标注好的地图区域ID。直接调用决策层直接调用对该区域的清扫任务。Matic 很可能采用的是两种路径的混合模式。对于已标注的常见区域使用路径二稳定高效。对于临时指认的新位置尝试使用路径一作为能力的补充。3. 环境准备与前置条件要深入体验或开发类似功能我们需要一个可以模拟和实验的环境。以下是一个基于软件仿真和开源工具链的搭建方案这比直接购买和拆解机器人硬件更具可操作性和学习价值。3.1 硬件与操作系统开发机推荐使用一台性能尚好的台式机或笔记本电脑。重点是需要一块支持CUDA的NVIDIA显卡如RTX 3060及以上用于加速深度学习模型的训练和推理。操作系统Ubuntu 20.04 LTS 或 22.04 LTS。这是机器人操作系统ROS和大多数AI框架兼容性最好的环境。备用方案如果你只有Windows/Mac可以考虑使用WSL2但GPU直通和某些硬件模拟的配置会复杂一些。3.2 核心软件框架安装我们将使用ROS 2作为机器人中间件Gazebo作为仿真环境PyTorch作为深度学习框架。# 1. 设置ROS 2仓库 sudo apt update sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 2. 安装ROS 2 Humble桌面版包含GUI工具 sudo apt update sudo apt install ros-humble-desktop # 3. 安装Gazebo仿真器ROS 2集成版 sudo apt install ros-humble-gazebo-ros-pkgs # 4. 安装Colcon构建工具和ROS 2基础依赖 sudo apt install python3-colcon-common-extensions python3-rosdep2 sudo rosdep init rosdep update # 5. 设置环境变量每次打开新终端都需要执行或写入~/.bashrc source /opt/ros/humble/setup.bash3.3 AI模型与工具链# 1. 安装Miniconda用于Python环境管理 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh # 按照提示安装完成后重启终端或执行 source ~/.bashrc # 2. 创建并激活专用的机器人学习环境 conda create -n robot_nlp python3.10 conda activate robot_nlp # 3. 安装PyTorch请根据你的CUDA版本访问官网获取最新命令 # 例如对于CUDA 11.8 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 4. 安装语音识别和自然语言处理相关库 pip install openai-whisper # 离线语音识别 pip install transformers[sentencepiece] # 用于NLU的Hugging Face库 pip install speechrecognition pyaudio # 语音采集与识别 # 5. 安装计算机视觉相关库 pip install opencv-python opencv-contrib-python pip install ultralytics # YOLO目标检测 pip install segment-anything # Meta的SAM图像分割模型完成以上步骤你就拥有了一个可以模拟机器人感知、决策并进行AI模型实验的基础软件栈。4. 核心流程拆解从语音到行动的代码级模拟现在我们用一个简化的软件仿真项目来串联“听到指令 - 理解位置 - 规划路径 - 执行清扫”的全流程。我们将创建一个虚拟的“扫地机器人”节点它订阅语音指令并在Gazebo的仿真环境中移动。4.1 项目结构~/robot_cleaner_ws/src/ └── voice_nav_cleaner/ ├── package.xml ├── setup.py ├── setup.cfg ├── resource/voice_nav_cleaner ├── test/ └── voice_nav_cleaner/ ├── __init__.py ├── nodes/ │ ├── __init__.py │ ├── voice_commander.py # 语音指令接收与解析节点 │ ├── navigation_client.py # 导航客户端节点 │ └── cleaner_sim.py # 仿真机器人控制节点 └── launch/ └── sim_cleaner.launch.py # 启动所有节点的Launch文件4.2 步骤一创建ROS 2包# 在工作空间目录下 cd ~/robot_cleaner_ws/src ros2 pkg create --build-type ament_python voice_nav_cleaner cd voice_nav_cleaner4.3 步骤二实现语音指令解析节点 (voice_commander.py)这个节点模拟了“70种语言”的云端处理环节。我们使用本地的Whisper模型进行语音识别并用一个简单的规则引擎模拟NLU。#!/usr/bin/env python3 # 文件路径~/robot_cleaner_ws/src/voice_nav_cleaner/voice_nav_cleaner/nodes/voice_commander.py import rclpy from rclpy.node import Node import whisper import speech_recognition as sr from std_msgs.msg import String import json import threading class VoiceCommander(Node): def __init__(self): super().__init__(voice_commander) # 发布解析后的结构化指令 self.command_pub self.create_publisher(String, /clean_command, 10) # 加载Whisper小型模型首次运行会自动下载 self.get_logger().info(Loading Whisper model...) self.model whisper.load_model(base) self.get_logger().info(Whisper model loaded.) # 启动语音监听线程 self.listener_thread threading.Thread(targetself.listen_loop) self.listener_thread.start() self.get_logger().info(Voice commander node started. Say clean the sofa or go to kitchen.) def listen_loop(self): recognizer sr.Recognizer() microphone sr.Microphone() with microphone as source: recognizer.adjust_for_ambient_noise(source) self.get_logger().info(Adjusting for ambient noise...) while rclpy.ok(): try: with microphone as source: self.get_logger().info(Listening...) audio recognizer.listen(source, timeout5, phrase_time_limit5) # 保存音频为WAV格式供Whisper处理 with open(/tmp/command.wav, wb) as f: f.write(audio.get_wav_data()) # 使用Whisper进行语音识别支持多语言 result self.model.transcribe(/tmp/command.wav, languageen) # 这里设置为英语可改为‘zh’识别中文 text result[text].strip().lower() self.get_logger().info(fRecognized: {text}) # 简单的NLU解析关键词 structured_cmd self.parse_command(text) if structured_cmd: msg String() msg.data json.dumps(structured_cmd) self.command_pub.publish(msg) self.get_logger().info(fPublished command: {msg.data}) except sr.WaitTimeoutError: continue except Exception as e: self.get_logger().error(fError in listening: {e}) def parse_command(self, text): 一个极其简单的规则式NLU解析器 cmd {action: None, location: None} # 动作识别 if any(word in text for word in [clean, sweep, mop, vacuum]): cmd[action] clean elif any(word in text for word in [go to, navigate to, move to]): cmd[action] navigate # 位置识别 (这里使用预定义的地图标) locations { sofa: {x: 2.0, y: 1.5}, kitchen: {x: 5.0, y: 3.0}, corner: {x: 0.5, y: 0.5}, } for loc_name, coords in locations.items(): if loc_name in text: cmd[location] loc_name cmd[coordinates] coords break return cmd if cmd[action] and cmd[location] else None def main(argsNone): rclpy.init(argsargs) node VoiceCommander() try: rclpy.spin(node) except KeyboardInterrupt: node.get_logger().info(Node stopped by user.) finally: node.destroy_node() rclpy.shutdown() if __name__ __main__: main()关键逻辑解释语音采集使用speech_recognition库监听麦克风。语音识别将录制的音频交给Whisper模型转录为文本。Whisper 支持多种语言通过language参数指定。自然语言理解parse_command函数是一个简单的规则引擎。它查找文本中的关键词如 “clean”, “sofa”将其映射为预定义的动作和地图坐标。在实际产品中这里会被一个更复杂的NLU模型如基于BERT的意图分类和槽位填充替代。指令发布将解析出的结构化指令JSON格式发布到ROS话题/clean_command上。4.4 步骤三实现导航客户端节点 (navigation_client.py)这个节点订阅指令并调用ROS 2的导航栈Navigation2来规划路径并控制机器人移动。#!/usr/bin/env python3 # 文件路径~/robot_cleaner_ws/src/voice_nav_cleaner/voice_nav_cleaner/nodes/navigation_client.py import rclpy from rclpy.node import Node from rclpy.action import ActionClient from std_msgs.msg import String import json from geometry_msgs.msg import PoseStamped from nav2_msgs.action import NavigateToPose from action_msgs.msg import GoalStatus class NavigationClient(Node): def __init__(self): super().__init__(navigation_client) # 订阅语音解析节点发布的指令 self.subscription self.create_subscription( String, /clean_command, self.command_callback, 10) # 创建导航到目标点的Action客户端 self.nav_to_pose_client ActionClient(self, NavigateToPose, navigate_to_pose) self.get_logger().info(Navigation client ready, waiting for commands...) def command_callback(self, msg): try: cmd json.loads(msg.data) self.get_logger().info(fReceived command: {cmd}) if cmd[action] in [clean, navigate] and coordinates in cmd: goal_pose self.create_pose_stamped(cmd[coordinates][x], cmd[coordinates][y]) self.send_nav_goal(goal_pose, cmd[location]) except json.JSONDecodeError as e: self.get_logger().error(fFailed to parse command JSON: {e}) def create_pose_stamped(self, x, y): 根据坐标创建目标位姿消息 pose PoseStamped() pose.header.frame_id map pose.header.stamp self.get_clock().now().to_msg() pose.pose.position.x x pose.pose.position.y y pose.pose.orientation.w 1.0 # 默认朝向 return pose def send_nav_goal(self, pose, location_name): 发送导航目标 while not self.nav_to_pose_client.wait_for_server(timeout_sec1.0): self.get_logger().info(Navigation action server not available, waiting...) goal_msg NavigateToPose.Goal() goal_msg.pose pose self.get_logger().info(fSending robot to {location_name} at ({pose.pose.position.x}, {pose.pose.position.y})...) self.nav_to_pose_client.send_goal_async(goal_msg).add_done_callback(self.goal_response_callback) def goal_response_callback(self, future): 处理目标发送后的响应 goal_handle future.result() if not goal_handle.accepted: self.get_logger().info(Goal rejected :() return self.get_logger().info(Goal accepted :)) # 可以在这里添加结果回调但为了简化我们只等待完成 # goal_handle.get_result_async().add_done_callback(self.get_result_callback) def main(argsNone): rclpy.init(argsargs) node NavigationClient() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()关键逻辑解释指令订阅监听/clean_command话题接收来自语音节点的JSON指令。目标创建从指令中提取坐标创建一个ROS导航栈能理解的PoseStamped消息。动作调用使用Action客户端调用NavigateToPose动作。这是ROS 2导航栈的标准接口负责路径规划和底层运动控制。4.5 步骤四启动仿真与测试首先我们需要一个仿真环境。可以使用TurtleBot3的Gazebo世界。# 1. 安装TurtleBot3仿真包 sudo apt install ros-humble-turtlebot3-gazebo # 2. 设置TurtleBot3型号 echo export TURTLEBOT3_MODELwaffle_pi ~/.bashrc source ~/.bashrc # 3. 创建一个启动所有节点的Launch文件 # 文件路径~/robot_cleaner_ws/src/voice_nav_cleaner/voice_nav_cleaner/launch/sim_cleaner.launch.py from launch import LaunchDescription from launch_ros.actions import Node from launch.actions import ExecuteLaunchDescription, IncludeLaunchDescription from launch.launch_description_sources import PythonLaunchDescriptionSource from ament_index_python.packages import get_package_share_directory import os def generate_launch_description(): # 启动Gazebo仿真环境TurtleBot3空世界 tb3_gazebo_dir get_package_share_directory(turtlebot3_gazebo) gazebo_launch IncludeLaunchDescription( PythonLaunchDescriptionSource(os.path.join(tb3_gazebo_dir, launch, turtlebot3_world.launch.py)) ) # 启动Navigation2导航栈 nav2_dir get_package_share_directory(nav2_bringup) nav2_launch IncludeLaunchDescription( PythonLaunchDescriptionSource(os.path.join(nav2_dir, launch, tb3_simulation_launch.py)) ) # 启动我们的语音指令节点 voice_node Node( packagevoice_nav_cleaner, executablevoice_commander, outputscreen ) # 启动我们的导航客户端节点 nav_client_node Node( packagevoice_nav_cleaner, executablenavigation_client, outputscreen ) return LaunchDescription([ gazebo_launch, nav2_launch, voice_node, nav_client_node, ])5. 运行结果与效果验证5.1 编译与运行# 1. 进入工作空间编译包 cd ~/robot_cleaner_ws colcon build --packages-select voice_nav_cleaner source install/setup.bash # 2. 启动整个仿真系统 ros2 launch voice_nav_cleaner sim_cleaner.launch.py此时Gazebo会启动显示一个带有TurtleBot3机器人的虚拟世界。RViz也会打开显示机器人的激光雷达数据和导航地图。5.2 测试语音指令确保你的麦克风已连接并正常工作。在终端中你应该能看到voice_commander节点输出“Listening...”。对着麦克风清晰地说出指令例如“Clean the sofa.”或“Go to the kitchen.”观察终端日志和仿真环境voice_commander节点会输出Recognized: clean the sofa和Published command: ...。navigation_client节点会输出Received command: ...和Sending robot to sofa at (2.0, 1.5)...。Gazebo/RViz你会看到虚拟的TurtleBot3开始移动规划出一条路径并最终到达地图上预设的“沙发”(2.0, 1.5)坐标点附近。5.3 验证成功的关键指标语音识别准确率Whisper是否能正确转录你的指令可以尝试用不同音量、语速测试。指令解析正确性我们的简单规则引擎是否能从文本中正确提取action和location可以修改parse_command函数增加更多关键词。导航成功率机器人是否能成功规划路径并抵达目标点在Gazebo世界中添加一些障碍物如盒子来测试其避障能力。系统延迟从说完指令到机器人开始移动总耗时是多少这反映了从语音识别、NLU、到路径规划整个管道的延迟。这个仿真项目虽然简单但它完整地演示了“语音指令驱动机器人移动”的核心数据流和组件交互是理解 Matic 这类产品底层逻辑的绝佳起点。6. 常见问题与排查思路在实际开发或使用类似技术时你会遇到各种各样的问题。以下是一个排查清单问题现象可能原因排查方式解决方案语音识别完全没反应麦克风未正确识别或权限不足Whisper模型下载失败。1. 检查arecord -l列出设备。2. 检查Pythonpyaudio是否能找到麦克风。3. 查看节点日志是否有模型加载错误。1. 设置正确的音频输入设备索引。2. 为当前用户添加音频组权限sudo usermod -aG audio $USER。3. 确保网络通畅或手动下载Whisper模型。识别结果全是乱码或错误Whisper语言设置错误环境噪音过大模型太小精度不足。1. 检查voice_commander.py中language参数。2. 在安静环境下测试。3. 尝试使用更大的Whisper模型如small,medium。1. 将language设置为你的语言代码如‘zh’中文。2. 增加recognizer.adjust_for_ambient_noise的时间。3. 升级模型但需更多计算资源。机器人收到指令但不移动导航Action服务器未启动目标坐标超出地图范围坐标框架错误。1. 使用ros2 topic list检查/navigate_to_poseaction 是否存在。2. 在RViz中使用“2D Pose Estimate”初始化机器人位置。3. 检查create_pose_stamped中的frame_id是否为‘map’。1. 确保nav2_launch被正确启动。2. 确保目标点在构建的地图范围内。3. 确认机器人已经通过amcl完成了定位。导航过程中机器人卡住或撞墙代价地图配置不当局部规划器参数激进仿真物理引擎问题。1. 观察RViz中的全局/局部代价地图障碍物是否被正确标注。2. 检查机器人激光雷达数据是否正常发布。1. 调整nav2_params.yaml中的inflation_radius膨胀半径和cost_scaling_factor。2. 调整TebLocalPlanner的参数如最大速度、加速度。复杂指令如“沙发和茶几之间”无法解析规则式NLU能力有限无法理解复杂空间关系。查看解析后的指令JSONlocation字段是否为None。升级NLU模块1. 使用基于深度学习的意图分类和命名实体识别模型。2. 引入视觉问答模型结合实时摄像头画面理解“之间”这类关系。多语言支持不稳定云端服务网络延迟或不可用本地小语种模型精度差。测试不同语言下的识别准确率和延迟。1. 实现离线/在线降级策略核心指令用本地模型复杂指令用云端。2. 针对主要市场优化本地模型。7. 最佳实践与工程建议基于以上分析和实验如果你想将类似Matic的能力集成到自己的产品或项目中以下建议至关重要分层解耦架构严格区分感知、理解、决策、执行层。例如语音识别和NLU可以作为一个独立的微服务通过API为多个机器人提供能力。这便于单独升级ASR模型或NLU模型而不影响底层控制。多模态融合是核心不要只依赖语音。“指哪”这个动作本身就包含了视觉手势和可能的深度信息。必须将视觉识别物体、手势、人脸朝向与语音指令在特征层或决策层进行融合才能准确理解“那里”的所指。构建丰富的语义地图这是实现稳定“扫哪”的基础。机器人首次入户时不仅要构建几何地图用于避障导航更要引导用户或通过自动识别如CV来标注语义信息“这是客厅”、“这是餐桌”、“这是宠物区”。这将极大简化NLU的负担。设计健壮的回退机制自然语言理解不可能100%准确。当置信度低时必须有明确的回退策略。例如请求澄清通过语音或灯光反馈“您是指沙发左侧吗”提供选项在App上显示几个可能的位置让用户选择。执行默认行为如果指令是“打扫”但位置不明则执行全屋清扫。安全第一任何通过自然语言触发的物理动作都必须有安全边界。虚拟禁区即使用户说“进去打扫”机器人也不能进入已标记为“楼梯口”、“阳台边缘”的区域。动态障碍物优先在执行语音指令途中若检测到移动的人或宠物应立即暂停或重新规划路径。权限管理考虑通过声纹识别或关联手机App实现简单的用户身份验证防止他人误操作。持续学习与数据闭环收集匿名化的失败案例如错误识别、错误执行用于持续优化ASR、NLU和CV模型。这是产品能否越用越“聪明”的关键。8. 总结与后续学习方向Matic 机器人所展示的“指哪扫哪”和“70种语言”绝非简单的功能叠加而是具身智能在消费级产品上的一次重要尝试。它把原本存在于实验室的“多模态交互-空间理解-任务规划”链条塞进了一个扫地机器人的身体里。通过本文的拆解你应该已经理解这背后是一套复杂的技术栈从多语言语音识别与理解到视觉定位与语义分割再到机器人路径规划与控制。我们通过一个ROS 2仿真项目亲手实现了这个链条的简化版看到了从语音到行动的数据是如何流动的。对于开发者而言下一步可以深入的方向有强化NLU将voice_commander.py中的规则引擎替换为基于Hugging Face Transformers的预训练模型如BERT、RoBERTa进行真正的意图分类和槽位填充。集成真实视觉在仿真中接入一个虚拟摄像头使用YOLO或DETR进行实时物体检测并尝试将检测框的中心点映射到地图坐标实现真正的“视觉指哪”。探索大模型与机器人研究如何将VLM或LLM接入这个循环。例如让LLM根据用户模糊的指令“打扫最脏的地方”和摄像头传回的实时画面生成具体的、可执行的操作序列“识别到厨房地面有污渍坐标是(x,y)”。硬件实践如果你有树莓派、Jetson Nano和一台可编程的扫地机器人如小米扫地机通过串口控制可以尝试将本文的软件栈部署到真实硬件上体验真实的传感器噪声、电机控制和电池管理带来的挑战。这项技术的成熟将彻底改变我们与家居环境的交互方式。机器人不再是被动执行预设程序的工具而是能理解我们意图、适应我们习惯的主动服务伙伴。虽然前路仍有诸多挑战成本、可靠性、隐私但方向已经清晰。作为开发者现在正是深入其中构建下一代智能体应用的最佳时机。建议收藏本文作为你探索机器人自然语言交互领域的第一个路标和代码起点。
返回列表