本文使用 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/。
1. 检索增强生成(RAG)
1.1 RAG 概念
RAG:Retrieval‑Augmented Generation,检索增强生成。
RAG 技术是一种将外部知识库与大语言模型相结合的技术,能够让模型基于特定的文档或知识库进行回答,从而提高回答的准确性和相关性。
RAG 的核心原理是在模型生成回答之前,先从外部知识库中检索相关信息,然后将这些信息作为上下文提供给模型,使模型能够基于准确的信息进行推理和生成。
在实际应用中,RAG 技术特别适合构建企业内部知识库、产品问答系统、学术文献检索等应用。例如,企业可以将产品手册、技术文档、FAQ 等资料构建成知识库,然后使用 RAG 技术让模型基于这些资料回答用户的问题,确保回答的准确性和一致性。
1.2 RAG 价值
- 降低幻觉:以可追溯的外部知识为依据,减少无根据生成。
- 知识更新:无需重训即可接入实时 / 私有数据,适配动态场景。
- 成本优化:避免模型持续重训的算力与时间开销。
- 可解释性:生成结果可关联原始检索来源,便于验证与审计。
1.3 技术特点
- 非侵入式增强:不修改 LLM 权重,通过提示工程实现知识补充。
- 检索 - 生成协同:检索负责事实精准获取,生成负责语言流畅与逻辑组织。
- 多源适配:支持结构化 / 非结构化数据,适配企业内部文档、公开数据等多场景。
1.4 RAG 核心流程
- 离线准备:文档清洗 → 切块 → 嵌入向量化 → 存入向量数据库,构建可检索知识库。
- 在线处理:用户查询 → 检索相关文本块 → 拼接为增强提示 → 输入 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.TextLoader | 1. 轻量易用,支持本地文本文件加载;2. 兼容 LangChain Document 格式,无缝接入后续流程 |
| 文本分割 | langchain\_text\_splitters.RecursiveCharacterTextSplitter | 1. 支持中文语义分割(自定义分隔符);2. 可设置块大小 / 重叠度,避免语义断裂;3. 递归分割更贴合自然语言逻辑 |
| 嵌入模型(向量生成) | 自定义 LMStudioEmbeddings(基于 LM Studio Embeddings API) | 1. 本地化部署,数据不泄露;2. 兼容 LangChain Embeddings 抽象类,无缝集成;3. 支持分批处理,避免请求超时 |
| 语义相似度计算 | sklearn.metrics.pairwise.cosine\_similarity | 1. 计算效率高,适配向量相似度场景;2. 输出标准化相似度值(0-1),便于阈值过滤;3. 轻量无额外依赖(核心库) |
| 自定义检索器 | 继承 langchain\_core.retrievers.BaseRetriever 实现 SemanticVectorRetriever | 1. 自定义检索逻辑(过滤 + 排序 + TopK);2. 兼容 LangChain RAG 链路;3. 支持相似度阈值控制,提升检索精准度 |
| HTTP 请求调用 | requests | 1. 简洁易用,适配 LM Studio REST API;2. 完善的异常处理(超时 / 连接错误 / HTTP 错误);3. 支持 JSON 格式请求 / 响应解析 |
| 端口连通性检查 | socket | 1. 底层 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 软件环境准备
| 软件 / 工具 | 版本要求 | 安装方式 | 核心作用 |
|---|---|---|---|
| Python | 3.9\~3.11 | 官网下载或 conda 安装 | 代码运行环境 |
| LM Studio | 1.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-instruct、bge-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/下载模型
- 安装 LM Studio
详细参见:幻 x2025 笔记本 LM Studio 部署指导书
下载模型
本实战项目需要如下 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 项目核心逻辑流程
项目模型调用的核心逻辑流程,有两条线:
- 离线准备:文档清洗 → 切块 → 嵌入向量化 → 存入向量数据库,构建可检索知识库。
- 在线处理:用户查询 → 检索相关文本块 → 拼接为增强提示 → 输入 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, SystemMessageVS2026 中安装所需依赖的方式如下图示:
先在工具栏选 当前项目的工作虚拟环境,如当前项目为 rocm\_env
步骤 1:点后面的“Python 环境”管理按纽,进入 Python 环境管理窗口
步骤 2:选中当前的 rocm\_env
步骤 3:输入要安装的依赖模块
步骤 4:点击下面的安装运行命令
步骤 5:安装过程在输出窗口显示,直到完成。
依次完成所有所需的依赖模块。
方式二(熟练人员):
用项目的 requirements.txt 批量引入安装,在新环境中安装依赖,执行如下命令行:
pip install -r requirements.txt
# 或 pip3 install -r requirements.txt4.2.4 项目小故事介绍
lmStudioRAG_Lite\docs
├─chroma_db
├─docs
├─zsk.txtzsk.txt 是为了验证项目结果,我们杜撰了一篇童话故事,起名为《何季》没有意义,目的是为了让大模型识别不出来这个故事,以便容易区分 RAG 的效果,故事如下:
《何季》是一篇童话故事。作者是 hsr。写于 2026 年 12 月 25 日。
讲述了一个小女孩在雨季中经历的奇幻冒险。
故事开始于一个阴雨绵绵的早晨,小女孩莉莉独自一人走在回家的路上。
突然,她发现了一只受伤的小鸟,决定带它回家照顾。
在照顾小鸟的过程中,莉莉发现小鸟竟然拥有神奇的能力,能够带她进入一个充满魔法和奇幻生物的世界。
在这个世界里,莉莉遇到了各种各样的朋友,包括会说话的树木、善良的精灵和勇敢的动物们。
然而,这个奇幻世界也面临着危机,一场即将到来的暴风雨威胁着这里的和平。
莉莉和她的新朋友们决定联手,利用小鸟的魔法力量,保护这个美丽的世界免受破坏。
在经历了一系列的冒险和挑战后,莉莉终于成功地阻止了暴风雨的到来,拯救了这个奇幻世界。
作为回报,小鸟恢复了健康,并决定留在莉莉身边,成为她永远的朋友。
故事的结尾,莉莉回到了现实世界,但她知道,只要有小鸟在身边,她的生活将永远充满魔法和奇迹。
4.2.5 调试和执行项目
在 vs2026 IDE 界面,点工具栏的"启动“按钮,如下图:
项目开始启动,弹出新输出窗口,如下图示:
调试结果是否正确,分 2 个步骤进行。
先选 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,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】:
严格遵守以下规则回答问题
- 你的回答必须 100% 来自下方的「参考文档」,绝对不能编造任何信息;
- 如果参考文档中没有相关内容,只允许回答:"无法从参考文档中找到答案";
- 回答要结合所有相关文档的信息,不要遗漏关键内容;
- 只回答问题本身,不要解释、不要补充、不要反问。
参考文档
文档 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 轻量级向量库(仍保持本地化)。
觉得内容不错?我要