AI智能体持久化记忆系统Plumb:混合检索与本地化部署实践

news2026/5/11 12:05:18
1. 项目概述为AI智能体构建持久化记忆如果你和我一样深度使用过Claude、Cursor这类AI编程助手或者正在探索OpenClaw这类更复杂的AI智能体框架一个核心痛点会反复出现对话没有记忆。每次开启一个新会话AI都像一张白纸你需要重新介绍项目背景、解释代码结构、复述之前的决策。这不仅效率低下更阻碍了构建真正“理解”你工作流的智能伙伴。这正是Plumb要解决的根本问题——为AI智能体提供跨会话、持久化、高精度的记忆能力。简单来说Plumb是一个专为AI智能体设计的记忆存储与检索系统。它不像简单的聊天记录保存而是像一个智能的、私人的知识库助理。它能从你和AI的每一次交互中自动提取并存储那些高价值的“事实”比如“项目使用React 18和TypeScript”、“用户偏好将组件放在src/components/目录下”、“上次我们决定用Zustand替代Redux进行状态管理”然后在后续的任何一次对话中自动、精准地将相关记忆注入到AI的系统提示中。这意味着你的AI助手能记住关于你、你的项目、你的习惯的一切实现真正的上下文连贯。它的核心定位非常清晰零配置、本地优先、检索质量至上。对于OpenClaw用户安装即用记忆的存储和检索全自动完成。底层采用SQLite所有数据、包括文本向量化Embedding都在你的本地机器上完成无需连接任何云端API彻底保障隐私。而其检索引擎则集成了BM25关键词匹配、向量语义搜索、结果融合、时间衰减和重排序等多种技术目标只有一个在每次对话时都能从海量记忆中捞出最相关的那几条不多不少恰到好处。2. 核心架构与设计哲学解析2.1 为什么是“混合检索”而非单一方案Plumb在技术选型上最引人注目的就是其“混合检索”管道。这并非为了炫技而是针对AI记忆场景的深思熟虑。我们来拆解一下这个管道BM25 KNN → RRF → Recency decay → Rerank。每一步都有其不可替代的作用。BM25关键词匹配这是一个经典的信息检索算法擅长精确匹配关键词。比如你记得“上次修改了auth.ts文件里的login函数”当你的查询中包含“auth”、“login”这些词时BM25能快速锁定包含这些关键词的记忆条目。它的优势是速度快、对精确术语召回准。KNN/向量搜索语义匹配通过本地嵌入模型如Plumb可能内置的某个轻量级模型将文本转换为向量在向量空间中进行最近邻搜索。这解决了自然语言灵活性的问题。比如你问“之前我们是怎么处理用户登录的”即使用词和记忆中的“实现了基于JWT的认证逻辑”不完全相同向量搜索也能通过语义相似性找到它。RRF倒数排序融合BM25和向量搜索的结果列表如何合并简单取并集或加权平均都可能出问题。RRF是一种成熟的融合方法它根据每个结果在两个列表中的排名来计算综合得分能有效平衡两种检索方式的优势让既有关键词匹配又有语义相关性的结果脱颖而出。Recency decay时间衰减记忆是有时效性的。一周前讨论的API设计可能已经被三天前的新方案取代。时间衰减因子会给较新的记忆条目更高的权重确保AI的“记忆”更贴近当前的项目状态避免给出过时建议。Rerank重排序经过前面几步我们得到了一个初步的、综合了多种信号的候选列表。重排序模型可能是一个更精细但计算量稍大的交叉编码器模型或启发式规则会对这个短列表进行精排最终选出Top-K个最相关的事实进行注入。这个管道的设计哲学是不依赖单一信源用多阶段、多策略的流水线来逼近“最相关”这个模糊目标。这比单纯用向量搜索更稳健尤其是在处理代码、术语、近期变更等混合信息时。2.2 本地化与隐私优先的设计在AI工具日益云化的今天Plumb坚持“Local First”是一股清流。其默认的LocalStore后端是SQLite一个单文件数据库通常存放在你的~/.plumb/目录下。所有操作——事实存储、文本嵌入Embedding、向量索引、检索计算——全部在本地完成。注意这里的“本地嵌入”是关键。许多类似工具需要调用OpenAI或Cohere的API来将文本转为向量这不仅产生费用、带来延迟更意味着你的私人对话内容需要离开你的机器。Plumb通过集成一个本地运行的嵌入模型例如Xenova/all-MiniLM-L6-v2这类轻量级模型规避了这一切。虽然模型精度可能略低于顶级商用API但在记忆检索这种对绝对精度要求并非极致的场景下其性价比和隐私优势是决定性的。这种设计带来了几个直接好处零网络延迟检索是瞬间完成的体验流畅。完全离线可用在没有网络的环境下你的AI助手依然拥有全部记忆。数据主权你的所有项目细节、工作习惯、技术决策都牢牢锁在你自己的硬盘上没有任何外部服务器可以触及。零成本没有按次计费的API调用可以无限次地存储和检索。2.3 与生态的集成MCP的核心角色Plumb的强大易用性很大程度上归功于它拥抱了模型上下文协议。MCP是Anthropic推出的一套标准协议旨在让工具如数据库、文件系统、记忆系统能够以标准化的方式为AI模型如Claude提供上下文信息。你可以把它想象成AI模型的“USB标准接口”。Plumb提供了一个标准化的MCP服务器getplumb/mcp-server。当你把它配置到Claude Desktop、Cursor等支持MCP的客户端后这个服务器就在后台默默工作。它监听对话自动提取事实通过plumb_remember工具调用或智能分析并将其存入本地SQLite。当AI需要生成回复时MCP协议会触发Plumb服务器进行检索并将结果以[PLUMB MEMORY]块的形式注入系统提示。这一切对用户和AI都是透明的。对于OpenClaw集成更深入。OpenClaw本身就是一个基于MCP的智能体框架Plumb直接提供了OpenClaw插件。安装后插件直接挂钩到OpenClaw的交互生命周期实现了真正的“零配置”记忆体验。3. 实操部署与核心配置详解3.1 为OpenClaw部署Plumb零配置体验如果你已经是OpenClaw的用户那么获得持久记忆的路径是最短的。确保你的OpenClaw环境已经就绪。安装插件 打开终端在OpenClaw项目目录或全局环境下运行安装命令。这里假设使用OpenClaw的插件管理器。# 使用OpenClaw CLI安装Plumb插件 openclaw plugins install getplumb/plumb这个命令会从npm仓库拉取Plumb插件包并完成安装。验证安装 安装完成后启动你的OpenClaw智能体。你通常不需要修改任何配置文件。在OpenClaw的日志或交互界面中留意是否有关于Plumb插件初始化的信息。例如可能会看到“Plumb memory plugin loaded”或类似的日志。开始使用 安装即用。接下来你与OpenClaw智能体的所有对话都会被Plumb插件在后台分析。它会自动识别并存储那些看起来是“事实陈述”的片段例如你告诉它“这个项目用Python Flask框架”“用户数据库模型是User”或者它自己推理出的结论“用户倾向于在下午提交代码”。 在后续对话中当你提到相关话题时这些记忆会自动被检索并注入。你可以通过观察AI的回复是否引用了之前的对话内容来判断记忆是否生效。实操心得OpenClaw插件的自动事实提取有时可能过于积极或不够准确。如果发现注入了无关记忆可以尝试在对话中更结构化地陈述事实例如明确地说“记住这一点后端API的根地址是https://api.example.com/v1。” 这有助于提取逻辑更精准地捕获关键信息。3.2 为Claude Desktop/Cursor配置Plumb MCP服务器对于更广泛使用的Claude Desktop或Cursor我们需要手动配置MCP服务器。全局安装MCP服务器 首先你需要Node.js环境。打开终端运行以下命令来全局安装Plumb的MCP服务器。npm install -g getplumb/mcp-server安装完成后你可以通过命令行尝试运行plumb-mcp来验证是否安装成功。定位并编辑MCP配置文件 这是最关键的一步。你需要找到对应工具的MCP配置文件。macOS上的Claude Desktop 配置文件路径~/Library/Application Support/Claude/claude_desktop_config.json如果该文件或目录不存在你需要手动创建。Windows上的Claude Desktop 配置文件路径%APPDATA%\Claude\claude_desktop_config.json你可以在文件资源管理器的地址栏直接输入%APPDATA%跳转到该目录然后进入Claude子目录。Cursor编辑器 配置文件路径~/.cursor/mcp.json(macOS/Linux) 或%USERPROFILE%\.cursor\mcp.json(Windows)。配置Plumb服务器 用文本编辑器如VSCode、Notepad打开对应的配置文件。其内容应该是一个JSON对象。你需要添加plumb到mcpServers部分。{ mcpServers: { plumb: { command: plumb-mcp } } }重要command的值plumb-mcp必须与全局安装后生成的命令名称一致。在某些系统上如果Node.js的全局bin目录不在PATH环境变量中你可能需要指定绝对路径例如command: /usr/local/bin/plumb-mcp。重启客户端 保存配置文件后完全关闭并重新启动Claude Desktop或Cursor。这是必须的因为MCP配置通常在启动时加载。验证连接 重启后在新的对话中你可以尝试直接询问AI关于记忆的功能例如说“你能记住我们刚才聊的内容吗”或者“请列出你知道的关于当前对话的背景。” 如果配置成功Claude可能会回复它可以通过Plumb工具来访问记忆。更隐性的验证是在后续对话中AI是否能引用之前会话中明确提及的信息。3.3 使用CLI工具进行高级管理除了自动运行Plumb还提供了一个CLI工具plumb-memory用于进行一些手动管理和诊断。初始化与状态检查# 检查Plumb记忆库的状态路径、记录数等 plumb-memory status # 输出示例 # Store path: /Users/yourname/.plumb/memory.sqlite # Total facts: 127 # Last ingested: 2023-10-27T08:30:00Z手动导出与备份 由于数据存储在本地SQLite直接复制~/.plumb/目录就是最直接的备份。但CLI提供了更结构化的导出。# 将所有记忆导出为JSON格式 plumb-memory export --format json my_memories_backup.json这个JSON文件包含了所有事实的原文、嵌入向量可能是Base64编码、元数据如创建时间等。你可以用它来迁移数据或在另一台机器上导入如果未来支持导入功能。重新处理记忆库 如果你更新了本地的嵌入模型或者觉得早期的记忆提取质量不高可以尝试重新处理。# 此命令可能会根据存储的事实文本重新计算嵌入向量。 # 注意执行前请务必备份具体参数请参考官方文档。 plumb-memory reprocess --help4. 核心功能记忆的存储、检索与生命周期4.1 如何“记住”plumb_remember与自动提取记忆的存入有两种主要方式显式存储工具调用 在对话中你可以直接指示AI使用plumb_remember工具。这是最精确的方式。用户“请记住我的个人博客项目使用Hugo静态生成器主题是PaperMod。”AI调用plumb_remember(fact: 用户个人博客项目使用Hugo静态生成器主题是PaperMod。) 这种方式确保了信息被原封不动地、作为一个原子事实存储下来。隐式/自动提取 Plumb插件或MCP服务器会在对话流中持续运行试图识别出那些看起来像是“事实”的陈述。这通常基于一些启发式规则例如用户或AI做出的确定性陈述“这个函数的作用是验证输入。”。关于项目结构的描述“src/utils/目录下放辅助函数。”。达成的决策或共识“所以我们决定采用方案A。”。 自动提取的准确性取决于算法的成熟度在早期版本中可能需要人工复核或结合显式存储来保证质量。4.2 记忆的检索与注入流程当一个新的用户查询到来时Plumb的检索管道被触发查询预处理将用户当前的问题或对话上下文转换为一个“查询文本”。并行检索查询文本进入BM25检索器在记忆库的文本字段中进行关键词匹配得到一个按相关性排序的列表L_bm25。查询文本被同一个本地嵌入模型转换为查询向量然后在向量数据库SQLite中通过扩展如vector或sqlite-vss实现中进行KNN搜索得到列表L_vector。结果融合使用RRF算法对L_bm25和L_vector进行融合得到一个初步的联合列表L_fused。时间衰减调整根据L_fused中每个事实的存储时间戳应用衰减函数如指数衰减降低旧事实的排名得到L_decayed。精排对L_decayed中排名靠前的事实如前20条使用一个更精细的重新排序器进行最终打分选出最相关的K条例如K5。上下文构建将这K条事实格式化为一个文本块例如[PLUMB MEMORY] - 用户偏好使用Dark主题的代码编辑器。 - 当前项目是一个用Next.js 14构建的电商网站。 - 数据库使用PostgreSQLORM是Prisma。 - 昨天解决了购物车页面重复渲染的性能问题。 - API认证采用JWT令牌存储在HttpOnly Cookie中。提示词注入将这个[PLUMB MEMORY]块插入到AI系统提示的特定位置通常是开头或角色定义之后然后连同用户当前查询一起发送给AI模型。AI在生成回复时就能“看到”并利用这些背景信息。4.3 记忆的生命周期与管理目前Plumb的文档未详细说明记忆的自动清理机制。这意味着记忆可能会无限增长。在实践中这需要考虑存储效率文本和向量都会占用空间。对于长期重度用户~/.plumb/memory.sqlite文件可能会增长到几百MB甚至更大。定期备份和清理是必要的。检索效率随着事实数量增加检索延迟可能会缓慢上升。虽然混合检索经过优化但数据量极大时仍需关注。记忆质量过时的、错误的或低质量的事实会污染检索结果导致AI给出错误参考。手动管理建议定期审查使用plumb-memory export导出记忆浏览并删除无效条目目前可能需要直接操作SQLite数据库未来工具可能提供界面。项目隔离理想情况下记忆应与项目或工作空间绑定。虽然Plumb默认是全局记忆库但你可以通过环境变量或配置指定不同的存储路径来模拟项目隔离例如在启动不同项目时设置PLUMB_STORE_PATH./.plumb/project_a.sqlite。事实表述清晰在显式存储时尽量使用清晰、独立、无歧义的事实陈述这能提高后续检索的准确性。5. 自托管与高级部署指南对于希望完全掌控或需要跨设备同步的企业用户Plumb提供了自托管其云端组件的能力。5.1 理解组件与许可Plumb的代码库是monorepo结构许可策略清晰packages/目录下核心、MCP服务器、CLI、OpenClaw插件采用MIT许可证。你可以自由使用、修改、分发甚至用于商业闭源项目。hosted/目录下云存储驱动、API服务器采用BSL 1.1许可证。这意味着你可以免费用于非生产环境如开发、测试但如果你在商业生产环境中使用这些云端组件则需要购买商业许可。BSL 1.1的好处是代码是公开的并且会在4年后自动转换为MIT许可证。5.2 自托管云端MCP端点如果你需要让多个设备如办公室台式机和家庭笔记本共享同一个记忆库或者团队协作需要一个中央记忆服务器自托管云端版本是选择。前置条件一个能运行Node.js的服务器如Fly.io, Railway, Render, 或你自己的VPS。一个PostgreSQL数据库并安装pgvector扩展用于存储向量。Supabase是一个非常好的选择它提供了开箱即用的PostgreSQL with pgvector。部署步骤克隆代码与准备git clone https://github.com/getplumb/plumb.git cd plumb/hosted/api-server npm install环境配置 在部署环境中设置必要的环境变量。通常需要一个.env文件或平台的环境变量配置界面。DATABASE_URLpostgresql://user:passwordhost:port/dbname?sslmoderequire # 其他可能需要的变量如API密钥、端口号等参考项目内的 .env.example 文件确保你的PostgreSQL连接字符串正确并且数据库已创建pgvector扩展在Supabase中可通过SQL编辑器运行CREATE EXTENSION IF NOT EXISTS vector;。部署应用 根据你选择的平台进行部署。以Fly.io为例fly launch # 按照提示操作关联你的Git仓库或直接部署当前目录 fly deploy客户端配置 部署成功后你会获得一个API端点例如https://your-plumb-api.fly.dev。你需要修改本地Claude Desktop或Cursor的MCP配置将command指向这个HTTP端点。{ mcpServers: { plumb: { command: npx, args: [-y, modelcontextprotocol/server-adapter-cli], env: { MCP_SERVER_URL: https://your-plumb-api.fly.dev } } } }注意上述配置示例使用了MCP的服务器适配器CLI具体配置方式可能随Plumb的api-server实现而变请务必查阅自托管文档。核心思想是将本地MCP客户端连接到远程的Plumb服务器。5.3 使用云存储驱动如果你只想使用云数据库但保留本地计算可以只使用getplumb/cloud-store驱动。这需要你修改Plumb的核心配置让其使用CloudStore连接你的Postgres而非默认的LocalStoreSQLite。这通常涉及更底层的代码集成可能更适合开发者将其作为库集成到自己的应用中。6. 常见问题排查与性能调优6.1 安装与配置问题问题现象可能原因解决方案安装getplumb/plumb插件失败npm registry网络问题或OpenClaw版本不兼容1. 检查网络尝试使用npm config set registry https://registry.npmmirror.com切换镜像源。2. 确认OpenClaw版本查看Plumb插件文档的兼容性说明。Claude Desktop重启后无记忆功能MCP配置文件路径错误或格式错误1. 确认配置文件路径完全正确注意macOS的Library是隐藏文件夹。2. 使用JSON验证工具检查claude_desktop_config.json格式是否正确确保没有多余的逗号。提示“command not found: plumb-mcp”全局安装的plumb-mcp命令不在系统PATH中1. 找到Node.js全局安装路径npm root -g的父目录下的bin文件夹。2. 在MCP配置中使用绝对路径如command: /usr/local/bin/plumb-mcp。3. 或将Node.js的全局bin目录添加到系统的PATH环境变量。Cursor中配置不生效Cursor的MCP配置文件名或位置有误确认配置文件是mcp.json且位于正确的.cursor目录下。Cursor有时需要完全退出包括后台进程再重启。6.2 功能与性能问题问题现象可能原因解决方案AI似乎没有“记住”之前的内容1. 记忆未成功存储。2. 检索相关性低未注入。3. 注入的记忆未被AI有效利用。1. 尝试显式使用plumb_remember工具存储一个简单事实再查询。2. 检查对话内容是否足够具体以触发检索。过于模糊的查询可能匹配不到。3. 观察AI的原始提示词如果工具支持看[PLUMB MEMORY]块是否被正确添加。响应速度变慢记忆库中事实数量过多检索管道计算耗时增加。1. 考虑定期清理老旧、低价值记忆。2. 未来版本可能支持为记忆设置TTL生存时间或手动打标签归档。检索到无关记忆1. 自动提取存储了无关信息。2. 混合检索的权重或融合策略不理想。1. 目前可能需要手动管理记忆库删除无关条目。2. 关注项目更新未来可能提供检索相关度阈值配置。本地嵌入模型精度不够默认的轻量级嵌入模型对某些专业术语或复杂语义理解不足。这是一个权衡。可以关注项目动态看是否未来支持切换或微调本地嵌入模型。隐私和零成本的代价是精度上的一定妥协。6.3 隐私与数据安全数据存储在哪里默认情况下所有数据文本事实和向量都存储在本地~/.plumb/目录下的SQLite文件中。这是一个标准数据库文件你可以用任何SQLite工具如DB Browser for SQLite打开查看。会被上传吗根据官方说明除了匿名遥测数据版本、操作系统可关闭所有记忆内容都不会离开你的机器。本地嵌入模型意味着连文本向量化都在本地完成。如何彻底删除直接删除~/.plumb/文件夹即可永久清除所有记忆。如果想选择性删除目前可能需要使用SQLite工具直接操作数据库。如何关闭遥测在终端中设置环境变量export PLUMB_TELEMETRY0Linux/macOS或set PLUMB_TELEMETRY0Windows然后重启你的AI客户端。这样就不会发送任何匿名使用计数。7. 进阶技巧与场景化应用7.1 提升记忆质量的实践要让Plumb发挥最大效用你需要“教”它如何更好地为你服务。结构化事实陈述当你希望AI记住某件事时用清晰、完整的句子陈述。例如不佳“用那个库。” “那个”指代不明更佳“本项目使用shadcn/ui作为核心UI组件库。” 后者包含了主语本项目、动作使用、对象shadcn/ui、用途核心UI组件库构成了一个高质量的记忆原子。主动管理记忆生命周期将记忆视为一个需要维护的知识库。定期如每周末花几分钟通过CLI导出记忆快速浏览。删除那些已经过时如“计划下周升级到Node 18”而现在已是Node 20、错误或不再相关的条目。这能长期保持检索结果的高信噪比。利用会话种子Plumb提到可以从“memory files”生成会话种子。这意味着你可以手动创建或维护一个文本文件里面列出关于你或当前项目的核心事实如技术栈、编码规范、项目目标并让Plumb在会话开始时优先加载这些内容为对话设定一个高质量的初始上下文。7.2 场景化应用示例个人软件开发技术栈记忆记住你不同项目偏好的技术栈React vs Vue, Python vs Go避免每次新建项目都要重复讨论。代码风格记忆记住你喜欢的代码风格如“函数命名使用驼峰式”“组件使用箭头函数”AI生成的代码会更符合你的习惯。问题解决记录记住你曾经解决过的特定错误及其解决方案当类似问题再次出现时AI能直接提醒你。团队协作与知识传承如果为整个团队部署自托管的Plumb云服务可以构建一个团队知识库。例如记住“A模块的接口文档在Confluence的XX页面”、“部署到生产环境需要走GitLab的Merge Request流程”。新成员加入时AI能快速为其提供上下文。创意与写作辅助记住你正在创作的小说的人物设定、世界观框架。记住你偏好的写作风格和词汇表。在长时间的创作对话中保持角色性格和情节逻辑的一致性。7.3 与现有工作流的结合Plumb不是要取代你的笔记软件如Obsidian、Notion或项目管理系统而是作为它们的“智能缓存层”。你可以互补使用在Obsidian中维护结构化的、深度的项目文档。让Plumb自动捕捉对话中产生的碎片化、即时性的决策和事实。当需要深度参考时可以指示AI“去查阅Obsidian中关于架构设计的文档”。作为智能索引Plumb的记忆可以被视为你庞大知识库的一个动态、可检索的索引。当AI通过Plumb回忆起某个关键点后你可以进一步要求它帮你定位到原始文档中的详细章节。我个人在实际使用中的体会是Plumb这类工具的价值在于将“记忆”从被动记录变成了主动的、可计算的资产。最大的挑战不是技术而是习惯。你需要适应在对话中偶尔进行“显式记忆”的操作并信任系统去处理那些隐式的部分。初期可能会遇到一些检索不准的情况但随着你积累的高质量记忆条目增多以及你对如何“表述”事实更有经验它的效用会越来越明显。它让AI从“每次对话的临时工”向“长期合作的伙伴”迈出了坚实的一步。对于任何深度依赖AI进行复杂、长期任务的人来说投资这样一套记忆系统长期回报是值得的。

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