基于OpenClaw的MacOS自动化AI助手:架构、配置与实战

news2026/5/12 21:31:08
1. 项目概述一个为MacOS设计的自动化AI助手最近在折腾桌面自动化特别是想把一些高频、重复的跨应用操作给整合起来。比如我经常需要在Telegram或WhatsApp上接收消息然后根据内容去浏览器查资料、整理到笔记软件或者触发一些本地的脚本。手动操作不仅效率低还容易打断思路。于是我开始寻找一个能打通这些环节的解决方案最终发现并深度使用了MeyerZhou的openclaw项目。简单来说openclaw是一个运行在MacOS上的开源自动化AI助手框架。它的核心目标是让你能通过自然语言或预设规则指挥你的Mac电脑自动完成一系列跨应用的任务。你可以把它想象成一个高度可编程的“数字助手”它不仅能监听Telegram或WhatsApp的消息通过ClawdBot组件还能操作浏览器、调用系统API、运行脚本甚至集成大语言模型AI来理解你的模糊指令并生成自动化流程。关键词ai-assistant和automation精准地概括了它的本质一个智能化的自动化工具链。这个项目非常适合那些工作流严重依赖MacOS生态且渴望提升效率的开发者、产品经理或内容创作者。如果你也厌倦了在十几个应用窗口间反复切换、复制粘贴那么openclaw提供的“一句话触发全自动执行”的能力可能会极大地解放你的生产力。它不是一个开箱即用的成品软件而是一个需要你根据自己需求进行配置和扩展的框架这带来了极高的灵活性同时也意味着需要一定的动手能力。2. 核心架构与设计思路拆解openclaw不是一个单一的工具而是一个精心设计的模块化系统。理解它的架构是后续灵活使用和扩展的基础。整个项目可以看作由“输入”、“大脑”、“执行”三个核心层构成。2.1 输入层ClawdBot与事件捕获项目的起点是如何接收指令。openclaw目前主要集成了ClawdBot这是一个用于对接Telegram和WhatsApp的机器人模块。为什么选择即时通讯软件作为入口这其实是一个非常符合用户习惯的设计。我们每天大量时间停留在这些App上将其作为指令入口无需打开额外软件自然且无缝。ClawdBot在这里扮演了“接线员”的角色它负责长轮询或Webhook监听持续监控指定的Telegram群组、频道或私聊以及WhatsApp通常通过类似whatsapp-web.js的库的消息。消息预处理接收到的消息可能是文本、图片、甚至文件。ClawdBot会对其进行初步解析提取关键信息如发送者、纯文本内容、媒体文件等并将其格式化为一个标准化的事件Event。事件分发将这个标准化事件发布到内部的消息总线或事件队列中等待核心处理层来消费。这种设计的好处是输入源可以轻松扩展。未来如果你想增加通过Slack、Discord甚至电子邮件触发自动化只需要为新的输入源编写一个类似的“Bot”模块即可核心逻辑无需大变。2.2 处理层AI引擎与规则引擎这是openclaw的“大脑”决定了它是否智能。处理层通常包含两套并行的机制规则引擎确定性路径这是基础。你可以配置一些明确的“如果-那么”规则。例如“如果消息来自‘任务群组’且包含关键词‘日报’那么执行generate_daily_report.sh脚本”。这适用于流程固定、逻辑清晰的场景。在openclaw中这部分可能通过YAML配置文件或一个简单的规则匹配模块来实现。AI引擎非确定性路径这是体现ai-assistant关键词的精髓所在。当输入指令无法匹配任何预设规则时或者指令本身比较模糊如“帮我总结一下今天群里关于项目X的讨论”就会交由AI引擎处理。这里通常集成了一个大语言模型LLM的API例如OpenAI的GPT或开源的本地模型。AI引擎的任务是意图识别理解用户这条消息到底想干什么是查询信息、执行操作还是创作内容。参数提取从指令中提取关键参数如日期“今天”、主题“项目X”。动作序列生成将模糊的指令“翻译”成openclaw能够理解的一系列具体、可执行的原子操作步骤。例如上述指令可能被翻译为1. 调用ClawdBot历史消息查询接口获取“今天”在“指定群组”的所有消息。2. 过滤出包含“项目X”的消息。3. 调用AI的摘要功能对过滤后的消息进行总结。4. 将总结结果通过ClawdBot发送回用户。这两套引擎可以协同工作。通常先走规则引擎进行快速匹配若匹配失败则降级到AI引擎进行理解和生成兼顾了效率与灵活性。2.3 执行层动作执行器与MacOS集成“大脑”规划好步骤后就需要“手脚”去执行。openclaw的执行层由一系列“动作执行器”组成这是它与MacOS深度集成的体现。这些执行器可能包括AppleScript/JXA执行器这是控制MacOS应用如Safari、Finder、Notes、Calendar的利器。可以通过它模拟点击、菜单操作、获取窗口内容等。Shell命令执行器直接运行终端命令或脚本调用系统能力或你自定义的工具链。浏览器自动化执行器如通过Puppeteer控制Chrome或Safari进行网页导航、数据抓取、表单填写等。API调用执行器发送HTTP请求到内部或外部的RESTful API获取或提交数据。桌面GUI自动化工具如pyautogui作为AppleScript的补充进行更底层的屏幕坐标操作。执行层的工作是接收处理层下发的具体动作指令如“在Safari中打开URLxxx”、“运行脚本yyy”调用对应的执行器完成任务并将执行结果成功/失败、输出数据返回给处理层最终可能由处理层格式化后通过输入层反馈给用户。3. 环境搭建与核心配置详解要让openclaw跑起来需要搭建一个包含运行时、依赖和通信环境的基础设施。以下步骤基于常见的项目结构进行合理补充。3.1 基础运行环境准备首先确保你的MacOS系统版本较新建议macOS Monterey或更高。然后需要安装以下核心工具HomebrewMacOS的包管理器后续安装很多依赖都靠它。如果未安装在终端执行/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)Node.js与npm由于ClawdBot及很多现代自动化工具链基于Node.js这是必须的。通过Homebrew安装长期支持版brew install node18 echo export PATH/opt/homebrew/opt/node18/bin:$PATH ~/.zshrc source ~/.zshrc安装后运行node --version和npm --version验证。Python 3许多系统管理脚本和AI库依赖Python。MacOS自带Python 2我们需要Python 3。brew install python3.11同样通过python3 --version确认安装成功。Git用于克隆openclaw项目代码。通常系统已自带若无则brew install git。3.2 项目初始化与依赖安装假设项目代码托管在GitHub上我们将其克隆到本地并安装依赖。# 克隆项目此处路径为示例请替换为实际仓库地址 git clone https://github.com/MeyerZhou/openclaw.git cd openclaw # 安装Node.js项目依赖假设项目根目录有package.json npm install # 安装Python依赖假设项目有requirements.txt pip3 install -r requirements.txt注意在实际操作中务必仔细阅读项目README.md文件。不同的项目结构依赖安装命令可能不同。有些项目可能使用yarn或pnpmPython环境也可能推荐使用virtualenv或poetry进行隔离管理。盲目执行上述命令可能不生效。3.3 关键服务配置机器人与AI密钥这是配置中最关键也最敏感的一环涉及外部服务的接入。1. Telegram Bot配置打开Telegram搜索BotFather并开始对话。发送/newbot命令按照提示设置机器人名字和用户名必须以bot结尾。创建成功后BotFather会提供一个HTTP API Token形如1234567890:ABCdefGhIJKlmNoPQRsTUVwxyZ。这个Token是ClawdBot与Telegram服务器通信的凭证必须妥善保管。在openclaw的配置文件例如config/config.yaml或.env文件中找到类似TELEGRAM_BOT_TOKEN的配置项将Token填入。2. WhatsApp集成配置可选但复杂WhatsApp没有官方开放的Bot API通常需要通过逆向工程其Web版协议来实现例如使用whatsapp-web.js库。这需要你有一个活跃的WhatsApp账号并通过二维码扫描的方式让“机器人”登录你的Web版WhatsApp。这个过程存在账号被风控的风险且需要处理会话持久化保存登录状态等问题。在openclaw中如果集成了此功能配置项可能涉及会话存储路径、客户端ID等。务必遵循项目文档的指引。3. AI服务API密钥配置如果你希望使用AI引擎如OpenAI的GPT需要去对应平台注册账号并获取API Key。以OpenAI为例登录平台后在API Keys页面创建新的密钥。同样在openclaw的配置文件中找到如OPENAI_API_KEY的配置项并填入。安全警告API Key拥有计费和访问权限绝不能提交到公开的代码仓库。务必使用环境变量或配置文件并确保.gitignore文件排除了这些敏感配置文件。一个典型的.env文件内容可能如下TELEGRAM_BOT_TOKEN你的Telegram_Bot_Token OPENAI_API_KEY你的OpenAI_API_Key OPENAI_BASE_URLhttps://api.openai.com/v1 # 如果你使用其他兼容API的服务可修改此地址 CLICKUP_API_KEY你的ClickUp_API_Key # 示例集成任务管理工具 PROJECT_WORKSPACE/Users/你的用户名/Projects # 示例自定义工作区路径4. 核心功能模块实战解析配置好环境后我们来深入看看openclaw几个核心模块是如何工作的以及如何编写自己的自动化任务。4.1 ClawdBot消息接收与指令解析ClawdBot通常是项目的入口点。我们来看一个简化的代码示例理解它如何工作。假设项目中使用node-telegram-bot-api库。// 示例bot/core/telegramBot.js const TelegramBot require(node-telegram-bot-api); const { processMessage } require(./eventProcessor); // 引入事件处理器 // 从环境变量读取Token const token process.env.TELEGRAM_BOT_TOKEN; // 使用轮询方式适合开发环境。生产环境建议配置Webhook。 const bot new TelegramBot(token, { polling: true }); // 监听任何文本消息 bot.on(message, async (msg) { const chatId msg.chat.id; const text msg.text; const userId msg.from.id; console.log(收到来自用户${userId}的消息: ${text}); // 1. 构建标准化事件对象 const event { platform: telegram, type: message, chatId, userId, rawText: text, timestamp: new Date().toISOString(), // 可以附加更多原始消息数据如图片、文件等 }; try { // 2. 将事件交给核心处理器 const response await processMessage(event); // 3. 将处理结果发送回用户 if (response response.reply) { await bot.sendMessage(chatId, response.reply); } } catch (error) { console.error(处理消息时出错:, error); await bot.sendMessage(chatId, 处理你的请求时出了点问题请稍后再试。); } }); // 监听特定的命令例如 /start bot.onText(/\/start/, (msg) { const chatId msg.chat.id; bot.sendMessage(chatId, 你好我是你的OpenClaw助手。发送 /help 查看可用命令。); }); console.log(Telegram Bot 已启动...);实操要点错误处理网络请求、API调用都可能失败必须有健壮的try...catch包裹并向用户返回友好提示避免机器人“静默死亡”。消息队列在高频消息场景下直接将处理逻辑写在回调函数里可能导致阻塞或消息丢失。更成熟的做法是将event对象放入一个消息队列如Redis、RabbitMQ由独立的消费者进程处理实现解耦和流量削峰。权限管理不是所有用户都应能触发所有命令。可以在processMessage开始时根据event.userId检查用户是否在白名单内。4.2 规则引擎与AI引擎的协作流程处理层是大脑我们通过一个具体的用户案例来理解其协作流程。假设用户向机器人发送消息“把https://example.com的文章保存到Notion。”步骤1规则引擎优先匹配规则引擎会扫描预定义的规则列表。可能有一条规则是如果消息以“保存到Notion”结尾且包含URL则触发save_url_to_notion工作流。如果匹配成功则直接提取URL参数调用对应的执行器。如果没有任何规则匹配则进入步骤2。步骤2AI引擎意图识别与规划将用户消息和可能的上下文如最近对话组合成Prompt发送给LLM。Prompt可能被设计成这样你是一个自动化助手。用户指令是“把https://example.com的文章保存到Notion。” 请将指令解析为以下JSON格式的动作序列 { intent: save_webpage_to_notion, parameters: { url: https://example.com, target: Notion }, steps: [ {action: fetch_webpage, params: {url: https://example.com}}, {action: extract_main_content, params: {}}, {action: format_for_notion, params: {}}, {action: notion_create_page, params: {database_id: 预设数据库ID}} ] }LLM会返回结构化的JSON数据。openclaw的AI引擎模块会解析这个JSON。步骤3动作序列执行与状态管理引擎拿到steps数组后会按顺序调用对应的动作执行器。每个执行器都是一个独立的函数或模块。关键在于状态传递第一步fetch_webpage的输出网页HTML需要传递给第二步extract_main_content作为输入。这通常通过一个共享的context对象来实现。// 伪代码示例 async function executeWorkflow(steps, initialContext) { let context { ...initialContext }; for (const step of steps) { const executor getExecutor(step.action); // 根据action名找到对应的执行器函数 try { const result await executor(step.params, context); // 将本次执行的结果合并到上下文中供后续步骤使用 context { ...context, ...result }; } catch (error) { // 记录错误并可能触发重试或补偿操作 throw new Error(执行步骤 ${step.action} 失败: ${error.message}); } } return context; // 返回最终上下文包含所有结果 }4.3 自定义动作执行器开发openclaw的强大之处在于你可以为任何操作编写执行器。让我们以“获取Mac电池信息”为例创建一个AppleScript执行器。首先在项目目录中创建执行器文件executors/systemInfoExecutor.js// executors/systemInfoExecutor.js const { exec } require(child_process); const util require(util); const execPromise util.promisify(exec); // 将回调风格的exec转为Promise风格 /** * 获取Mac系统信息电池的执行器 * param {Object} params - 动作参数例如{ infoType: battery } * param {Object} context - 共享上下文 * returns {PromiseObject} 返回包含电池信息的对象 */ async function getSystemInfo(params, context) { const { infoType battery } params; if (infoType battery) { try { // 使用pmset命令获取电池状态信息-g参数获取全局设置batt查看电池 const { stdout } await execPromise(pmset -g batt); // 解析输出示例输出Now drawing from Battery Power\n -InternalBattery-0 (id1234567) 85%; discharging; 3:23 remaining const lines stdout.split(\n); let batteryInfo {}; for (const line of lines) { if (line.includes(InternalBattery)) { const match line.match(/(\d)%/); // 提取百分比 batteryInfo.percentage match ? parseInt(match[1], 10) : null; if (line.includes(discharging)) batteryInfo.status 放电中; else if (line.includes(charging)) batteryInfo.status 充电中; else if (line.includes(AC attached)) batteryInfo.status 已连接电源; else batteryInfo.status 未知; const timeMatch line.match(/(\d:\d) remaining/); // 提取剩余时间 batteryInfo.remainingTime timeMatch ? timeMatch[1] : null; } else if (line.includes(Now drawing from)) { batteryInfo.powerSource line.replace(Now drawing from , ).replace(, ); } } return { success: true, data: { battery: batteryInfo } }; } catch (error) { console.error(获取电池信息失败:, error); return { success: false, error: 执行命令失败: ${error.message} }; } } else { return { success: false, error: 暂不支持的信息类型: ${infoType} }; } } // 导出执行器以便规则/AI引擎调用 module.exports { getSystemInfo };然后你需要在执行器注册中心注册它假设项目有一个executorRegistry.js文件// core/executorRegistry.js const systemInfoExecutor require(../executors/systemInfoExecutor); const registry { get_system_info: systemInfoExecutor.getSystemInfo, // ... 其他已注册的执行器 }; function getExecutor(actionName) { const executor registry[actionName]; if (!executor) { throw new Error(未找到动作执行器: ${actionName}); } return executor; } module.exports { getExecutor };现在无论是规则引擎还是AI引擎生成的步骤中只要包含{action: get_system_info, params: {infoType: battery}}就能调用这个执行器获取电池信息了。你可以用类似的模式创建控制音乐播放器、发送邮件、操作Excel等任何你需要的执行器。5. 构建实用自动化工作流示例理解了核心模块后我们来设计两个实用的自动化工作流从需求分析到配置实现。5.1 示例一跨平台消息归档与摘要需求每天下午6点自动将Telegram某个技术讨论群当天所有关于“Python”的消息摘要后保存到Notion数据库并私信发送摘要给我。设计思路触发使用定时任务Cron Job而非消息触发。获取数据调用Telegram Bot API或ClawdBot封装的方法获取指定群组当天的历史消息。过滤与处理在本地过滤出包含“Python”关键词的消息并组合成文本。生成摘要调用AI API如GPT-3.5-turbo对组合的文本进行摘要。持久化将摘要结果通过Notion API创建为一个新页面。通知通过Telegram Bot私信我摘要的链接和核心内容。配置与实现要点定时任务可以使用node-cron库在openclaw主进程中启动一个定时任务。const cron require(node-cron); cron.schedule(0 18 * * *, () { // 每天18:00执行 triggerWorkflow(daily_python_digest); });历史消息获取Telegram Bot API有getChatHistory等方法但可能受限。更可靠的方式是让ClawdBot持续监听并实时将消息存储到本地数据库如SQLite或缓存中定时任务直接从数据库查询。AI摘要Prompt设计请将以下关于Python的技术讨论内容总结成一份不超过200字的日报突出讨论的主题、解决的问题和达成的共识如果有的话。内容[此处粘贴过滤后的消息文本]错误处理任何一个环节失败如网络超时、API限额都应记录详细日志并可能触发重试机制或发送失败告警。5.2 示例二智能化的网页内容抓取与处理需求我向机器人发送一个URL并说“分析一下这个页面的主要观点”。机器人应抓取页面正文调用AI进行分析总结并将结果和原文链接一起保存到Readwise我的稍后读服务。设计思路触发与解析ClawdBot接收消息AI引擎解析出意图analyze_webpage和参数url。网页抓取调用Puppeteer执行器无头访问该URL提取纯净的正文文本可借助readability这类库。AI分析将正文文本发送给LLMPrompt为请用三个要点总结以下文章的核心观点并指出其论述逻辑。文章内容[正文]数据封装将AI总结的要点、原文标题、URL封装成特定格式。保存至Readwise调用Readwise API的/v3/save接口将封装的数据作为“文章”类型保存。技术细节与避坑指南反爬虫处理一些网站会屏蔽无头浏览器。需要在Puppeteer中设置合理的user-agent并添加--no-sandbox等启动参数。对于更复杂的反爬可能需要使用付费的代理IP池或更高级的模拟服务。内容提取准确性readability库并非百分百准确对于非标准结构的网页可能提取出无关内容。可以结合多个提取算法或针对特定网站如知乎、微信公众号编写定制化的提取规则。API调用限速与费用无论是OpenAI API还是Readwise API都有调用频率和费用限制。在执行器中必须加入延时例如setTimeout和错误重试逻辑如使用指数退避算法并监控API使用量避免意外的高额账单。敏感内容过滤在将任意网页内容发送给第三方AI服务前应考虑隐私和合规性。对于企业内部或敏感URL应设计一个过滤或审批流程。6. 部署、运维与问题排查让openclaw在后台稳定运行需要一些部署和运维技巧。6.1 进程守护与持久化运行在开发时我们可能用npm start或node app.js来运行。但为了确保它24小时在线需要进程守护。方案一使用pm2推荐pm2是一个强大的Node.js进程管理器。# 全局安装pm2 npm install -g pm2 # 在项目根目录用pm2启动应用并命名为openclaw pm2 start app.js --name openclaw # 设置开机自启MacOS pm2 startup # 执行pm2提示的命令然后保存当前进程列表 pm2 save # 常用命令 pm2 status openclaw # 查看状态 pm2 logs openclaw # 查看日志 pm2 restart openclaw # 重启 pm2 stop openclaw # 停止 pm2 delete openclaw # 删除pm2会自动在进程崩溃后重启并管理日志输出。方案二使用launchdMacOS原生创建一个com.user.openclaw.plist文件放在~/Library/LaunchAgents/目录下。?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyLabel/key stringcom.user.openclaw/string keyProgramArguments/key array string/usr/local/bin/node/string !-- 你的node路径 -- string/path/to/your/openclaw/app.js/string !-- 你的app.js绝对路径 -- /array keyWorkingDirectory/key string/path/to/your/openclaw/string keyKeepAlive/key true/ keyStandardOutPath/key string/tmp/openclaw.stdout.log/string keyStandardErrorPath/key string/tmp/openclaw.stderr.log/string /dict /plist然后加载它launchctl load ~/Library/LaunchAgents/com.user.openclaw.plist launchctl start com.user.openclaw这种方式更系统化但配置和调试稍复杂。6.2 日志管理与监控清晰的日志是排查问题的生命线。不要只用console.log。结构化日志使用winston或pino等日志库可以按级别info, error, debug输出并附加时间戳、进程ID、请求ID等信息。const logger require(./utils/logger); // 自定义的日志模块 logger.info(收到Telegram消息, { chatId, userId }); logger.error(调用OpenAI API失败, { error: error.message, endpoint });日志分割与归档配置日志库将日志写入文件并使用pm2-logrotate如果使用pm2或logrotate工具定期分割、压缩旧日志防止磁盘占满。关键指标监控为关键操作如AI API调用、消息处理添加计数器和耗时统计。可以简单地将这些指标打印到日志或推送到监控系统如Prometheus。监控“消息处理延迟”、“AI调用失败率”等指标能帮你提前发现性能瓶颈或服务异常。6.3 常见问题排查速查表以下是我在运行openclaw类项目时遇到的一些典型问题及解决思路问题现象可能原因排查步骤与解决方案Bot无响应1. Token配置错误。2. 网络问题无法连接Telegram服务器。3. 进程已崩溃。1. 检查.env文件或环境变量中的TELEGRAM_BOT_TOKEN是否正确确保没有多余空格。2. 尝试在终端用curl测试网络连通性。如果是网络环境问题需检查本地网络设置。3. 运行pm2 status或ps aux | grep node查看进程是否存活。检查应用日志是否有未捕获的异常导致崩溃。AI引擎返回错误或空响应1. API Key无效或余额不足。2. 请求超时或网络中断。3. Prompt设计不合理被AI模型拒绝。1. 登录OpenAI等平台控制台验证API Key状态和余额。2. 在代码中增加请求超时设置和重试逻辑。检查本地网络或代理设置。3. 简化或重构Prompt避免请求过长或包含敏感词。在代码中打印出实际发送的Prompt进行调试。AppleScript执行失败1. 应用未启动或窗口未聚焦。2. 系统权限不足辅助功能权限。3. 脚本语法错误或路径错误。1. 在执行AppleScript前先通过脚本启动应用tell application Safari to activate。2. 前往系统设置 隐私与安全性 辅助功能确保你的终端如Terminal、iTerm或Node.js运行时已被勾选。这是MacOS自动化最常见的坑3. 先在“脚本编辑器”应用中单独测试你的AppleScript代码确保它能独立运行。定时任务不执行1. Cron表达式错误。2. 服务器时区设置问题。3. 定时任务函数内部有未处理的错误导致静默失败。1. 使用在线Cron表达式验证工具检查表达式。2. 确保运行环境的系统时区与你期望的时区一致。可以在代码中打印new Date()进行验证。3. 在定时任务的回调函数内部添加最外层的try...catch并将错误详细记录到日志。内存使用持续增长内存泄漏1. 未正确关闭Puppeteer浏览器实例或数据库连接。2. 全局变量或缓存无限累积。1. 确保每一个puppeteer.launch()都有对应的browser.close()。使用async/await和try...finally块来保证资源释放。2. 定期清理全局缓存对象。使用Node.js的--inspect参数和Chrome DevTools的Memory面板进行内存快照分析查找泄漏点。6.4 安全与隐私考量自动化工具能力强大也意味着风险更高。最小权限原则为Bot和AI服务申请的API Key只授予其完成任务所必需的最小权限。例如Notion集成Token只给其访问特定数据库的权限。敏感信息隔离绝对不要将API Token、数据库密码等硬编码在代码中。使用.env文件并通过.gitignore确保其不会被提交。考虑使用密钥管理服务。用户输入验证与消毒对于用户提供的URL、命令参数必须进行严格的验证。防止注入攻击如通过URL参数执行恶意命令。例如在执行用户提供的URL的网页抓取前可以检查域名是否在白名单内。操作确认机制对于删除文件、发送邮件、修改重要数据等危险操作应在执行前通过二次确认例如回复“确认执行删除操作吗回复Y确认”来防止误触发。审计日志记录所有自动化操作的详细日志包括谁用户ID、在什么时间、触发了什么操作、操作结果如何。这对于事后追溯和问题排查至关重要。经过这样一番从架构到实操从配置到运维的深度折腾openclaw才能真正从一个概念项目转变为你日常工作流中一个可靠、高效的自动化伙伴。它需要持续的调优和维护但带来的效率提升和思维解放无疑是值得的。最关键的是通过构建它你不仅获得了一个工具更深入理解了自动化、集成与智能代理系统的设计哲学这种能力可以迁移到无数其他场景中。

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