Java 大模型开发与运维实战:从知识库问答到模型服务稳定运行
作者:王文峰(神秘小峯 / 山峯)|公众号:JAVA开发王大师|专注 Java、全栈开发与业务系统实战
Java 大模型开发与运维实战:从知识库问答到模型服务稳定运行
- Java 大模型开发与运维实战:从知识库问答到模型服务稳定运行
-
- 一、面试题与业务背景
-
- 面试官提问
- 业务场景
- 本文目标与边界
- 二、先给结论:把模型当作不稳定的外部依赖
- 三、需求与业务边界
-
- 1. 先问清楚业务问题
- 2. 功能需求
- 3. 非功能需求
- 4. 非目标
- 四、系统架构与职责边界
-
- 1. 逻辑组件
- 2. 逻辑架构图
- 3. 单体应用的合理起步
- 4. 关键边界
- 五、Java 技术栈选择原则
-
- 1. Spring Boot
- 2. 模型 SDK 或 HTTP 客户端
- 3. WebClient 与同步客户端
- 4. 数据存储
- 5. 队列
- 六、领域模型与数据结构
-
- 1. 文档元数据
- 2. 文档状态
- 3. 文档表示例
- 4. 文档片段
- 5. 会话和消息
- 6. 调用记录
- 七、文档接入与处理流水线
-
- 1. 上传校验
- 2. 异步处理
- 3. 任务幂等
- 4. 内容规范化
- 5. 解析器隔离
- 八、切块与嵌入策略
-
- 1. 为什么需要切块
- 2. 固定长度切分
- 3. 结构化切分
- 4. 重叠窗口
- 5. 表格处理
- 6. 元数据
- 7. 嵌入模型版本
- 8. 内容哈希
- 九、检索增强生成(RAG)完整流程
-
- 1. 查询接收
- 2. 查询改写
- 3. 召回
- 4. 权限过滤
- 5. 重排
- 6. 去重与上下文构造
- 7. 生成
- 8. 输出后处理
- 十、Java 模型网关设计
-
- 1. 统一领域请求
- 2. 统一响应
- 3. 适配器接口
- 4. 模型别名
- 5. Provider 能力声明
- 6. 错误分类
- 7. 配置隔离
- 十一、Spring Boot 服务示例
-
- 1. DTO
- 2. Controller
- 3. 应用服务职责
- 4. 服务伪代码
- 5. 避免长事务
- 6. 会话并发
- 十二、提示词工程与版本治理
-
- 1. 系统提示词
- 2. 版本化
- 3. 模板参数
- 4. 提示词注入
- 5. 提示词示例
- 6. 模板测试
- 十三、模型工具调用与安全边界
-
- 1. 工具调用本质
- 2. 工具白名单
- 3. 参数校验
- 4. 人工确认
- 5. 幂等执行
- 6. 工具结果最小化
- 十四、结构化输出与业务校验
-
- 1. JSON 模式
- 2. Java 类型
- 3. 校验规则
- 4. 失败处理
- 十五、RAG 检索质量优化
-
- 1. 先建立基线
- 2. 召回指标
- 3. 生成指标
- 4. 混合检索
- 5. 查询扩展
- 6. 过滤先行
- 7. 重排模型
- 8. 上下文预算
- 9. 对话历史
- 10. 检索失败可解释
- 十六、Embedding 与向量索引运维
-
- 1. 嵌入模型选型
- 2. 维度与索引
- 3. 批量嵌入
- 4. 更新与删除
- 5. 索引健康
- 6. 备份和恢复
- 十七、流式响应与连接管理
-
- 1. SSE 适用性
- 2. 事件协议
- 3. 事件设计
- 4. 断连取消
- 5. 代理与负载均衡
- 6. 背压
- 7. 流式安全
- 十八、模型调用可靠性
-
- 1. 超时
- 2. 重试
- 3. 重试放大
- 4. 熔断
- 5. 降级
- 6. 备用模型
- 7. 隔离
- 8. 令牌预算
- 十九、模型与提示词评测
-
- 1. 离线评测集
- 2. 黄金答案与证据
- 3. 自动评测
- 4. 人工评测
- 5. 回归门禁
- 6. 在线反馈
- 7. A/B 测试
- 8. 影子流量
- 二十、模型运维(LLMOps)生命周期
-
- 1. 资产管理
- 2. 提示词管理
- 3. 数据集管理
- 4. 实验追踪
- 5. 发布审批
- 6. 生产配置
- 7. 退役
- 二十一、安全、隐私与治理
-
- 1. 数据分类
- 2. 最小化发送
- 3. 租户隔离
- 4. 越权检索
- 5. 提示词注入防御
- 6. 输出安全
- 7. 个人信息
- 8. 日志最小化
- 9. 密钥和凭证
- 10. 内容安全策略
- 二十二、可观测性设计
-
- 1. 技术指标
- 2. 质量指标
- 3. 成本指标
- 4. Trace 关联
- 5. 高基数字段
- 6. 质量监控限制
- 二十三、成本治理
-
- 1. 成本构成
- 2. 预算策略
- 3. 上下文压缩
- 4. 缓存
- 5. 批量嵌入
- 6. 模型路由
- 7. 成本异常
- 二十四、Java 性能与资源管理
-
- 1. 阻塞调用
- 2. 响应式调用
- 3. 并发上限
- 4. HTTP 连接池
- 5. 流式内存
- 6. JVM 诊断
- 7. 解析 Worker
- 二十五、故障场景与运维手册
-
- 模型供应商超时
- 模型限流
- 向量库不可用
- 文档处理积压
- 错误回答激增
- 费用突增
- 二十六、测试策略
-
- 1. 单元测试
- 2. 适配器契约测试
- 3. 检索集成测试
- 4. 端到端测试
- 5. 安全测试
- 6. 故障注入
- 7. 压力测试
- 8. 数据集评测
- 二十七、部署、发布与回滚
-
- 1. 环境隔离
- 2. 配置发布
- 3. 蓝绿与灰度
- 4. 索引迁移
- 5. 回滚范围
- 6. 发布后验收
- 二十八、常见错误方案
-
- 错误一:直接把所有文档拼进提示词
- 错误二:认为向量检索天然准确
- 错误三:把 ACL 写进提示词
- 错误四:日志永久保存全部提示词
- 错误五:模型失败就无限重试
- 错误六:升级模型后直接全量发布
- 错误七:把工具调用当成可信命令
- 错误八:只看 token 费用
- 错误九:只用点赞判断质量
- 错误十:模型返回 JSON 就认为可靠
- 二十九、实施路线图
-
- 阶段一:受控原型
- 阶段二:可评测 MVP
- 阶段三:生产治理
- 阶段四:规模化
- 三十、面试追问
- 三十一、面试回答结构
-
- 1. 先澄清风险
- 2. 画数据流
- 3. 说明检索安全
- 4. 说明模型不确定性
- 5. 说明运维闭环
- 6. 说明验证方式
- 7. 一分钟回答示例
- 三十二、参考代码:统一错误分类
- 三十三、参考代码:预算对象
- 三十四、参考代码:引用来源校验
- 三十五、参考代码:限流与并发隔离思路
- 三十六、文档更新与删除的一致性
-
- 更新流程
- 删除流程
- 删除验证
- 三十七、模型供应商抽象的取舍
-
- 抽象的收益
- 抽象的代价
- 实施建议
- 三十八、模型路由决策
-
- 路由因素
- 路由原则
- 灰度路由
- 三十九、缓存设计细节
-
- 检索缓存
- 生成缓存
- 缓存污染
- 缓存审计
- 四十、知识新鲜度治理
-
- 新鲜度指标
- 增量同步
- 内容冲突
- 过期内容
- 同步失败
- 四十一、文档解析安全清单
- 四十二、应用层安全测试用例
- 四十三、值班监控看板
-
- 总览区域
- 检索区域
- 生成区域
- 质量区域
- 成本区域
- 任务区域
- 四十四、告警分级建议
-
- 立即处理
- 高优先级
- 观察处理
- 四十五、事故复盘模板
-
- 现象
- 影响
- 时间线
- 根因
- 恢复
- 改进项
- 对外沟通
- 四十六、上线前检查清单
-
- 业务和数据
- 模型与提示词
- 工程和运维
- 安全与合规
- 四十七、可复现的评测实验记录
- 四十八、Java 应用配置管理示例
- 四十九、SLO 与错误预算
-
- 可用性目标
- 延迟目标
- 质量护栏
- 错误预算
- 五十、最终总结
-
- 对业务开发者
- 对 Java 工程师
- 对 AI 应用开发者
- 对运维工程师
- 对团队负责人
- 对面试表达
- 五十一、读者自测题
- 五十二、自测题参考答案
- 五十三、项目复盘写作模板
-
- 项目背景
- 目标与不做事项
- 数据与权限
- 方案选择
- 评测结果
- 生产数据
- 故障与改进
- 五十四、系列文章拆分建议
-
- 第一篇:Java 大模型应用架构
- 第二篇:企业知识库文档处理
- 第三篇:RAG 检索质量实战
- 第四篇:Spring Boot 模型接入
- 第五篇:大模型评测与提示词治理
- 第六篇:LLMOps 生产运维
- 第七篇:大模型安全与隐私
- 五十五、落地核对:需求到生产
-
- 需求阶段
- 开发阶段
- 评测阶段
- 运维阶段
- 五十六、上线验收场景
-
- 正常问答
- 无答案问题
- 权限隔离
- 供应商超时
- 文档删除
- 模型升级
- 五十七、最终结语
- 五十八、Java API 错误契约
-
- 通用错误响应
- 身份错误
- 输入错误
- 配额错误
- 服务故障
- 五十九、会话数据模型与生命周期
-
- 会话表字段
- 消息表字段
- 会话写入并发
- 会话删除
- 六十、文档处理任务状态机
-
- 状态定义
- 失败状态
- 任务幂等键
- 分阶段检查点
- Worker 租约
- 六十一、检索请求的完整追踪记录
-
- 记录内容
- 记录边界
- 故障排查问题
- 六十二、RAG 评测样例格式
-
- 样例管理原则
- 评测分层
- 六十三、故障注入用例详表
-
- 模型连接失败
- 模型响应超时
- 供应商返回限流
- 向量检索异常
- 队列重复投递
- 存储空间不足
- 六十四、模型调用状态与计费对账
-
- 逻辑请求与物理调用
- 用量来源
- 对账流程
- 成本归属
- 六十五、SSE 流式接口协议示例
-
- 请求
- 事件类型
- 客户端行为
- 服务端行为
- 六十六、模型网关的配额算法
-
- 租户配额
- 并发配额
- 令牌配额
- 突发处理
- 配额公平性
- 配额回收
- 六十七、日志字段与脱敏规范
-
- 建议字段
- 禁止默认记录
- 脱敏策略
- 六十八、Java 线程池与隔离配置检查
-
- 在线问答线程池
- 文档 Worker 池
- 调度线程
- 线程泄漏排查
- 六十九、数据库和对象存储一致性
-
- 上传中断
- 元数据先写入
- 任务触发
- 索引成功后状态更新失败
- 删除失败
- 七十、数据库表设计审查
- 七十一、搜索和向量索引双写
-
- 问题
- 方案
- 切换过程
- 回滚
- 七十二、提示词注入演练
-
- 文档注入样例
- 用户注入样例
- 间接注入样例
- 工具注入样例
- 验收要点
- 七十三、备份与灾难恢复
-
- 需要备份的资产
- 恢复目标
- 恢复演练
- 七十四、应用升级兼容策略
-
- API 兼容
- 模型响应兼容
- 数据结构兼容
- 滚动发布
- 七十五、LLMOps 责任矩阵示例
- 七十六、服务等级与降级优先级
-
- 一级:安全与权限
- 二级:数据正确性
- 三级:服务可用性
- 四级:体验完整性
- 五级:成本优化
- 七十七、关键设计决策记录示例
-
- 决策:模型调用由网关统一承载
- 决策:先使用 RAG 而非训练模型
- 七十八、技术方案评审问题
- 七十九、代码评审检查清单
- 八十、生产值班交接清单
- 八十一、迭代复盘指标模板
-
- 质量
- 性能
- 成本
- 可靠性
- 八十二、技术博客发布说明
- 八十三、总结补充
- 八十四、容量估算与压测设计
-
- 请求负载模型
- 在线并发估算
- 文档处理吞吐
- 压测数据分布
- 压测报告
- 八十五、RAG 调优实验记录模板
-
- 实验假设
- 控制变量
- 实验变量
- 指标
- 结果分析
- 发布判断
- 八十六、模型版本升级流程
-
- 变更登记
- 能力核验
- 离线对比
- 影子验证
- 小流量灰度
- 扩大或回滚
- 供应商弃用
- 八十七、提示词变更发布流程
-
- 提交变更
- 自动检查
- 回归评测
- 人工评审
- 灰度验证
- 变更后复盘
- 八十八、向量索引迁移运行手册
-
- 迁移前检查
- 构建新索引
- 校验
- 切换
- 清理
- 八十九、队列积压处置流程
-
- 判断积压类型
- 止损
- 恢复
- 验证
- 九十、模型供应商切换演练
-
- 演练目标
- 演练步骤
- 不能忽略的检查
- 九十一、人工审核工作流
-
- 需要审核的情况
- 审核记录
- 人工反馈闭环
- 九十二、故障排查决策树
-
- 用户报告答案错误
- 用户报告看到了无权资料
- 用户报告响应很慢
- 九十三、容量保护与优雅拒绝
- 九十四、数据生命周期台账
- 九十五、发布后 24 小时观察清单
- 九十六、运维复盘后的改进验证
- 九十七、架构演进的停止条件
- 九十八、面试官可能追加的运维问题
-
- 如何处理模型版本被供应商静默更新?
- 如何避免跨租户缓存泄漏?
- 如何知道知识库已经过期?
- 如何控制模型升级风险?
- 如何证明答案有依据?
- 九十九、落地执行顺序
- 一百、结尾:从模型演示走向工程系统
- 一百零一、模型调用安全检查项
-
- 请求进入模型前
- 构造上下文时
- 模型调用过程中
- 处理输出时
- 一百零二、用户反馈处理流程
-
- 收集反馈
- 关联请求
- 分类整理
- 分派处理
- 关闭反馈
- 一百零三、模型输出的产品交互约定
- 一百零四、运维变更记录格式
- 一百零五、Java 依赖与供应链治理
- 一百零六、知识库负责人工作流
- 一百零七、系统交付验收矩阵
- 一百零八、规模扩大前的检查
- 一百零九、最终落地原则
-
- 先解决明确问题
- 把权限放在确定性代码中
- 用证据支撑答案
- 用评测管理变化
- 用运维闭环建立信任
- 学习专栏
- 往期文章
摘要: 企业接入大语言模型,不只是调用一次聊天接口。本文以 Java 企业知识库问答平台为例,覆盖需求分析、模型网关、RAG 检索增强、文档处理、权限隔离、提示词治理、评测、发布、监控、成本管理和故障运维,帮助开发者把原型推进到可运营的应用。
适合读者: Java 后端、AI 应用开发者、平台工程师与运维工程师 关键词: Java、大模型、RAG、模型运维、可观测性
一、面试题与业务背景
面试官提问
公司希望建设一个内部知识库问答系统,员工可以上传制度文档并提问。请用 Java 设计从文档接入、检索、模型生成到线上运维的完整方案,并说明如何控制幻觉、权限、延迟、成本和模型故障。
业务场景
企业资料散落在 PDF、Word、网页和内部系统中。员工需要快速定位答案,同时要求答案可追溯到原文,不能越权读取其他部门资料。模型提供商可能限流、超时或更新模型,知识也持续变化,因此服务必须具备评测、版本管理和降级能力。
本文的代码和配置均为说明性示例,不代表某个特定云厂商、模型或生产部署。模型接口、SDK、向量库和合规要求应以实际选型与供应商文档为准。
本文目标与边界
- 设计一个可逐步演进的 Java 大模型应用平台。
- 解释


