大家好,我是小米,一个 31 岁还在写代码的技术分享狂热爱好者!
说来惭愧,我在大模型的风口刮到我脸上的时候还在鼓捣传统 Java 开发,直到今年初,公司要搞一个"AI 助理"小项目,领导一句"用 Java 写个能问文档的助手",把我瞬间打回现实。
Java 能搞 RAG 吗?能!而且现在更简单了,因为------LangChain4j 推出了 Easy RAG 功能!
今天,我就给大家讲讲我从懵逼小白,到用 Easy RAG 快速搭建起一个能读 PDF 问问题的系统的全过程,真的超级简单,适合所有想快速上手 RAG 的 Java 同学!
RAG 是什么?为什么我突然开始搞它?
先给没接触过的朋友简单科普一下:
RAG(Retrieval-Augmented Generation,检索增强生成) 是一种将外部知识库与大语言模型结合的方式,让模型在生成答案时,能够参考你自己的数据,比如 PDF 文档、数据库、网页等等。
它有两个关键步骤:
- 检索(Retrieval): 给用户输入找相关文档片段;
- 生成(Generation): 把这些片段喂给大模型,让它写出更准确的回答。
想象一下,你丢给 ChatGPT 一本 200 页的公司员工手册,然后问它:"试用期考核不合格怎么办?"
如果没有 RAG,它只能瞎猜;但如果你接入了这本手册做知识库,结果就是:
"根据公司员工手册第 3 章第 4 节规定,试用期员工考核不合格,公司有权提前 3 天通知解除劳动合同。"
是不是香爆了?这就是 RAG 的魅力!
为什么我选 LangChain4j,而不是 LangChain(Python 版)?
大家都知道 LangChain 在 Python 圈非常火,它把 RAG 做成了一套很强的链式调用框架,但我 Java 选手总不能天天写 Python 吧
后来我在 GitHub 上发现了 LangChain4j,一个专为 Java 开发者打造的 LLM 框架,兼容 OpenAI、Ollama、本地 Embedding、Qdrant 各种向量数据库,开发体验几乎是照搬 LangChain,只不过变成 Java 方式。
更重要的是------它最近推出了 Easy RAG 功能!!!
Easy RAG 这个名字就很对我胃口,小白也能上手,像我这种没怎么搞过向量检索的人,一看文档就能懂,代码干净利落,集成也方便。
Easy RAG 到底有多 Easy?(带你 10 分钟搭起问答系统)
先看一下它的核心结构:
是不是很眼熟?熟悉 SpringBoot 的你一看就懂,这就像在组装一个 Bean。
每一个 .xxx() 都是配置一个模块,比如用哪个 embedding model,哪种向量库,哪种语言模型,文本怎么切片。
更酷的是,你一句话就能添加文档:
它自动帮你:
- 解析文档(支持 PDF、TXT、Markdown)
- 分片切割
- 向量化
- 存入你配置的 Vector Store(比如内存、Qdrant、Chroma)
然后就可以问问题啦:
就这么简单!
实战 Demo:打造一个 PDF 问答机器人(全栈 Java)
下面我带大家实战打造一个简单的文档问答服务,整套栈用 Java 实现,适合部署到本地或 SpringBoot 项目里用。
Step 1:准备工作
添加 Maven 依赖
推荐加上 PDF 和 Embedding 扩展:
Step 2:配置模型和向量库
你也可以换成 Qdrant 或 Milvus:
Step 3:初始化 EasyRAG
Step 4:添加文档
它自动帮你切分、编码、存储,不用你操心。
Step 5:聊天!
结果输出就像 ChatGPT 那样文质彬彬!
我遇到的坑和解决方法(小米经验时间)
其实虽然叫 Easy RAG,但我刚开始也踩了一些坑,给大家总结一下:
问题一:中文问答结果不准确?
解决:建议切片时不要太小,中文适合 500~1000 字为一块;同时注意 embedding 使用中文支持好的模型,比如 text-embedding-3-large。
问题二:PDF 文档乱码?
解决:LangChain4j 用的是 Apache PDFBox,有些字体可能无法正确识别,建议用纯文本测试排查,或者转换为 UTF-8 的 .txt。
问题三:OpenAI 太贵,咋办?
解决:你可以换成本地模型(如 Ollama)或者 Qwen、Yi 等免费大模型。LangChain4j 支持本地部署,甚至可以用 ggml 模型!
未来可以怎么玩?我的几个脑洞
这个 Easy RAG 我越用越有感觉,已经不是"能不能用"的问题,而是"还能怎么用"!
比如我已经做了几个小 demo:
1. 公司内部问答助手
把 HR 文档、考勤制度、员工福利等 PDF 丢进去,大家就可以直接问 AI:"年假怎么申请?"、"怎么报销?"------完全自动答!
2. 专业领域知识助手
我试过导入《Java 编程思想》《Spring 全家桶》教程,然后问它:"如何优雅实现责任链模式?"
答案还真像样!
3. 嵌入到微信小程序中
Easy RAG 返回接口很简单,你只要封装成一个 REST API,用微信小程序前端接一下,就能做成公司问答 bot!
最后的话:大模型世界里,Java 也能有姓名!
我知道很多 Java 同学面对大模型、RAG 时会有些畏惧,觉得"哎呀这不都是 Python 玩的吗?"
其实现在生态已经很成熟了,有 LangChain4j 这样的好框架,我们一样可以快速搞出自己的 AI 应用。
而 Easy RAG,就像是为 Java 工程师定制的一把钥匙,轻松开启 LLM 的世界!
END
我是小米,一个爱写代码也爱分享的小透明,如果你喜欢这篇文章,欢迎点个在看或者转发给你的 Java 伙伴,让我们一起在大模型浪潮中,不落伍、不掉队!