在本地 Ollama 上免费、离线地运行 Qwen 模型并构建知识库核心在于实现RAG检索增强生成技术。简单来说Ollama 本身只负责“跑模型”和“对话”它不具备直接读取你本地 PDF/Word 文档的能力。你需要一个**中间件前端工具或框架**来帮你完成“读取文档 - 切片 - 向量化存储 - 检索 - 发送给 Qwen”这一整套流程。以下是三种不同难度的方案推荐优先选择方案一零代码图形界面。 方案一零代码图形界面最推荐适合个人/办公工具组合OllamaAnythingLLM(或Cherry Studio)特点一键安装有漂亮的图形界面支持拖拽上传文档完全离线无需写代码。1. 准备工作确保你已经安装好 Ollama 并下载了 Qwen 模型ollama run qwen2.5# 还需要下载一个嵌入模型用于理解文档推荐 nomic-embed-textollama pull nomic-embed-text2. 安装 AnythingLLM (桌面版)AnythingLLM 是一个全功能的桌面应用内置了向量数据库专门配合 Ollama 使用。下载地址访问 anythingllm.com 下载 Windows 安装包。安装步骤运行安装程序一路 Next。首次启动时它会询问你大模型提供商选择Ollama。它会自动检测你本地的 Ollama 服务。选择模型LLM Model: 选择qwen2.5Embedding Model: 选择nomic-embed-text(如果列表里没有点击刷新或手动在终端ollama pull nomic-embed-text)。设置完成进入主界面。3. 上传文档与构建知识库在 AnythingLLM 界面左侧点击“New Workspace”(新建工作区)命名为“我的知识库”。进入工作区后找到“Upload Documents”按钮。拖拽文件将你的 PDF、Word、TXT、Markdown 等文档直接拖进去。向量化上传完成后点击“Move to Workspace”或“Embed”按钮。此时软件会在后台调用nomic-embed-text模型将你的文档切成小块并转化为向量数据存储在本地数据库中。开始对话在底部输入框提问例如“根据上传的文档总结项目的主要风险点”系统会自动检索相关片段结合 Qwen2.5 生成答案并标注引用来源。替代方案如果你喜欢更现代化的界面也可以下载Cherry Studio或Big-AGI它们同样支持连接本地 Ollama 并管理知识库。️ 方案二Docker 部署专业 RAG 平台适合进阶用户/团队工具组合OllamaRagFlow(或Dify)特点功能极其强大支持复杂文档解析表格、图片 OCR适合企业级应用但需要安装 Docker。1. 安装 Docker Desktop下载并安装 Docker Desktop for Windows。确保 WSL 2 后端已启用安装时通常会提示。2. 部署 RagFlow (以 RagFlow 为例对中文支持极好)RagFlow 是近年来非常火爆的开源 RAG 引擎深度优化了文档解析。在 PowerShell 中运行以下命令需联网下载镜像下载后可离线运行# 创建目录mkdir ragflow cd ragflow# 拉取并运行 (注意这会下载较大的镜像请确保网络通畅)docker run-d--name ragflow-p 80:80-v ${PWD}/data:/ragflow/datainfiniflow/ragflow:latest等待几分钟直到容器启动成功。3. 配置 RagFlow 连接 Ollama浏览器打开http://localhost。初始化管理员账号。模型设置进入Settings-Model Providers。添加 provider选择Ollama。Base URL 填写http://host.docker.internal:11434(Docker 访问宿主机 Ollama 的关键地址)。测试连接然后添加模型qwen2.5和嵌入模型nomic-embed-text。创建知识库点击Knowledge Base-Create。上传你的文档支持 PDF, Word, Excel, PPT, 图片等。点击Parse进行解析RagFlow 的解析能力很强能保留表格结构。创建助手并对话进入Chat Assistant创建一个新助手。绑定刚才创建的 Knowledge Base。选择模型为qwen2.5。开始提问享受高质量的文档问答。 方案三Python 代码自建 RAG适合开发者工具组合OllamaLangChainChromaDB特点完全可控可定制逻辑适合集成到自己的项目中。如果你需要自己写代码实现以下是一个最小化的 Python 示例1. 安装依赖pipinstalllangchain langchain-community langchain-ollama chromadb pypdf python-docx2. Python 代码示例此脚本会读取本地 PDF建立向量库并进行问答。importosfromlangchain_community.document_loadersimportPyPDFLoader,DirectoryLoaderfromlangchain_text_splittersimportRecursiveCharacterTextSplitterfromlangchain_ollamaimportOllamaEmbeddings,ChatOllamafromlangchain_community.vectorstoresimportChromafromlangchain.chainsimportcreate_retrieval_chainfromlangchain.chains.combine_documentsimportcreate_stuff_documents_chainfromlangchain_core.promptsimportChatPromptTemplate# 1. 配置路径和模型MODEL_NAMEqwen2.5EMBED_MODELnomic-embed-textDOC_PATH./docs# 把你要分析的 PDF 放在这个文件夹下DB_PATH./chroma_db# 向量数据库存储位置# 2. 加载文档print(正在加载文档...)loaderDirectoryLoader(DOC_PATH,glob*.pdf,loader_clsPyPDFLoader)documentsloader.load()# 3. 文本切片 (Chunking)text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200)splitstext_splitter.split_documents(documents)print(f文档已切分为{len(splits)}个片段。)# 4. 初始化嵌入模型和向量数据库# 确保先运行过: ollama pull nomic-embed-textembeddingsOllamaEmbeddings(modelEMBED_MODEL)# 创建或加载向量库vectorstoreChroma.from_documents(documentssplits,embeddingembeddings,persist_directoryDB_PATH)retrievervectorstore.as_retriever()# 5. 设置 LLM 和 PromptllmChatOllama(modelMODEL_NAME)system_prompt(你是一个基于本地文档的智能助手。请使用以下检索到的上下文片段来回答问题。如果上下文中没有答案请直接说文档中未提及不要编造。\n\n{context})promptChatPromptTemplate.from_messages([(system,system_prompt),(human,{input}),])# 6. 构建 RAG 链question_answer_chaincreate_stuff_documents_chain(llm,prompt)rag_chaincreate_retrieval_chain(retriever,question_answer_chain)# 7. 开始问答print(\n--- 知识库已就绪请输入问题 (输入 quit 退出) ---)whileTrue:queryinput(\n问: )ifquery.lower()in[quit,exit]:breakresponserag_chain.invoke({input:query})print(f答:{response[answer]})# 可选显示参考了哪些文档片段# for doc in response[context]:# print(f[来源]: {doc.metadata.get(source, Unknown)}) 核心原理解析为什么需要这些步骤Ollama (Qwen2.5)它是“大脑”负责理解和生成语言但它不知道你的私有文档内容。Embedding Model (nomic-embed-text)它是“翻译官”把你的文字如“项目风险”转化成一串数字向量。只有转化成数字计算机才能计算相似度。Vector Database (Chroma/RagFlow内置)它是“图书馆索引”存储这些数字向量。当你提问时它迅速找出和你问题最相似的文档片段。RAG 流程你问“项目风险是什么”系统把问题转成向量 - 在数据库里找到最相关的几段原文。系统把“原文片段” “你的问题”一起打包发给 Qwen2.5。Qwen2.5 阅读原文总结出答案给你。⚠️ 注意事项显存要求同时运行 Qwen2.5 (7B) 和 嵌入模型 需要一定的显存。如果显存紧张8GB建议使用更小版本的 Qwen如ollama run qwen2.5:1.5b或qwen2.5:3b。或者在 AnythingLLM/RagFlow 设置中限制并发数。完全离线一旦模型 (qwen2.5,nomic-embed-text) 和工具 (AnythingLLM/Docker 镜像) 下载完成拔掉网线依然可以完美运行数据绝对安全。文档格式尽量提供清晰的 PDF 或 Word。如果是扫描版图片 PDF需要开启 OCR 功能RagFlow 支持较好AnythingLLM 可能需要额外配置。推荐直接从方案一 (AnythingLLM)开始尝试5 分钟内即可搭建好属于你的本地知识库