构建个人AI操作系统:从Agent架构到SEO内容助手实践

news2026/5/2 8:53:36
1. 项目概述一个面向未来的个人AI操作系统最近在AI Agent领域一个名为miniclaw-www的开源项目引起了我的注意。它不是一个简单的聊天机器人也不是一个单次任务的脚本而是一个被设计为“个人AI操作系统”的长期运行、自主协作的智能体系统。想象一下你有一个24小时在线的数字伙伴它不仅能理解你的指令更能基于对你的长期记忆和当前环境主动规划、分解并执行一系列复杂任务比如管理你的个人知识库、优化你的工作流甚至帮你进行内容创作和SEO分析。miniclaw-www正是朝着这个愿景迈出的坚实一步。这个项目源自augmentedmike其核心是构建一个能够维持“长期一致性”的AI智能体。所谓长期一致性是指智能体在数天、数周甚至更长时间的任务执行中能够保持目标不漂移、记忆不丢失、决策逻辑连贯的能力。这恰恰是当前许多AI应用面临的瓶颈——它们擅长单轮对话或简单任务但缺乏持续管理复杂、多步骤项目的能力。miniclaw-www通过整合看板Kanban、记忆系统、任务分解与执行循环试图解决这个问题。它主要面向开发者、技术爱好者和对个人生产力工具有极致追求的用户提供了一个可部署、可扩展的AI Agent运行时环境原型。2. 核心架构与设计哲学解析2.1 从“工具调用”到“操作系统”的思维转变传统的AI应用无论是基于OpenAI API还是Claude大多遵循“用户提问 - AI回答/调用工具 - 返回结果”的请求-响应模式。miniclaw-www的设计哲学则截然不同。它将自己定位为一个“操作系统”而AI模型如Claude是其核心的“CPU”。在这个系统中用户更像是发布战略目标的“董事会”而AI智能体则是拥有自主权的“CEO”兼“执行团队”。这种转变带来了几个关键设计考量状态持久化操作系统需要持续运行因此系统状态任务队列、记忆、执行历史必须被持久化存储而不是每次对话后清零。事件驱动与循环系统需要有一个主循环不断地检查状态、评估下一步行动、执行、然后更新状态形成一个自治的“感知-思考-行动”循环。资源管理如同操作系统管理内存和进程这个AI OS需要管理“记忆”长期/短期、“任务”进程和“工具”系统调用。miniclaw-www选择TypeScript作为实现语言这是一个非常务实的选择。Node.js环境在异步I/O处理上具有天然优势非常适合这种需要频繁与外部APILLM、数据库、第三方服务交互的事件驱动型应用。同时TypeScript的强类型系统对于构建一个拥有复杂状态和交互逻辑的系统至关重要能在开发阶段就捕获许多潜在的错误提高系统的可维护性和可靠性。2.2 核心组件交互与数据流要理解miniclaw-www如何工作我们需要拆解其核心组件和数据流。整个系统可以看作是一个以“看板”为中心的任务驱动引擎。核心组件包括任务看板这是系统的指挥中心。所有任务从用户添加的宏观目标到AI自主分解出的子任务都以卡片的形式存在于看板的各个列中例如“待办”、“进行中”、“完成”。看板状态是系统持久化的核心。记忆系统这是智能体的“大脑皮层”。它通常分为短期记忆当前会话的上下文和长期记忆向量数据库存储的过往经历、知识。当智能体处理新任务时它会从长期记忆中检索相关经验结合短期记忆形成决策上下文。Agent运行时这是系统的“引擎”。它包含任务分解器、规划器、执行器等模块。它从看板中取出最高优先级的任务调用LLM进行分析和规划将其分解为可执行的子任务或直接调用工具执行然后将结果写回记忆并更新看板状态。工具集这是智能体的“双手”。一套预定义或可扩展的函数允许AI与外部世界交互例如读写文件、搜索网络、调用API、发送邮件等。在miniclaw-www的上下文中可能包含SEO分析工具、内容生成工具等。LLM集成层负责与Claude等大语言模型的API进行通信格式化提示词并解析返回结果。典型数据流如下目标输入用户通过界面或API向系统添加一个宏观目标例如“为我的新博客‘AI杂谈’制定一个季度的内容计划并完成前三篇文章的初稿”。任务入列该目标被创建为一张卡片放入看板的“待办”列。运行循环启动Agent运行时被触发或定时运行它扫描看板发现这个新目标。规划与分解运行时将目标卡片的内容、相关记忆作为上下文调用Claude进行思考。Claude可能会输出一个规划“此任务可分解为1. 竞品分析2. 关键词规划3. 内容日历制定4. 撰写文章A5. 撰写文章B6. 撰写文章C。”看板更新运行时将这些子任务创建为新的卡片链接到父任务并放入“待办”列。父任务可能被标记为“进行中”。执行子任务运行时选取下一个高优先级的子任务例如“竞品分析”再次调用Claude并授予它使用“网络搜索”、“文件读写”等工具的权限。Claude会生成执行这些工具的具体指令。结果处理与记忆工具执行的结果如搜索到的文章列表、分析摘要被写回该任务卡片同时被提炼并存储到长期记忆向量数据库中。状态推进该子任务卡片被移动到“完成”列。运行时继续处理下一个子任务。循环与协调这个过程持续进行直到所有子任务完成最终父任务也被标记为完成。在整个过程中智能体可以通过检索记忆确保新写的文章与之前制定的内容策略保持一致这就是“长期一致性”的体现。注意这个架构高度依赖于LLM的规划与分解能力。如果LLM的规划不合理系统可能会陷入低效循环或产生无意义的子任务。因此设计精良的提示词和对LLM输出的结构化解析例如要求其输出严格的JSON是系统稳定性的关键。3. 关键技术实现细节与实操要点3.1 基于看板的任务状态管理看板在这里不仅仅是UI组件更是系统的核心状态机。其实现需要解决几个关键问题数据结构设计一个任务卡片Card的数据结构可能如下所示TypeScript接口示意interface TaskCard { id: string; // 唯一标识 title: string; // 任务标题 description: string; // 详细描述或目标 status: backlog | todo | in_progress | review | done; // 状态 priority: low | medium | high | critical; parentId?: string; // 父任务ID用于构建任务树 childrenIds: string[]; // 子任务ID列表 createdAt: Date; updatedAt: Date; // AI执行相关 context?: string; // 执行该任务时的附加上下文 result?: string; // 任务执行结果 thoughts?: string[]; // AI思考链记录用于调试 }状态流转逻辑状态的变更必须通过Agent运行时或明确的用户操作来驱动避免竞态条件。例如当运行时开始处理一个todo状态的任务时会原子性地将其置为in_progress。这通常需要数据库事务的支持。持久化存储对于个人或小团队使用SQLite或轻量级的JSON文件存储可能就足够了。但为了更好的扩展性和并发能力使用PostgreSQL或MongoDB是更专业的选择。需要为看板卡片、任务关系建立合适的索引以支持快速查询和更新。实操心得在实际编码中我建议将看板管理模块抽象为一个独立的服务KanbanService提供诸如createTask,updateTaskStatus,getNextPendingTask等方法。这样可以将状态管理逻辑与Agent的核心推理逻辑解耦使代码更清晰也便于单元测试。另外为任务添加retryCount和error字段是个好习惯这样当某个任务执行失败时系统可以记录错误并决定重试或将其置为阻塞状态而不是无限期卡住。3.2 实现长期记忆的向量检索系统记忆是保持长期一致性的基石。简单的聊天历史记录不足以支持复杂任务的连贯性。我们需要一个能够根据语义进行检索的记忆系统。技术选型向量数据库这是核心。miniclaw-www项目可能会选择像ChromaDB轻量、易嵌入、Pinecone云服务、强大或Weaviate开源、功能全这样的向量数据库。对于本地部署的个人项目ChromaDB或LanceDB是不错的起点。嵌入模型需要将文本任务描述、执行结果、用户反馈等转换为向量。通常使用OpenAI的text-embedding-3-small或开源的sentence-transformers模型如all-MiniLM-L6-v2。后者可以本地运行无需API调用更私密且无成本。记忆的存储与检索流程记忆生成当一个任务完成或有重要中间产出时Agent运行时需要生成一段“记忆摘要”。这本身可以是一个LLM调用“请用一段简洁的话总结从任务‘XXX’中学习到的关键知识或事实。”然后将这段摘要文本通过嵌入模型转换为向量。向量存储将向量、关联的原始文本摘要、来源任务ID、时间戳等元数据存入向量数据库。记忆检索当处理新任务时将当前任务的目标或上下文转换为查询向量在向量数据库中进行相似性搜索如余弦相似度获取最相关的K条历史记忆。上下文注入将这些检索到的记忆文本作为背景信息插入到发给LLM的提示词中。例如“以下是你在过去执行类似任务时学到的东西[记忆1]...[记忆K]。现在请处理新任务[当前任务]”。实操要点与避坑指南记忆的粒度不要存储所有对话记录。存储过于琐碎的记忆会导致检索噪声大存储过于宏观的记忆又可能丢失细节。一个好的实践是为每个完成的任务存储一条“核心洞察”记忆并为重要的中间决策点存储额外的“决策依据”记忆。检索的优化单纯的向量相似度搜索有时会召回不相关的内容。可以结合关键词过滤元数据过滤例如只检索与“SEO”、“内容创作”相关的记忆。也可以尝试混合检索Hybrid Search结合BM25等关键词搜索分数和向量搜索分数进行加权排序。记忆的更新与遗忘系统需要一种机制来更新或淡化旧记忆。可以为记忆添加“强度”或“新鲜度”权重随着时间衰减或在发现新旧记忆冲突时通过LLM来裁决并更新核心记忆。这是一个高级话题但对于真正的长期一致性至关重要。成本与性能如果使用OpenAI的嵌入API大量记忆的存储和检索会产生成本。开源嵌入模型是控制成本和保护隐私的必由之路。确保你的嵌入模型与LLM的“语言”兼容例如都用英文训练效果更好。3.3 Agent运行时循环与工具调用这是系统的“心脏”一个永不停止或定时触发的循环。其核心伪代码如下async function agentRuntimeLoop() { while (true) { // 1. 获取下一个待处理任务 const task await kanbanService.getNextPendingTask(); if (!task) { await sleep(5000); // 无任务时休眠 continue; } // 2. 检索相关记忆 const relevantMemories await memoryService.retrieve(task.description); // 3. 构建LLM提示词 const prompt buildAgentPrompt({ task, memories: relevantMemories, availableTools: listOfTools, }); // 4. 调用LLM并解析其“思考” const llmResponse await claudeClient.complete(prompt); const { thought, action } parseLlmResponse(llmResponse); // 解析出“思考过程”和“要执行的动作” // 5. 记录思考过程用于调试和展示 await kanbanService.recordThought(task.id, thought); // 6. 执行动作 if (action.type BREAKDOWN) { // 分解任务创建子任务卡片 const subtasks action.subtasks; await kanbanService.createSubtasks(task.id, subtasks); await kanbanService.updateStatus(task.id, in_progress); } else if (action.type TOOL_CALL) { // 调用工具 const tool findTool(action.toolName); const result await tool.execute(action.parameters); // 将结果保存到任务中 await kanbanService.recordResult(task.id, result); // 根据工具结果判断任务是否完成 if (isTaskComplete(task, result)) { await kanbanService.updateStatus(task.id, done); // 生成并存储记忆 await memoryService.store(task, result); } } else if (action.type WAIT_FOR_USER) { // 需要用户输入将任务置为等待状态 await kanbanService.updateStatus(task.id, review); } // 7. 短暂休眠避免过快循环消耗资源 await sleep(1000); } }工具调用的实现细节工具通常被实现为普通的异步函数。关键是要为LLM提供清晰、结构化的工具描述。这通常遵循OpenAI的Function Calling格式或类似的规范。// 工具定义示例网络搜索工具 const webSearchTool { name: web_search, description: 使用搜索引擎获取最新的网络信息。, parameters: { type: object, properties: { query: { type: string, description: 搜索关键词 }, maxResults: { type: number, description: 最大返回结果数, default: 5 } }, required: [query] }, execute: async ({ query, maxResults }) { // 实际调用SerpAPI、Google Custom Search等 const results await callSearchAPI(query, maxResults); return JSON.stringify(results); // 结果需要序列化为字符串给LLM } };在提示词中你需要将这些工具的描述以JSON Schema的形式提供给LLM并明确指令“如果你需要执行某个操作请以特定JSON格式回复指定要调用的工具和参数。”避坑指南循环失控必须设置循环的休眠间隔和每次循环的处理超时时间防止Bug导致无限快速调用API产生巨额费用。工具安全性工具是AI与真实世界交互的接口必须进行严格的权限和输入验证。例如文件写入工具应限制在特定沙箱目录命令执行工具应极度谨慎最好完全禁用。错误处理LLM可能输出无法解析的JSON工具调用可能失败。运行时必须有健壮的错误处理机制将任务置为失败状态并记录错误日志而不是让整个进程崩溃。上下文管理每次调用LLM的上下文长度是有限的。你需要精心设计提示词只注入最相关的记忆和任务历史避免不必要的令牌消耗。4. 从零开始部署与配置实践假设我们想在本地开发环境或一台云服务器上搭建一个基础的miniclaw-www系统。以下是基于其技术栈TypeScript, Node.js, 向量数据库等的实操步骤。4.1 基础环境搭建与依赖安装首先确保你的系统已安装Node.js建议LTS版本如18.x或20.x和npm/yarn/pnpm。克隆项目与初始化git clone miniclaw-www的仓库地址 cd miniclaw-www npm install # 或 yarn install 或 pnpm install安装过程会拉取所有TypeScript依赖包括可能的框架如Express/Fastify for web server、数据库驱动、LLM SDK等。配置环境变量项目根目录下通常会有.env.example文件。复制它并创建你自己的.env文件。cp .env.example .env打开.env文件你需要配置最关键的几项# LLM API配置以Claude为例 ANTHROPIC_API_KEYyour_anthropic_api_key_here CLAUDE_MODELclaude-3-sonnet-20240229 # 根据成本和性能选择haiku, sonnet, opus # 嵌入模型配置如果使用OpenAI OPENAI_API_KEYyour_openai_api_key_for_embeddings # 或者如果使用本地嵌入模型推荐 LOCAL_EMBEDDING_MODELall-MiniLM-L6-v2 # 向量数据库配置以ChromaDB为例它通常内嵌无需远程配置 CHROMA_DB_PATH./chroma_data # 应用数据库配置如果使用PostgreSQL DATABASE_URLpostgresql://user:passwordlocalhost:5432/miniclaw_db # 服务器端口等 PORT3000重要提示API密钥是最高机密切勿提交到版本控制系统。确保.env文件已在.gitignore中。初始化数据库如果项目使用关系型数据库通常会有数据库迁移Migration脚本。npx prisma migrate dev # 如果使用Prisma ORM # 或 npm run db:migrate # 查看package.json中的自定义脚本对于向量数据库如ChromaDB它通常会在首次运行时自动创建目录和集合。4.2 核心服务配置与启动配置LLM客户端在代码中你需要初始化LLM客户端。以anthropic-ai/sdk为例import Anthropic from anthropic-ai/sdk; const anthropic new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY, }); // 封装一个简单的调用函数 async function callClaude(prompt: string, systemPrompt?: string) { const message await anthropic.messages.create({ model: process.env.CLAUDE_MODEL || claude-3-haiku-20240307, max_tokens: 4096, system: systemPrompt, messages: [{ role: user, content: prompt }], }); return message.content[0].text; }对于本地或开源模型如通过Ollama部署你需要配置对应的基础URL和模型名。配置向量数据库客户端以ChromaDB为例import { ChromaClient } from chromadb; const chromaClient new ChromaClient({ path: process.env.CHROMA_DB_PATH }); // 创建或获取一个集合类似于表 const memoryCollection await chromaClient.getOrCreateCollection({ name: agent_memories, });存储和检索向量的代码需要集成一个嵌入模型。如果使用本地模型可以用xenova/transformers库。启动应用检查package.json中的启动脚本。npm run dev # 开发模式通常有热重载 # 或 npm run build npm start # 生产模式如果一切顺利应用服务器将在指定端口如3000启动。你可能会看到一个简单的Web界面如果项目包含前端或者需要通过API端点如POST /api/tasks与Agent交互。4.3 验证与初步测试部署完成后不要急于投入复杂任务。进行一系列冒烟测试至关重要。健康检查访问http://localhost:3000/health如果存在或根路径确认服务已运行。创建第一个任务通过Web界面或curl命令向系统添加一个简单、明确的任务。curl -X POST http://localhost:3000/api/tasks \ -H Content-Type: application/json \ -d {title: 测试任务, description: 请用一句话介绍你自己。}观察Agent运行查看服务器日志。你应该能看到类似这样的输出[Agent Runtime] 获取到新任务测试任务 (id: task_123) [Agent Runtime] 检索到相关记忆0条 [Agent Runtime] 调用Claude进行规划... [Agent Runtime] Claude回复这是一个简单的自我介绍任务无需分解我将直接执行。 [Agent Runtime] 记录思考过程... [Agent Runtime] 执行动作直接生成回复。 [Agent Runtime] 任务完成结果已保存。检查结果通过API或界面查看该任务的状态是否变为“完成”并查看其执行结果字段是否包含了一句合理的自我介绍。测试记忆功能创建一个与之前任务相关的任务例如“基于你刚才的自我介绍再详细说明一下你的核心功能。”观察日志中是否出现了“检索到相关记忆1条”以及最终回复是否体现了上下文关联。通过以上步骤一个最基本的miniclaw-www系统就运行起来了。你可以开始尝试更复杂的任务链比如“帮我搜索今天AI领域最重要的三条新闻并总结成一份简报。”5. 高级特性探索与性能调优当基础系统运行稳定后我们可以关注一些高级特性这些是提升Agent智能性和实用性的关键。5.1 实现复杂的任务规划与反思机制基础的“分解-执行”循环很脆弱。一个强大的Agent需要具备“反思”能力。即在任务执行中途或结束后评估进展调整计划。实现方案在运行时循环中引入“反思”步骤。检查点反思在完成一定数量的子任务后或在关键里程碑强制Agent暂停执行进行反思。提示词可以是“请回顾截至目前已完成的任务[列表]以及最初的目标[目标]。当前的进展是否偏离了方向后续的计划是否需要调整请输出调整后的计划或确认继续。”失败反思当工具调用失败或LLM输出无意义时触发反思。“任务[XXX]在执行[YYY]步骤时失败原因为[ZZZ]。请分析失败原因并提出一个新的解决方案或决定是否放弃该任务。”最终总结反思在一个大型任务完成后要求Agent生成一份详细的总结报告并将其作为高质量记忆存储。这有助于未来处理类似任务时获得更精准的指导。技术实现这需要在任务卡片的数据结构中增加checkpoints或reflectionLog字段。在运行时逻辑中插入条件判断当满足条件时将当前任务状态发送给LLM进行反思分析并根据分析结果更新任务树或看板状态。5.2 集成外部工具与工作流miniclaw-www的真正威力在于其连接外部世界的能力。除了内置的搜索、文件工具可以集成日历与待办事项连接Google Calendar或Todoist让Agent帮你安排会议或管理日常任务。代码仓库集成GitHub API让Agent分析代码库、生成报告、甚至创建简单的Pull Request需极其谨慎。内容管理系统集成WordPress或Notion API让Agent直接将撰写好的文章发布到你的博客或知识库。数据分析工具连接数据库或Metabase让Agent定期运行查询并生成业务洞察简报。集成模式为每个外部服务创建一个专门的工具函数。使用OAuth 2.0等协议安全地管理用户授权。工具函数内部处理API调用、错误重试和数据格式化。关键是提供给LLM的工具描述要清晰准确让LLM知道在什么场景下该调用哪个工具以及需要提供哪些参数。5.3 系统监控、日志与调试对于一个长期运行的自治系统可观测性至关重要。结构化日志不要只用console.log。使用Winston或Pino等日志库记录不同级别Info, Debug, Error的日志并输出结构化的JSON便于后续用ELK或Loki等工具收集分析。关键信息包括任务ID、执行阶段、LLM调用耗时、Token使用量、工具调用结果等。记录思考链如前所述将LLM每次的“思考过程”thought字段完整保存。这是调试Agent诡异行为的最宝贵资料。你可以通过一个管理界面来回放某个任务的完整执行“心路历程”。性能指标监控平均任务完成时间、LLM API调用失败率、工具调用失败率、记忆检索的准确率可通过人工抽样评估。设置警报当失败率超过阈值时通知你。成本监控特别是使用付费API时。在代码中记录每次LLM调用使用的模型和预估Token数大多数SDK会返回使用量。可以定期汇总估算成本防止意外超支。5.4 性能与成本优化策略随着任务和记忆的增长系统可能会变慢、变贵。记忆检索优化分层记忆将记忆分为“核心记忆”高频、重要和“归档记忆”。检索时优先搜索核心记忆未找到满意结果再搜索归档记忆。元数据过滤为记忆打上标签如task_type: seo,project: blog。检索时结合语义向量和标签过滤大幅缩小搜索范围。摘要与压缩存储记忆时不仅存原始文本摘要还可以让LLM生成一个更短的“关键词”或“极简摘要”用于快速初筛。LLM调用优化模型分级将任务分级。简单的分类、格式化任务使用便宜快速的模型如Claude Haiku复杂的规划、创作任务使用能力更强的模型如Claude Sonnet/Opus。提示词压缩精心设计提示词移除冗余指令。将常用的系统提示角色定义、工具描述进行最小化优化。缓存对于内容固定、结果确定的查询例如“今天的日期是什么”可以将LLM的回答缓存起来避免重复调用。任务调度优化优先级队列不是简单地从看板取第一个任务而是实现一个优先级队列让高优先级、截止日期近的任务优先执行。批量处理对于可以并行处理的、类似的小任务如“分析这100篇文章的情感倾向”可以设计成批量调用LLM或工具提高吞吐量。6. 典型应用场景与案例实操让我们结合关键词中的seo和personal-ai构想一个miniclaw-www的具体应用场景个人SEO内容助手。目标让Agent自动维护一个技术博客的SEO健康度并辅助内容创作。系统配置工具集扩展analyze_seo: 调用Ahrefs或SEMrush API或开源工具分析指定URL的SEO数据。fetch_google_search_console_data: 通过Google Search Console API获取网站的点击、展示、关键词排名数据。generate_content_brief: 根据一个核心关键词生成内容大纲。write_article_section: 根据大纲撰写具体段落。publish_to_cms: 将完成的文章发布到WordPress。记忆结构专门存储“SEO知识”如最佳实践、“博客主题历史”、“已分析竞争对手的弱点”。看板列设计SEO监控、主题规划、内容创作、待发布、已发布、效果追踪。工作流实例用户输入宏观目标“请优化我的博客‘AI杂谈’在本季度的搜索引擎表现。”Agent规划与分解子任务1分析analyze_seo(blog_url)获取当前SEO表现基线。子任务2研究检索记忆中的“SEO知识”和“竞争对手”并搜索网络找出当前AI博客领域的热门长尾关键词。子任务3规划基于分析结果制定一个包含5个核心主题和15个长尾关键词的内容日历。子任务4执行针对内容日历中的第一个主题执行generate_content_brief-write_article_section循环-publish_to_cms。子任务5监控每周自动运行fetch_google_search_console_data分析新内容的效果并更新记忆。长期一致性体现在撰写第4篇文章时Agent会检索之前几篇文章的关键词和内容确保主题的连贯性和关键词的合理分布避免内部竞争。在季度末总结时它能对比期初和期末的SEO数据生成一份效果评估报告。实操中可能遇到的问题与解决问题Agent生成的内容大纲过于泛泛缺乏深度。排查检查generate_content_brief工具的提示词。是否提供了足够的约束例如可以要求“大纲必须包含痛点分析、解决方案对比、实操代码示例、未来趋势展望四个部分”。解决优化工具的描述和提示词并考虑在调用该工具前先让LLM进行一轮“深度研究”收集更多资料作为上下文。问题发布的文章格式错乱。排查检查publish_to_cms工具。是否将Markdown正确转换为了HTML是否处理了图片上传解决在工具函数内增加更严格的格式校验和转换步骤或者增加一个“预览审核”子任务将生成的内容先保存为草稿由用户或另一个格式检查工具确认后再发布。通过这个案例你可以看到miniclaw-www如何从一个被动的工具转变为一个主动的、持续运作的合作伙伴。它不再是等你下命令而是自己拥有一个长期目标并持续为之努力和调整。这正是“个人AI操作系统”的魅力所在——它开始真正地为你“管理”一项长期而复杂的数字事务。

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