来源:互联网 更新时间:2026-07-10 07:27
刚开始接触AI那会儿,说实话,我和不少Ja va开发者差不多。每天看到的都是
直到后来才想明白:自己一开始就走错了方向。
下面就来复盘一下,当时是怎么用SpringBoot在30分钟内,跑通第一个AI聊天机器人的。
很多人第一次接触这类工具时,第一反应往往是:“ChatGPT太神奇了!”
但从纯开发视角来看,
说白了,它其实就是一次HTTP请求。所以,
肯定会有人问:“网页版聊天那么方便,干嘛还要去调API?”
道理很简单:
所以,学会调API,就是传统开发者迈入AI开发的第一步。
动手敲代码之前,得先有个能调的大模型。目前国内外主流平台都开放了API,比如DeepSeek、阿里百炼、OpenAI、智谱AI等。
这里选的是DeepSeek,理由特简单:便宜,学习阶段用足够了。
注册完了,需要做几件事:
这玩意儿千万不能提交到GitHub或公开仓库里,不然别人调用,花的可都是你的钱。千万注意:
创建过程大致如下:
整个聊天机器人的核心,其实就是一次HTTP调用。明白这一点,后面再学Spring AI、Agent、RAG,都会轻松不少。
前端页面 → Controller → ChatService → DeepSeek API → 返回结果
这里用Ja va来示范,Python、Go等其他语言道理都一样。先直接用RestTemplate调,是不是感觉特别熟悉?
完整代码会同步到仓库,后续Spring AI、RAG、Agent相关代码也会持续更新。
private static final String DEEPSEEK_URL = "https://api.deepseek.com/chat/completions";
private static final String SYSTEM_PROMPT = "你是一个AI助手";
private final RestTemplate restTemplate;
private final String apiKey;
/** 会话 id -> 该会话的 messages 历史(第一条固定为 system) */
private final ConcurrentHashMap> conversations = new ConcurrentHashMap<>();
public ChatConversationService(RestTemplate restTemplate,
@Value("${deepseek.api-key}") String apiKey) {
this.restTemplate = restTemplate;
this.apiKey = apiKey.strip();
}
public ChatResponse chat(String conversationId, String userMessage) {
// 处理会话ID(可忽略)
String convId = (conversationId == null || conversationId.isBlank())
? UUID.randomUUID().toString()
: conversationId.trim();
// 如果get(id)的值不存在,则把新list封装后返回,否则直接返回list(可忽略)
List history = conversations.computeIfAbsent(convId, id -> {
List list = new ArrayList<>();
list.add(new ChatMessage("system", SYSTEM_PROMPT));
return list;
});
synchronized (history) {
history.add(new ChatMessage("user", userMessage));
DeepSeekChatRequest body = new DeepSeekChatRequest();
body.setModel("deepseek-v4-flash");
body.setMessages(new ArrayList<>(history));
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(apiKey);
HttpEntity entity = new HttpEntity<>(body, headers);
// HTTP调用大模型接口
DeepSeekChatResponse apiResponse = restTemplate.postForObject(
DEEPSEEK_URL, entity, DeepSeekChatResponse.class);
String reply = "";
if (apiResponse != null && apiResponse.getChoices() != null
&& !apiResponse.getChoices().isEmpty()
&& apiResponse.getChoices().get(0).getMessage() != null) {
String content = apiResponse.getChoices().get(0).getMessage().getContent();
reply = content != null ? content : "";
}
history.add(new ChatMessage("assistant", reply));
return new ChatResponse(reply, convId);
}
}
其实整个流程总结下来就三步:用户问题 → 组装Message → HTTP调用大模型 → 返回答案。
这也是后面所有AI应用的根基,包括Spring AI、LangChain4j、Agent、RAG,本质上都跑在这个流程上。
启动项目后,发送请求:
返回:
因为加了会话ID的设置,系统记住了历史消息。所以第二次提问:
模型依然能结合上下文回答。这也是最简单的会话记忆实现方式(这一步也可以先忽略,后面会详细讲大模型的记忆机制)。
肯定有人会问:“现在Spring AI那么火,干嘛不用,非要自己写?”
理由很简单:
chatClient.prompt()
.user(question)
.call()
但很难真正搞明白:Message是什么?Prompt是什么?Token是什么?请求到底发给了谁?
所以第一版故意选了
做到这一步,其实你已经完成了自己的第一个AI应用。虽然还很基础,但已经具备了
很多人做到这里会忍不住想:“AI开发好像也没那么难嘛。”说实话,你只是刚刚完成了AI开发的
接下来真正的学习路线通常是:
聊天机器人 → Spring AI → 流式输出(SSE) → 会话记忆 → Function Calling → RAG知识库 → Agent → Workflow → 企业级AI应用
接下来也会按照这条路径,把这些内容一步步记录下来。欢迎持续关注。
币安Binance官方中文网站 币安App最新版下载及新手注册指南
七麦数据官网网页地址 七麦数据官方入口在线首页
问卷星官方网站入口地址 问卷星网页版在线使用
新浪人工智能热点小时报丨2026年06月20日02时_今日实时人工智能热点速递
闲鱼的严选验货在哪里看?闲鱼严选和验货宝哪个可靠
欧易OKX官方网站直达入口 2026欧易官方App安卓版v7.1.0下载安装
Siren (SIREN)币价格预测 2026-2050:SIREN 股价会很快达到 1.5 美元吗?
动漫《KiraKira 光之美少女 A La Mode》剧情介绍
淘宝直播如何看回放在哪里看?怎么查看淘宝直播回放
以太坊(ETH)未来数周或持续呈现低迷态势,多重因素制约价格走势
为何比特币BTC价格跌破7.3万美元?一文拆解影响近期比特币行情的五大原因
币安Binance交易所官方入口 币安App下载安装与实名注册教程
花的网名大全男生古风(精选100个)
Pharos(PROS)币是什么?如何参与?PROS币代币经济学和参与指南
比特币(BTC)与黄金在英国相遇:21Shares将BOLD基金引入伦敦
GPT5.6惨遭切脑,Fable 5回归要变弱鸡版?
新手如何购买比特币?2026年新手在币安购买比特币的完整教程
《梦幻西游》特殊鬼怪怎么抓-隐藏变异鬼应对要点
迷你网名古风男生霸气(精选100个)
王者荣耀「西行封妖记」【孙权-仙扇使者】6月25日上线!
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc