Java后端转大模型,我选了Python不选Java(3天跑通第一个AI应用)

11 阅读8分钟

上周组里开会,领导一句话: "下半年所有项目都要接入AI能力。"

我写Java后端5年,Spring Boot闭着眼能搭,但大模型应用?一脸懵。

更纠结的是——搞大模型用Java还是Python?我试了两个都跑了一下,第二天就决定彻底转Python了。今天把3天的全过程写出来,给同样在纠结的Java人一个参考。


先说结论:Java人搞大模型,直接学Python

我知道你想问:"Java不是有Spring AI和LangChain4j吗?为什么要换语言?"

我用一个表格说清楚:

维度Python+LangChainJava+Spring AI
官方文档和示例丰富,80%教程都是Python少,很多功能没示例
社区活跃度遇到问题搜1分钟能找到答案搜半小时可能还没人问过
框架更新速度LangChain每周迭代Spring AI还在0.x版本
RAG/Agent生态LangChain、LlamaIndex、Dify全支持生态刚起步,很多功能待完善
实际企业落地99%的大模型项目用Python多数是调用层,核心逻辑还是Python
上手难度pip install三行搞定配依赖可能先卡半小时

一句话:Java+大模型现在是"能跑",Python+大模型是"跑得飞快"。

你可能会说"那我学完Python再回Java呗"——我一开始也是这么想的。但学到后面你会发现:Python的大模型生态好到根本不想回去。

好,废话不多说,看实操。


Day 1:选模型+装环境(2小时,其中1.5小时在纠结选型)

第一个纠结:用哪个模型?

国内大模型一大堆,我一开始选了半小时没选出来。后来发现先跑通比选对更重要,任何模型都能帮你理解大模型开发的逻辑。

模型优点缺点API价格
DeepSeek便宜、中文强、代码能力顶级高峰期偶尔慢约1元/百万token
通义千问阿里系生态好、文档全创意写作稍弱有免费额度
智谱GLM清华系、学术感强社区资源少有免费额度
OpenAI效果天花板要翻墙、贵、国内合规风险约60元/百万token

我的选择:DeepSeek。三个理由——便宜、中文好、不用翻墙。

第二个纠结:Python环境怎么搭?

Java人习惯了JDK+Maven+IDEA一条龙,Python的环境管理确实不一样,但更简单:

# 1. 装Python(3.10+),去 python.org 下载,安装时勾选"Add to PATH"# 2. 创建虚拟环境(类似Java项目的独立依赖)
python -m venv ai-env
​
# 3. 激活虚拟环境
# Windows:
ai-env\Scripts\activate
# Mac/Linux:
# source ai-env/bin/activate# 4. 装依赖(类似Maven引入依赖,但秒装)
pip install openai python-dotenv

对比一下你可能更清楚:

JavaPython说明
JDKPython解释器运行时
Maven/Gradlepip包管理
pom.xmlrequirements.txt依赖声明
IDEAVS CodeIDE
mvn clean installpip install -r requirements.txt安装依赖

30分钟搞定,比配一个Spring Boot项目还快。


Day 2:第一次调API,踩了3个坑

坑1:以为要自己训练模型

来,先看这段代码,感受一下大模型应用开发有多"简单":

from openai import OpenAI
​
client = OpenAI(
    api_key="sk-xxxxxxxx",       # 你的API Key
    base_url="https://api.deepseek.com"  # DeepSeek的接口地址
)
​
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一个友好的客服助手"},
        {"role": "user", "content": "我的订单还没发货,怎么办?"}
    ]
)
​
print(response.choices[0].message.content)

就这些。 没有模型训练、没有数据清洗、没有GPU——就是一个HTTP请求。

我之前以为大模型开发=炼丹+买显卡+搞数学,结果发现就是调API。这个认知差距,让我多纠结了两天才动手。

用Java人能理解的方式说:

传统开发:Controller → Service → DAO → 数据库
大模型开发:Controller → Service → 调大模型API → 返回结果

核心区别就是把"查数据库"换成了"调大模型"。

坑2:把API Key硬编码在代码里

这个坑Python新手特别容易踩——没有Spring的 application.yml 配置习惯,很容易把Key直接写代码里然后推到Git上。

正确做法

# 创建 .env 文件(类似 application.yml)
echo "DEEPSEEK_API_KEY=sk-xxxxxxxx" > .env# .gitignore 里加上(千万别忘了!)
echo ".env" >> .gitignore
# 代码里从环境变量读取
import os
from openai import OpenAI
from dotenv import load_dotenv
​
load_dotenv()  # 加载 .env 文件,类似Spring加载配置client = OpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com"
)

.env 文件 ≈ application.ymlpython-dotenv@Value("${xxx}")。思路完全一样,就是换了个写法。

坑3:不知道什么是Prompt Engineering

第一次调API,我的Prompt是这样的:

messages = [
    {"role": "user", "content": "帮我处理客服问题"}
]

结果模型回了一堆泛泛的内容,完全不能用。

改进后

messages = [
    {
        "role": "system",
        "content": """你是一个电商客服,负责处理售后问题。
规则:
1. 语气要温和有耐心
2. 先确认用户的问题类型(物流/退款/质量)
3. 给出明确的解决方案
4. 如果无法解决,建议转人工客服"""
    },
    {"role": "user", "content": "我的订单还没发货,怎么办?"}
]

区别:system消息是"岗位说明书",定义AI的角色和规则;user消息才是"客户提问"。system写得好不好,直接决定输出质量。

这是大模型开发和传统开发最大的不同——你的"代码"不再是逻辑,是自然语言。写Prompt就是写"需求文档",写得好AI就做对,写得模糊AI就乱来。


Day 3:做一个完整的智能客服

把前面三个坑都避开,做一个能跑的"智能客服命令行工具":

import os
from openai import OpenAI
from dotenv import load_dotenv
​
load_dotenv()
​
client = OpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com"
)
​
# 客服系统提示词(这就是大模型应用的"核心代码")
SYSTEM_PROMPT = """你是一个电商客服助手,叫小荣。
规则:
1. 语气温和有耐心
2. 先判断问题类型:物流、退款、质量、其他
3. 物流问题:建议查看物流单号,超3天未更新可申请催件
4. 退款问题:7天内无理由退款,需提供订单号
5. 质量问题:建议拍照留证,可换货或退款
6. 超出能力范围的问题,建议拨打人工客服 400-xxx-xxxx
"""# 对话历史(多轮对话的关键!)
history = [{"role": "system", "content": SYSTEM_PROMPT}]
​
print("=== 小荣客服助手 ===")
print("输入问题开始咨询,输入 'quit' 退出\n")
​
while True:
    user_input = input("你: ")
    if user_input.strip().lower() == "quit":
        print("小荣: 感谢咨询,祝您生活愉快!")
        break
​
    # 把用户消息加入历史
    history.append({"role": "user", "content": user_input})
​
    # 调用API(把完整历史传进去,实现多轮对话)
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=history,
        temperature=0.7  # 0=确定性强,1=创意性强
    )
​
    reply = response.choices[0].message.content
    print(f"小荣: {reply}\n")
​
    # 把AI的回复也加入历史(这样它才能"记住"上下文)
    history.append({"role": "assistant", "content": reply})

运行效果:

=== 小荣客服助手 ===
输入问题开始咨询,输入 'quit' 退出
​
你: 我的订单3天了还没发货
小荣: 您好,很抱歉让您久等了!请问您方便提供一下订单号吗?
      一般情况下,付款后48小时内会发货。如果超过3天仍未发货,
      我可以帮您申请催件处理。
​
你: 订单号是ORD20260601001
小荣: 收到,订单号ORD20260601001。我帮您查一下...
      该订单目前状态为"备货中",预计明天可以发出。
      如果明晚还没更新物流信息,您再联系我,我帮您催件。
​
你: 好的谢谢
小荣: 不客气!有任何问题随时找我,祝您生活愉快~

60行代码,成本不到1分钱。 这就是大模型应用——不需要训练模型,不需要GPU,调API就完事。


Java人学大模型最大的坎:不是Python,是思维切换

3天跑通下来,我发现最大的坎根本不是Python语法——Python调API比Java简单多了。真正的坎是思维方式的切换

Java思维大模型思维区别
逻辑是写死的逻辑是"引导"出来的if-else → Prompt
输入输出确定输出有随机性temperature控制
测试=断言测试=看效果没有单元测试
代码即逻辑提示词即逻辑自然语言编程
靠架构解耦靠Prompt约束新的"设计模式"

最难的不是技术,是接受"不确定性"。 Java人习惯了确定性——输入a一定输出b。大模型天生有随机性,同一个Prompt跑两次可能得到不同结果。

但换个角度想:你写Java的时候,用户输入不也是不确定的吗? 大模型的随机性,和用户行为的随机性,本质上是一样的——你需要的是"引导"而不是"控制"。


3天总结

天数做了什么耗时
Day 1选模型、装Python环境2小时(纠结选型1.5小时)
Day 2第一次调API,踩3个坑4小时
Day 3做出完整智能客服3小时

总成本:时间9小时 + API费用约0.5元


我的真实感受

说实话,我一开始也犹豫过要不要用Java(Spring AI)。但试了一天就放弃了——不是因为Java做不了,而是Python生态领先太多了

LangChain、LlamaIndex、Dify、RAG的各种实现方案,Python都有现成的。Java呢?文档不全、示例很少、遇到问题搜不到答案。

转方向就转彻底一点。 你学会了Python+大模型的开发思路,哪天真需要在Java项目里接大模型API,一个HTTP请求的事。核心知识跟语言无关,但学习路径和Python差了10倍效率。


你也在考虑从Java转大模型吗?选Python还是选Java?评论区聊聊你的想法 👇

👉 下一篇:Java人用LangChain搭大模型应用,我踩了5个坑

点赞关注「荣码」,大模型转型系列持续更新~