24-RAG重排改写与证据边界
RAG 怎样取得完整证据?重排、改写与拒答 正确文档进入候选,却排在很后;改写问题以后,关键订单编号消失了;上下文塞得更多,回答反而忽略例外。这些问题说明召回数量与最终证据质量不是同一件事。 Spring AI 接入片段使用 Java 17、Spring Boot 3.5.3 与 Spring AI
RAG 怎样取得完整证据?重排、改写与拒答 正确文档进入候选,却排在很后;改写问题以后,关键订单编号消失了;上下文塞得更多,回答反而忽略例外。这些问题说明召回数量与最终证据质量不是同一件事。 Spring AI 接入片段使用 Java 17、Spring Boot 3.5.3 与 Spring AI
为什么语义相似仍然找不到?Embedding、关键词与混合检索 用户问一个产品编号,向量检索返回语义相近但编号不同的文档。语义相似适合处理不同表达,却不天然擅长所有精确条件;关键词和结构化过滤仍然有自己的位置。 1. 向量空间怎样表达相似 余弦、内积与距离不能脱离模型和索引配置讨论。 Embeddi
企业文档怎样变成可检索知识?解析、切分与异步入库 上传 PDF 后能检索到内容,却找不到表格里的例外;导入超时后重新上传,又出现重复片段。文档处理需要保留语义、版本与任务状态,而不只是调用一次 Embedding。 Spring AI 接入片段使用 Java 17、Spring Boot 3.5.3
模型输出 JSON 就能入库吗?结构约束与业务校验 输出已经是合法 JSON,金额却为负,来源编号也不存在。这说明语法、结构和业务语义是不同层次。结构化输出让结果更容易处理,但不能把模型变成可信数据库写入者。 Spring AI 接入片段使用 Java 17、Spring Boot 3.5.3 与
Tool Calling 怎样可靠执行?参数、授权与未知结果 模型知道应该调用订单接口,不代表它有权查询任何订单;创建工单超时,也不代表工单没有创建。工具设计从选择开始,最终落在受授权、可恢复的业务执行上。 Spring AI 接入片段使用 Java 17、Spring Boot 3.5.3 与 S
多轮对话怎样管理?ChatMemory、Redis 与会话归属 页面保留了一百条历史,模型却只记得最近几轮;两个请求同时发送,又可能覆盖彼此记忆。完整历史、模型上下文与并发会话是三种不同需求,需要分别设计。 Spring AI 接入片段使用 Java 17、Spring Boot 3.5.3 与 S
AI 聊天怎样真正流起来?SSE、取消与半完成响应 模型正在生成,页面却等到最后一次性显示;用户已经停止等待,后端仍继续计费。流式聊天需要同时处理传输、渲染和任务生命周期,不能把它简化为把 String 改成 Flux。 Spring AI 接入片段使用 Java 17、Spring Boot 3.
从模型 API 到 Spring AI:一次请求的上下文怎样形成? 直接调用模型接口能得到一句回答,但业务应用还需要默认规则、会话、检索、工具和用量记录。Spring AI 的价值在于组织这些能力;理解实际调用链,才能知道某条上下文是在哪一步加入的。 Spring AI 接入片段使用 Java 17
业务系统怎样划边界?模块、权限、审批与微服务取舍 把订单、审批和用户拆成三个服务,不会自动让系统更清楚。数据权限怎么贯穿查询,审批完成怎么与业务状态一致,拆分后事务怎么恢复,才是决定架构是否可维护的问题。 1. 先确定业务能力与拆分理由 先建立边界,再讨论进程数量与通信方式。 单体和微服务的差别不只
消息为什么会丢、会重?可靠投递、消费幂等与 Outbox 订单已经提交,消息没有发出;消息已经处理,确认却丢了。这两个窗口分别造成遗漏与重复。可靠消息设计要覆盖整条链路,而不是只打开 Broker 的一个开关。 1. 三段链路需要不同确认 生产、路由、持久保存和消费提交不是一个成功信号。 三段链路各