【实战】幻X2025基于LM Studio本地部署RAG

本文摘要本文实战基于本地部署RAG,演练构建企业内部知识库、产品问答系统 等应用,实战以下基本流程: “ 文档清洗→切块→嵌入向量化→存入向量数据库 →【构建可检索知识库】→用户查询→检索相关文本块→拼接为增强提示→输入 LLM 生成输出 ”

本文使用 ROG 幻 x2025 电脑,实战演练基于 LM Studio 快速本地部署 RAG,演练构建企业内部知识库、产品问答系统 等应用,实战以下基本流程:

“ 文档清洗→切块→嵌入向量化→存入向量数据库 →【构建可检索知识库】→用户查询→检索相关文本块→拼接为增强提示→输入 LLM 生成输出 ”

背景知识

1、使用硬件介绍:ROG 幻 X2025 笔记本电脑

ROG 幻 X 2025 搭载的 AMD 锐龙 AI Max+ 395 处理器拥有 16 核 32 线程、40 个 RDNA 3.5 计算单元的集成显卡,以及 50 TOPS 算力的 XDNA 2 架构 NPU,配合 128GB LPDDR5X-8000 统一内存,使其成为一台真正的移动 AI 工作站。

其官网链接为:https://rog.asus.com.cn/laptops/rog-flow/rog-flow-z13-2025/spec/

详细参见:ROG 幻 X2025 算力硬件及 AI 开发环境搭建指导书

2、大模型管理:LM Studio

LM Studio 作为一款专门用于本地运行大型语言模型的桌面应用程序,核心价值是让用户在本地电脑离线运行、管理开源 LLM,无需复杂配置。

其官网为https://lmstudio.ai/,中文镜像 / 备用域名:https://lm-studio.me/

详细参见:幻 x2025 笔记本 LM Studio 部署指导书

1. 检索增强生成(RAG)

1.1 RAG 概念

RAG:Retrieval‑Augmented Generation,检索增强生成。

RAG 技术是一种将外部知识库与大语言模型相结合的技术,能够让模型基于特定的文档或知识库进行回答,从而提高回答的准确性和相关性。

RAG 的核心原理是在模型生成回答之前,先从外部知识库中检索相关信息,然后将这些信息作为上下文提供给模型,使模型能够基于准确的信息进行推理和生成。

在实际应用中,RAG 技术特别适合构建企业内部知识库、产品问答系统、学术文献检索等应用。例如,企业可以将产品手册、技术文档、FAQ 等资料构建成知识库,然后使用 RAG 技术让模型基于这些资料回答用户的问题,确保回答的准确性和一致性。

1.2 RAG 价值

  • 降低幻觉:以可追溯的外部知识为依据,减少无根据生成。
  • 知识更新:无需重训即可接入实时 / 私有数据,适配动态场景。
  • 成本优化:避免模型持续重训的算力与时间开销。
  • 可解释性:生成结果可关联原始检索来源,便于验证与审计。

1.3 技术特点

  • 非侵入式增强:不修改 LLM 权重,通过提示工程实现知识补充。
  • 检索 - 生成协同:检索负责事实精准获取,生成负责语言流畅与逻辑组织。
  • 多源适配:支持结构化 / 非结构化数据,适配企业内部文档、公开数据等多场景。

1.4 RAG 核心流程

  1. 离线准备:文档清洗 → 切块 → 嵌入向量化 → 存入向量数据库,构建可检索知识库。
  2. 在线处理:用户查询 → 检索相关文本块 → 拼接为增强提示 → 输入 LLM 生成输出。

2. 实战工具介绍

基于 ROG 幻 X 2025 的性能(16GB + 内存、高性能独显)与 LM Studio 本地部署需求,推荐 “轻量可扩展 + 低代码 / 全代码双路径” 方案,兼顾开发效率与性能适配,以下是最优工具选型、架构设计与实施步骤。

组件 / 工具分析表

组件首选工具 / 模块核心优势
本地化大模型服务LM Studio(1.2.3+)1. 本地部署 LLM / 嵌入模型,无需联网;2. 兼容 OpenAI API 规范,调用成本低;3. 支持模型灵活切换
RAG 框架核心LangChain(langchain\_core/langchain\_community/langchain\_text\_splitters)1. 提供标准化 RAG 组件(文档加载 / 分割 / 检索 / Prompt 模板);2. 抽象类设计支持自定义扩展;3. 组件可插拔,适配不同模型
文档加载langchain\_community.document\_loaders.TextLoader1. 轻量易用,支持本地文本文件加载;2. 兼容 LangChain Document 格式,无缝接入后续流程
文本分割langchain\_text\_splitters.RecursiveCharacterTextSplitter1. 支持中文语义分割(自定义分隔符);2. 可设置块大小 / 重叠度,避免语义断裂;3. 递归分割更贴合自然语言逻辑
嵌入模型(向量生成)自定义 LMStudioEmbeddings(基于 LM Studio Embeddings API)1. 本地化部署,数据不泄露;2. 兼容 LangChain Embeddings 抽象类,无缝集成;3. 支持分批处理,避免请求超时
语义相似度计算sklearn.metrics.pairwise.cosine\_similarity1. 计算效率高,适配向量相似度场景;2. 输出标准化相似度值(0-1),便于阈值过滤;3. 轻量无额外依赖(核心库)
自定义检索器继承 langchain\_core.retrievers.BaseRetriever 实现 SemanticVectorRetriever1. 自定义检索逻辑(过滤 + 排序 + TopK);2. 兼容 LangChain RAG 链路;3. 支持相似度阈值控制,提升检索精准度
HTTP 请求调用requests1. 简洁易用,适配 LM Studio REST API;2. 完善的异常处理(超时 / 连接错误 / HTTP 错误);3. 支持 JSON 格式请求 / 响应解析
端口连通性检查socket1. 底层 TCP 连接检查,提前发现端口未开放问题;2. 轻量无依赖,适配本地服务预检场景
类型注解 / 代码规范typing(List/Any)+ PyTorch 兼容性处理1. 提升代码可读性和类型检查;2. 兼容旧版 PyTorch,避免导入报错;3. 降低新手使用门槛
交互式程序控制原生 Python(while 循环 /input/ 异常捕获)1. 轻量无依赖,适配本地化运行;2. 友好的用户交互(模式选择 / 异常提示);3. 支持 Ctrl+C 安全退出
持久化向量存储实时计算型向量存储轻量级、本地化闭环场景设计的无持久化向量存储方案无需部署 Pinecone/Chroma/Milvus 等向量数据库,降低本地部署门槛

3. 部署方案

3.1 适配 ROG 幻 X 2025 的本地闭环 RAG 系统部署方案

本方案基于你提供的代码,充分适配 ROG 幻 X 2025(AMD 芯片 + ROCm 7) 软硬件环境,实现全程本地化、无外网依赖的 RAG 问答系统闭环运行。

3.2 向量存储方案核心解析

这份代码是为轻量级、本地化闭环场景设计的无持久化向量存储方案(也可称为「实时计算型向量存储」),核心逻辑是不依赖外部向量数据库,全程在内存中完成向量的生成、计算和检索,具体实现如下:

核心实现方式(无持久化内存型)

环节具体逻辑
向量生成时机每次执行检索时实时生成,而非提前预生成并存储:1. 用户输入查询后,先调用 LMStudioEmbeddings.embed\_query()生成查询向量;2. 同时调用 LMStudioEmbeddings.embed\_documents()重新生成所有文档块的向量;3. 生成后直接用于余弦相似度计算,无落地存储步骤。
向量存储载体仅在内存中以 Python 列表(List[List[float]])临时存储向量,程序运行期间有效,退出后向量全部释放。
检索核心逻辑实时计算查询向量与所有文档向量的余弦相似度 → 过滤(阈值)→ 排序 → 取 Top K,全程在内存中完成。

3.3 部署前置条件

3.3.1 硬件适配

  • 设备:ROG 幻 X 2025 笔记本电脑(AMD 芯片)
  • 加速配置:已部署 ROCm 7,确保 AMD GPU 可用于模型推理加速(LM Studio 默认支持 ROCm,无需额外配置)
  • 存储要求:预留 10GB+ 磁盘空间,用于存放 LM Studio 软件、LLM 模型(如 llama-3-8b)、嵌入模型(如 text-embedding-all-minilm-l6-v2)及本地文档

3.3.2 软件环境准备

软件 / 工具版本要求安装方式核心作用
Python3.9\~3.11官网下载或 conda 安装代码运行环境
LM Studio1.2.3+官网下载适配 AMD 的版本本地化 LLM / 嵌入模型部署与服务
依赖库-pip install requests scikit-learn torch langchain langchain-core langchain-community langchain-text-splitters代码运行依赖
兼容性说明:代码中已做 PyTorch 旧版本兼容处理,无需额外升级 PyTorch;ROCm 7 与 LM Studio 无缝兼容,可自动调用 GPU 加速推理。

3.4 本地闭环核心优势与优化点

3.4.1 核心优势(适配 ROG 幻 X)

  • 全程本地化:模型推理、文档检索、问答生成均在本地完成,数据零泄露,适合敏感信息处理。
  • AMD GPU 加速:依托 ROCm 7,LM Studio 可调用 AMD 显卡加速模型推理,相比 CPU 推理速度提升 3\~5 倍
  • 轻量低资源占用:代码为 Lite 型设计,无需部署向量数据库,文档向量实时计算,适配 ROG 幻 X 的便携性。

3.4.2 针对性优化建议

  • 模型轻量化:若 ROG 幻 X 内存占用过高,可替换为更小的模型(如 llama-3-7b-instructbge-small-zh-v1.5),降低资源消耗。
  • 文本分割优化:根据文档类型调整 chunk_size(如技术文档可设为 100,小说类设为 40),提升检索精准度。
  • 端口冲突处理:若 1234 端口被占用,可在 LM Studio 中修改端口,并同步修改代码中的 LM_STUDIO_PORT

4. 轻量快速版实施步骤(10 分钟可运行)

4.1 模型环境准备(幻 X Windows 11)

4.1.1 准备 LM Studio/下载模型

  1. 安装 LM Studio

详细参见:幻 x2025 笔记本 LM Studio 部署指导书

  1. 下载模型
    本实战项目需要如下 2 个模型,配合使用:

    生成模型:llama-3-8b(适配幻 X 16GB 内存)

    嵌入模型:text-embedding-all-minilm-l6-v2(轻量高效,显存占用 < 1GB)

下载步骤如下:

打开 LM Studio,进入 "Developer" 选项卡 ,点”发现“进入 Mission Control 界面的 Model Search,搜索”Llama 3 8B Q8\_0“,选排序方式为最近更新,先搜索清单中最近的 Llama 3 8B Q8\_0,如下图显示为 11 天前的最新模型,大小为 8.54G,点右下角的”Download"按钮,下载模型文件。

点左下角的 “下载状态”按钮:

显示下载过程信息:

同样操作,下载 all-MiniLM-L6-v2 模型:

等待 2 个模型下载完成,下载时长和网速有关,耐心等待。

下载完成后会显示在「My Models」中。如下图示,下载完成。

4.1.2 启动 LM Studio Local Server

启动 LM Studio Local Server(端口 1234),操作方式如下:

第 1 步:打开服务开关,把 Status 变成 Running 状态:

第 2 步:检查端口,确保为默认的 1234,后面代码会用到,如下图示:

4.1.3 加载模型

接下来,加载刚下载好的 2 个模型:生成模型 llama-3-8b 与 嵌入模型 text-embedding-all-minilm-l6-v2。

操作步骤如下:

点击 LM Studio 顶部导航栏的「Developer」(开发者)标签页

在「Select a Model」下拉框中,选择已下载的生成模型 llama-3-8b

加载过程,有进度条显示:

在「Select a Model」下拉框中,选择已下载的嵌入模型名 text-embedding-all-minilm-l6-v2。

两个模型要同时加载,加载完成后的界面如下:

检查服务的 api 有正确应答,用浏览器打开,能正确显示已加载的 2 个模型:

到此,项目需要的大模型和部署已经完成。

4.2 开发项目代码

4.2.1 lmStudioRAG\_Lite 项目的源码

项目源代码:https://github.com/hechunji/lmStudioRAG\_Lite

项目说明:如下图目录说明,用 vs2026 git 直接拉取下来,就能直接使用和练习。

4.2.2 项目核心逻辑流程

项目模型调用的核心逻辑流程,有两条线:

  1. 离线准备:文档清洗 → 切块 → 嵌入向量化 → 存入向量数据库,构建可检索知识库。
  2. 在线处理:用户查询 → 检索相关文本块 → 拼接为增强提示 → 输入 LLM 生成输出。

离线准备是用于事前准备和构建可检索的向量数据库,以便支撑在线的用户问题响应,使用的是嵌入模型 text-embedding-all-minilm-l6-v2,其流程图如下:

在线流程是用于支撑在线的用户问题响应,将原始用户问题,先经过前面离线生成的向量数据库的检索,把得到的新“上下文”和用户问题,输入到生成模型 llama-3-8b,得到最终的回答内容,其流程图如下:

下载完本项目后,用 VS2026 直接打开即可。打开界面如下:

4.2.3 安装依赖

方式一(练手建议):

安装本项目所需要的依赖,模块清单详见代码开始部分,安装所有需要的模块,直到所有 import 语句不报错:

# 目的:处理文件路径、目录创建等系统操作
import os
# 目的:数值计算(本代码中主要为兼容向量计算逻辑)
# import numpy as np
# 目的:发送HTTP请求调用LM Studio API
import requests
# 目的:检查LM Studio端口连通性
import socket
# 目的:类型注解,提升代码可读性和类型检查
from typing import List, Any

# 以下为PyTorch兼容性处理,torch.distributed.is_initialized 在旧版本中可能不存在
import torch
# 为旧版本 PyTorch 添补缺失的 is_initialized 函数
if not hasattr(torch.distributed, 'is_initialized'):    # 语法:hasattr检查对象是否有指定属性
    def _mock_is_initialized(): # 定义模拟函数
        return False
    torch.distributed.is_initialized = _mock_is_initialized # 为torch.distributed动态添加属性
# 目的:兼容旧版PyTorch,避免导入sentence-transformers(重构后已移除)时因缺失函数报错
# 余弦相似度计算(检索核心),用于计算查询与文档向量的相似度,替代原sentence-transformers的相似度计算,经验证更准确
from sklearn.metrics.pairwise import cosine_similarity

# LangChain 1.2.3 核心组件(RAG框架)
# 目的:加载文本格式的文档
from langchain_community.document_loaders import TextLoader
# 目的:分割长文本为小文本块
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 目的:继承该抽象类实现自定义嵌入模型
from langchain_core.embeddings import Embeddings
# 目的:构建标准化的Prompt模板
from langchain_core.prompts import ChatPromptTemplate
# 目的:构建RAG链路的执行流
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
# 目的:封装文档数据(文本内容+元数据)
from langchain_core.documents import Document
# 目的:继承该抽象类实现自定义检索器
from langchain_core.retrievers import BaseRetriever
# 目的:检索器的回调管理(必填参数)
from langchain_core.callbacks.manager import CallbackManagerForRetrieverRun
 # 目的:封装对话消息(构建Prompt)
from langchain_core.messages import HumanMessage, SystemMessage

VS2026 中安装所需依赖的方式如下图示:

先在工具栏选 当前项目的工作虚拟环境,如当前项目为 rocm\_env

步骤 1:点后面的“Python 环境”管理按纽,进入 Python 环境管理窗口

步骤 2:选中当前的 rocm\_env

步骤 3:输入要安装的依赖模块

步骤 4:点击下面的安装运行命令

步骤 5:安装过程在输出窗口显示,直到完成。

依次完成所有所需的依赖模块。

方式二(熟练人员):

用项目的 requirements.txt 批量引入安装,在新环境中安装依赖,执行如下命令行:

pip install -r requirements.txt
# 或 pip3 install -r requirements.txt

4.2.4 项目小故事介绍

lmStudioRAG_Lite\docs
├─chroma_db
├─docs
    ├─zsk.txt

zsk.txt 是为了验证项目结果,我们杜撰了一篇童话故事,起名为《何季》没有意义,目的是为了让大模型识别不出来这个故事,以便容易区分 RAG 的效果,故事如下:

《何季》是一篇童话故事。作者是 hsr。写于 2026 年 12 月 25 日。

讲述了一个小女孩在雨季中经历的奇幻冒险。

故事开始于一个阴雨绵绵的早晨,小女孩莉莉独自一人走在回家的路上。

突然,她发现了一只受伤的小鸟,决定带它回家照顾。

在照顾小鸟的过程中,莉莉发现小鸟竟然拥有神奇的能力,能够带她进入一个充满魔法和奇幻生物的世界。

在这个世界里,莉莉遇到了各种各样的朋友,包括会说话的树木、善良的精灵和勇敢的动物们。

然而,这个奇幻世界也面临着危机,一场即将到来的暴风雨威胁着这里的和平。

莉莉和她的新朋友们决定联手,利用小鸟的魔法力量,保护这个美丽的世界免受破坏。

在经历了一系列的冒险和挑战后,莉莉终于成功地阻止了暴风雨的到来,拯救了这个奇幻世界。

作为回报,小鸟恢复了健康,并决定留在莉莉身边,成为她永远的朋友。

故事的结尾,莉莉回到了现实世界,但她知道,只要有小鸟在身边,她的生活将永远充满魔法和奇迹。

4.2.5 调试和执行项目

在 vs2026 IDE 界面,点工具栏的"启动“按钮,如下图:

项目开始启动,弹出新输出窗口,如下图示:

调试结果是否正确,分 2 个步骤进行。

  1. 先选 2,纯问答模式(无 RAG,直接调用 LM Studio)

此时没有经过项目中的 RAG 过程,直接对接 LM Studio 中原模型:llama-3-8b,基于 llama-3-8b 回答,如下图示:

结果分析:因模型 llama-3-8b 里,没有《何季》这篇童话故事,所以 上面的回答结果错误。

【用户问题】:《何季》写于什么时候?

【请求体】:

{'model': 'llama-3-8b',

'messages': [{'role': 'user', 'content': '请直接回答以下问题,回答要简洁、准确:\n 问题:《何季》写于什么时候?'}],

'temperature': 0.2,

'max\_tokens': 800,

'top\_p': 0.9,

'stream': False,

'stop': None,

'n': 1,

'presence\_penalty': 0.0,

'frequency\_penalty': 0.0

}...

The novel "He Ji" was written in 1936.

  1. 再选 1,RAG 模式(基于本地文档语义检索)

此时问题会经过项目中的 RAG 过程,再对接 LM Studio 中原模型 llama-3-8b,基于 llama-3-8b 回答,如下图示:

结果分析:因 RAG 已以检索出这个新故事,所以能回答出来:The story "He Jie" was written by hsr and published on December 25, 2026.

# RAG 检索策略配置
SIMILARITY_THRESHOLD = 0.3  # 语义相似度阈值,建议0.3-0.5(低于该值的文档会被过滤)
TOP_K = 5  # Top5 检索,返回最相关的前5个文档

【语义检索结果】共匹配到 15 个相关文档(阈值:0.3),选取前 5 个:

文档 1(相似度:0.7487):《何季》是一篇童话故事。作者是 hsr。写于 2026 年 12 月 25 日

文档 2(相似度:0.5639):拯救了这个奇幻世界

文档 3(相似度:0.5598):在这个世界里,莉莉遇到了各种各样的朋友

文档 4(相似度:0.5205):她的生活将永远充满魔法和奇迹

文档 5(相似度:0.5165):然而,这个奇幻世界也面临着危机,一场即将到来的暴风雨威胁着这里的和平

# 第三步:构建最终Prompt(带严格回答规则)
final_prompt = f"""### 严格遵守以下规则回答问题 ###
1. 你的回答必须100%来自下方的「参考文档」,绝对不能编造任何信息;
2. 如果参考文档中没有相关内容,只允许回答:"无法从参考文档中找到答案";
3. 回答要结合所有相关文档的信息,不要遗漏关键内容;
4. 只回答问题本身,不要解释、不要补充、不要反问。

### 参考文档 ###
{context_part}

### 用户问题 ###
{query_part}"""

【最终发送给 LM Studio 的 Prompt】:

严格遵守以下规则回答问题

  1. 你的回答必须 100% 来自下方的「参考文档」,绝对不能编造任何信息;
  2. 如果参考文档中没有相关内容,只允许回答:"无法从参考文档中找到答案";
  3. 回答要结合所有相关文档的信息,不要遗漏关键内容;
  4. 只回答问题本身,不要解释、不要补充、不要反问。

参考文档

文档 1:《何季》是一篇童话故事。作者是 hsr。写于 2026 年 12 月 25 日

文档 2:拯救了这个奇幻世界

文档 3:在这个世界里,莉莉遇到了各种各样的朋友

文档 4:她的生活将永远充满魔法和奇迹

文档 5:然而,这个奇幻世界也面临着危机,一场即将到来的暴风雨威胁着这里的和平

用户问题

《何季》写于什么时候?

print("【RAG模式回答】:")
result = rag_chain.invoke(user_query)       # 调用RAG链路

The story "He Jie" was written by hsr and published on December 25, 2026.

5. 项目代码分析

项目的主代码文件:lmStudioRAG\_Lite.py

详细获取:https://github.com/hechunji/lmStudioRAG\_Lite

源文件 lmStudioRAG\_Lite.py 中有详细的代码注解,大家应能看得懂。

若基础不好,可添加作者(公众号):iLearnAI,给大家答疑和交流。

6. 总结

方案特点(适配幻 X 本地闭环)

优势局限性
1. 零依赖:无需部署 Pinecone/Chroma/Milvus 等向量数据库,降低本地部署门槛;2. 轻量化:内存临时存储,无磁盘 IO 开销,适配幻 X 便携设备;3. 易维护:无需管理向量库的增删改查、版本兼容等问题;4. 数据安全:向量不落地,全程内存操作,避免数据泄露。1. 性能:每次检索都重新生成文档向量,文档量大时(如 1000 + 文档块)会增加耗时;2. 扩展性:无法支持海量文档(建议单文档 ≤100KB);3. 无持久化:程序重启后需重新分割文档、生成向量。

核心方案:无持久化内存型向量存储,全程实时生成向量、内存中计算相似度,无外部向量数据库依赖;

设计初衷:适配幻 X 本地闭环的轻量级场景,降低部署复杂度,保证数据本地化;

进阶方向:若需提升性能 / 支持更多文档,可优化为「本地文件持久化向量」或适配 Chroma 轻量级向量库(仍保持本地化)。

觉得内容不错?我要

打赏杯咖啡或蜜雪冰城吧
微信扫一扫
微信赞赏码
支付宝扫一扫
支付宝赞赏码
评论 暂无评论
请登录后参与评论