Skip to main content

为什么不使用Python实现RAG?

为什么 Ragent 用 Java 做 RAG,而不是 Python?这个问题被问过挺多次的。

打开很多 RAG 教程、AI 应用开发课程,几乎清一色是 Python。LangChain 是 Python 的,LlamaIndex 是 Python 的,连 OpenAI 官方 SDK 的首选语言都是 Python。Python 在 AI 领域的地位不需要讨论——从底层的 PyTorch 到上层的 LangChain,整条 AI 技术栈都是围绕 Python 建设的,这是十几年积累的结果。

所以当 Ragent 是用 Java 做的,不少人的第一反应是:为什么不用 Python?

答案很简单:因为大多数要落地 AI 应用的公司,技术栈是 Java。

真实场景:一个 Java 技术栈的公司要做 AI

你在一家电商公司做后端开发,团队 8 个人,全部是 Java 技术栈——Spring Boot、MyBatis Plus、MySQL、Redis、RocketMQ。有一天老板说:咱们客服系统接个 AI 上去,做个智能问答。

你去网上搜教程,答案几乎一边倒:用 Python,装个 LangChain,几行代码搞定。听起来很美好,但真要在公司里落地,问题就来了。

1. 技术栈撕裂:从此技术栈不再单一

公司现有的所有服务都是 Java 写的——用户服务、订单服务、商品服务、客服工单系统。现在你要加一个 AI 问答模块,如果用 Python 写:

  • 代码仓库要新开一个,构建工具从 Maven 变成 pip/poetry
  • CI/CD 流水线要新写一条,Docker 镜像要另起一套基础镜像
  • 部署环境要多装一套 Python 运行时,版本管理要搞 pyenv 或 conda
  • 和现有 Java 服务的通信全部要走 HTTP/gRPC,本来可以用方法调用解决的事情,现在要定义接口、处理序列化、加超时重试

这不是在做 AI,这是在给公司引入一个异构系统。

一个原本统一的技术栈,因为一个模块用了 Python,变成了两套构建体系、两套部署流程、两套监控方案。为了一个功能,整个工程体系的复杂度翻倍了。

2. 人员依赖:会 Python 的那个人离职了怎么办

这个是团队管理者需要考虑的最现实问题。

团队 8 个人,7 个只会 Java,1 个之前学过 Python,自告奋勇用 Python + LangChain 搞了一套 RAG 出来。系统上线了,跑得也还行。然后这个同学离职了。

剩下 7 个 Java 开发者面对一堆 Python 代码:

  • 看不太懂 asyncio、装饰器、yield 这些 Python 特有的模式
  • LangChain 的 ChainRunnableRunnablePassthrough 是什么东西?不知道
  • 出了 Bug 要调试,连 Python 的 Debug 工具都不熟
  • 想加个功能,得先花两周学 Python 和 LangChain 的基本概念

Python 确实是最容易上手的语言之一,但上手和能接手一个生产系统是两回事。要理解业务逻辑、框架设计、异常处理、部署配置,需要的不仅是语言语法,还有对整套生态的熟悉程度。一个系统的可维护性,取决于团队里大多数人能不能改它,而不是取决于当初那个写代码的人有多厉害。

这个风险在小团队里尤其致命。大厂可以专门招一个 Python 岗位来维护,但大多数中小团队没有这个编制——AI 模块就是某个后端开发顺手做的事,不可能为它专门配一个不同技术栈的人。

3. 知识断层:学了 Python 回来还是不会做 RAG

很多同学的想法是:我去学 Python,然后用 LangChain 做 RAG,简历上加一个 AI 项目。

但实际情况是——学完之后你学会了 Python 和 LangChain 的用法,对 RAG 本身的理解并没有多深。

为什么?因为 LangChain 的设计理念是屏蔽细节。你调一个 RetrievalQA.from_chain_type(),背后做了什么?分块策略怎么选的?Prompt 怎么拼的?检索结果怎么排序的?Token 预算怎么分配的?这些 LangChain 都帮你做了决定,你只是调了一个高层 API。

面试官问你:“你的 RAG 系统检索召回率是多少?你用了什么重排序策略?你的 Prompt 里怎么处理信息冲突的?”你答不上来——因为这些都是框架帮你做的,你没有直接接触过。

反过来,如果你用 Java 从头搭一个 RAG 系统,每个环节都要自己写——分块逻辑要自己写、Prompt 模板要自己组装、检索策略要自己选、会话记忆要自己管理。面试的时候,这些环节你能讲清楚来龙去脉,这才是真正有竞争力的。

RAG 的本质是工程,不是算法

很多人觉得做 AI 一定要用 Python,是因为把训练模型用模型搞混了。

训练模型——写 PyTorch、调 GPU、跑 Epoch——这个确实是 Python 的地盘,没什么好争的。

但 RAG 是模型,不是训练模型。整个链路里:

文档解析 → 分块 → 元数据 → 向量化 → 向量数据库 → 检索 → 重排 → 生成 → 会话记忆 → Query 改写 → 意图识别

哪个环节需要一定写 PyTorch 代码?一个都没有。向量化是调 Embedding API,重排序是调 Reranker API,生成是调 Chat API——全部是 HTTP 请求。你用 Java 的 OkHttp 发请求和用 Python 的 requests 发请求,返回的结果完全一样,模型不知道也不关心调用方是什么语言。

剩下的工作是什么?文档解析、文本切分、数据库操作、并发控制、错误处理、限流熔断、监控告警。这些是工程问题,而工程恰恰是 Java 的强项——成熟的线程池和并发模型、编译期类型检查、Spring Boot 生态里现成的限流熔断监控方案。更关键的是,你的团队对这些东西是熟的,不需要额外的学习成本。

真正只有 Python 才能做的事情——模型训练、微调、本地推理——这些在 RAG 应用层面不需要。RAG 的核心思路就是调用别人训练好的模型,不是自己训练模型。

那什么场景应该选 Python

解锁付费内容,👉 戳