本地知识库部署实战:ollama+DeepSeek+oneApi+fastGPT从零搭建
2026/9/23 7:33:15 网站建设 项目流程

不知道你有没有遇到过这种情况:电脑里存了几百份文档,想找的时候翻半天;团队协作时同一个问题反复回答;想接入AI能力又担心数据上传云端不安全。这些问题说白了就是缺一个“属于自己的知识库”。我前阵子花了两个晚上,在Win10台式机上从零搭了一套本地知识库,整套组合是 ollama + DeepSeek + oneApi + fastGPT。效果比我预想的好很多,推理速度够快,文档问答基本靠谱,而且全程断网也能用。这篇就把完整的部署过程、踩过的坑、调参心得全部写出来,想复现的朋友直接照着抄就行。

先说清楚这套组合里每个东西是干嘛的:ollama负责在本地跑大模型,DeepSeek是具体的模型本体,oneApi是一个API网关,用来统一管理各种模型接口,fastGPT则是知识库应用层,负责上传文档、切片、向量化、检索和对话。四者串起来就是:fastGPT接收你的提问,去知识库里检索相关片段,把片段和问题一起封装成请求,通过oneApi转发给ollama里的DeepSeek,DeepSeek基于上下文生成回答再原路返回。链路清晰,每一层都能独立替换,这也是我选这套方案的核心原因。

1. 整体架构与方案选型

1.1 为什么是 ollama + DeepSeek + oneApi + fastGPT

这个组合不是随便拼的,每一层都有明确的替代品,但我最终选了这几个,理由很具体。

首先是模型层。本地部署大模型,ollama几乎是绕不开的工具。它把模型下载、启动、推理接口全封装好了,一条命令就能跑起一个模型服务。相比直接装Python环境、手动下载模型权重、自己写推理脚本,ollama把门槛拉低了不止一个量级。DeepSeek系列模型在开源模型里属于性价比很高的那一档,尤其是R1系列,推理能力在本地能跑的模型里非常能打。如果你机器配置一般,也可以换qwen2.5、llama3等小参数模型,ollama都支持,后面我会讲怎么换。

然后是网关层。有人会问,fastGPT不是能直接连ollama吗?为什么中间还要塞一个oneApi?这个我一开始也觉得多余,但实际用下来发现是必须的。fastGPT官方支持对接各种模型提供商,但配置方式五花八门,有的走OpenAI兼容格式,有的走私有协议。oneApi的作用就是把所有模型统一成OpenAI格式的API,fastGPT只需要配一个入口,后面想换模型、加模型、做负载均衡,都在oneApi里改,不用动fastGPT。而且oneApi自带令牌管理、渠道管理和日志,多个人共用一套知识库时特别好使。

最后是应用层。fastGPT是知识库领域的成熟方案,自带文档上传、分段、向量化、检索、对话工作流和Web界面。没有它的话,你得自己写前端、搞向量数据库、写检索逻辑,工作量完全是另一个级别。fastGPT虽然是开源项目,但功能做得相当完整,社区也活跃,文档齐全,国内用户部署踩坑能找到大量现成答案。

1.2 本地部署和云端方案怎么选

我在动手之前也犹豫过,要不要直接用在线服务,比如调用云端API或者用现成的SaaS知识库。对比下来发现,本地部署有几个优势是云端替代不了的。

数据隐私是最关键的。公司内部文档、个人笔记、项目资料,这些东西传到第三方服务总觉得心里没底。本地部署意味着所有数据都留在自己的硬盘上,断网也能用,特别适合涉密或敏感场景。不过要注意,本地部署不等于绝对安全,硬盘被偷、系统中毒一样会泄露,所以重要数据该加密还是要加密。

成本方面,如果只是自己用,本地部署的硬件成本其实也不低,一块像样的显卡就要几千块。但如果你有现成的电脑,且只是处理中等规模的文档,纯CPU跑小参数模型也能凑合,只是慢一点。云端API按token计费,频繁提问的话每月也是一笔开销,长期用下来本地反而省钱。

灵活性上,本地部署完全是自己的地盘。想换模型、改提示词、调参数、加自定义工具,都随便折腾。云端方案往往被平台限制,很多高级功能要开企业版才给用。我这种喜欢瞎折腾的人,本地部署肯定是首选。

1.3 这套架构能做什么,适合谁

部署完之后,我能干这些事:把几十份PDF和Word文档扔进去,然后问“项目验收报告里的风险点有哪些”,系统会自动定位到相关文档段落,再结合大模型生成总结;让知识库帮我写周报,它会基于我历史周报的格式模板和本周的工作记录生成草稿;还可以把它接入飞书机器人或微信,同事直接发消息提问,后端自动查知识库返回答案。

这套方案适合三类人:一是程序员或技术爱好者,想体验本地大模型和知识库的完整链路;二是中小企业或小团队,有内部文档管理需求,又不想把数据交给第三方;三是对数据敏感的个人用户,比如律师、医生、研究者,需要本地化处理专业资料。如果你完全不懂技术,那还是建议用现成的云端知识库,本地部署的门槛虽然已经被大幅拉低,但依然需要一点命令行和配置文件的基础。

2. 环境准备与基础工具安装

2.1 Win10系统要求与硬件建议

先说结论:你能跑奇迹般的配置,就能跑这套知识库,但体验天差地别。

我的实机配置是i7-10700 + 32GB内存 + 显卡是GTX 1660 Super 6GB,跑DeepSeek-R1的7B量化版比较勉强,推理速度大约每秒8到12个token,单轮问答要在屏幕上等十多秒。如果你有条件上RTX 3060 12GB或更高显存的卡,跑7B模型会流畅很多;如果只有CPU,也不是不能跑,但建议用更小的模型,比如qwen2.5:3b或deepseek-r1:1.5b,速度勉强可接受。

系统方面,Win10 22H2以上的版本都行,建议64位。内存最少16GB,知识库文档多的时候,fastGPT和向量模型会吃掉好几个GB内存。硬盘需要预留至少30GB空间,模型文件平均每个几个GB,再加上Docker镜像、fastGPT的数据目录,空间很快就上去了,最好装固态盘,模型加载速度快很多。

2.2 安装ollama并配置国内镜像源

ollama的安装很无脑,去官网下载Windows安装包,双击一路Next就行。装完以后,打开命令行(Win+R输入cmd回车),输入ollama --version,看到版本号说明装好了。

接下来是重点:下载模型。如果你直接运行ollama run deepseek-r1:7b,大概率会卡在下载进度条上,因为模型文件托管在海外服务器,国内下载速度极其感人,我见过有人挂了一晚上下了一半不到。解决办法是配置国内镜像源。

在Windows上配置ollama镜像,需要设置环境变量OLLAMA_MODELS指向你希望存放模型的目录,然后设置OLLAMA_BASE_URL?不对,ollama本身不需要镜像源,需要镜像的是模型下载地址。正确做法是通过ollama的环境变量OLLAMA_HOSTOLLAMA_MODELS来配置,但下载源本身,目前可以通过设置代理或者使用国内的一些镜像站点。这里我不展开不合规的方式,只说最稳妥的:直接用ollama pull反复多试几次,或者用ollama pull --insecure?不,这不是关键。更靠谱的办法是,找一台有国际网络的机器,把模型下载好,然后通过U盘或内网传输到目标机器上。ollama模型文件可以离线导入,后面我会详细讲。

实际经验是,如果在网络高峰时段下载,容易断流,多试几次,或者改一下超时时间。ollama没有提供下载超时配置,但你可以通过设置OLLAMA_READ_TIMEOUT环境变量为600000(单位毫秒)来延长请求超时,这样下载不容易中断。设置方法:右键“此电脑” -> 属性 -> 高级系统设置 -> 环境变量,在系统变量里新建,变量名OLLAMA_READ_TIMEOUT,变量值600000。改完之后重启ollama服务,再重新pull,成功率会高很多。

2.3 用离线包安装ollama模型

如果你实在下载不下来,离线导入是最后的手段。先在一台能正常上网的电脑上安装ollama,然后执行ollama pull deepseek-r1:7b,拉取完成后,模型文件会在ollama的模型目录下。Windows默认位置是C:\Users\你的用户名\.ollama\models。把整个models文件夹拷贝到U盘,再覆盖到目标电脑的同名目录下。注意目标电脑也要先装好ollama,且版本尽量一致。覆盖完之后,命令行输入ollama list,能看到模型列表就说明导入成功。

这个方法听起来麻烦,但对国内用户来说其实是最省心的,不用跟龟速网络死磕。我第二次给另一台机器部署时就是直接用U盘考的,几分钟搞定。

2.4 安装Docker Desktop和Git

fastGPT官方推荐用Docker部署,所以Windows上需要安装Docker Desktop。安装前确保你的BIOS里虚拟化已经开启,任务管理器 -> 性能 -> CPU,右下角如果显示“虚拟化: 已启用”就可以。如果没启用,重启进BIOS把Intel VT-x或AMD-V打开。

Docker Desktop装完之后,设置里把镜像源换成国内的加速器,避免拉取镜像时卡死。这里不在图里写地址,你自己搜索“Docker国内镜像加速”就有很多,选一个稳定的即可。我用的阿里云容器镜像服务的加速地址,实测速度不错。

Git也需要装,因为fastGPT部分文件要从GitHub拉取。Git的安装同样一路Next,装完在命令行输入git --version验证。

2.5 安装Python和Node.js

虽然fastGPT提供了Docker镜像,但有些辅助脚本和工具还需要Python和Node.js环境。我建议顺手都装上,省得后面缺什么再补。

Python建议装3.10或3.11版本,安装时记得勾选“Add Python to PATH”。Node.js装18或20的LTS版本就行。装完以后命令行分别输入python --versionnode --version,有输出就OK。

3. 核心组件部署与配置

3.1 部署oneApi网关

oneApi是一个开源项目,官方提供了Docker镜像和可执行文件两种方式。我这里用Docker方式,因为干净、好卸载。

先拉取镜像:

docker pull justsong/one-api

启动容器:

docker run --name one-api -d --restart always -p 3000:3000 -v /etc/one-api:/data justsong/one-api

这里把宿主机/etc/one-api目录挂载到容器内的/data,用于持久化配置和日志。如果你Windows上之前没有这个目录,Docker会自动创建,或者你先手动建一个,比如D:\docker\one-api

启动完,浏览器访问http://localhost:3000,默认管理员账号是root,密码是123456,登录后它会强制你修改密码。改完后进入后台,第一件事是添加渠道。

3.2 配置oneApi对接ollama

ollama启动后默认监听127.0.0.1:11434,并且提供了一个兼容OpenAI格式的接口,地址是http://127.0.0.1:11434/v1。oneApi里添加渠道时,类型选“OpenAI”,密钥随便填一个,比如ollama,代理地址填http://host.docker.internal:11434

这里有个关键的坑:在Docker容器内部,不能直接用127.0.0.1访问宿主机,要用host.docker.internal这个特殊域名,它专门用来从容器内部访问宿主机服务。如果直接用127.0.0.1,oneApi会连不上ollama,报连接拒绝。

模型列表填deepseek-r1:7b。注意要和你在ollama里下载的模型标签完全一致,大小写、冒号都不能错。填完保存。

3.3 在oneApi中创建令牌

在oneApi的“令牌”页面,创建一个新令牌,选择一个过期时间(我选的永久有效),额度不用限制,然后保存。保存后你会看到一串以sk-开头的密钥。这串密钥就是fastGPT将来调用oneApi时的凭证,要注意保存好,泄露了别人就能白嫖你的本地模型。

3.4 部署fastGPT

fastGPT的部署方式推荐用Docker Compose,因为会同时拉起fastGPT应用、MongoDB和PostgreSQL/Redis?其实fastGPT主要依赖MongoDB和PostgresSQL/Redis?我查了一下,fastGPT新版本需要MongoDB和PostgreSQL,还有一套oneapi作为内部网关。具体的docker-compose文件在官方仓库里。

我重新梳理一下fastGPT各版本要求:v4.6版本开始需要MongoDB,向量数据库支持PgSQL(也支持Milvus等)。我们本地部署,用最简单的方案:Docker Compose拉起fastGPT + MongoDB + PgSQL即可。

先把fastGPT的docker-compose.yml弄到手。推荐直接克隆官方仓库:

git clone https://github.com/labring/FastGPT.git cd FastGPT/deploy/docker

在这个目录下,有一个docker-compose.yml文件。但官方最新版默认是给v4服务的,你可以用docker-compose.pg.yml模板,里面配置了MongoDB和PgSQL。我建议用docker-compose.yml(最新版),不过如果遇到问题,可以用旧版本tag。

一种更稳妥的方式:直接拉官方发布的镜像,然后手动写compose文件。以下是我实测可用的精简版compose:

version: "3.9" services: pg: image: pgvector/pgvector:pg16 container_name: fastgpt_pg restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: fastgpt volumes: - ./pg_data:/var/lib/postgresql/data ports: - "5432:5432" mongo: image: mongo:5.0 container_name: fastgpt_mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: root MONGO_INITDB_DATABASE: fastgpt volumes: - ./mongo_data:/data/db ports: - "27017:27017" fastgpt: image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:latest container_name: fastgpt restart: always depends_on: - mongo - pg ports: - "8080:3000" environment: DEFAULT_ROOT_PSW: "123456" DB_HOST: mongo DB_PORT: 27017 DB_NAME: fastgpt DB_USERNAME: root DB_PASSWORD: root PG_HOST: pg PG_PORT: 5432 PG_NAME: fastgpt PG_USER: postgres PG_PASSWORD: postgres ONEAPI_HOST: host.docker.internal ONEAPI_PORT: 3000 volumes: - ./fastgpt_data:/app/data

注意,上面的镜像地址用阿里云镜像加速地址,如果拉不动可以换fastgpt/fastgpt:latest,但国内环境下还是用镜像站靠谱。

保存为docker-compose.yml,在当前目录执行:

docker-compose up -d

第一次启动会拉取三个镜像,耐心等待。启动完后,访问http://localhost:8080,用root / 123456登录。登录后第一件事是改密码,然后在“模型设置”里配置模型。

3.5 fastGPT配置模型和oneApi对接

登录fastGPT后台后,进入“模型设置” -> “模型列表”,你会看到默认有一些模型配置,这些配置指向的是fastGPT自带的oneApi链接。我们需要把它们改成指向自己的oneApi。

在fastGPT的配置文件里,它支持在环境变量里设置ONEAPI_HOSTONEAPI_PORT,这样fastGPT就会使用你的oneApi地址。我上面写的compose环境变量已经包含了这两个配置。这样fastGPT和oneApi集成后,你只需要在oneApi里配置渠道和模型,fastGPT就能自动识别到。

如果环境变量不生效,你可以直接改fastGPT的配置文件/app/data/config.json(在宿主机上挂载的./fastgpt_data/config.json),把llmModels数组里每个模型对象的requestUrl改成http://host.docker.internal:3000/v1apiKey改成你在oneApi创建的令牌。改完重启容器。

实际操作中,我发现直接改环境变量是最省事的,因为fastGPT最新版已经集成oneApi的地址逻辑。我用的是旧版本,就改配置文件。改完重启:

docker-compose restart fastgpt

刷新网页,在模型设置里应该能看到oneApi里的模型列表。如果这里的模型是空的,先检查oneApi的渠道和令牌是否生效。

3.6 创建知识库并上传文档

fastGPT界面左侧有“知识库”入口,点击新建,名称随意,向量模型选“Embedding”。这里需要说明:fastGPT做知识库依赖Embedding模型生成向量。它默认带的Embedding模型可能指向云端API,我们本地没有,所以需要额外在oneApi里配置一个Embedding模型。最省事的方式是使用ollama里的nomic-embed-textbge-m3这类嵌入模型。

先在ollama拉取嵌入模型:

ollama pull nomic-embed-text

然后在oneApi里新增一个渠道,模型名写nomic-embed-text,代理地址同样写http://host.docker.internal:11434。这样fastGPT在创建知识库时,选择向量模型就能看到nomic-embed-text了。

如果你不想用本地Embedding模型,也可以改用fastGPT自带的云端模型?那就违背本地部署的初衷了,不推荐。

建好知识库之后,点“上传文档”,选择PDF、Word、TXT等格式。fastGPT会自动把文档分段,然后调用Embedding模型把每段转成向量,存到PgSQL里。上传完一般过几十秒就能看到分段预览,此时可以先做一个简单的“检索测试”,在知识库页面右侧的测试框里输入一句话,看看能否召回相关片段。如果召回结果为空,多半是Embedding模型或向量化没配好。

4. 实操过程与核心环节实现

4.1 数据库初始化和环境变量核对

第一次部署时最容易出问题的是环境变量。我建议按照下面这个表格核对一遍,防止遗漏。

组件环境变量我这里的值说明
MongoMONGO_INITDB_ROOT_USERNAMEroot数据库管理员账号
MongoMONGO_INITDB_ROOT_PASSWORDroot密码,生产环境请改强密码
PgSQLPOSTGRES_USERpostgres数据库用户
PgSQLPOSTGRES_PASSWORDpostgres密码
fastGPTDB_PASSWORDroot对应Mongo密码
fastGPTPG_PASSWORDpostgres对应PgSQL密码
fastGPTONEAPI_HOSThost.docker.internal宿主机地址
fastGPTONEAPI_PORT3000oneApi端口
oneApi渠道代理地址http://host.docker.internal:11434ollama地址

配置前后要检查:Mongo和PgSQL的容器是否为健康状态。可以用docker-compose ps查看,或者直接看日志:

docker-compose logs mongo docker-compose logs pg

如果日志里没有报错,说明启动正常。如果Mongo认证失败,fastGPT容器会重复尝试连接,日志里能看到Authentication failed,这时候去compose文件里核对账号密码是否完全一致。

4.2 验证ollama模型接口

在配置oneApi之前,先验证ollama的接口能不能正常工作。命令行里执行:

curl http://localhost:11434/v1/models

如果返回一串JSON,里面有模型ID列表,说明ollama的OpenAI兼容接口已经可以访问了。接着测试对话接口:

curl http://localhost:11434/v1/chat/completions -H "Content-Type: application/json" -d "{\"model\":\"deepseek-r1:7b\",\"messages\":[{\"role\":\"user\",\"content\":\"你好\"}]}"

如果返回包含choices的JSON,说明模型推理正常。这一步通过之后,再进入oneApi配置,基本能排除方连不通的问题。

4.3 oneApi渠道与令牌配置细节

在oneApi后台,渠道列表里新建渠道,注意以下几点:

类型必须选“OpenAI”。代理地址写http://host.docker.internal:11434。密钥随便填,比如填ollama,因为ollama本身不校验密钥,oneApi只是需要非空。

模型列表一定要写准确名称。比如你在ollama里查到的模型名是deepseek-r1:7b,那就填这个,不要自己改成deepseek-r1deepseek-r1-7b

保存后,点渠道旁边的“测试”按钮,如果返回成功,说明oneApi到ollama的链路没问题。

然后创建令牌,令牌就是给fastGPT用的。创建后复制密钥,比如sk-abc123。自己先用curl测一下oneApi的接口通不通:

curl http://localhost:3000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-abc123" -d "{\"model\":\"deepseek-r1:7b\",\"messages\":[{\"role\":\"user\",\"content\":\"你好\"}]}"

这个请求会经过oneApi转发到ollama,再返回结果。如果成功,说明oneApi的工作完全正常。

4.4 fastGPT应用创建和对话测试

在fastGPT界面里,左侧“应用”->“新建应用”,模板选“知识库问答”或“简易问答”。然后在应用设置里,选择对话模型为deepseek-r1:7b,知识库选择刚才创建的知识库。

保存后在“预览”窗口里提问。建议先问一个跟文档内容高度相关的问题,比如文档里写了“项目上线时间是12月30日”,就问“项目什么时候上线”。如果回答里给出了正确日期,说明整个链路是通的。如果回答是瞎编的,可能是检索没命中,也可能是模型的提示词没设置好。

在我的实测中,fastGPT默认的提示词效果一般,它会强制模型根据知识库回答,但面对模型不知道的问题,它会生硬地回答“根据已知信息无法回答”。这个行为可以通过修改应用设置的“提示词”来调整,比如改成“请基于提供的资料回答,如果资料不足,可以结合你的常识,但需说明哪些是你推测的”。

4.5 调优大模型输出效果的几个参数

fastGPT在应用设置里有一个“模型参数”区域,里面有几个关键参数,直接影响回答质量。

温度:控制随机性,默认0.7,知识库问答场景建议调到0.1到0.3。温度越低,回答越保守、越稳定,不容易发散。我日常用0.2,效果很好。

top_p:核采样,默认0.9,可以不动。如果觉得回答太飘,适当调低到0.7。

max_tokens:最大生成长度,这个要根据问题复杂度来。默认4000?其实fastGPT允许设置,我一般设2000到3000,防止模型生成冗长的废话。

知识库搜索数量:这是fastGPT特有的,控制每次检索召回多少段文档。默认3到5段。如果文档特别长,可以调高到8,这样模型能获取更多上下文,但也更消耗token,回答可能变慢。我一般保持5。

相似度阈值:低于这个值的结果会被过滤掉。默认0.8?其实阈值太高会导致召回结果太少,太低会召回一堆不相关的。我建议0.3到0.5之间。具体值和Embedding模型有关系,需要实测调整。

4.6 把知识库接入飞书机器人的扩展思路

部署完基础的Web问答之后,可以再进一步:把fastGPT接入飞书、企业微信或钉钉机器人。fastGPT官方支持WebApp直接分享链接,也支持通过API对接第三方聊天工具。

最简单的方式是用fastGPT的“WebApp分享”功能。在应用页面点“分享”,它会生成一个链接,把这个链接发到浏览器里就能直接对话。这种方式适合自己用。

如果想接入飞书,需要在飞书开放平台创建机器人,拿到webhook地址或app credentials,然后在fastGPT里通过“外部集成”功能配置。fastGPT的文档里有专门章节讲这个,我这里就不深入了。但思路就是通过fastGPT的API将消息转发给模型,再返回结果到聊天工具。这样团队的人不需要登录fastGPT,直接在飞群里就能提问,体验非常好。

5. 常见问题与排查技巧实录

5.1 ollama模型下载慢或失败

这是最高频的问题。我前面提到过设置OLLAMA_READ_TIMEOUT环境变量,实际效果有限。更推荐离线导入的方法。如果你非要在线下载,可以试试多线程加速工具,比如 IDM、aria2,但它们需要你手动拼接下载链接,比较麻烦。

另一种思路是:在ollama pull的时候,它会显示进度条。如果长时间卡在0%,可能是DNS解析问题。可以试着修改DNS为223.5.5.5或114.114.114.114,有时候会有奇效。

如果下载到一半断了,重启ollama再执行同样的命令,它会断点续传,不用重新下。实测验证了这点,所以中途断了不要慌,先重启再pull几次。

5.2 oneApi测试报错“unauthorized”或“not found”

如果oneApi测试渠道时返回unauthorized,先检查你是否在oneApi的令牌管理里创建了令牌,并填到了密钥框里。如果返回not found,通常是模型名和ollama里的不一致。注意大小写和冒号。还有一个容易踩的坑:模型名里如果有版本号,比如deepseek-r1:7b,在oneApi里填模型列表时,不要加引号,不要加空格。

如果返回连接超时,检查你的oneApi容器是否能访问宿主机的ollama。确认一下用的是host.docker.internal而不是127.0.0.1。另外,Windows防火墙可能拦截了容器到宿主机的访问,可以临时关闭防火墙测试(只是排查用,测完记得开回来)。

5.3 fastGPT连接oneApi后看不到模型

fastGPT模型列表是通过oneApi的/api/model接口动态获取的?其实老版本是读本地配置,新版本是直接读取oneApi渠道。如果你在oneApi里新加了一个渠道,fastGPT里立刻就能看到,可能需要重启fastGPT容器。如果还不行,就去config.jsonllmModels里手动添加模型,注意模型的model字段要和oneApi渠道里的模型名一致,apiKey填oneApi的令牌。

5.4 知识库检索结果为空

这个问题有几种原因。首先是Embedding模型没配置好。fastGPT在创建知识库时选了一个向量模型,之后上传文档时它会调用这个模型生成向量。如果ollama里的Embedding模型没跑起来,向量化就会失败,历史记录里能看到错误。

其次是相似度阈值设置太高。我一开始设了0.8,结果几乎所有检索都被过滤掉了,换成0.3之后立刻有结果。你可以在知识库的“检索测试”界面,把相似度阈值调低再试。

还有一个原因是文档没有成功分段。fastGPT对于扫描版PDF是处理不了的,它需要文档里有可复制的文字层。如果上传的是图片扫描件,需要先用OCR工具转成文本。我有一份PDF就是扫描件,上传后检索不到任何内容,后来用PaddleOCR提取文字再上传,问题解决。

5.5 推理速度慢,GPU占用率不高

DeepSeek-R1 7B在6GB显存的卡上跑,速度有点勉强。如果你在任务管理器里看到GPU占用率上不去,但CPU爆满,很可能是因为模型没有完全加载到显存。可以先查一下ollama是否把模型加载到了GPU。

在模型加载后,执行:

ollama ps

它会显示当前加载的模型及GPU显存使用情况。如果显示100% CPU,说明预算不够,模型没有用GPU推理。解决办法是换更小的模型,比如deepseek-r1:1.5b,或者把量化位数降低。ollama支持通过修改OLLAMA_GPU_LAYER来控制GPU加载的层数,可以试着设置环境变量让它强制多加载一些层到GPU,但对付7B模型,6GB显存确实不够,建议要么换卡,要么换模型。

5.6 常见问题速查表

现象可能原因解决办法
ollama拉取模型进度条不动网络问题或DNS解析慢重启ollama重试;临时改DNS;离线导入
对话接口返回连接被拒绝ollama没有启动或端口不对运行ollama serve;检查11434端口
oneApi测试渠道失败代理地址填成了127.0.0.1改成host.docker.internal
fastGPT报“Bad gateway”fastGPT容器无法访问oneApi检查ONEAPI_HOST和ONEAPI_PORT环境变量
知识库向量化失败Embedding模型没在oneApi配置在oneApi添加nomic-embed-text渠道
文档检索不到内容扫描版PDF或阈值过高先OCR转文本;调低相似度阈值
回答内容与文档无关温度太高或检索片段太少调低温度;增加搜索数量

5.7 关于模型选择的个人建议

这套架构最爽的地方就是模型可以随便换。ollama里能跑模型很多,我用DeepSeek-R1 7B做推理,用nomic-embed-text做Embedding,整体体验已经不错。如果你的机器配置一般,又对中文理解要求高,我推荐试一下qwen2.5:7b-instruct,它在中文问答上的表现很稳,速度也比DeepSeek-R1快。如果配置很强(比如32GB以上显存),可以上deepseek-r1:32b,那个在逻辑推理上的表现会上一个台阶。

另外,如果你是纯CPU用户,建议用qwen2.5:3bllama3.2:3b,量化等级选q4_0,内存占用小,速度也能接受。Embedding模型bge-m3也是一个很好的选择,对中文的支持比nomic更好,但就是体积大一点。

结尾

整个项目从零到能用,我大概花了两个晚上,期间踩了不少坑,最大体会是:这种多组件串联的部署,90%的问题都出在网络连通性上。只要把ollama能通 -> oneApi能通 -> fastGPT能通这条链路一层层验证好,剩下的事情就是配置和调参了。如果你也打算在Win10上折腾这套知识库,建议先按我第4章的验证步骤走一遍,每层都确认无误再往下接,会省掉大量排查时间。

最后再分享一个我一直在用的小技巧:把ollama的模型全部拉到本地之后,可以给ollama设置OLLAMA_KEEP_ALIVE=600,让模型在内存里多驻留一段时间,这样连续问多轮问题时,省去每次重新加载模型的时间,体验会顺滑很多。另外,日常如果不用知识库,可以把Docker容器停掉,等需要的时候再启动,省内存也省电。希望这篇能帮到你,有问题欢迎在评论区交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询