基于谷歌EmbeddingGemma和Gemma3 1B在设备上构建一套离线RAG系统教程,给出完整代码片段和演示视频
提取PDF文本,用iText库直接抽文字,可限定页数,防止一次加载整份大文件导致内存暴涨或耗时过长
文本切块,借助Deep Java Library加载HuggingFace 格式tokenizer,按256 token一块、重叠40token做递归切分,方便后续向量比对
生成向量,调用EmbeddingGemma 300M(TFLite 格式),把每段文字转成768维向量,一次算好后用Java序列化写进本地文件,下次启动直接读取无需重新推理
用户提问也转成向量,同一套EmbeddingGemma模型跑推理,得到查询向量
做相似度计算,用余弦相似度把查询向量与库里的所有向量比一遍,挑出最像的3段文字
交给大模型回答,把挑出的3段文字作为上下文,连同用户问题一起喂给Gemma 3 1B,让它只基于上下文生成答案
全程无服务器、无网络,数据不出设备,代码用Kotlin 写在Android端,可直接跑在普通手机上
教程:https://farmaker47.medium.com/develop-an-on-device-rag-system-powered-by-gemma-models-f7cdb7bca221
