57.实战PostgreSQL-Milvus-Redis-MinIO构建企业知识库
实战PostgreSQL Milvus Redis MinIO 构建企业知识库码海寻道 · 大模型、智能体与 RAG 工程组件系列第 57 篇当知识库进入企业生产环境通常需要把业务事实、向量索引、原始文件和缓存分开。本文给出一套组件组合和关键数据流重点放在职责边界与一致性而不是复制一份不可维护的 Demo。一、四个组件分别负责什么PostgreSQL用户、租户、文档、版本、任务、权限、审计 MilvusChunk 向量、索引和相似度检索 Redis会话、缓存、限流、短期状态 MinIOPDF、Word、图片和解析派生文件二、数据流客户端 → FastAPI → MinIO ↓ PostgreSQL 文档记录 ↓ 消息队列 Worker 解析/OCR/Embedding ├── PostgreSQLChunk 元数据 └── Milvus向量索引问答时问题 → Redis 缓存检查 → Embedding → Milvus 检索 查询链路应先从 PostgreSQL 或权限服务得到当前用户的租户、知识库、文档版本和权限版本再生成 Milvus 过滤条件和 Redis Key。Redis 命中也必须经过权限版本校验不能因为缓存快就绕过业务回查。 → PostgreSQL 权限/版本回查 → Prompt → LLM三、PostgreSQL 表设计CREATETABLEdocuments(id uuidPRIMARYKEY,tenant_idtextNOTNULL,titletextNOTNULL,versionintegerNOTNULL,object_keytextNOTNULL,statustextNOTNULL,created_at timestamptzNOTNULLDEFAULTnow(),UNIQUE(tenant_id,id,version));CREATETABLEjobs(id uuidPRIMARYKEY,document_id uuidNOTNULL,stagetextNOTNULL,statustextNOTNULL,progressnumeric(5,2)NOTNULLDEFAULT0,error_codetext,updated_at timestamptzNOTNULLDEFAULTnow());Milvus 中的chunk_id、document_id和tenant_id必须能回查这些业务记录。四、MinIO 对象 Keytenants/{tenant_id}/documents/{document_id}/v{version}/source.pdf tenants/{tenant_id}/documents/{document_id}/v{version}/parsed.json原始文件是可重建事实解析 JSON、缩略图和 OCR 结果是派生数据。对象下载使用短时预签名 URL不能公开整个 Bucket。五、Milvus Collection 设计chunk_id主键 document_id业务关联 tenant_id过滤字段 version版本过滤 status发布状态 embedding向量字段写入和查询必须使用同一 Embedding 模型、维度和距离指标。模型升级时创建新版本索引并灰度切换。Milvus 中保存的chunk_id、document_id、tenant_id、version和status只是检索副本PostgreSQL 仍是文档状态与权限事实源。向量命中后按稳定 ID 回查索引重建或异常恢复时可以从业务事实重新生成而不是手工修复孤立向量。六、Redis 缓存 Keyrag:embedding:{model_version}:{content_hash} rag:search:{tenant_id}:{kb_version}:{query_hash} rag:answer:{tenant_id}:{kb_version}:{model_version}:{query_hash}缓存不能绕过权限校验。知识库发布、权限变化和模型升级时需要通过版本化 Key 或主动失效避免旧答案继续返回。缓存值应带serving_version、permission_version、模型版本和生成时间并设置合理 TTL。权限回收、文档下线或回答策略变化时优先提升版本使旧 Key 自然失效避免对海量 Key 做高风险通配符删除。七、异步 Worker 流程document.created → parse_document → split_chunks → generate_embeddings → write_milvus → verify_searchable → publish_version每一步都要幂等记录批次、模型版本、失败原因和重试次数。只有publish_version完成后问答检索才允许使用这批数据。Worker 还要记录trace_id、job_id、输入对象版本和阶段状态。消息重复投递时按document_id version stage判断是否已完成Milvus 批量写入部分成功时要保留批次明细并支持补写、删除或重建不能只凭“请求成功”标记整批完成。八、故障处理MinIO 成功PostgreSQL 失败通过上传确认任务和定时扫描发现孤儿对象不能直接把对象 Key 当作已发布文档。PostgreSQL 成功Milvus 失败文档保持index_pending进入重试队列不能把状态标为 ready。Redis 故障缓存失效后回源 PostgreSQL、Milvus 和模型服务限流故障要有明确的保护策略。Milvus 可搜业务记录被删除查询服务应以 PostgreSQL 的发布和删除状态为准并定期扫描孤儿向量。删除先阻断新检索再异步清理 Milvus 和缓存清理失败要进入补偿队列并有告警避免“数据库已删、向量仍可搜”长期存在。检索结果回查失败时不得直接展示后台应触发索引清理补偿。九、部署顺序PostgreSQL → MinIO → Redis → Milvus → API → Worker → 前端生产环境中状态组件优先考虑托管服务、备份和恢复演练。不要只验证容器能启动还要测试数据写入、重启和跨服务失败。十、上线清单原始文件和业务元数据职责分离Milvus 记录可以回查租户、版本和权限Redis Key 包含租户和版本维度Worker 支持幂等、重试和补偿发布状态只在索引可搜索后切换有对象、数据库和向量索引备份观测链路包含跨组件 trace_id。结语PostgreSQL、Milvus、Redis 和 MinIO 组合的关键是让每个组件承担明确职责并用稳定 ID、版本状态和异步任务连接起来。企业知识库真正难的是一致性和治理而不是把四个服务启动起来。下一篇将为知识库增加 Agent 工具调用和工作流编排。参考资料Milvus 官方文档MinIO 官方文档Redis 官方文档PostgreSQL 官方文档本文为“码海寻道”原创技术文章。组件版本、部署模式和数据恢复策略需要结合真实环境进行压测和演练。

相关新闻

Vibe Coding灰色文献综述:动机、挑战与AI辅助编程的未来

Vibe Coding灰色文献综述:动机、挑战与AI辅助编程的未来

2025年上半年,Vibe Coding大概是AI辅助编程领域传播速度最快的词。它没有教科书式的定义,却高频出现在各种开发讨论里。我理解的Vibe Coding,是指用自然语言描述你要做什么,由大语言模型直接生成代码,人在旁边掌握方向…

2026/10/18 6:34:53 阅读更多 →
用Python和开源AI模型搭建跨境电商私有化视觉流水线

用Python和开源AI模型搭建跨境电商私有化视觉流水线

跨境电商这行这两年卷到什么程度,大家心里都有数。平台流量见顶、广告费水涨船高,抠利润的空间越来越少,很多卖家把目光盯上了供应链和运营成本,但往往忽略了一个吞金兽——产品视觉。外包拍图、外包修图、购买第三方图片工具会员…

2026/10/18 6:34:53 阅读更多 →
AI智能体接入飞书实战:本地部署、长连接与PPT在线展示

AI智能体接入飞书实战:本地部署、长连接与PPT在线展示

1. 为什么非得本地部署一套"龙虾"再接飞书1.1 这个项目到底是干什么的先交代一下背景。同事搞了个开源的智能体框架,项目代号 Openclaw,社区里习惯叫它"龙虾"——因为这个项目最特色的工具调用模块做得很像龙虾钳子,夹住…

2026/10/18 6:34:53 阅读更多 →

最新新闻

基于STM32H750与SOEM的EtherCAT主站开发实战解析

基于STM32H750与SOEM的EtherCAT主站开发实战解析

1. 为什么我最终选了"H750SOEM"这套组合做EtherCAT主站开发,绕不开一个问题:用哪颗芯片、跑哪套协议栈。市面上主流的方案分两派,一派走ASIC专用芯片,另一派走"MCU软件协议栈"。我这次选的是后者,…

2026/10/18 7:29:04 阅读更多 →
AI辅助学术论文写作书籍(2026.10.17)

AI辅助学术论文写作书籍(2026.10.17)

1、秒懂AI写作:让你轻松成为写作高手(2023.06) 2、玩转ChatGPT:秒变AI写作高手(2024.01) 3、挑战疑难病:SCI论文背后的故事.第二辑(2024.04) 4、AI辅助论文写作——DeepS…

2026/10/18 7:29:04 阅读更多 →
BLDC方波控制SIL测试实战:Simulink模型到代码回环验证

BLDC方波控制SIL测试实战:Simulink模型到代码回环验证

1. 这个项目到底在做什么:BLDC方波控制与SIL的定位先说一个我最近做完的项目,链路是完整的:控制对象是无刷直流电机(BLDC),控制算法是带霍尔传感器的方波控制(也叫六步换相、梯形波控制&#xf…

2026/10/18 7:29:04 阅读更多 →
hom_mat2d_rotate 的 Px 和 Py 参数

hom_mat2d_rotate 的 Px 和 Py 参数

hom_mat2d_translate 里也有 Tx, Ty,那里的 T 是 Translation(平移),表示"平移量";而 P 表示"一个点的位置"。hom_mat2d_rotate 的 Px 和 Py 参数,代表的是旋转中心(也称作…

2026/10/18 7:29:04 阅读更多 →
Vue 3 基础:模板语法、响应式、指令

Vue 3 基础:模板语法、响应式、指令

前言上一篇讲了 JavaScript、DOM 和 ES6,这一篇进入 Vue 3。Vue 是目前最主流的前端框架之一,它把"数据驱动视图"这个理念做到了极致:你只管改数据,页面自动更新。这篇覆盖 Vue 3 的基础三件套:模板语法、响…

2026/10/18 7:29:04 阅读更多 →
全球电商数据接口一键接入:技术要点与选型指南

全球电商数据接口一键接入:技术要点与选型指南

上个季度我帮一个做跨境电商的朋友整理运营流程,他手上有5个平台账号,每天早晨雷打不动要花两小时导出各后台的订单和库存,再做一轮手工汇总。有一回因为某个平台库存同步晚了半天,一单爆款直接超卖,赔了运费还被买家差…

2026/10/18 7:28:03 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →