OpenManus 开发实战图文教程

news2026/4/9 12:24:47
OpenManus 开发实战图文教程将自然语言转化为可执行工作流的 AI 智能体框架文章目录OpenManus 开发实战图文教程1. 什么是 OpenManus1.1 简介1.2 核心能力1.3 应用场景1.4 为什么选择 OpenManus2. 核心架构2.1 六层架构设计2.2 智能体继承体系2.3 工具系统架构3. 快速开始3.1 环境准备3.2 第一个示例3.3 浏览器自动化示例4. 核心概念4.1 Think-Act 循环4.2 浏览器自动化原理4.3 内存系统4.4 沙箱环境Daytona5. 实战案例5.1 案例 1网站 SEO 审查5.2 案例 2竞品分析报告5.3 案例 3数据采集与可视化6. 进阶技巧6.1 提高任务成功率技巧 1提供清晰的任务描述技巧 2合理设置步数限制技巧 3分步骤处理复杂任务6.2 错误处理与调试启用详细日志保存截图用于调试查看内存状态6.3 自定义工具6.4 性能优化建议建议 1使用缓存避免重复查询建议 2并行执行多个任务建议 3选择合适的 LLM 模型7. 常见问题Q1: 为什么 Agent 一直点击错误的元素Q2: 日期选择器无法正确操作怎么办Q3: 如何降低 API 调用成本Q4: 本地浏览器和沙箱浏览器有什么区别Q5: 如何提高执行速度Q6: 如何处理超时错误总结 核心优势 学习路径 下一步行动 参考资源附录A. 常用工具速查表B. 配置参数说明C. 常见错误码1. 什么是 OpenManus1.1 简介OpenManus 是由 MetaGPT 团队在 2025 年 7 月推出的开源通用 AI 智能体框架。它的核心理念是**“无堡垒、纯开放”**能够将自然语言需求直接转化为可执行的工作流。1.2 核心能力 浏览器自动化 → 自动访问网站、填写表单、提取信息 代码执行 → 生成并运行 Python 代码 数据分析 → 处理数据、生成可视化图表 文件操作 → 读写文件、整理文档1.3 应用场景场景一数据采集与可视化收集最近一周的比特币价格生成走势图并导出为 HTML场景二电商运营给三款新品写多平台文案分析竞品价格检测合规性场景三市场研究分析比亚迪和小鹏汽车在欧洲市场的竞争情况生成报告1.4 为什么选择 OpenManus开箱即用丰富的工具库支持浏览器、搜索、代码执行等安全可靠通过沙箱环境隔离执行保护系统安全高效低成本使用文本描述而非视觉模型降低 API 成本灵活扩展支持自定义工具和多智能体协作易于使用简洁的 API 设计快速上手2. 核心架构2.1 六层架构设计OpenManus 采用清晰的分层架构每层负责特定的功能层级名称功能第 1 层用户交互层CLI、Web API、可视化界面第 2 层应用入口层单智能体、多智能体协作、远程工具接入第 3 层智能体层BaseAgent → ReActAgent → Manus 四级继承第 4 层工具层浏览器、搜索、代码执行、文件操作等工具第 5 层流程控制层PlanningFlow 自动任务拆分和执行第 6 层基础设施层Docker、Redis、FAISS、LLM 适配器2.2 智能体继承体系# 四级继承设计逐步增强能力 ​ BaseAgent # 基础智能体 - 提供状态管理、内存管理、执行循环 ↓ ReActAgent # 推理-行动智能体 - 实现Think-Act 推理模式 ↓ ToolCallAgent # 工具调用智能体 - 支持工具调用决策和执行 ↓ Manus # 主要通用智能体 - 集成浏览器能力和完整工具集2.3 工具系统架构┌──────────────────────────────────────┐ │ 基础工具 │ │ • WebSearch: 多引擎搜索Baidu→DuckDuckGo→Google→Bing│ │ • BrowserUseTool: 浏览器自动化 │ │ • PythonExecute: 代码执行 │ │ • StrReplaceEditor: 文件编辑 │ └──────────────────────────────────────┘ ​ ┌──────────────────────────────────────┐ │ 沙箱工具 (Daytona) │ │ • SandboxBrowserTool: 沙箱浏览器 │ │ • SandboxFilesTool: 沙箱文件操作 │ │ • SandboxShellTool: 沙箱命令执行 │ │ • SandboxVisionTool: 沙箱视觉识别 │ └──────────────────────────────────────┘ ​ ┌──────────────────────────────────────┐ │ 数据分析工具 │ │ • 数据可视化: 图表生成 │ │ • 爬虫工具: 网页内容提取 │ └──────────────────────────────────────┘3. 快速开始3.1 环境准备# 安装 OpenManus pip install openmanus ​ # 可选安装 Daytona 沙箱环境 pip install daytona3.2 第一个示例import asyncio from openmanus import Manus ​ async def main(): 你的第一个 OpenManus 程序 # 创建 Agent 实例 agent await Manus.create() # 执行任务 result await agent.run(搜索 OpenManus 的最新进展) print(result) ​ # 运行 asyncio.run(main())输出示例OpenManus 最新进展 1. MetaGPT 团队在 2025 年 7 月发布了 OpenManus 2.0 版本 2. 新增了多智能体协作功能 3. 优化了浏览器自动化性能 4. 支持 10 种 LLM 模型 ...3.3 浏览器自动化示例import asyncio from openmanus import Manus async def search_flight(): 查询机票 - 完整示例 agent await Manus.create() # 执行任务 result await agent.run( 查询 2025年1月30日从上海到北京的机票。 具体要求 1. 选择单程 2. 找出价格最低的三个航班 3. 包括航班号、起飞时间、到达时间、价格 4. 按价格从低到高排序 ) print(result) # 运行 asyncio.run(search_flight())4. 核心概念4.1 Think-Act 循环OpenManus 的核心执行流程是Think-Act 循环┌─────────────────────────────────────┐ │ 用户输入任务 │ └──────────────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────────┐ │ 【Think 阶段】 │ │ • LLM 分析当前状态 │ │ • 查看内存中的历史消息 │ │ • 决定下一步使用哪个工具 │ └──────────────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────────┐ │ 【Act 阶段】 │ │ • 执行选定的工具 │ │ • 获取执行结果 │ │ • 将结果添加到内存 │ └──────────────┬──────────────────────┘ │ ↓ ┌─────┴─────┐ │ 回到Think │◄────┐ └─────┬─────┘ │ │ │ ↓ │ ┌─────────────────┐ │ │ 任务完成或 │ │ │ 达到步数上限 │───┘ └─────────────────┘4.2 浏览器自动化原理OpenManus 使用文本描述而非视觉模型来识别页面元素这样可以大幅降低成本页面元素示例 URL: https://flights.ctrip.com Title: 携程机票预订 交互元素列表: [0]button酒店/button [1]button机票/button [2]button火车票/button [37]input出发地/input [39]input目的地/input [40]input出发日期/input [43]button搜索/button 元素格式说明 [index]typetext/type - index: 元素的唯一标识符从 0 开始 - type: HTML 元素类型button, input, a 等 - text: 元素的描述性文本 LLM 根据这些文本描述选择要操作的元素工作流程访问网页浏览器自动加载页面元素识别遍历 DOM 树识别所有可交互元素生成描述为每个元素生成文本描述和索引LLM 决策根据描述选择要操作的元素索引执行操作通过索引精确点击或输入4.3 内存系统OpenManus 使用内存系统记录完整的对话历史和工具执行结果# 内存结构 Memory: - messages: List[Message] Message: - role: user | assistant | tool | system - content: 消息内容 - tool_calls: 工具调用列表assistant - base64_image: 页面截图tool # 示例 messages [ Message( roleuser, content查询机票 ), Message( roleassistant, content我需要先访问携程网站, tool_calls[{name: browser_use, arguments: ...}] ), Message( roletool, content已成功访问网站, base64_image... ) ]4.4 沙箱环境Daytona当你让 AI 执行代码时可能会带来安全风险。Daytona 沙箱的作用是核心特性隔离执行代码在远程容器中运行不影响宿主机️安全防护即使代码有恶意行为也无法访问本地系统资源管理自动清理临时文件和资源️实时监控通过 VNC 可以实时查看执行过程工作原理用户请求 → OpenManus → 代码生成 → Daytona 容器 → 安全执行 → 返回结果 ↓ 隔离环境 - 独立的文件系统 - 受限的网络访问 - 资源限制 - 自动清理使用示例from openmanus import SandboxManus async def use_sandbox(): 使用沙箱 Agent 执行任务 # 创建 SandboxManus agent await SandboxManus.create() # 在沙箱中执行任务 result await agent.run( 1. 访问 http://example.com 2. 提取页面内容 3. 将结果保存到 /workspace/result.md ) # 获取 VNC URL可以实时查看沙箱桌面 print(fVNC URL: {agent.vnc_url}) # 清理资源 await agent.cleanup() return result5. 实战案例5.1 案例 1网站 SEO 审查import asyncio from openmanus import Manus async def seo_audit(): 对网站进行 SEO 审查 agent await Manus.create() result await agent.run( 对 http://class.wucai.com 进行 SEO 审查提供详细的优化报告。 检查内容包括 1. 页面标题和描述 2. 关键词使用情况 3. 图片 alt 属性 4. 链接结构 5. 页面加载速度如果可以检测 6. 移动端适配情况 最后提供可操作的优化建议。 ) return result # 执行 result asyncio.run(seo_audit()) print(result)输出示例SEO 审查报告 网站http://class.wucai.com ✅ 优点 - 页面标题清晰 - 关键词使用合理 ⚠️ 需要改进 - 缺少 meta description - 部分图片缺少 alt 属性 - 内部链接结构可以优化 优化建议 1. 添加 meta description 标签 2. 为所有图片添加 alt 属性 3. 优化内部链接结构 ...5.2 案例 2竞品分析报告import asyncio from openmanus import Manus async def competitive_analysis(): 生成竞品分析报告 agent await Manus.create() result await agent.run( 写一份关于 2025 年中国新能源汽车出海欧洲的竞品分析报告。 重点分析比亚迪和小鹏汽车 1. 在欧洲的市场份额和销量数据 2. 主要车型和定价策略 3. 市场推广策略 4. 用户评价和品牌认知度 5. 面临的挑战和机遇 最后给出 SWOT 分析和战略建议。 ) return result # 执行 result asyncio.run(competitive_analysis()) print(result)执行流程分解Step 1: 搜索 比亚迪 欧洲市场 销量 → 工具: web_search → 结果: 获得销量数据 Step 2: 访问相关网页获取详细信息 → 工具: browser_use (go_to_url) → 结果: 访问官方数据页面 Step 3: 提取具体数据 → 工具: browser_use (extract_content) → 结果: 提取销量数字 Step 4: 搜索 小鹏汽车 欧洲市场 → 工具: web_search → 结果: 获得小鹏汽车信息 Step 5-20: 持续收集信息 → 多次搜索和访问网页 → 收集定价、车型、评价等信息 Step 21: 生成分析报告 → 工具: python_execute → 结果: 使用 Python 生成可视化图表 Step 22-25: 完善报告 → 整合所有信息 → 生成最终报告5.3 案例 3数据采集与可视化import asyncio from openmanus import Manus async def data_visualization(): 采集数据并生成可视化 agent await Manus.create() result await agent.run( 1. 访问 https://api.coinmarketcap.com/v1/ticker/bitcoin/ 2. 提取比特币价格数据 3. 使用 Python 生成价格走势图 4. 保存为 HTML 文件 ) return result # 执行 result asyncio.run(data_visualization()) print(result)Agent 会自动生成类似下面的 Python 代码import requests import pandas as pd import matplotlib.pyplot as plt # 获取数据 response requests.get(https://api.coinmarketcap.com/v1/ticker/bitcoin/) data response.json() # 提取价格 prices [float(coin[price_usd]) for coin in data] dates [coin[last_updated] for coin in data] # 创建 DataFrame df pd.DataFrame({ 日期: dates, 价格: prices }) # 创建图表 plt.figure(figsize(12, 6)) plt.plot(df[日期], df[价格], linewidth2) plt.title(比特币价格走势, fontsize16) plt.xlabel(时间, fontsize12) plt.ylabel(价格 (USD), fontsize12) plt.grid(True, alpha0.3) plt.xticks(rotation45) plt.tight_layout() plt.savefig(bitcoin_price.png, dpi300) # 生成 HTML 报告 html f !DOCTYPE html html head title比特币价格走势/title style body {{ font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; }} h1 {{ color: #333; text-align: center; }} .chart {{ text-align: center; margin: 30px 0; }} img {{ max-width: 100%; border: 1px solid #ddd; border-radius: 8px; }} /style /head body h1比特币价格走势分析/h1 div classchart img srcbitcoin_price.png alt比特币价格走势图 / /div /body /html with open(bitcoin_price.html, w, encodingutf-8) as f: f.write(html) print(✅ 数据采集和可视化完成) print( 图表已保存为: bitcoin_price.png) print( HTML 报告已保存为: bitcoin_price.html)6. 进阶技巧6.1 提高任务成功率技巧 1提供清晰的任务描述# ❌ 模糊的描述 帮我查一下机票 # ✅ 清晰的描述 result await agent.run( 查询 2025 年 1 月 30 日从上海到北京的机票。 具体要求 1. 选择单程 2. 找出价格最低的 3 个航班 3. 包括航班号、起飞时间、到达时间、价格 4. 按价格从低到高排序 )技巧 2合理设置步数限制from openmanus import Manus agent await Manus.create() agent.max_steps 25 # 增加步数限制默认为 20技巧 3分步骤处理复杂任务async def complex_task(): agent await Manus.create() # 步骤 1收集数据 data await agent.run(搜索并收集比亚迪在欧洲市场的销量数据) # 步骤 2分析数据 analysis await agent.run(f 基于以下数据进行分析 {data} 分析内容包括 1. 销量趋势 2. 主要竞争对手 3. 市场机会 ) # 步骤 3生成报告 report await agent.run(f 根据分析结果生成一份完整的报告 {analysis} 报告格式 1. 执行摘要 2. 数据分析 3. 结论和建议 ) return report6.2 错误处理与调试启用详细日志import logging # 启用详细日志 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s ) agent await Manus.create() # 执行任务时会输出详细的日志 result await agent.run(查询机票) # 日志示例 # 2025-01-30 10:00:00 - Manus - INFO - Manuss thoughts: 我需要先访问携程网站 # 2025-01-30 10:00:01 - Manus - INFO - Manus selected 1 tools to use # 2025-01-30 10:00:02 - Manus - INFO - Activating tool: browser_use # 2025-01-30 10:00:05 - Manus - INFO - Tool browser_use completed保存截图用于调试# 工具返回结果中包含 base64 编码的截图 result await agent.browser_tool.execute( actiongo_to_url, urlhttps://www.example.com ) if hasattr(result, base64_image): # 保存截图 import base64 with open(screenshot.png, wb) as f: f.write(base64.b64decode(result.base64_image)) print(✅ 截图已保存为: screenshot.png)查看内存状态# 查看当前内存中的所有消息 print(\n 内存状态 \n) for i, msg in enumerate(agent.memory.messages): print(f[{i}] {msg.role}: {msg.content[:100]}...) if msg.tool_calls: print(f 工具调用: {len(msg.tool_calls)} 个)6.3 自定义工具你可以创建自定义工具来扩展 OpenManus 的能力from openmanus.tools import BaseTool, ToolResult class CustomSearchTool(BaseTool): 自定义搜索工具 def __init__(self): super().__init__( namecustom_search, description使用自定义搜索引擎进行搜索 ) async def execute(self, **kwargs) - ToolResult: query kwargs.get(query) # 调用自定义搜索 API results self._call_custom_api(query) return ToolResult(contentstr(results)) def _call_custom_api(self, query: str): 实现你的自定义搜索逻辑 # 这里可以调用你的自定义搜索 API return [ { title: f搜索结果: {query}, url: https://example.com, snippet: f这是关于 {query} 的搜索结果 } ] # 使用自定义工具 from openmanus import Manus async def use_custom_tool(): agent await Manus.create() # 添加自定义工具 agent.available_tools.add(CustomSearchTool()) # 现在可以使用自定义工具了 result await agent.run(使用 custom_search 搜索相关信息) return result6.4 性能优化建议建议 1使用缓存避免重复查询from functools import lru_cache lru_cache(maxsize100) async def cached_search(query: str): 带缓存的搜索函数 agent await Manus.create() return await agent.run(f搜索{query}) # 第一次查询会执行完整的搜索 result1 await cached_search(OpenManus) # 第二次查询会使用缓存更快 result2 await cached_search(OpenManus)建议 2并行执行多个任务import asyncio from openmanus import Manus async def parallel_tasks(): 并行执行多个任务 # 创建多个 Agent 实例 agent1 await Manus.create() agent2 await Manus.create() agent3 await Manus.create() # 并行执行多个搜索 tasks [ agent1.run(搜索比亚迪信息), agent2.run(搜索小鹏信息), agent3.run(搜索特斯拉信息) ] results await asyncio.gather(*tasks) return results # 执行 results asyncio.run(parallel_tasks()) for i, result in enumerate(results): print(f\n 任务 {i1} 结果 \n{result}\n)建议 3选择合适的 LLM 模型# 简单任务使用快速模型 agent_fast await Manus.create(modelqwen-turbo) # 复杂任务使用强大模型 agent_powerful await Manus.create(modelqwen-max) # 平衡性能和成本 agent_balanced await Manus.create(modelqwen-plus)7. 常见问题Q1: 为什么 Agent 一直点击错误的元素现象Agent 反复点击同一个按钮无法完成任务。原因页面元素识别不准确任务描述不够清晰动态加载的元素没有被正确识别解决方案# 方法 1提供更详细的任务描述 result await agent.run( 访问携程网站找到航班查询页面。 注意 - 不要点击酒店或火车票标签 - 只点击机票标签通常是第二个按钮 - 在出发地输入框中输入上海 - 点击搜索按钮 ) # 方法 2增加步数限制 agent await Manus.create() agent.max_steps 25 # 从 20 增加到 25 # 方法 3分步骤执行 step1 await agent.run(访问携程网站点击机票标签) step2 await agent.run(在出发地输入框中输入上海) step3 await agent.run(点击搜索按钮)Q2: 日期选择器无法正确操作怎么办现象点击日期输入框后无法正确选择日期。原因日期选择器是动态生成的 DOM 元素可能没有被正确识别。解决方案# 方法 1使用具体的日期格式 result await agent.run( 在出发日期输入框中输入2025-01-30 使用 send_keys 而不是 click 操作 ) # 方法 2尝试使用坐标点击 result await agent.run( 点击出发日期输入框 等待日历弹出 使用坐标点击日历中的日期 ) # 方法 3使用浏览器的日期输入功能 result await agent.run( 找到出发日期输入框 直接输入日期20250130 ) # 方法 4如果以上方法都不行可以尝试 result await agent.run( 保存当前页面截图 分析截图中的日期选择器 使用坐标点击具体的日期 )Q3: 如何降低 API 调用成本OpenManus 已经通过以下方式优化成本使用文本描述而非视觉模型大幅降低成本智能工具选择避免不必要的工具调用结果缓存避免重复查询用户可以进一步优化# 优化 1减少不必要的工具调用 # ❌ 不好的做法 result await agent.run( 1. 访问网站 2. 等待 10 秒 3. 再次访问网站 4. 等待 10 秒 5. 提取内容 ) # ✅ 好的做法 result await agent.run( 访问网站等待加载完成后提取内容。 ) # 优化 2使用缓存 from functools import lru_cache lru_cache(maxsize100) async def cached_search(query: str): agent await Manus.create() return await agent.run(f搜索{query}) # 优化 3选择合适的模型 # 简单任务使用快速模型 agent await Manus.create(modelqwen-turbo) # 优化 4提供清晰的任务描述 # 避免 Agent 进行不必要的尝试 result await agent.run( 访问 https://www.example.com 提取页面中所有的链接和标题 )Q4: 本地浏览器和沙箱浏览器有什么区别特性本地浏览器 (BrowserUseTool)沙箱浏览器 (SandboxBrowserTool)运行位置本地电脑Daytona 云端使用的 AgentManusSandboxManus可视化方式直接看到浏览器窗口通过 VNC URL 查看资源占用占用本地资源不占用本地资源安全性较低高完全隔离适用场景简单任务、快速测试复杂任务、需要安全性选择建议✅使用本地浏览器简单的任务需要快速测试不涉及敏感数据需要实时查看操作✅使用沙箱浏览器执行未知代码处理敏感数据需要隔离环境长时间运行的任务Q5: 如何提高执行速度# 方法 1并行执行多个任务 import asyncio async def parallel_tasks(): agent await Manus.create() tasks [ agent.run(搜索比亚迪信息), agent.run(搜索小鹏信息), agent.run(搜索特斯拉信息) ] results await asyncio.gather(*tasks) return results # 方法 2使用更快的模型 agent await Manus.create(modelqwen-turbo) # 方法 3减少不必要的步骤 # 提供清晰的任务描述避免重复操作 result await agent.run( 访问网站直接提取所有产品信息不要多次刷新。 ) # 方法 4使用缓存 from functools import lru_cache lru_cache(maxsize100) async def cached_operation(query: str): agent await Manus.create() return await agent.run(f操作{query})Q6: 如何处理超时错误# 方法 1增加超时时间 agent await Manus.create() agent.timeout 600 # 设置为 600 秒 # 方法 2分步骤执行 # 将长任务拆分为多个短任务 step1 await agent.run(访问网站并等待加载) step2 await agent.run(提取第一页内容) step3 await agent.run(提取第二页内容) # 方法 3使用异步重试 import asyncio async def retry_operation(max_retries3): for i in range(max_retries): try: agent await Manus.create() result await agent.run(你的任务) return result except Exception as e: print(f第 {i1} 次尝试失败: {e}) if i max_retries - 1: await asyncio.sleep(5) # 等待 5 秒后重试 return None总结OpenManus 是一个功能强大的 AI 智能体框架通过以下核心特性实现了手脑并用的能力 核心优势开箱即用丰富的工具库支持浏览器、搜索、代码执行等安全可靠通过沙箱环境隔离执行保护系统安全高效低成本使用文本描述替代视觉模型降低 API 成本灵活扩展支持自定义工具和多智能体协作易于使用简洁的 API 设计快速上手 学习路径初学者 1. 理解 Think-Act 循环 2. 学会使用基本工具 3. 完成简单的任务如网页浏览 进阶者 1. 深入理解浏览器自动化 2. 学习使用沙箱环境 3. 处理复杂任务和错误 高级用户 1. 开发自定义工具 2. 实现多智能体协作 3. 优化性能和成本 下一步行动实践项目选择一个实际需求用 OpenManus 实现深入源码阅读 OpenManus 的源代码理解实现细节贡献社区分享你的经验和工具帮助他人学习 参考资源资源链接GitHub 仓库https://github.com/FoundationAgents/OpenManus官方文档https://openmanus.readthedocs.io社区论坛https://discuss.openmanus.dev示例代码https://github.com/FoundationAgents/OpenManus/tree/main/examples附录A. 常用工具速查表工具名称功能参数示例web_search网络搜索queryOpenManus 教程, num_results5browser_use浏览器操作actionclick_element, index0python_execute执行 Python 代码codeprint(Hello)str_replace_editor文件编辑filetest.txt, old_text..., new_text...ask_human询问用户question请确认terminate终止任务无参数B. 配置参数说明# 配置示例 (config.toml) [llm] model qwen-max api_key your-api-key temperature 0.7 [agent] max_steps 20 timeout 300 [daytona] api_key dtn-xxx [browser] headless false timeout 30000C. 常见错误码错误码说明解决方案E001元素未找到检查元素索引增加等待时间E002超时增加 timeout 参数E003API 调用失败检查 API key 和网络连接E004步数超限增加 max_steps祝你学习愉快如果有任何问题欢迎随时提问。转载声明本文原创转载请注明出处。

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