基于MCP协议构建AI智能体记忆系统:mnemo-mcp实战指南

news2026/5/15 17:32:46
1. 项目概述一个为AI记忆而生的开源工具最近在折腾AI应用开发特别是围绕大语言模型LLM构建智能体Agent时一个绕不开的痛点就是“记忆”。模型本身没有持久化记忆每次对话都是“全新开始”这对于需要长期跟踪上下文、积累知识或维护状态的复杂任务来说简直是灾难。市面上有不少方案比如向量数据库存历史对话或者用外挂数据库记录关键信息但总觉得不够优雅要么集成复杂要么功能单一。直到我发现了n24q02m/mnemo-mcp这个项目。它的定位非常清晰一个基于模型上下文协议Model Context Protocol, MCP的“记忆”服务器。简单来说它为你构建的AI智能体提供了一个标准化的、可扩展的“外置大脑”让智能体可以记住过去的事情并在需要时准确回忆起来。这不仅仅是存储聊天记录那么简单它实现了对记忆的结构化存储、语义化检索和生命周期管理是构建真正具有“长期对话”能力和“个性化”服务AI应用的关键基础设施。这个项目适合所有正在或计划开发AI原生应用的开发者、研究者和技术爱好者。无论你是想做一个能记住用户偏好的个人助手一个能持续学习领域知识的专业顾问还是一个需要维护复杂会话状态的游戏NPCmnemo-mcp提供的这套记忆管理范式都能让你从重复造轮子和处理脏数据的泥潭中解脱出来专注于智能体本身的逻辑与交互设计。接下来我就结合自己的实践深度拆解这个项目的设计思想、核心用法以及那些官方文档里不会写的“踩坑”经验。2. 核心设计思想与架构拆解2.1 为什么是MCP协议化带来的生态优势mnemo-mcp选择基于 MCP 构建这是一个极具远见的设计。MCP 是由 Anthropic 提出的一种开放协议旨在标准化 LLM 应用与外部工具、数据源之间的交互方式。你可以把它想象成 AI 世界的“USB协议”或“HTTP协议”。在mnemo-mcp之前如果你想给智能体加记忆功能通常的做法是1自己设计一个数据库schema2写一套CRUD接口3在智能体框架如LangChain, LlamaIndex中自定义一个Tool或Plugin来调用这些接口。这种做法耦合度高换一个框架或模型就得重写适配层而且很难复用。而mnemo-mcp通过实现 MCP Server将记忆功能变成了一个标准化服务。任何兼容 MCP 协议的客户端如 Claude Desktop, Cursor AI, 以及各种基于 MCP SDK 构建的应用都可以无缝接入这个记忆服务器无需关心其内部实现。这带来了几个核心优势解耦与复用记忆逻辑与业务逻辑彻底分离。记忆服务器独立部署、维护和升级不影响上层的智能体应用。生态互通你的记忆可以被任何 MCP 客户端使用。今天用 Claude 助手存入的记忆明天可以在另一个自研的 AI 应用中被检索出来。功能聚焦mnemo-mcp可以专心做好一件事——高效、可靠地管理记忆而不必分心去适配各种AI框架。它的架构非常清晰作为一个独立的服务Server通过标准 MCP 协议通常使用 SSE 或 stdio暴露出一系列“工具”Tools和“资源”Resources。AI 客户端Client通过调用这些工具来“记住”或“回忆”信息。2.2 记忆模型不止是键值对mnemo-mcp对“记忆”的抽象是其精髓所在。它没有简单地将记忆视为一个“键-值”存储例如“用户-偏好”-“喜欢黑暗模式”。而是设计了一个更富表现力的模型主要包含以下核心概念记忆项Memory Item这是记忆的基本单元。一条记忆项通常包含content: 记忆的具体内容文本例如“用户说他的咖啡喜好是双份浓缩不加糖”。metadata: 可选的键值对用于存储结构化信息如{“category”: “preference”, “entity”: “coffee”, “intensity”: “strong”}。这为后续的筛选和过滤提供了巨大便利。embedding: 该记忆内容经过文本嵌入模型如 OpenAItext-embedding-3-small计算得到的向量。这是实现语义搜索而非关键词匹配的基础。自动管理的时间戳创建时间、最后访问时间等。记忆集合/命名空间Collection/Namespace记忆项被组织在不同的集合中。这类似于数据库中的“表”或“文件夹”。一个典型的划分方式是为每个用户、每个会话或每个主题创建一个独立的集合例如user_12345,session_chat_20231001,topic_project_alpha。这种隔离保证了记忆的安全性和上下文相关性避免记忆错乱。记忆的读写与检索写入记住客户端通过调用remember工具提供内容和可选元数据将一条记忆存储到指定的集合中。服务器会同步为其生成嵌入向量。读取回忆这是最核心的部分。客户端通过recall工具进行回忆。回忆不是简单的“按ID查找”而是基于语义相似度的搜索。你提供一段“查询文本”如“我之前喜欢喝什么咖啡”服务器会计算查询文本的嵌入向量然后在目标集合中查找向量最相似的记忆项通常使用余弦相似度。这意味着即使你的提问方式和当初存储时的表述不完全一致只要语义相近就能被找出来。管理提供工具来列出、更新或删除特定的记忆项或整个集合。这种设计使得 AI 智能体能够进行更自然、更人性化的记忆交互。它不需要精确的“关键词”而是进行“联想式回忆”。3. 从零开始部署与配置实战3.1 环境准备与依赖安装mnemo-mcp是一个 Node.js 项目因此你需要一个基本的 Node.js 环境建议 LTS 版本如 18.x 或 20.x。部署方式非常灵活可以直接克隆源码运行也支持 Docker 容器化部署这对于生产环境来说更友好。方案一本地源码运行适合开发调试# 1. 克隆仓库 git clone https://github.com/n24q02m/mnemo-mcp.git cd mnemo-mcp # 2. 安装依赖 npm install # 3. 配置环境变量 cp .env.example .env # 编辑 .env 文件填入必要的配置最关键是嵌入模型API密钥方案二Docker 运行适合快速启动与生产部署# 使用官方镜像如果存在或自行构建 docker run -d \ --name mnemo-mcp \ -p 3000:3000 \ # 如果Server配置了HTTP传输 -e EMBEDDING_MODEL_API_KEYyour_key_here \ -v $(pwd)/data:/app/data \ # 持久化存储记忆数据 n24q02m/mnemo-mcp:latest注意无论哪种方式数据持久化都至关重要。记忆丢失是灾难性的。务必通过 Docker 卷 (-v) 或确保本地运行时的数据目录 (./data) 被妥善备份不要放在临时文件系统里。3.2 关键配置解析嵌入模型的选择与权衡配置文件.env是mnemo-mcp的核心其中最重要的配置项就是嵌入模型Embedding Model。它直接决定了记忆检索的准确性和成本。# .env 示例 EMBEDDING_MODEL_PROVIDERopenai # 或 azure, local EMBEDDING_MODELtext-embedding-3-small EMBEDDING_MODEL_API_KEYsk-... EMBEDDING_MODEL_BASE_URLhttps://api.openai.com/v1 # 可替换为代理地址 PORT3000 STORAGE_PATH./dataEMBEDDING_MODEL_PROVIDER与EMBEDDING_MODELOpenAI (text-embedding-3-*)这是最省心、效果通常也最好的选择。text-embedding-3-small在成本、速度和性能上取得了很好的平衡非常适合记忆检索场景。text-embedding-3-large效果更佳但维度和成本更高。对于绝大多数应用small版本完全足够。Azure OpenAI如果你在 Azure 生态内可以使用 Azure 提供的嵌入模型端点配置上需要指定AZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_DEPLOYMENT_NAME。Local (本地模型)这是追求零成本、数据完全私有的方案。项目可能支持通过transformers.js或其他方式加载本地嵌入模型如all-MiniLM-L6-v2。但这里有个大坑本地模型虽然免除了API调用但会显著增加服务器启动时间和内存消耗且检索精度可能略低于顶级商用模型。除非你对数据隐私有极端要求或者记忆量非常小否则初期建议使用 OpenAI API稳定后再考虑本地化迁移。STORAGE_PATH指定记忆数据SQLite数据库、向量索引文件等的存储路径。务必确保该路径有写权限并且被纳入你的备份策略。PORT当 MCP Server 使用 HTTP/SSE 传输模式时监听的端口。如果使用 stdio 模式常见于 Claude Desktop 集成则此配置无效。实操心得嵌入模型维度的选择嵌入向量的维度如text-embedding-3-small是 1536 维会影响存储空间和检索速度。维度越高表征能力越强但计算相似度也越耗时。对于记忆系统1536 维已经能很好地区分不同语义的记忆。除非你的记忆内容极其复杂和专业否则无需追求最高维度。在成本API调用费和效果之间text-embedding-3-small是目前的最优解。3.3 与AI客户端集成以Claude Desktop为例部署好mnemo-mcp服务器后下一步是让它被你的AI助手所用。这里以集成到 Claude Desktop 为例这是最直观的体验方式。找到 Claude Desktop 的 MCP 配置macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.json编辑配置文件你需要根据mnemo-mcp的启动方式来配置。如果你的mnemo-mcp以 HTTP Server 运行例如npm start后运行在http://localhost:3000{ mcpServers: { mnemo: { command: npx, args: [ -y, modelcontextprotocol/server-mnemo, --storage-path, /path/to/your/data ], env: { EMBEDDING_MODEL_API_KEY: sk-... } } } }实际上更常见的集成方式是使用stdio模式即 Claude Desktop 直接启动mnemo-mcp进程并与之通信。你需要确保modelcontextprotocol/server-mnemo这个包被全局安装或者指定正确的本地路径。更可靠的配置方式直接指向本地项目{ mcpServers: { my-memory: { command: node, args: [ /absolute/path/to/your/mnemo-mcp/build/index.js ], env: { EMBEDDING_MODEL_API_KEY: sk-..., STORAGE_PATH: /absolute/path/to/your/mnemo-data } } } }这里args指向你克隆项目后构建的入口文件 (build/index.js)。env部分传递必要的环境变量。重启 Claude Desktop保存配置文件后完全退出并重启 Claude Desktop。验证集成重启后在 Claude 的新对话中你应该能看到新增的工具。尝试说“请记住我的项目截止日期是下周五。” 然后在后续对话中问“我之前说的截止日期是什么时候” Claude 应该能调用recall工具找到这条记忆并回答你。踩坑记录配置文件路径错误或权限问题是集成失败的主要原因。务必使用绝对路径。另外Claude Desktop 对 MCP Server 的启动超时时间较短如果你的mnemo-mcp首次启动需要下载模型本地模式很可能超时失败。建议先以 HTTP 模式独立启动并测试成功再配置 stdio 集成。4. 核心功能实操与高级用法4.1 记忆的增删改查通过MCP工具交互mnemo-mcp的核心功能通过一系列 MCP “工具”暴露出来。了解这些工具的使用场景是编写高效智能体提示词的关键。假设我们正在开发一个“项目管家”AI它需要记住项目的各种信息。记住remember存储一条新记忆。场景用户说“我们这个‘凤凰项目’的后端API使用Fastify框架数据库是PostgreSQL。”AI调用工具remember参数为{ collection: project_phoenix, content: 后端API使用Fastify框架数据库是PostgreSQL。, metadata: {type: tech_stack, component: backend} }技巧在metadata中尽可能添加结构化的标签。这为后续基于属性的过滤提供了可能比如未来可以问“这个项目用了哪些后端技术”AI可以结合语义搜索和metadata.type “tech_stack”的过滤来精准回忆。回忆recall基于语义搜索记忆。场景几天后用户问“我们项目的数据库选型是什么”AI调用工具recall参数为{ collection: project_phoenix, query: 数据库是什么, limit: 5 }服务器会计算“数据库是什么”的嵌入向量在project_phoenix集合中查找最相似的记忆并返回相似度最高的几条如包含“数据库是PostgreSQL”的那条。limit参数控制返回数量避免信息过载。列出记忆list_memories与删除记忆forgetlist_memories可以列出某个集合下的所有记忆支持分页和基于元数据的过滤。这在AI需要梳理某个主题下所有已知信息时非常有用。forget根据记忆的唯一ID删除特定记忆。这赋予了AI管理自己记忆的能力可以忘记错误或过时的信息。实操心得设计高质量的“记忆提示”AI在何时该调用remember这需要你在智能体的系统提示词System Prompt中精心设计。例如“你是一个有记忆力的助手。当用户陈述关于其自身、项目或任何可能在未来对话中需要被重提的事实时你应该主动调用remember工具存储它。存储时请为记忆分配合适的集合名称如user_preferences,project_[name]和有意义的元数据标签。”4.2 记忆集合策略隔离与组织之道如何设计“集合”是影响记忆系统清晰度和效率的关键。按实体隔离这是最安全的策略。为每个用户user_{id}、每个项目project_{name}、每个对话会话session_{uuid}创建独立的集合。确保不同用户、不同项目之间的记忆绝对隔离避免隐私泄露和信息交叉。按主题/类型组织在一个实体内部可以进一步细分。例如在user_123下可以有preferences偏好、conversation_history对话历史摘要、learned_facts学到的知识等子集合。这可以通过在集合名称上体现如user_123/preferences如果支持层级或者用前缀如user_123_preferences。动态集合与静态集合动态集合如session_*生命周期短对话结束即可清理。静态集合如user_*,project_*需要长期保留并实施定期备份。注意避免使用单一的、全局的集合如global_memories。这会导致所有记忆混杂在一起语义搜索的噪音极大检索准确率下降且存在严重的安全风险。隔离是记忆系统设计的第一原则。4.3 元数据Metadata的妙用赋能精准过滤metadata字段是提升记忆系统能力的“神器”。它让记忆从非结构化文本变成了半结构化数据。应用示例 假设你在构建一个智能学习伙伴它帮你记忆知识点。存储一个知识点“光合作用的场所是叶绿体。”content: “光合作用的场所是叶绿体。”metadata:{“subject”: “biology”, “topic”: “photosynthesis”, “difficulty”: “easy”, “review_count”: 0}后续你可以让AI进行复杂的回忆“帮我复习一下生物学科里难度为‘简单’的所有知识点。” - AI 可以调用list_memories并过滤metadata.subject “biology” AND metadata.difficulty “easy”。每次复习后AI 可以调用更新工具如果项目实现或先读取再重新存储将review_count加1。从而实现基于元数据的间隔重复Spaced Repetition学习算法。实操心得设计元数据Schema在项目开始前花点时间设计一个初步的元数据Schema。思考你的记忆通常有哪些维度category,entity,priority,status,created_by,expires_at过期时间等。一致的元数据设计会让后续的复杂查询和管理变得可行。5. 性能优化、问题排查与生产实践5.1 向量检索的性能考量当记忆条数例如单个集合内超过1万条增长时简单的线性扫描计算查询向量与所有记忆向量的相似度会变得缓慢。mnemo-mcp内部需要使用高效的向量索引库例如pinecone.io的本地版本或hnswlib的 Node.js 绑定来加速近似最近邻搜索。索引构建通常在记忆插入时向量会被自动添加到索引中。首次启动或大量导入历史数据后索引构建可能需要一些时间。参数调优像 HNSW 这样的索引有M构建时的邻居数、efConstruction构建时的动态候选集大小和efSearch搜索时的动态候选集大小等参数。增加efSearch可以提高检索精度但会降低速度。对于记忆检索场景在保证召回率的前提下可以适当调低efSearch如从默认的10调到50以获得更快响应。硬件要求向量索引和搜索是内存和CPU密集型操作。生产环境部署需要保证足够的内存建议至少2GB以上可用内存具体取决于数据量和较好的CPU性能。5.2 常见问题与排查清单AI客户端找不到/无法调用记忆工具检查MCP Server 配置是否正确路径、环境变量。查看 Claude Desktop或其他客户端的日志文件通常会有连接错误信息。验证先脱离AI客户端用curl或 Postman 调用mnemo-mcp的 HTTP 端点如果启用测试tools接口是否能正常返回工具列表。确保你正在使用的 AI 模型如 Claude 3 Opus支持函数调用/工具使用。回忆结果不准确或找不到检查嵌入模型确认使用的嵌入模型是否合适。不同模型生成的向量空间不同混用会导致搜索失效。检查集合确认recall时指定的集合名称与remember时完全一致大小写敏感。优化查询尝试用更完整、更贴近原记忆语义的句子进行查询。有时过于简短的查询如“数据库”可能匹配到多条不相关的记忆。查看相似度分数mnemo-mcp的recall结果通常会包含一个相似度分数如score: 0.87。分数过低如0.7可能意味着没有找到真正相关的记忆。你需要调整查询或检查记忆内容是否太模糊。服务器内存占用过高本地模型如果使用本地嵌入模型这是主要原因。考虑切换到 API 模式或将服务部署到内存更大的机器上。记忆数量单个集合内记忆数量巨大数十万。考虑实施记忆归档策略将旧的、不常访问的记忆转移到冷存储如普通数据库只保留热点记忆在向量索引中。内存泄漏检查是否有未正确关闭的数据库连接或资源。确保使用最新稳定版。写入或检索速度慢网络延迟如果使用云端嵌入模型 API网络延迟是主要因素。考虑在离你服务器区域近的云服务商部署或为 API 调用设置合理的超时和重试机制。索引未优化对于本地向量索引参考上一节进行参数调优。硬件瓶颈检查服务器 CPU 和磁盘 I/O 负载。数据库文件如 SQLite所在的磁盘性能至关重要。5.3 生产环境部署建议高可用与持久化不要将mnemo-mcp部署在单点服务器上。考虑使用 Docker Swarm 或 Kubernetes 进行容器编排并确保存储卷STORAGE_PATH使用网络存储如 AWS EBS, NFS以实现数据持久化和多副本共享。监控与日志为服务添加应用性能监控APM和日志收集如 ELK 栈。关键指标包括API 响应时间、记忆读写 QPS、错误率、内存使用量。监控嵌入模型 API 的调用成本和速率限制。备份策略定期备份STORAGE_PATH目录下的所有文件。由于向量索引可能是二进制文件确保备份过程是文件系统一致的例如在备份期间暂停服务或使用快照功能。安全API密钥管理使用环境变量或密钥管理服务如 AWS Secrets Manager, HashiCorp Vault来管理EMBEDDING_MODEL_API_KEY切勿硬编码在配置文件或代码中。网络隔离如果以 HTTP 模式运行确保服务不直接暴露在公网应置于内部网络并通过 API 网关或反向代理如 Nginx进行访问控制和 HTTPS 加密。输入验证虽然 MCP 协议有一定规范但仍需确保服务端对传入的collection名称、content内容长度等进行验证防止注入攻击或滥用。6. 进阶应用场景与扩展思路mnemo-mcp作为一个基础记忆组件其潜力远不止于简单的问答记忆。结合其他工具和设计模式可以构建出更强大的应用。构建个性化AI助手为每个用户维护独立的记忆集合。助手可以记住用户的饮食习惯、阅读偏好、工作习惯、未完成的任务等。每次交互都基于完整的个人历史实现真正的“懂你”服务。实现长期、多轮对话任务对于需要多次交互才能完成的复杂任务如旅行规划、软件设计AI可以将每一步的决策、用户反馈、已确认的信息作为记忆存储下来。即使对话中断下次也能从上次中断的地方无缝接起保持任务状态的连续性。知识库的主动学习与增强AI在回答用户问题时可以将经过验证的高质量问答对自动存储到公共知识记忆库中例如collection: “faq_knowledge_base”。随着时间推移这个记忆库会自我丰富和进化成为AI回答问题的首要参考来源减少对固定知识库文件的依赖。与图形数据库结合记忆的metadata可以存储实体和关系信息。例如一条关于“张三和李四是同事”的记忆其元数据可以是{“relation”: “colleague”, “subject”: “张三”, “object”: “李四”}。通过一个后处理程序可以将这些关系抽取并同步到 Neo4j 等图形数据库中从而让AI不仅拥有“事实”记忆还能进行“关系”推理。记忆的衰减与清理并非所有记忆都需要永久保存。可以扩展mnemo-mcp为记忆项添加last_accessed最后访问时间和access_count访问次数字段并实现一个后台清理任务。长期未被访问的、低价值的记忆可以被自动归档或删除保持记忆库的“健康度”和检索效率。在我自己的项目中将mnemo-mcp作为核心记忆层引入后最直观的感受是AI智能体的“人格”更稳定了对话的连贯性得到了质的提升。它从一个“金鱼脑”的对话模型变成了一个似乎有“成长轨迹”和“个人经历”的伙伴。当然记忆系统的设计本身也是一门学问如何设计提示词来触发记忆的存储和调取如何划分记忆集合以避免污染如何平衡记忆的丰富性与检索效率都需要在具体场景中不断打磨。n24q02m/mnemo-mcp提供了一个坚实、标准化的起点让开发者可以跳过底层实现直接探索AI记忆应用的无限可能。

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