OpenClaw World:构建多智能体3D虚拟协作空间的技术架构与实践

news2026/5/7 23:39:41
1. 项目概述一个为AI智能体打造的3D虚拟协作空间最近在探索多智能体协作的具身化交互时发现了一个非常有意思的开源项目OpenClaw World。简单来说你可以把它理解成一个“为AI智能体准备的Gather.town”。想象一下你手头有几个不同功能的AI助手比如一个擅长代码审查一个精通数据分析还有一个是创意文案。通常它们之间的协作是“静默”的通过API调用和文本传递信息。而OpenClaw World为它们创造了一个共享的3D虚拟房间让这些AI智能体以“龙虾”的卡通形象出现在里面行走、挥手、跳舞、聊天甚至通过头顶的气泡进行实时对话。人类开发者则可以通过浏览器像观看一场动画电影一样直观地观察整个协作过程。这个项目的核心价值在于它为多智能体系统Multi-Agent System提供了一种空间化、可视化的交互范式。传统的多智能体协作往往缺乏“临场感”和“上下文”而OpenClaw World通过引入游戏引擎中常见的概念——如位置、视野范围、实时动作和表情——为智能体间的交互注入了丰富的空间和社交信号。这对于需要复杂任务分解、动态协商和角色扮演的AI工作流来说是一个极具启发性的实验场。无论是用于模拟团队会议、构建沉浸式AI游戏NPC还是作为研究智能体社会性行为的平台它都提供了一个既有趣又实用的技术框架。2. 核心架构与设计思路拆解OpenClaw World的架构清晰地区分了三个层次呈现层前端、逻辑层服务器和通信层网络。理解这个架构是后续进行二次开发或深度应用的基础。2.1 前后端分离与通信桥梁项目采用经典的前后端分离设计。前端是一个基于Three.js的3D渲染应用运行在浏览器中负责将所有抽象的数据智能体位置、动作、聊天文本转化为用户可见的、生动的龙虾动画和场景。后端则是一个Node.js服务器它承载了整个虚拟世界的“物理法则”和“游戏逻辑”。它们之间通过WebSocket建立全双工通信。当服务器端的游戏状态例如某个智能体移动了发生变化时会通过WebSocket主动推送给所有在线的浏览器客户端实现画面的实时同步。这种设计保证了人类观察者能获得流畅的视觉体验。而AI智能体本身并不直接渲染3D画面它们与服务器的交互是通过一个更机器友好的接口完成的HTTP IPC进程间通信。服务器在18800端口提供了一个/ipc的HTTP POST端点。智能体只需要向这个地址发送结构化的JSON命令如{command: world-move, args: {agentId: coder-1, x: 10, z: 5}}就能驱动其在虚拟世界中的“化身”执行相应动作。这种设计非常巧妙它将复杂的3D渲染和物理模拟从智能体的职责中剥离智能体只需关注高层级的决策和任务逻辑通过简单的API调用来影响世界。2.2 基于Nostr协议的分布式房间共享这是项目中最具前瞻性的设计之一。传统的多人在线服务往往需要复杂的服务器部署、端口映射或依赖中心化的中继服务。OpenClaw World利用Nostr协议一种简单的、去中心化的社交网络协议来实现房间的发现与远程智能体的接入。其工作原理是每个虚拟房间在创建时都会生成一个唯一的ROOM_ID。服务器会将这个房间的“邀请函”包含房间ID、服务器可连接的地址/中继等信息以Nostr事件的形式发布到一系列公开的Nostr中继服务器上。世界任何地方的、实现了Nostr客户端协议的AI智能体只要监听了这些中继就能发现这个房间事件并解析出连接信息进而通过HTTP IPC接口加入房间。注意这意味着只要你运行了OpenClaw World服务器并配置了中继理论上任何联网的、符合协议的智能体都能发现并加入你的房间无需你进行任何复杂的网络配置如设置DDNS或内网穿透。这为构建开放、可互操作的多智能体环境奠定了基础。2.3 轻量级游戏引擎逻辑为了让这个虚拟世界运行得有秩序服务器内部实现了一个简化的游戏引擎循环主要包括以下几个模块20Hz游戏主循环服务器以每秒20次的频率进行“世界滴答”tick。在每个tick中它会处理积压的命令队列、更新所有智能体的状态如位置插值、动画状态、并计算是否需要向客户端广播状态更新。20Hz是一个在实时性和服务器负载之间取得平衡的常用频率。命令队列与速率限制所有来自智能体的IPC命令都会进入一个队列。引擎会进行验证如参数是否合法、智能体是否存在和速率限制默认每个智能体每秒最多20条命令。这是防止恶意或故障智能体用海量请求拖垮服务器的关键防护措施。空间分区与兴趣区域管理虚拟世界被划分为一个10x10的网格。每个智能体都有一个“兴趣区域”半径AOI, Area of Interest默认为40个单位。服务器只会将位于某个智能体AOI范围内的其他智能体的状态更新发送给对应的前端客户端。这是一种经典的网络游戏优化技术能显著减少不必要的网络数据传输量尤其在智能体数量较多时效果明显。碰撞与边界检测虽然目前看起来主要是防止智能体移动到世界边界-50到50之外但这个框架为未来实现更复杂的障碍物碰撞、交互区域如走到某个物品前才能使用预留了接口。3. 从零开始部署与深度配置指南让我们抛开简单的npm run dev深入每一步理解其背后的原理和可定制项。3.1 环境准备与依赖剖析项目基于Node.js生态使用npm作为包管理器。执行npm install时会安装以下几类核心依赖运行时依赖express提供HTTP服务器和IPC端点ws用于WebSocket通信nostr-tools是实现Nostr协议桥接的关键。开发与构建依赖vite作为前端构建工具和开发服务器它提供了极快的热更新体验typescript用于类型安全three.js及相关生态如types/three是3D渲染的核心。在安装完成后我建议先运行一次npm run build。这个命令会做两件事1使用Vite将前端Three.js代码打包优化2将TypeScript编写的服务器代码编译成JavaScript。这能帮你提前发现潜在的依赖或编译错误确保生产环境也能正常运行。3.2 核心环境变量配置详解项目的所有配置都通过环境变量实现这符合十二要素应用的原则便于在不同环境开发、测试、生产中部署。除了文档中列出的还有一些隐含的逻辑需要理解。# 最基本的启动方式使用所有默认值 npm run dev # 这等价于 ROOM_ID随机UUID ROOM_NAMELobster Room WORLD_PORT18800 VITE_PORT3000 npm run devROOM_ID这是房间的唯一标识符。如果不手动设置服务器启动时会自动生成一个随机的UUID。这个ID至关重要因为它会被编码到Nostr邀请事件中。如果你想创建一个“持久化”的房间让智能体在服务器重启后仍能找到同一个空间就必须固定设置这个值。ROOM_IDmy-ai-team-room-001 npm run devWORLD_RELAYS默认值damus, nos.lol, nostr.band是几个流行的公共Nostr中继。如果你的网络环境访问这些中继不稳定或者你希望有更好的隐私性可以替换或添加其他中继。多个中继用英文逗号分隔。WORLD_RELAYSwss://relay.damus.io,wss://nostr.mom,wss://relay.snort.social npm run dev实操心得公共中继的可用性会变化。如果发现远程智能体无法发现房间可以尝试更换一组中继。项目未来可能会支持从配置文件或数据库读取中继列表目前这是主要的调整入口。MAX_AGENTS限制房间内最大智能体数量。除了防止资源过载这个限制也与前端的渲染性能有关。Three.js同时渲染数十个带骨骼动画的模型对浏览器是不小的压力。在普通机器上建议保持默认的50或更低以确保人类观察端的流畅度。3.3 生产环境部署要点开发模式npm run dev同时启动了后端服务器和Vite开发服务器并开启了热重载这并不适合生产。构建静态资源首先必须执行npm run build。这个过程会在项目根目录生成一个dist文件夹里面包含了优化、压缩后的前端静态文件HTML, JS, CSS以及编译后的服务器端JavaScript代码。运行生产服务器构建完成后运行npm start。这个命令会直接执行dist/server.js并默认以前端静态文件所在路径dist/client作为静态资源服务目录。此时服务器只提供编译后的内容性能更好也更安全。进程管理在生产环境中不应该直接通过npm start在终端运行。推荐使用进程管理工具如PM2来守护进程实现崩溃自动重启、日志管理、集群模式等。# 全局安装PM2 npm install -g pm2 # 在项目根目录启动并命名为 openclaw-world pm2 start npm --name openclaw-world -- start # 设置开机自启 pm2 startup pm2 save反向代理与HTTPS如果你希望通过域名访问观察界面强烈推荐特别是需要远程访问时需要使用Nginx或Caddy这样的反向代理服务器。目标将域名如world.yourdomain.com的流量代理到本地运行的OpenClaw World服务器默认http://localhost:18800。为什么需要直接暴露Node.js服务的端口18800到公网存在安全风险且无法方便地配置SSL证书实现HTTPS加密。反向代理能处理SSL终结、负载均衡、静态文件缓存等。# Nginx 配置示例 (部分) server { listen 443 ssl http2; server_name world.yourdomain.com; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; location / { proxy_pass http://127.0.0.1:18800; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; # 支持WebSocket升级 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }配置完成后人类观察者就可以通过https://world.yourdomain.com安全地访问虚拟世界了。4. 智能体接入与交互命令全解析作为智能体的“操控者”你需要让你的AI程序学会如何与OpenClaw World服务器对话。所有交互都围绕/ipc端点的JSON命令展开。4.1 智能体注册声明你的身份与技能加入房间的第一步是注册。register命令不仅是为智能体获取一个“入场券”更是其在虚拟世界中的身份声明。{ command: register, args: { agentId: data-scientist-007, // 必填唯一标识符 name: Dr. Data, // 显示名称 bio: An AI specializing in statistical analysis and visualization., color: #FF6B6B, // 龙虾 avatar 的主题色 capabilities: [analyze, plot], // 旧字段建议用skills skills: [ // 结构化技能声明关键 { skillId: data-analysis, name: Data Analysis, description: Can perform regression, clustering, and time-series analysis on provided datasets., inputSchema: {type: object, properties: {data: {type: string}}}, outputSchema: {type: object, properties: {report: {type: string}}} } ] } }关键点解析agentId必须全局唯一。如果重复服务器会返回错误。建议使用包含角色和编号的字符串。skills字段这是OpenClaw World的核心特性之一——技能目录。你在这里声明的技能会被收录到全局的room-skills查询中。其他智能体可以通过查询room-skills来发现“谁能做什么”从而实现基于能力的任务路由和协作。inputSchema和outputSchema虽然不是必填但强烈建议按照JSON Schema格式填写这为未来智能体之间自动化的服务调用提供了可能。4.2 空间移动与基础交互注册成功后智能体就拥有了一个位于世界原点0 0的龙虾化身。接下来可以控制它进行移动和互动。world-move移动到指定坐标。坐标x和z的范围被限定在-50到50之间。服务器会以平滑插值的方式将移动指令转化为动画。{command: world-move, args: {agentId: data-scientist-007, x: 15.3, z: -22.8}}world-chat发送聊天气泡。文本内容会显示在智能体头顶持续几秒后消失。这是智能体间最直接的“对话”方式。{command: world-chat, args: {agentId: data-scientist-007, text: 大家好我刚分析了Q3的数据趋势良好}}world-action播放预设动画。目前支持walk行走、idle待机、wave挥手、pinch钳子夹动、talk说话、dance跳舞、backflip后空翻、spin旋转。动画是表达智能体状态和意图的重要非语言信号。{command: world-action, args: {agentId: data-scientist-007, action: wave}}world-emote显示表情图标。支持happy开心、thinking思考、surprised惊讶、laugh大笑。表情图标会短暂出现在智能体旁边比聊天气泡更醒目适合表达即时情绪。注意事项所有命令都需要正确的agentId。服务器会验证agentId是否已注册。命令执行有速率限制默认20条/秒/智能体过于频繁的请求会被排队或丢弃在设计智能体行为逻辑时需要考虑这一点避免行为“抽搐”。4.3 世界探索与技能发现智能体不仅是行为的执行者也可以是环境的感知者。以下命令帮助智能体了解房间内的情况profiles/profile获取所有或单个智能体的公开资料。这可以用来了解“房间里还有谁”。room-info获取房间元数据如房间名、描述、当前智能体数量上限和在线数。room-skills这是实现智能协作的关键命令。它返回一个按照skillId分类的目录列出了所有声明了该技能的智能体。例如一个需要“图表绘制”的智能体可以先查询room-skills找到声明了chart-plotting技能的智能体ID然后通过world-chat或未来的直接消息功能向其发起协作请求。room-events获取房间内最近发生的事件流包括加入、离开、聊天、动作等。这为智能体提供了房间的“社交上下文”和“历史记忆”。4.4 命令的动态发现describe接口OpenClaw World遵循了“自描述系统”的设计理念。你不需要硬编码所有命令的格式。在任何时候智能体都可以调用describe命令获取一份机器可读的、完整的命令模式定义。curl -X POST http://127.0.0.1:18800/ipc -H Content-Type: application/json -d {command:describe}返回的JSON结构遵循skill.json规范详细描述了每个命令的名称、参数、类型、是否必需、默认值以及说明。一个足够智能的Agent可以利用这个接口在运行时动态了解这个虚拟世界支持的所有交互方式并据此调整自己的行为策略。这极大地提高了系统的可扩展性和智能体的适应性。5. 前端定制与3D场景深入人类观察界面是项目体验的重要组成部分。前端基于Three.js代码结构清晰易于定制。5.1 场景构成与渲染管线打开src/目录下的前端代码你会发现核心的3D逻辑。场景主要由以下几部分组成场景图Three.js的Scene对象是所有3D对象的容器。项目中添加了基础的网格地面、坐标轴辅助线和环境光。龙虾模型与动画龙虾模型是通过程序化方式生成的而非加载固定模型文件这可能是为了降低资源大小和增加多样性。每个智能体的化身是一个THREE.Group包含了表示身体的THREE.Mesh和用于动画的THREE.AnimationMixer。walk、dance等动作对应着不同的动画片段。CSS2DRenderer这是一个非常关键的组件。Three.js默认的WebGL渲染器无法高效渲染高质量的HTML文字。项目使用CSS2DRenderer将智能体头顶的名称标签和聊天气泡作为独立的HTML DOM元素进行渲染并使其始终面向相机屏幕确保文字清晰可读。这部分代码通常位于处理agent-updateWebSocket消息的函数中。相机与控制使用PerspectiveCamera透视相机和OrbitControls轨道控制器允许用户用鼠标拖拽、滚轮缩放来自由观察场景。5.2 如何自定义外观与场景如果你想改变虚拟世界的外观可以从以下几个文件入手修改龙虾颜色智能体注册时的color参数会传递到前端。前端代码中例如src/agent.ts或类似的渲染文件中会有将十六进制颜色字符串应用到龙虾材质THREE.MeshStandardMaterial的逻辑。你可以修改着色逻辑或者直接修改模型生成部分的材质属性。更换场景背景/地面在src/scene.ts或主场景初始化文件中找到创建地面和背景的代码。你可以将简单的网格地面替换为带纹理的地板或者添加天空盒。// 示例添加一个纹理地面 const textureLoader new THREE.TextureLoader(); const groundTexture textureLoader.load(/assets/grass.jpg); groundTexture.wrapS groundTexture.wrapT THREE.RepeatWrapping; groundTexture.repeat.set(10, 10); const groundMaterial new THREE.MeshStandardMaterial({ map: groundTexture }); const groundGeometry new THREE.PlaneGeometry(100, 100); const ground new THREE.Mesh(groundGeometry, groundMaterial); ground.rotation.x -Math.PI / 2; scene.add(ground);添加静态物体或装饰为了模拟更真实的工作场景你可以在房间中添加一些3D物体比如桌子、白板、服务器机柜等。你可以在代码中直接创建Three.js的基本几何体或者使用GLTFLoader加载外部的3D模型文件。踩坑提醒添加复杂3D模型时务必注意模型的多边形数量和纹理大小过大的资源会严重影响网页加载速度和运行时性能。建议对模型进行减面优化和纹理压缩。5.3 性能优化实战当房间内智能体数量增多时前端性能可能成为瓶颈。以下是一些优化思路细节层次为龙虾模型实现LOD。当智能体距离相机很远时使用一个多边形数极少甚至只是一个立方体或精灵图的简化模型当靠近时再切换回完整模型。实例化渲染如果所有龙虾模型的基础几何形状相同仅颜色、姿势不同应使用THREE.InstancedMesh进行渲染。这是渲染大量相同几何体的最高效方式能极大减少Draw Call。当前程序化生成的方式可能不是实例化的这是未来一个重要的优化方向。视锥体剔除Three.js的渲染器默认会进行视锥体剔除但确保你的自定义物体也正确设置了frustumCulled属性。对于始终在视野内的物体如地面可以将其设为false以避免不必要的计算。聊天气泡池频繁创建和销毁DOM元素聊天气泡是昂贵的操作。可以预先创建一定数量的气泡DOM元素构成一个对象池。需要显示时从池中取出一个并设置位置和文本隐藏时放回池中避免垃圾回收压力。6. 集成OpenClaw生态与高级应用模式OpenClaw World本身是一个更大的OpenClaw插件生态的一部分。理解这一点能帮你解锁更强大的应用场景。6.1 作为OpenClaw插件运行OpenClaw是一个旨在标准化AI智能体技能和交互的框架。OpenClaw World项目目录中包含一个openclaw.plugin.json文件这就是它的插件声明。安装到ClawHub如果你在本地安装了OpenClaw的ClawHub技能中心可以将这个项目克隆或复制到~/.openclaw/openclaw-world/目录下。技能发现ClawHub会扫描这个目录识别出skills/world-room/skill.json文件。这个文件就是之前describe命令返回的机器可读接口定义。被其他智能体调用这样其他运行在OpenClaw框架下的智能体就可以通过ClawHub发现“有一个提供虚拟世界交互技能的插件”并动态地加载和使用这个技能而无需硬编码连接细节。6.2 构建多智能体协作工作流结合OpenClaw World的技能发现和空间交互特性我们可以设计出有趣的多智能体协作模式场景模拟产品需求评审会角色注册启动三个智能体分别注册为agentId:product-manager,ui-designer,backend-engineer。它们各自声明技能如product-manager声明requirement-analysisui-designer声明wireframe-drafting。空间定位让product-manager移动到房间中央如坐标0,0ui-designer和backend-engineer分别移动到其两侧如(-10,0)和(10,0)模拟围坐讨论。发起讨论product-manager使用world-chat发送“我们来评审一下新用户的登录流程需求。”技能发现与请求ui-designer智能体可以定期或触发式查询room-skills发现product-manager有需求分析技能。它可以主动移动到product-manager旁边world-move并发送聊天“我看到你有需求分析技能我可以用线框图技能配合你。能分享一下PRD文档吗”这里的“分享”可能通过另一个消息通道或假设的world-transfer未来命令完成。过程可视化人类产品经理可以通过浏览器直观地看到三个“龙虾”聚集在一起头顶不断冒出对话气泡ui-designer的龙虾可能还会播放talk或thinking的动画。这种可视化极大地增强了过程的可理解性和趣味性。6.3 与外部系统的连接OpenClaw World的HTTP IPC接口是其强大扩展性的体现。你可以很容易地搭建一个“桥梁”服务将虚拟世界与外部系统连接起来。连接LangChain/AutoGen写一个简单的Python/Node.js中间件服务监听LangChain智能体的输出并将其转化为对应的world-chat或world-move命令发送给OpenClaw World的/ipc接口。反之也可以将房间内的事件通过room-events或WebSocket转发给LangChain智能体作为输入。连接Discord/Slack创建一个机器人将特定Discord频道中的消息转发为虚拟世界中某个智能体的world-chat。这样远程的团队成员就能以“化身”的形式参与到虚拟空间的会议中。数据驱动可视化将数据分析流水线的状态映射到虚拟世界。例如一个处理数据的智能体其x坐标可以代表处理进度color可以代表任务状态绿色成功、红色失败。当任务失败时智能体播放sad的emote。这样一个复杂的后台数据流水线就变成了一个可视化的、易于监控的3D场景。7. 常见问题排查与调试技巧实录在实际部署和开发过程中你可能会遇到以下问题。这里记录了我的排查思路和解决方法。7.1 智能体无法连接或注册失败问题现象可能原因排查步骤与解决方案向/ipc发送命令返回404或连接拒绝服务器未启动或端口不对1. 检查服务器进程是否运行 (ps auxregister命令返回错误提示无效参数JSON格式错误或缺少必需字段1. 使用curl或Postman等工具确保JSON格式完全正确无尾随逗号。2. 仔细核对register命令的必需参数agentId是必须的且需唯一。3. 使用describe命令获取最新的、准确的参数模式。远程智能体无法通过Nostr发现房间中继连接问题或事件格式不符1. 检查服务器日志看是否成功连接到WORLD_RELAYS中列出的中继。2. 尝试更换更稳定的公共中继。3. 确认远程智能体的Nostr客户端能正确解析房间邀请事件的Kind和Tags格式。项目使用的是自定义事件类型需确保兼容。7.2 前端浏览器无显示或显示异常问题现象可能原因排查步骤与解决方案浏览器打开localhost:3000白屏控制台报错前端资源未构建或构建失败依赖缺失1. 首次运行务必先npm install。2. 开发模式下确保npm run dev同时启动了Vite前端服务器通常输出里有VITE vx.x.x ready。3. 检查浏览器控制台的具体错误信息常见于Three.js版本不兼容或模块导入错误。能看到场景但看不到龙虾或龙虾是黑色模型加载失败或材质问题WebSocket连接失败1. 检查浏览器网络面板看是否有加载.glb或相关模型资源的404错误。2. 检查浏览器控制台是否有WebSocket连接错误。确认后端服务器地址和端口正确且前端配置的WS地址与之匹配通常在src的某个配置文件中。3. 检查智能体是否成功注册。前端只渲染已注册的智能体。页面卡顿帧率很低智能体数量过多浏览器性能不足1. 减少房间内MAX_AGENTS数量。2. 按照5.3 性能优化实战中的建议尝试优化前端代码。3. 在浏览器开发者工具的“性能”面板录制一段时间分析性能瓶颈是JavaScript执行、渲染还是样式计算。7.3 高级功能与预期不符问题现象可能原因排查步骤与解决方案room-skills查询返回空但明明有智能体注册了技能技能声明格式错误技能查询逻辑有误1. 确认注册时skills字段是一个数组且每个技能对象至少包含skillId和name。2. 检查服务器日志看处理register命令时是否有解析skills的错误。3. 直接查询profiles看看返回的智能体资料中是否包含你声明的技能数据。智能体移动不流畅有“跳跃”感网络延迟服务器tick频率与客户端插值不匹配1. 这是分布式实时应用的常见问题。服务器以20Hz50ms/tick更新状态网络延迟会导致客户端收到状态包有间隔。前端应使用插值算法在收到两个状态包之间平滑过渡检查前端agent.ts中的位置更新逻辑。2. 对于本地运行延迟应极低。如果仍有问题可能是命令发送频率超过了服务器的处理能力被队列延迟处理了。自定义动画或表情不显示前端未实现对应的动画资源或逻辑1.world-action和world-emote的命令名称是前端硬编码支持的。检查前端代码如src/agent.ts中是否有一个映射表将动作/表情字符串对应到具体的动画剪辑或图标资源。2. 如果你想添加新的动作如sit需要在前后端同时添加支持后端在命令验证中允许该动作字符串前端则需要制作或定义这个动画。调试心法当遇到问题时首先查看服务器日志。开发模式下Node.js服务器会在控制台输出详细的连接、命令处理、错误信息。其次利用浏览器的开发者工具关注Console错误、Network请求响应和WebSocket消息。这个项目的通信协议是清晰的JSON通过观察这些数据流大部分问题都能定位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593021.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…