上周组里开会,领导一句话: "下半年所有项目都要接入AI能力。"
我写Java后端5年,Spring Boot闭着眼能搭,但大模型应用?一脸懵。
更纠结的是——搞大模型用Java还是Python?我试了两个都跑了一下,第二天就决定彻底转Python了。今天把3天的全过程写出来,给同样在纠结的Java人一个参考。
先说结论:Java人搞大模型,直接学Python
我知道你想问:"Java不是有Spring AI和LangChain4j吗?为什么要换语言?"
我用一个表格说清楚:
| 维度 | Python+LangChain | Java+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
对比一下你可能更清楚:
| Java | Python | 说明 |
|---|---|---|
| JDK | Python解释器 | 运行时 |
| Maven/Gradle | pip | 包管理 |
| pom.xml | requirements.txt | 依赖声明 |
| IDEA | VS Code | IDE |
| mvn clean install | pip 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.yml,python-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个坑
点赞关注「荣码」,大模型转型系列持续更新~