开源机械爪与AI大模型集成:实现自然语言控制的机器人任务规划

news2026/5/3 12:50:44
1. 项目概述当开源机械爪遇上AI大脑最近在机器人圈子里一个叫dazeb/openclaw-deepseek-integration的项目引起了我的注意。光看名字就能嗅到一股硬核又前沿的味道——它把开源的机械爪硬件OpenClaw和当下火热的AI大模型DeepSeek给“焊”在了一起。这可不是简单的“11”而是试图让一个原本只能执行预设程序的机械臂获得一个能理解自然语言、能进行逻辑推理的“大脑”。简单来说这个项目解决的核心问题是如何让机器人硬件摆脱对复杂、僵化的编程指令的依赖转而通过人类最自然的交流方式——语言来理解和执行任务。想象一下你不再需要为机械爪编写“前进10厘米旋转30度夹取”这样的底层代码而是可以直接对它说“帮我把那个红色的方块放到蓝色的盒子旁边。” 这个项目要做的就是让机械爪听懂这句话并自己规划出完成这个任务所需的动作序列。它非常适合几类人机器人爱好者尤其是那些手头有3D打印或开源机械臂套件想探索AI前沿应用的玩家AI应用开发者特别是对具身智能Embodied AI和机器人任务规划感兴趣想找一个具体、可落地的实验平台的人以及教育工作者希望用一个直观的项目向学生展示AI如何与物理世界交互。这个项目的价值在于它提供了一个从软件到硬件的完整参考实现把“AI驱动机器人”这个宏大的概念拆解成了可以一步步搭建和调试的具体模块。2. 核心架构与设计思路拆解要理解这个项目我们得先把它拆开看看“机械爪”和“大模型”这两部分是如何协同工作的。整个系统的设计思路可以概括为“大模型做大脑机械爪做手脚中间件做神经”。2.1 硬件层OpenClaw的定位与能力边界OpenClaw通常指的是一类开源、模块化的机械爪设计其硬件方案如舵机型号、结构件STL文件、控制板原理图是公开的。这意味着你可以自己3D打印零件、采购舵机和主控板如Arduino、树莓派Pico来组装一个成本可控的机械爪。它的能力边界非常清晰它是一个执行器而非决策器。机械爪的核心功能是通过串口如USB-TTL或特定的通信协议如I2C、PWM接收来自上位机的控制指令。这些指令通常是底层且直接的例如“设置舵机1角度为45度”、“以50%的力度闭合夹爪”。它不关心“为什么”要转45度只负责“如何”精确地转到45度。因此项目的第一个设计要点就是为OpenClaw建立一个稳定、低延迟的驱动层将其抽象为一个可以通过软件API调用的标准化“手”。2.2 智能层DeepSeek大模型的角色与任务DeepSeek在这里扮演的是“任务规划与理解中枢”的角色。它需要完成以下几项核心工作自然语言理解将用户模糊的、口语化的指令如“整理一下桌面”解析成明确的、结构化的任务目标。场景推理与任务分解基于对指令的理解和对环境可能需要结合视觉信息的认知将宏观任务分解为一系列原子操作。例如“整理桌面”可能被分解为“识别散落的物体”、“将笔放入笔筒”、“将书本摞齐”、“将废纸扔进垃圾桶”。生成可执行代码这是最关键的一步。大模型需要将每一个原子操作翻译成机械爪驱动层能够理解的指令序列或函数调用。这要求项目预先定义好一套完整的“动作原语”API比如move_to(x, y, z),grasp(object_id),release()等。大模型的工作就是编写调用这些API的代码通常是Python脚本。这里的设计难点在于“对齐”如何让大模型生成的代码不仅是语法正确的而且是物理上可行、安全且高效的。这需要通过精心设计提示词Prompt和提供充足的上下文示例来实现。2.3 中间件层粘合一切的“神经中枢”这是整个项目技术含量最高、也最体现工程能力的地方。它需要搭建一个桥梁连接“思考的大脑”DeepSeek API和“行动的手”OpenClaw硬件。这个中间件层通常包含以下组件通信网关负责与机械爪硬件通信。可能是通过串口库如pyserial直接发送指令也可能是通过一个ROS机器人操作系统节点来转发消息以实现更复杂的机器人控制架构。API抽象层将机械爪的底层控制命令封装成一组高级、语义清晰的函数。例如提供一个pick_and_place(object_position, target_position)函数内部处理了移动、抓取、移动、放置等一系列底层指令。任务调度与执行引擎接收来自大模型生成的代码或指令序列对其进行安全校验如防止碰撞、超限然后按顺序调用API抽象层并监控执行状态。上下文管理器维护机器人当前的状态信息如机械爪末端位置、夹持状态和环境信息如果接入了摄像头并将这些信息作为上下文提供给大模型使其能做出更合理的决策。整个系统的数据流大致是用户指令 - DeepSeek API进行理解和代码生成- 中间件代码解析、安全校验、任务调度- 硬件驱动指令转换- OpenClaw物理执行- 传感器反馈可选- 状态更新 - 循环。3. 关键技术细节与实现要点深入到代码层面有几个关键的技术细节决定了项目的成败。这里我结合常见的实现路径分享一下其中的门道。3.1 机械爪的驱动与控制接口首先你需要让电脑能“指挥”动机械爪。对于基于舵机的OpenClaw常见的控制板是像Arduino这样的单片机。实现方案固件开发在Arduino上编写一个简单的固件它循环监听串口解析特定的指令协议。例如定义指令S1,90,1000\n表示“将1号舵机在1000毫秒内平滑移动到90度”。// Arduino 示例代码片段 #include Servo.h Servo servo1; void setup() { Serial.begin(115200); servo1.attach(9); } void loop() { if (Serial.available() 0) { String command Serial.readStringUntil(\n); // 解析命令例如 S1,90,1000 // 执行对应的舵机控制 } }上位机驱动在Python端使用pyserial库与Arduino建立连接并发送格式化好的指令字符串。import serial import time class OpenClawDriver: def __init__(self, port/dev/ttyUSB0, baudrate115200): self.ser serial.Serial(port, baudrate, timeout1) time.sleep(2) # 等待Arduino重启 def set_servo_angle(self, servo_id, angle, duration_ms500): # 发送指令如 S1,90,500\n command fS{servo_id},{angle},{duration_ms}\n self.ser.write(command.encode()) # 可以等待执行完成或读取确认 # response self.ser.readline().decode().strip() # return response OK def grasp(self): # 闭合夹爪的指令组合 self.set_servo_angle(1, 120, 800) # 假设舵机1控制开合 # ... 可能还有其他协同动作 def release(self): # 张开夹爪 self.set_servo_angle(1, 60, 800)注意舵机控制需要特别注意速度和加速度的平滑处理突然的剧烈运动可能导致机械结构抖动甚至损坏。在指令中加入移动时间duration_ms参数并让固件实现插值运动是保证动作流畅的关键。3.2 与大模型DeepSeek的交互策略直接让大模型生成控制舵机的底层代码是危险且低效的。正确的策略是进行“分层对话”。定义动作原语Action Primitives首先在项目中创建一个Python模块比如claw_actions.py里面明确定义好所有安全、可用的高级动作函数。# claw_actions.py from driver import OpenClawDriver claw OpenClawDriver() def move_to(x, y, z): 将机械爪末端移动到指定坐标需有运动学模型 # 此处应包含从坐标到舵机角度的逆运动学计算 # angles inverse_kinematics(x, y, z) # for i, angle in enumerate(angles): # claw.set_servo_angle(i1, angle) print(f[动作] 移动至 ({x}, {y}, {z})) def grasp_at(x, y, z): 移动到某点并抓取 move_to(x, y, z) claw.grasp() def release_at(x, y, z): 移动到某点并释放 move_to(x, y, z) claw.release() # ... 其他原语构造系统提示词System Prompt这是引导大模型正确行为的关键。你需要告诉它“你是一个机器人控制专家只能使用claw_actions.py中提供的函数来控制机械爪。用户会给你自然语言指令你需要将其转化为调用这些函数的Python代码。” 一个强化的提示词可能包括角色设定明确模型的身份和能力范围。可用函数清单详细列出每个函数的名称、参数和功能描述。输出格式要求严格要求只输出Python代码块不输出任何解释。安全约束提醒模型注意坐标范围、避免碰撞等。示例给出一两个从自然语言到代码的完整示例让模型学会格式和逻辑。3.3 任务规划与代码生成的执行流程有了驱动和提示词核心流程就可以跑起来了。这个过程通常是异步的用户输入用户通过命令行或图形界面输入指令如“把左边的积木放到右边”。调用大模型程序将用户指令与精心设计的系统提示词组合调用DeepSeek的Chat Completion API。解析响应从API返回的响应中提取出模型生成的Python代码块。这里需要做严格的格式检查和简单的语法验证。动态执行使用Python的exec()函数需在高度受控的安全沙箱内考虑或更好的方式——将代码写入一个临时.py文件然后通过子进程调用。执行前务必确保claw_actions模块在上下文中可用。import subprocess import tempfile def execute_generated_code(code_str: str): # 将代码写入临时文件 with tempfile.NamedTemporaryFile(modew, suffix.py, deleteFalse) as f: f.write(code_str) temp_file_path f.name try: # 在新进程中执行可以隔离潜在风险 result subprocess.run( [python, temp_file_path], capture_outputTrue, textTrue, timeout30 # 设置超时防止死循环 ) print(STDOUT:, result.stdout) if result.stderr: print(STDERR:, result.stderr) except subprocess.TimeoutExpired: print(错误代码执行超时) finally: # 清理临时文件 os.unlink(temp_file_path)反馈与迭代高级如果系统接入了摄像头可以在动作执行后拍摄一张照片将其描述可以用另一个视觉模型生成连同当前状态一起反馈给大模型询问“任务是否完成如果没有接下来该怎么做”从而实现多轮规划和闭环控制。4. 环境搭建与核心环节实现让我们从一个实操者的角度看看如何从零开始让这个系统动起来。我会假设你有一个组装好的OpenClaw机械爪基于Arduino和一台运行Linux/Windows的电脑。4.1 硬件连接与基础驱动测试步骤1硬件连接与检查将OpenClaw的各个舵机正确连接到控制板如Arduino Uno的PWM引脚。通过USB线将控制板连接到电脑。在电脑上查看设备管理器Windows或使用ls /dev/tty*命令Linux/Mac确认串口号通常是COM3、COM4Windows或/dev/ttyUSB0、/dev/ttyACM0Linux。步骤2上传基础固件在Arduino IDE中编写或上传一个简单的测试固件。这个固件的核心就是前面提到的串口指令解析器。确保它能够接收如S1,90这样的指令并控制舵机转动。测试打开Arduino IDE的串口监视器手动发送S1,90\n观察机械爪的指定舵机是否运动到90度位置。这一步是后续所有自动化的基石务必确保稳定可靠。步骤3编写Python驱动类在电脑上创建项目文件夹初始化Python虚拟环境。安装必要库pip install pyserial。编写driver.py文件实现OpenClawDriver类包含连接、发送指令、基础动作如初始化位置、归零等方法。务必加入异常处理和连接重试逻辑。4.2 大模型API集成与动作原语定义步骤1获取并配置DeepSeek API前往DeepSeek平台注册并获取API Key。在项目中安装官方SDKpip install deepseek-api。创建一个配置文件如config.yaml或使用环境变量来安全地存储你的API Key。# config.yaml deepseek: api_key: your-api-key-here base_url: https://api.deepseek.com # 根据实际情况修改 model: deepseek-chat # 指定使用的模型步骤2构建动作原语模块创建claw_actions.py。这里的关键是运动学建模。对于简单的3自由度或4自由度机械臂你可能需要实现正运动学从舵机角度计算末端位置和逆运动学从目标位置反推舵机角度。这是机器人学的核心知识。如果项目开源作者可能已经提供了这些函数。初期为了快速验证可以采用“示教编程”思路手动控制机械爪移动到几个关键位置如“准备位置”、“抓取位置A”、“放置位置B”记录下这些位置对应的各舵机角度值。然后在claw_actions.py中将move_to(position_name)实现为移动到这些预设角度。PRESET_POSITIONS { home: [90, 90, 90, 90], pick_location_a: [45, 120, 60, 80], place_location_b: [135, 80, 110, 70], } def move_to_preset(pos_name): if pos_name not in PRESET_POSITIONS: raise ValueError(f未知预设位置: {pos_name}) angles PRESET_POSITIONS[pos_name] for i, angle in enumerate(angles): claw.driver.set_servo_angle(i1, angle, duration_ms800) time.sleep(1) # 等待动作完成这样你就可以先让大模型学会使用move_to_preset(home)这样的高级命令绕过复杂的运动学计算。步骤3设计并优化系统提示词创建一个prompts.py文件来管理你的提示词。这是项目的“灵魂”。SYSTEM_PROMPT 你是一个控制开源机械爪OpenClaw的AI助手。你的任务是将用户的自然语言指令转化为可直接执行的Python代码。 # 可用函数来自 claw_actions.py - move_to_preset(pos_name): 移动到预设位置。pos_name 可选home, pick_location_a, place_location_b。 - grasp(): 闭合夹爪抓取物体。 - release(): 张开夹爪释放物体。 - move_servo(servo_id, angle, duration_ms500): 直接控制单个舵机谨慎使用。 # 输出要求 1. 只输出一个完整的、可运行的Python代码块。 2. 代码必须只使用上述提供的函数。 3. 考虑动作顺序和必要的延时使用 time.sleep(seconds)。 4. 确保动作安全避免快速连续运动。 # 示例 用户回到初始位置。 你 python move_to_preset(home)用户从A点抓取东西然后放到B点。 你move_to_preset(pick_location_a) time.sleep(0.5) grasp() time.sleep(0.5) move_to_preset(place_location_b) time.sleep(0.5) release() time.sleep(0.5) move_to_preset(home)提示词工程是持续迭代的过程。你需要根据大模型在实际测试中犯的错误比如忘记加延时、动作顺序不合理来不断补充约束条件和示例。4.3 主程序流程与集成测试步骤1编写主控程序创建main.py将驱动、动作原语、大模型调用串联起来。import yaml from deepseek import DeepSeek from driver import OpenClawDriver import claw_actions # 导入即初始化驱动 from prompts import SYSTEM_PROMPT import re def load_config(): with open(config.yaml, r) as f: return yaml.safe_load(f) def extract_python_code(response_text: str) - str: # 使用正则表达式提取 python ... 代码块内的内容 pattern rpython\n(.*?)\n match re.search(pattern, response_text, re.DOTALL) if match: return match.group(1).strip() else: # 如果没有代码块标记尝试整个返回风险较高 return response_text.strip() def main(): config load_config() client DeepSeek(api_keyconfig[deepseek][api_key]) print(OpenClaw-DeepSeek 集成系统已启动。输入指令或quit退出:) while True: user_input input(\n ) if user_input.lower() quit: print(再见) break # 构造对话消息 messages [ {role: system, content: SYSTEM_PROMPT}, {role: user, content: user_input} ] try: print(思考中...) response client.chat.completions.create( modelconfig[deepseek][model], messagesmessages, temperature0.1, # 低温度输出更确定 max_tokens500 ) generated_text response.choices[0].message.content print(生成的代码) print(generated_text) code_to_execute extract_python_code(generated_text) if code_to_execute: print(执行代码...) # 注意这里为了简化使用exec。生产环境应用更安全的方式。 exec_globals {claw_actions: claw_actions, time: __import__(time)} exec(code_to_execute, exec_globals) else: print(未从响应中提取到有效代码。) except Exception as e: print(f出错{e}) if __name__ __main__: main()步骤2分阶段集成测试单元测试单独测试driver.py能否控制机械爪做每个基本动作。单独测试调用DeepSeek API是否能得到合理回复。集成测试1离线先注释掉主程序中实际执行代码的部分exec那行只打印生成的代码。输入各种指令检查大模型生成的代码逻辑是否正确、安全。集成测试2在线-安全在机械爪活动范围下方放置柔软物移除所有易碎品。先尝试简单的、单一步骤的指令如“回家”观察机械爪是否正确运动到预设的“home”位置。集成测试3完整流程尝试一个简单的抓放任务。将一个小物件如积木精确放在pick_location_a对应的物理位置。输入指令“抓取A点的物体放到B点”观察整个流程是否顺畅。5. 常见问题、调试技巧与进阶思考在实际搭建和运行过程中你一定会遇到各种各样的问题。下面是我从经验中总结的一些典型坑点和解决思路。5.1 硬件与通信类问题问题机械爪无反应串口连接失败。排查首先确认端口号是否正确。在Windows上设备管理器中的端口号可能会变。在Linux下检查用户是否有读写/dev/ttyUSB0的权限通常需要将用户加入dialout组。技巧在代码中实现端口自动发现。可以遍历常见端口尝试发送一个“握手”指令如查询版本号哪个端口有正确回复就用哪个。import serial.tools.list_ports def find_claw_port(): possible_vid_pid [(0x2341, 0x0043), (0x2A03, 0x0043)] # Arduino Uno 常见的 VID/PID ports serial.tools.list_ports.comports() for port in ports: if (port.vid, port.pid) in possible_vid_pid: return port.device return None问题舵机运动不流畅、抖动或到达不了指定位置。排查1电源不足。舵机尤其是多个同时运动时峰值电流很大。USB供电可能不足务必使用独立的外接电源如5V/3A的DC电源为控制板和舵机供电。排查2机械阻力或干涉。检查3D打印件是否光滑螺丝是否过紧运动路径是否有碰撞。排查3指令频率过高。避免在舵机还未完成上一个动作时就发送下一个指令。在代码中每个set_servo_angle调用后根据duration_ms参数增加适当的time.sleep()。5.2 大模型与软件类问题问题大模型生成的代码格式错误或调用了不存在的函数。解决强化你的系统提示词。在提示词中明确列出所有且仅有的可用函数并强调“只能使用这些函数”。在代码提取函数extract_python_code中增加更严格的校验如果提取的代码中包含未授权的函数名如open()、os.system则拒绝执行并报错。技巧采用“少样本提示Few-shot Prompting”。在系统提示词中提供3-5个覆盖不同场景的、完美的输入输出示例这能极大地提升模型输出的准确性和规范性。问题任务规划逻辑不合理比如没松开夹爪就想移动。解决这属于大模型对物理世界常识理解的局限。你不能指望它天生就懂。需要在提示词中加入强规则。例如“重要规则在调用grasp()抓取物体后必须保持抓取状态直到调用release()释放。在抓取状态下只能调用move_to_preset进行移动且移动速度应较慢增加time.sleep。”进阶引入“状态机”概念。在代码中维护一个全局状态变量如claw_status ‘idle’或‘holding’。在执行生成的代码前或后插入状态检查逻辑如果违反状态转移规则如从‘holding’状态试图直接调用grasp()则插入修正代码或直接报错。问题生成的代码有无限循环或危险操作风险。解决绝对不要在生产环境中使用exec()直接执行未经验证的代码如前所述应使用子进程subprocess运行并设置严格的超时如30秒。可以进一步考虑使用 Docker 容器或seccomp等机制进行沙箱隔离限制其文件系统、网络访问权限。5.3 精度与可靠性问题问题抓取位置不准每次都有偏差。解决这是开源机械爪的共性问题。首先确保你的预设位置是通过多次示教取平均值得到的。其次考虑引入视觉反馈。这是项目从“玩具级”迈向“实用级”的关键一步。进阶方案在抓取点上方固定一个USB摄像头如罗技C270。使用OpenCV进行颜色或特征识别计算物体相对于机械爪基座的坐标偏移。然后在动作原语中将move_to_preset(“pick_location_a”)升级为move_to_vision_target(color’red’)该函数内部会先通过视觉识别动态计算坐标再进行移动。这实现了基于感知的闭环控制大大提升了鲁棒性。5.4 项目的进阶思考与扩展方向当你成功实现了基础的语言控制抓取后这个项目还有巨大的探索空间多模态输入结合麦克风实现真正的语音控制。或者结合更强大的视觉模型如GPT-4V或本地部署的视觉大模型让用户可以直接指着一个物体说“抓这个”机器人通过视觉识别自动定位。复杂任务链当前模型只能处理单一步骤或简单序列。可以尝试让大模型进行更复杂的规划例如“把桌上所有积木按颜色分类到不同的盒子里”。这需要模型对场景有更丰富的理解和推理能力。仿真先行在物理硬件上调试既耗时又有损坏风险。可以先用PyBullet、CoppeliaSim等机器人仿真环境搭建一个虚拟的OpenClaw模型。所有的大模型代码生成和逻辑测试都在仿真中进行验证无误后再部署到真机上。这是工业界和学术界的标准做法。开源生态整合考虑将你的中间件层与ROS集成。将机械爪驱动封装为ROS节点将大模型服务也封装为ROS节点它们之间通过ROS话题或服务进行通信。这样你的项目就能更容易地接入ROS庞大的传感器、算法和工具生态。这个项目的魅力在于它像一座桥梁连接了快速发展的AI软件世界和经典的机器人硬件世界。每一个遇到的问题都是深入理解这两个领域的好机会。从让机械爪颤颤巍巍地动起来到它能准确地执行你的语言命令这个过程充满了工程挑战和解决问题的乐趣。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2574277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…