从今天起开一个固定栏目:每天读一本书,把里面的东西压缩到 20 分钟内读完,再写点自己的看法。方向是金融、AI、历史这三块——前两块是饭碗,最后一块是让人不至于把今年发生的事都看成世界末日。 这个栏目不打算做成读书笔记的搬运。我做了八年 Java 和 AI,又自己跑过出海盘子、也清零过两次,读这些书
我们的内部知识库 RAG 上线第一周,产品拿了个真实问题测试:"年假怎么休?"模型一本正经地答了去年的旧政策。查下来,召回的文档里既有新政策也有旧政策,模型没分清哪个是现行有效的。RAG 的难点从来不在"接上模型",而在"召回准不准、排得对不对"。 第一板斧:切分策略 最初按固定 500 字符硬切,
团队想给客服系统加 AI 能力,产品经理一句"接个大模型"听起来轻巧。真要做时,我发现最大的问题不是模型效果,而是:AI 该放在系统哪一层?和现有业务怎么融?出错了怎么办?这层边界不清,迟早把核心交易拖下水。 边界划分:AI 是增强,不是核心 我的第一原则是:AI 能力必须处在非关键路径。下单、扣款
有天凌晨告警:订单服务报错率突增。我登录 Kibana 翻日志,几千行文本里找那一条异常,正则写到手抖,花了 20 分钟才定位。痛定思痛,把日志从"人看"改成"机器看"——结构化输出,这套改造后来的排障时间从 20 分钟降到 40 秒。 为什么要从文本日志切到结构化 文本日志是给人扫的,机器分析要正
用 Spring AI(1.0 GA 稳定版)做 RAG,最早我是在业务代码里手写"先检索、拼 prompt、再调模型"三段式。逻辑散落、难复用、难插拔。后来发现 Spring AI 的 Advisor 机制就是为这事设计的——把"检索增强"做成可串联的拦截器。 Advisor 是什么:请求响应之间
大模型再能聊,它本身算不了实时库存、查不了数据库。要让它"动手",得靠 Function Calling:模型决定调哪个函数、填什么参数,Java 侧真实执行,再把结果喂回去。这趟趟过的坑,比想象中深。 工具注册:把 Java 方法暴露给模型 用 Spring AI(1.0 GA 稳定版)注册一个工
订单系统里,一个下单成功事件要同时触发:发短信、更新统计、同步搜索索引、通知风控。一开始我用 @TransactionalEventListener 在一个方法里全干了,结果短信接口抖一下,整个下单事务被拖慢。这种"一个事件多个消费者"的场景,正是 Spring Integration 的主场。 消
我们的一个内部工具服务,部署在 Serverless 上,每次冷启动要 8 秒。函数计费按运行时长,8 秒里一半在"加载类、初始化 Spring 上下文",用户已经走了。老板问能不能压到 2 秒内,于是有了这次冷启动专项优化。 先量化,再动手 不量就优化是瞎猜。我用 -Xlog:class+load
一个服务在 K8s 里跑得好好的,突然被重启,看 Pod 事件只有一行 OOMKilled。我第一反应是"堆不够了",加了 -Xmx 之后反而重启更频繁。后来才明白,我搞混了两种 OOM。 两个 OOM 不是一回事 JVM 的堆 OOM(java.lang.OutOfMemoryError: Jav
我们团队原来的 CI 是 Jenkins,一台老Ubuntu 服务器,Job 用网页点出来的,配置存在它肚子里,谁也说不清有哪些步骤。新人想加一条发布流水线,得先找老员工"口述"。这种不可见的配置,迟早要还债。借着一次 GitLab 迁移,我把流水线整体搬到了 GitLab CI。 不是嫌 Jenk
接了大模型问答的活儿,第一版我们用普通 HTTP 请求,前端点完"发送"就开始转圈,最长 18 秒才一次性吐出整段答案。产品同学盯着转圈圈说了一句话:"能不能像 ChatGPT 那样一个字一个字蹦?"于是有了这次 SSE 改造。 SSE 是什么,为什么不用 WebSocket 大模型生成是单向的:服
去年底老板拍板:核心交易系统去 Oracle。理由很直接——一年 380 万的授权费,加上审计合规越来越严。我接手时第一反应是:这活儿坑比想象多,不是导出 SQL 再导入就完事。 先盘家底 系统跑了九年,Oracle 里不止 SQL。我用了两周做依赖盘点,列了一张表: 依赖类型 数量 风险 存储过程
背景:我们一套跑了五年的订单分析系统,主库是 MySQL 8.0,平时扛交易,月底还要跑 T+1 报表。一次月底大查询把从库 CPU 打到 100%,复制延迟一度飙到 47 秒,运营看板直接瘫痪。那一刻我意识到,把 OLTP 和重分析塞在同一套实例里,迟早出事。 为什么盯上 TiDB 当时评估了三个
把命运交給一家供应商太冒险 工单助手全量依赖 OpenAI,某次它区域性抖动 40 分钟,我们的自动回复全挂,运营被迫人工顶上,积压了上千条工单。AI 能力已经是生产依赖,就不能有单点。我搭了一套多模型路由加降级,核心:多供应商接入、健康检查、自动降级兜底。上线后两次抖动都平稳度过。 多供应商统一接
中文向量化的尴尬 做知识库检索时,第一步就是把文档切块转成向量。英文世界有现成的 sentence-transformers,中文呢?2023 年初这块还很青涩,我踩了一圈坑,记下来给后来者省时间。当时我们想给内部 Wiki 做语义搜索,先用英文模型试,中文召回烂得一塌糊涂,才意识到"中文 embe
模型返回的 JSON 总在变花样 让 LLM 抽取工单里的"订单号、问题类型、紧急度"并输出 JSON,结果它时而多回一句解释,时而把字段名写成 order_num 而非 orderId,解析直接炸,下游拿到 null 又是一堆空指针。要做可靠的系统,结构化输出必须可控。我把"约束加重试加校验"几层