AI知识库配置:让文档问答系统跑起来的关键步骤
AI知识库配置的本质,是让系统能把你上传的文档切成片段、转成向量存起来,用户提问时先检索相关片段再交给大模型回答。
如果你已经在服务器上跑过Docker,这套流程大约半小时能完成基础验证;
如果还没装Docker,需要先补上这一步。
下面以开源方案为例,讲清配置路径和容易卡住的地方。
先确认服务器和依赖是否就位
这套配置对机器要求不高,但需要提前检查几项:
- 操作系统:Ubuntu 20.04 或 22.04,其他Linux发行版命令略有差异。
- 内存:建议至少4GB,向量检索和嵌入模型同时运行会占用较多内存。
- Docker与Docker Compose:用以下命令确认版本。
docker --version
docker compose version
如果提示命令不存在,先安装Docker引擎和Compose插件,再继续后面的步骤。
另外确认服务器防火墙放行了你计划使用的端口,例如8000和6333。
部署向量数据库和问答服务
这里用Qdrant作为向量数据库,配合一个开源的知识库问答服务。
先创建工作目录:
mkdir -p /opt/ai-kb && cd /opt/ai-kb
新建docker-compose.yml,写入以下内容(端口可按需调整):
services:
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
volumes:
- ./qdrant_storage:/qdrant/storage
kb-app:
image: your-kb-app:latest
ports:
- "8000:8000"
environment:
- QDRANT_URL=http://qdrant:6333
- EMBEDDING_MODEL=text-embedding-ada-002
depends_on:
- qdrant
这里your-kb-app需要替换成你实际使用的知识库服务镜像,不同项目的环境变量名可能不同,以项目文档为准。
启动服务:
docker compose up -d
用docker compose ps确认两个容器状态都是running,再访问http://服务器IP:6333/dashboard能看到Qdrant面板,说明向量库就绪。
上传文档并验证检索链路
服务启动后,进入知识库管理页面(通常是http://服务器IP:8000),完成三件事:
- 新建知识库,选择嵌入模型。如果使用OpenAI兼容接口,需要填写API Key和Base URL;如果使用本地模型,确认模型文件路径已挂载进容器。
- 上传一份测试文档,比如产品FAQ的Markdown或PDF文件。
- 等待文档处理完成,页面一般会显示切片数量和向量化状态。
验证时不要只看看页面有没有报错,直接提一个文档里明确写答案的问题。
如果回答内容与文档一致,说明检索和生成链路通了;
如果回答泛泛而谈或说找不到,先检查文档切片是否成功、嵌入模型是否配置正确。
容易踩坑的几个配置点
嵌入模型和向量维度要匹配。 换模型时如果维度不一致,写入Qdrant会直接报错。
要么清空集合重建,要么保持模型不变。
文档解析失败先看文件格式。 扫描版PDF没有文字层,解析出来是空的,需要先做OCR。
上传前用pdftotext快速检查能否提取文字。
容器间通信用服务名,
不要用localhost。 在docker-compose.yml里,kb-app访问Qdrant应该写http:,
//qdrant:
6333
写成localhost会连不上。
API Key不要写进镜像。 用环境变量或.env文件传入,避免把密钥提交到代码仓库。
配置完成后怎么判断是否可用
一个可用的AI知识库配置,至少要满足三个条件:文档上传后能显示切片成功;
提问能返回文档中的具体内容;
换一个文档外的问题,系统能明确表示没有相关信息而不是编造。
前两条验证检索和生成,第三条验证边界控制。
如果后续要接入网页或企业微信,只需要在问答服务里开放API接口,再用Nginx反向代理并配置HTTPS即可。
建议先把单机流程跑通,再考虑多用户和权限管理,避免一开始就堆太多组件。
常见疑问
问:必须用OpenAI的嵌入模型吗?
答:不是。可以用本地嵌入模型如BGE系列,但需要确认知识库服务支持自定义模型地址,并且向量维度与数据库集合一致。
问:上传文档后一直显示处理中怎么办?
答:先看docker compose logs kb-app的输出,常见原因是嵌入模型接口超时或文件过大。调小切片大小或增加超时时间再试。
问:知识库回答不准确,优先调哪里?
答:先确认切片内容是否完整,再调整检索返回的片段数量。切片太碎会丢失上下文,切片太大又会引入无关内容,需要按文档类型做平衡。