当前位置: 首页 > news >正文

基于MCP协议与向量数据库构建AI助手本地记忆中枢

1. 项目概述:为AI助手构建一个本地记忆中枢

如果你和我一样,每天都要和Claude、Cursor这类AI编程助手打交道,肯定会遇到一个头疼的问题:对话没有记忆。昨天刚和它讨论完项目的架构设计,今天打开新会话,它又得从头问起“这个项目是做什么的?”。更麻烦的是,那些在调试中踩过的坑、总结的最佳实践,每次都得手动复制粘贴到新对话里,效率极低。

这个痛点催生了local-memory-mcp项目。简单说,它是一个完全运行在你本地的记忆服务端,遵循新兴的MCP协议。你可以把它理解成AI助手的“外接大脑”或“第二记忆体”。它的核心使命是让AI助手能记住跨会话的重要信息——比如你定下的代码规范、某个API的诡异返回值、上次部署失败的教训——并在后续对话中,当AI助手需要相关背景时,能主动、智能地“回忆”起来。

我选择本地化方案,核心考量是隐私、可控和离线可用。所有记忆数据、向量计算都在你的机器上完成,不依赖任何外部云服务。技术栈上,它用Bun作为运行时,用轻量级的Zvec作为嵌入式向量数据库来存储和检索记忆,并通过本地的Ollama服务(使用embeddinggemma模型)将文本转化为机器能理解的向量。整个系统通过一组定义清晰的工具(memory.save,memory.search等)暴露给AI助手,让后者能像调用函数一样“存储”和“读取”记忆。

这个项目特别适合软件开发者、技术写作者或任何需要与AI进行复杂、长期协作的人。无论是维护一个大型代码库,还是撰写系列技术文档,你都可以通过它建立一个持续进化的“项目知识库”,极大提升人机协作的连贯性和深度。

2. 核心设计思路与架构解析

2.1 为什么是MCP?协议驱动的可扩展性

MCP,全称Model Context Protocol,是由Anthropic提出的一套开放协议。它的目标很明确:为AI模型(尤其是大语言模型)定义一个标准化的方式来发现、调用外部工具和资源。你可以把它想象成AI世界的“USB协议”或“插件系统”。

local-memory-mcp中,我们实现了一个MCP服务器。这意味着任何兼容MCP的客户端(如Claude Desktop、Cursor、Windsurf等)都能无缝接入我们的记忆服务,而不需要为每个客户端单独开发适配器。这种协议优先的设计带来了巨大的灵活性:未来如果出现了新的、更优秀的AI客户端,只要它支持MCP,我们的记忆服务就能立即为其所用。

注意:MCP服务器通常通过stdio(标准输入输出)与客户端通信。这是一种轻量级、跨平台的进程间通信方式。我们的服务器启动后,就静静地等待客户端(比如VS Code里的Copilot)通过标准输入发送JSON格式的请求,处理后再通过标准输出返回JSON结果。这种设计避免了复杂的网络端口管理和防火墙问题。

2.2 记忆的存储与检索:向量数据库的实战选型

记忆的核心是“存”和“取”。存,要把一段文本(比如“用户偏好使用async/await而非Promise.then”)变成计算机能高效处理的形式;取,则要在海量记忆中快速找到与当前问题最相关的那几条。

1. 向量化:从文字到数学这是实现语义搜索的基石。我们使用Ollama本地运行的embeddinggemma模型。当你调用memory.save存储一段文本时,服务器会悄悄做一件事:将这段文本发送给Ollama的/api/embed接口。该接口返回一个Float32Array,通常是一个768维的向量(具体维度由EMBEDDING_DIM环境变量定义,必须与模型匹配)。这个向量就是这段文本在高维空间中的“数学指纹”。语义相近的文本,其向量在空间中的距离(通常用余弦相似度衡量)也会很近。

2. 存储与检索:为什么是Zvec?得到向量后,我们需要一个地方存储它,并支持高效的近似最近邻搜索。这就是向量数据库的职责。市面上选择很多(Pinecone, Weaviate, Qdrant等),但我们选择了Zvec,原因有三:

  • 极致轻量与嵌入式:Zvec是一个纯TypeScript库,无需单独部署数据库服务。它直接在你的应用进程中运行,将数据存储在单个文件中(默认是./data/memory.zvec)。这简化了部署,也减少了运维负担。
  • 零外部依赖:整个搜索逻辑在内存中完成,检索速度极快,尤其适合我们这种单用户、数据量在万级以内的场景。
  • 足够的查询能力:Zvec支持带元数据过滤的KNN查询。这意味着我们不仅能根据向量相似度搜索,还能加上条件,比如“只搜索workspaceKeymy-react-projecttypebug的记忆”。这在实际应用中非常有用。

在数据库设计上,我们使用一个Zvec集合(Collection),每条记忆记录包含两个部分:

  • 稠密向量字段:存储由Ollama生成的embedding向量。
  • 标量元数字段:存储id,workspaceKey,type,summary,text,tags,importance,createdAt,supersededAt等。这些字段用于过滤、管理和展示。

3. 检索流程详解当AI助手需要背景信息时,会调用memory.search并传入一个查询字符串(例如:“我们之前是怎么处理用户认证的?”)。服务器会:

  1. 将查询字符串同样通过Ollama转化为查询向量。
  2. 在Zvec数据库中,执行一次KNN查询,寻找与查询向量最相似的向量集合。
  3. 在查询时,自动附加一个过滤器:supersededAt字段必须为null(即未被标记为过时)。
  4. 同时,如果调用时指定了workspaceKeytype,也会将这些作为过滤条件。
  5. 最后,根据相似度分数(通常经过标准化处理)返回排名前topK条的记忆记录,包括它们的元数据和原始文本。

2.3 记忆的生命周期管理:增删改查的哲学

一个健康的记忆系统不能只存不删,否则会堆积大量无效、过时信息,污染检索结果。local-memory-mcp设计了完整的记忆生命周期管理工具:

  • memory.save:创建新记忆。这是最基础的操作。除了必填的text,强烈建议提供清晰的summarytagssummary是记忆的“标题”,用于快速浏览;tags是“关键词”,便于后期按主题过滤。importance字段(0.0到1.0)可以手动标记记忆的重要性,未来可用于加权搜索。
  • memory.supersede:标记过时。这是比删除更优雅的方式。软件在迭代,决策会更新。当你有了新的、更准确的记忆(例如:“改用JWT替代Session认证”),你可以用它supersede旧的那条。旧记忆的supersededAt字段会被打上时间戳,从此在默认搜索中“隐身”,但历史记录得以保留。这在需要追溯决策变更时非常有用。
  • memory.delete:永久删除。用于清除完全错误或无用的信息。
  • memory.search:智能检索。是整个系统的价值出口。
  • memory.ping:健康检查。用于验证服务器是否正常运行,并返回版本等基础信息。

工作空间隔离:WORKSPACE_KEY的妙用这是一个关键设计。通过WORKSPACE_KEY环境变量(通常设置为项目文件夹名),我们可以将记忆按项目隔离。这样,你在“React电商项目”中存储的关于UI组件的记忆,不会在“Go后端微服务”项目中被检索出来,避免了无关信息的干扰。同时,所有记忆又存储在同一个物理数据库文件中,便于备份和管理。

3. 从零开始:环境搭建与项目部署实操

3.1 基础环境准备:Bun与Ollama

我们的技术栈依赖于两个核心运行时:Bun和Ollama。下面是在macOS/Linux系统下的详细安装步骤(Windows用户建议使用WSL2以获得最佳体验)。

1. 安装BunBun是一个现代化的JavaScript运行时,速度很快,内置了包管理器和测试运行器。安装一条命令搞定:

# 使用官方安装脚本 curl -fsSL https://bun.sh/install | bash

安装完成后,重启你的终端,运行bun --version验证是否安装成功。

2. 安装并配置OllamaOllama让你能在本地轻松运行大型语言模型。我们需要它来提供文本嵌入服务。

# macOS 和 Linux 安装 curl -fsSL https://ollama.ai/install.sh | sh

安装后,Ollama服务会自动启动。你可以通过ollama serve来手动启动服务,它默认监听在http://localhost:11434

接下来,我们需要拉取专门用于生成文本向量的模型embeddinggemma

ollama pull embeddinggemma

这个模型大小约2GB,下载时间取决于你的网络。你可以通过ollama list查看已下载的模型。

实操心得:首次运行ollama pull如果遇到网络问题,可以尝试设置镜像源。但更常见的问题是内存不足。embeddinggemma运行需要一定内存,确保你的机器可用内存大于4GB。可以通过ollama run embeddinggemma并输入一段文本来简单测试模型是否正常工作。

3.2 获取与初始化项目

假设你已经将basst85/local-memory-mcp项目克隆到本地。

# 克隆项目 git clone https://github.com/basst85/local-memory-mcp.git cd local-memory-mcp # 使用Bun安装项目依赖 bun install

bun install会读取package.json,安装所有必要的依赖,主要是@zvec/zvec@modelcontextprotocol/sdk等。

关键目录结构说明:

local-memory-mcp/ ├── src/ │ ├── index.ts # MCP服务器主入口,处理协议通信 │ ├── memory-db.ts # 记忆数据库的核心逻辑(增删改查) │ └── embed.ts # 封装与Ollama嵌入API的交互 ├── tests/ # 测试文件 ├── data/ # 默认的Zvec数据库文件存放目录(需确保可写) ├── .vscode/mcp.json # VS Code工作区MCP配置示例 ├── .mcp.json # Claude Code项目级MCP配置示例 └── CLAUDE.md # 指导AI如何使用此记忆的提示词

3.3 配置详解与环境变量调优

项目的行为由一系列环境变量控制。理解它们对于正确使用和调试至关重要。

环境变量默认值说明
MEMORY_DB_PATH./data/memory.zvecZvec数据库文件路径。建议设置为绝对路径,尤其是在多工作空间共享时,避免路径混乱。
OLLAMA_BASE_URLhttp://localhost:11434Ollama服务的URL。如果你的Ollama运行在其他机器或端口,需要修改此变量。
OLLAMA_EMBED_MODELembeddinggemma用于生成嵌入向量的模型名称。必须与通过ollama pull下载的模型名一致。
EMBEDDING_DIM768嵌入向量的维度必须与你使用的嵌入模型的实际维度严格匹配embeddinggemma模型是768维。如果维度不匹配,向量搜索将完全失效。
WORKSPACE_KEYdefault工作空间键。用于隔离不同项目的记忆。最佳实践是将其设置为项目根目录的名称(如${workspaceFolderBasename}${PWD##*/})。

配置建议:

  1. 开发/测试时:可以在项目根目录创建一个.env文件(需自行安装dotenv包或在代码中加载),方便管理变量。
  2. 生产/长期使用时:通过启动命令或IDE配置传入环境变量更为可靠。例如在VS Code的mcp.json或启动脚本中设置。

3.4 运行与测试:验证你的安装

一切就绪后,让我们启动服务器并进行测试。

1. 启动MCP服务器在项目根目录下运行:

bun run start

如果一切正常,终端不会有太多输出,程序会挂起,等待通过stdio接收MCP客户端请求。这意味着服务器已成功启动。

2. 运行单元测试项目包含了重要的单元测试,运行它们能验证核心功能是否正常,尤其是与Ollama的连通性。

bun run test

你应该会看到类似以下的输出,表明测试通过:

test tests/embed.test.ts ✓ parses successful Ollama embed response ✓ handles Ollama embed error test tests/memory-db.test.ts ✓ saves and searches memories ✓ supersedes memories ✓ deletes memories

如果测试失败,请重点关注:

  • embed.test.ts失败:通常意味着Ollama服务未启动,或OLLAMA_BASE_URL配置错误。请检查Ollama进程(ollama serve)和网络连通性(curl http://localhost:11434/api/tags)。
  • memory-db.test.ts失败:可能涉及文件写入权限(检查data/目录)或Zvec库的兼容性问题。

4. 与你的开发环境深度集成

让记忆服务在后台运行只是第一步,关键是让它与你日常使用的AI助手无缝对接。下面以VS Code + GitHub Copilot Chat 和 Claude Code 为例,展示如何深度集成。

4.1 集成到VS Code与GitHub Copilot Chat

VS Code通过MCP支持,可以让你在Copilot Chat中直接使用我们构建的记忆工具。

方法一:项目级配置(推荐用于特定项目)项目已经预置了.vscode/mcp.json文件。你只需要根据你的环境稍作调整:

{ "servers": { "local-memory-mcp": { "type": "stdio", "command": "bun", "args": ["run", "start"], "env": { "MEMORY_DB_PATH": "/ABSOLUTE/PATH/TO/your/local-memory-mcp/data/memory.zvec", "OLLAMA_BASE_URL": "http://localhost:11434", "OLLAMA_EMBED_MODEL": "embeddinggemma", "EMBEDDING_DIM": "768", "WORKSPACE_KEY": "${workspaceFolderBasename}" } } } }

关键修改点:

  • /ABSOLUTE/PATH/TO/your/local-memory-mcp替换为你电脑上项目的绝对路径。这是确保VS Code在任何位置都能正确启动服务器的关键。
  • WORKSPACE_KEY: 使用${workspaceFolderBasename}这个VS Code变量,它会自动取当前打开的工作区文件夹名作为键值,完美实现项目间记忆隔离。

配置好后,打开VS Code的设置 (Ctrl+,),搜索chat.mcp.autoStart,确保这个实验性设置被启用。这样,当你打开Copilot Chat时,VS Code会自动启动配置好的MCP服务器。

方法二:用户级配置(全局可用)如果你希望在所有VS Code项目中都能使用这个记忆服务,需要将其添加到用户全局配置。

  1. 在VS Code中按下Ctrl+Shift+P(或Cmd+Shift+P),打开命令面板。
  2. 输入并选择MCP: Open User Configuration。这会打开一个JSON配置文件。
  3. 在其中添加上述服务器配置(同样注意使用绝对路径)。

踩坑记录:我最初使用相对路径MEMORY_DB_PATH: ./data/memory.zvec,结果发现不同项目启动服务器时,当前工作目录不同,导致每个项目都创建了独立的数据库文件,记忆完全无法共享。务必使用绝对路径来指向同一个数据库文件,这是实现跨项目记忆共享(同时依靠WORKSPACE_KEY隔离)的前提。

4.2 集成到Claude Code

Claude Code是Anthropic官方的代码编辑器,对MCP的支持非常原生。

项目级集成(配置共享给协作者)在项目根目录,你可以使用Claude Code CLI工具快速添加:

claude mcp add --transport stdio --scope project \ --env MEMORY_DB_PATH=./data/memory.zvec \ --env OLLAMA_BASE_URL=http://localhost:11434 \ --env OLLAMA_EMBED_MODEL=embeddinggemma \ --env EMBEDDING_DIM=768 \ --env WORKSPACE_KEY=${PWD##*/} \ local-memory-mcp -- bun run start

这条命令会在项目根目录生成一个.mcp.json文件,内容与VS Code的类似。该文件可以提交到代码库,这样所有使用此项目的团队成员,只要本地有Ollama和Bun环境,就能一键启用记忆功能。

用户级集成(仅自己使用)如果你希望在任何使用Claude Code的项目中都能调用记忆,可以添加到用户配置:

claude mcp add --transport stdio --scope user \ --env MEMORY_DB_PATH=/ABSOLUTE/PATH/TO/local-memory-mcp/data/memory.zvec \ ...其他环境变量... local-memory-mcp -- bun --cwd /ABSOLUTE/PATH/TO/local-memory-mcp run start

这里有两个关键点:

  1. MEMORY_DB_PATH必须用绝对路径。
  2. 命令中使用了bun --cwd /path/to/project run start,这确保了Bun在正确的项目目录下启动服务器,能正确找到node_modulestsconfig.json等文件。

管理你的MCP服务器添加后,你可以随时查看和管理:

# 列出所有已配置的MCP服务器 claude mcp list # 查看某个服务器的详细配置 claude mcp get local-memory-mcp # 移除一个服务器 claude mcp remove local-memory-mcp

4.3 实战工作流:让AI助手真正“记住”

配置完成后,激动人心的时刻到了:让你的AI助手开始利用记忆。以下是一个典型的工作流模拟:

  1. 初次会话,存储决策:你在开发一个React项目,与AI助手讨论了状态管理方案。

    • :“我们决定在这个项目中使用Zustand而不是Redux Toolkit,因为它的样板代码更少,对TypeScript支持也很好。”
    • 你(手动或通过指令触发):让AI助手调用memory.save工具。
    • AI助手(调用工具)
      { "tool": "memory.save", "arguments": { "workspaceKey": "my-react-app", "type": "architecture_decision", "summary": "选用Zustand作为状态管理库", "text": "项目决定使用Zustand替代Redux Toolkit进行状态管理。主要考量:1) API更简洁,样板代码极少。2) 与TypeScript集成度极高,类型推断友好。3) 基于Context和Hooks,学习曲线平缓。后续所有全局状态都应通过创建的store来管理。", "tags": ["react", "state-management", "zustand", "decision"], "importance": 0.9 } }
  2. 后续会话,智能回忆:几天后,你在同一个项目中处理一个复杂的组件,忘记了状态该如何共享。

    • :“这个组件的状态需要被多个地方访问,该怎么处理?”
    • AI助手(自动触发):它意识到这是一个关于状态管理的问题,会先调用memory.search查询相关记忆。
    • AI助手(调用工具)
      { "tool": "memory.search", "arguments": { "query": "如何管理需要跨组件共享的全局状态?", "topK": 3, "workspaceKey": "my-react-app" } }
    • 服务器返回:之前存储的关于Zustand的记忆,因为语义高度相关,会被检索出来。
    • AI助手(综合回答):“根据项目之前的架构决策(已从记忆库中检索),我们统一使用Zustand来管理全局状态。我建议你在这里创建一个新的store...(结合当前代码上下文给出具体建议)”
  3. 更新与修正:后来团队决定升级到Zustand的新版本,API有变动。

    • 你可以让AI助手memory.supersede旧的那条记忆,并memory.save一条新的、描述最新实践的记忆。这样,旧记忆被归档,新记忆生效,知识库得以更新。

这个工作流的核心在于,AI助手从被动的、失忆的问答机器,变成了一个能主动查阅“项目笔记”、拥有持续上下文的学习型伙伴。

5. 高级使用技巧、问题排查与性能优化

5.1 提升记忆质量:存储与检索的最佳实践

记忆系统的效果,很大程度上取决于你如何“喂养”它。以下是一些提升记忆检索准确性的实战技巧:

1. 精心构思summarytags

  • summary应像一条清晰的推特,用一句话概括核心。避免“关于XX的讨论”,而是“决定使用Y方法解决X问题,因为Z”。
  • tags是重要的检索过滤器。使用具体、一致的标签,如[“auth”, “bug”, “api-design”, “performance”]。可以建立一个小型的标签规范。

2. 分拆记忆,而非长篇大论一条记忆存储一个独立的概念或决策。不要将一整个会议纪要存为一条记忆。而是将其拆分为多条,例如:

  • 记忆1:summary: “选用PostgreSQL而非MySQL”, tags: [“database”, “decision”]
  • 记忆2:summary: “用户表增加avatar_url字段”, tags: [“schema”, “user”, “migration”]这样检索时粒度更细,准确率更高。

3. 利用type字段进行分类项目预定义了type字段,你可以扩展它来对记忆进行粗粒度分类。例如:

  • architecture_decision: 架构决策
  • code_convention: 代码规范
  • known_bug: 已知缺陷
  • lesson_learned: 经验教训
  • api_spec: API约定 在搜索时,可以指定type来缩小范围。

4. 定期维护:清理与更新每隔一段时间,可以搜索importance较低的记忆,或者用memory.search查询一些通用词(如“TODO”、“maybe”),看看是否有模糊、无效的记忆需要删除或通过supersede更新。

5.2 常见问题排查指南

即使按照步骤操作,也可能会遇到问题。下面是一个快速排查清单:

现象可能原因解决方案
服务器启动失败,提示Cannot find module依赖未安装或Bun缓存问题。1. 在项目根目录运行bun install
2. 清理Bun缓存:bun pm cache rm,然后重装依赖。
memory.search返回空数组,但确定已存储记忆1.WORKSPACE_KEY不匹配。
2. Ollama嵌入服务异常。
3. 向量维度不匹配。
1. 检查存储和搜索时使用的workspaceKey是否一致。
2. 运行curl http://localhost:11434/api/embed -d '{"model":"embeddinggemma", "prompt":"test"}'看Ollama是否正常响应。
3.重点检查:确认EMBEDDING_DIM环境变量是否与embeddinggemma模型维度(768)一致。
测试bun run test时,embed.test.ts失败Ollama服务未运行或网络不通。1. 终端运行ollama serve确保服务在后台运行。
2. 检查OLLAMA_BASE_URL环境变量是否正确(默认http://localhost:11434)。
3. 检查防火墙或代理设置是否阻止了本地连接。
VS Code/Claude Code中无法调用记忆工具MCP服务器未成功连接或配置错误。1. 在终端手动运行bun run start,看服务器是否能独立启动。
2. 检查IDE的MCP配置(.vscode/mcp.json.mcp.json),特别是命令和绝对路径是否正确。
3. 查看IDE的日志输出(如VS Code的“MCP”输出面板),常有详细错误信息。
存储或检索速度很慢1. 首次运行需初始化Zvec文件。
2. Ollama生成嵌入向量是主要耗时操作。
1. 首次慢是正常的。
2. 确保Ollama使用的是GPU(如果可用),可大幅提升嵌入速度。检查Ollama日志确认。
3. 对于批量操作,可以考虑异步处理或缓存常用查询。

5.3 性能考量与扩展方向

性能瓶颈分析当前架构下,主要性能开销在两点:

  1. 嵌入向量生成:每次memory.savememory.search都需要调用Ollama的嵌入接口,存在网络延迟和模型计算时间。这是最大的延迟来源。
  2. 向量检索:Zvec作为内存数据库,检索速度很快,但当记忆条数超过10万级时,纯内存搜索可能成为瓶颈。

优化建议

  1. 嵌入缓存:对于完全相同的文本,可以实现在内存或磁盘中的简单缓存,避免重复调用Ollama。可以在src/embed.ts中增加一个基于文本哈希的缓存层。
  2. 批量操作:如果需要导入大量历史记忆(如文档),可以编写脚本,批量读取、生成嵌入向量后一次性存入数据库,避免频繁的请求-响应循环。
  3. 异步处理:对于memory.save操作,可以考虑改为“快速存储文本元数据,后台异步生成向量并更新”的模式,让用户操作得到即时响应。
  4. 数据库升级:如果数据量极大,可以考虑将Zvec替换为支持持久化索引、性能更高的嵌入式向量库,如hnswlib-node,但会引入C++依赖,增加部署复杂度。

扩展可能性这个项目是一个强大的基础,你可以基于它进行扩展:

  • 自动记忆捕获:编写IDE插件或Git钩子,在代码注释中出现// MEMORY:或提交信息中有特定标签时,自动提取文本并调用memory.save
  • 记忆关联与图谱:不仅存储孤立记忆,还可以存储记忆之间的关系(例如,记忆A“推翻”了记忆B,记忆C“引用”了记忆D),构建知识图谱。
  • 多模态记忆:扩展支持存储图片、音频的嵌入向量(需要多模态嵌入模型),让AI能记住“那个蓝色按钮的截图”或“错误告警音”。
  • 记忆快照与分享:将某个WORKSPACE_KEY下的所有记忆导出为文件,方便在不同机器间同步或与团队成员分享项目上下文。

构建一个属于AI助手的本地记忆系统,本质上是在构建一个外挂的、可进化的工作大脑。它不会取代你的思考,而是将你从重复的背景交代中解放出来,让你与AI的对话能站在更高的起点上持续深入。从配置环境到集成使用,整个过程就像为你的数字工作台安装了一个强大的新工具。

http://www.jsqmd.com/news/782348/

相关文章:

  • Xbox成就解锁器终极指南:免费工具快速解锁全成就教程
  • 如何快速配置Unity游戏实时翻译插件:终极完整指南
  • AssetStudio完全指南:3步掌握Unity游戏资源提取的终极技巧
  • 告别手动复制粘贴:用Python自动化获取同花顺问财数据的完整指南
  • 2026年贵州无人机租赁与成都飞手培训一站式低空经济平台深度横评指南 - 企业名录优选推荐
  • 2026年深圳驾培市场洗牌:直营模式如何终结加盟乱象与隐形收费 - 优质企业观察收录
  • 终极指南:使用MediaCreationTool.bat轻松绕过Windows 11安装限制
  • 太原师范学院考研辅导班推荐:排行榜单与选哪家好评测 - michalwang
  • Kubernetes故障排查与诊断:从问题定位到解决方案
  • 芜湖闲置黄金别乱卖!8 大区域正规回收清单,免费上门 + 高价秒结 - 金掌柜黄金回收
  • 高效构建跨平台游戏串流服务器:Sunshine完整实战指南
  • 基于LangChain与RAG构建企业级知识库问答系统:从原理到实践
  • 2026最新空调安装公司/服务商推荐!湖北优质权威榜单发布,靠谱省心武汉等地服务商甄选 - 十大品牌榜
  • 基于Terraform与Packer的多云OpenClaw部署实践
  • 2026空气能品牌权威测评:公认的空气能第一品牌是谁?十大实力品牌盘点出炉 - 匠言榜单
  • AI写CI/CD脚本:Gemini实战指南
  • 惯性导航精解算程序(MATLAB实现)
  • 银川黄金回收哪家靠谱?三区两县一市全覆盖,6 大品牌免费上门,高价秒结无套路 - 金掌柜黄金回收
  • [实践记录]腾讯开悟赛后
  • 教育培训行业如何管住员工微信与通话?山海工作手机管理系统能防飞单私单吗? - 山海工作手机管理系统
  • Python处理分类不平衡问题_使用平衡随机森林提升召回率
  • WarcraftHelper技术实现:魔兽争霸3现代兼容性解决方案深度解析
  • VMware macOS解锁工具终极指南:轻松在Windows/Linux上运行苹果系统
  • 西安黄金回收哪家靠谱?6 大品牌全区域上门,实时报价无扣费,一键预约极速达 - 金掌柜黄金回收
  • 华硕笔记本终极控制工具G-Helper:从安装到精通的完整免费指南
  • WarcraftHelper:让魔兽争霸3在现代电脑上焕发新生的终极优化方案
  • 2026最新定制手提袋生产厂家/实力厂家/生产工厂/源头厂家推荐!国内优质权威榜单发布,山东临沂等地高适配厂家甄选 - 十大品牌榜
  • KeymouseGo:3步实现鼠标键盘自动化,彻底解放你的双手![特殊字符]
  • 电子皮肤系统:事件驱动传感与神经形态计算的创新应用
  • 南宁师范大学考研辅导班推荐:排行榜单与选哪家好评测 - michalwang