聊《大模型岗位变了,Java工程师该补的还是算法吗?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。
摘要
昨天面试了一个做了三个 LangChain Demo 的候选人,简历挺漂亮,RAG、Agent、工具调用全有。我问了他一个问题:“如果用户问错了敏感数据,你的系统怎么拦截?如果模型输出延迟飙升,你怎么定位是网络、Token 限制还是 Prompt 逻辑的问题?”他愣住了。
这不是他个人的问题,这是目前 Java 后端转大模型开发最大的坑:Demo 能跑,生产必崩。
大厂招聘风向已经变了。2024 年上半年还在看谁能把 RAG 拼起来,现在更看重谁能搞定权限校验、可观测性、幂等性和成本控制在工程化落地。今天这篇,我就结合最近几个“翻车”和“救火”的真实案例,聊聊 Java 开发者怎么跨越从 Demo 到生产的这道鸿沟。
目录
- Java 开发者的隐形优势:别只盯着 Prompt 写
- 生产环境的真正杀手:权限、日志与可观测
- 技术选型:Spring AI vs LangChain4j
- 项目练习:做一个“带权限审计”的客服 Agent
- 面试准备:如何展示你的工程化思维
- 总结
Java 开发者的隐形优势:别只盯着 Prompt 写
很多 Java 同学转行时,第一反应是恶补 Python、Transformer 原理、甚至去啃数学。我的建议是:别急着换语言,先复用你的工程肌肉记忆。
大模型应用(LLM App)的本质,依然是一个复杂的 CRUD + 工作流系统。Prompt 只是其中一层逻辑,甚至不是最复杂的那层。
你在 Java 领域积累的这些能力,在大模型时代直接平移:
1. 类型安全与接口定义:Agent 的工具调用(Tool Calling)本质上就是 RPC。定义好 Input/Output Schema,比手写 JSON 解析稳得多。
2. 并发控制:ReAct Agent 的多步推理涉及多次 LLM 调用,怎么用 CompletableFuture 或 Reactor 做并行加速,这是 Java 的老本行。
3. 事务与状态管理:对话历史(Context)的管理、多轮对话的状态保存,和传统的 Session 管理逻辑如出一辙。
别把自己当成“调 API 的”,要把自己当成“构建 AI 微服务”的。这个定位一准,后面的技术选型思路就清晰了。
生产环境的真正杀手:权限、日志与可观测
Demo 阶段,我们追求的是“能跑通”;生产阶段,我们追求的是“可控、可查、可追责”。
1. 权限:比 Prompt 更重要
我在一个金融客户的 Agent 项目里见过最离谱的情况:用户问“我上个月的工资条”,Agent 直接查出了隔壁组同事的工资。为什么?因为 Prompt 里没有限制数据访问范围,后端也没做 RBAC(基于角色的访问)校验。
正确姿势:
在调用 LLM 之前,必须在应用层完成权限预校验。不要信任模型的“安全意识”。
// 伪代码:在调用 LLM 之前注入用户上下文和权限边界 public AgentResponse chat(Long userId, String query) { // 1. 权限预校验:用户是否有权访问该类数据? if (!permissionService.checkAccess(userId, AccessLevel.SALARY_SLIP)) { throw new SecurityException("无权访问敏感数据"); } // 2. 构建带权限约束的 Context UserContext ctx = userContextService.get(userId); String prompt = buildPromptWithPermissions(query, ctx.getAccessibleDataScopes()); // 3. 调用模型 return llmClient.generate(prompt); }记住,模型是黑盒,权限是白盒。永远不要把敏感数据的过滤逻辑交给模型去“理解”。
2. 日志与可观测性:定位问题的唯一依据
Demo 里报错就打印e.printStackTrace(),上线后这叫“裸奔”。
大模型应用的日志和普通业务日志完全不同。你需要记录:
- Trace ID:贯穿整个 Agent 工作流,从用户输入到最终输出。
- Token 用量:输入多少、输出多少、每个 Tool Call 消耗多少。这直接关系到成本。
- 延迟拆解:总耗时 5s,其中网络请求 2s,模型推理 3s,逻辑处理 0s。不知道拆解,永远不知道瓶颈在哪。
- Prompt 快照:保存发送给模型的原始 Prompt 和收到的 Response。当模型幻觉时,这是复盘的唯一证据。
推荐使用 OpenTelemetry 标准,结合 Prometheus + Grafana 做监控。不要自己造轮子,大厂通用的方案是最稳妥的。
技术选型:Spring AI vs LangChain4j
对于 Java 背景的同学,这两个框架是绕不开的选择。
LangChain4j:社区活跃,API 设计贴近 Python 原版 LangChain,概念丰富(Chain, Agent, Memory, Tool)。适合想要快速实现复杂 Agent 逻辑,且对社区生态依赖较高的项目。它的@Tool注解非常优雅,能自动将 Java 方法注册为模型可调用的工具。
Spring AI:Spring 官方出品,与 Spring Boot 生态无缝集成。如果你已经是 Spring 重度用户,选它没错。它的优势在于“声明式”,配置简单,且对 RAG 的支持非常标准化。但目前在 Agent 的灵活性上略逊于 LangChain4j。
我的建议:
- 如果是内部工具、快速验证,用 Spring AI,上手最快。
- 如果是复杂多 Agent 协作、需要精细控制执行流,用 LangChain4j。
- 不要纠结二选一,它们解决的是不同层面的问题。重要的是理解背后的抽象:Chain、Agent、Memory、Tool。
项目练习:做一个“带权限审计”的客服 Agent
别再做“天气查询”或“代码生成”的 Demo 了,面试官早就听腻了。建议你做一个企业知识库问答系统,并刻意加入以下工程化细节:
1. RAG 链路:使用 Embedding 模型 + Vector Store(如 Milvus 或 pgvector)存储文档。
2. 权限隔离:不同部门用户只能问答本部门文档。在检索阶段就注入过滤条件,而不是让模型去猜。
3. 引用溯源:回答必须附带来源文档片段,方便人工核查。
4. 全链路日志:记录每次查询的 Token 消耗、响应时间、以及关键的 Prompt 版本。
5. 熔断降级:当 LLM 服务超时或报错时,系统要有兜底响应(如返回“系统繁忙”或转人工),而不是直接 500 崩溃。
这个项目涵盖了大模型应用开发的 80% 核心痛点。
面试准备:如何展示你的工程化思维
面试时,不要只讲“我用了什么模型”、“我调用了什么 API”。要讲决策过程和问题排查。
可以准备这样的叙述框架:
> “在这个项目中,我们遇到了模型幻觉导致返回错误数据的问题。我们最终的解决方案不是优化 Prompt,而是引入了事实核查层——在模型输出后,用规则引擎校验关键实体的合法性。同时,我们建立了基于 Trace ID 的全链路监控,将平均响应时间从 5s 优化到了 1.2s,主要瓶颈定位在 Vector Search 的召回阶段。”
这种回答,体现的是工程师思维,而不是调包侠思维。
总结
Java 转大模型,算法不是门槛,工程化才是。
企业需要的不是会写 Prompt 的人,而是能把 LLM 能力稳定、安全、可控地集成到现有业务系统中的人。把你的 Java 后端功底发挥到极致:做好权限控制、写好可观测日志、设计好容错机制。
当你不再沉迷于“模型能做什么”,而是开始思考“系统怎么不出错”时,你就已经超越 90% 的竞品了。
这条路不好走,但值得。加油。
资料展示
下面是我整理的AI大模型学习资料和工具包预览,适合收藏后按主题逐步学习。
如果你想看完整资料目录,可以在评论区留言「资料」;也欢迎告诉我你更关注AI大模型里的哪类内容。