前言刚开始学习AI的时候。我和很多Java开发一样。每天都在看AgentRAGWorkflowMCP越看越焦虑。感觉每个概念都很复杂。直到后来我才发现。自己走错了方向。对于传统开发来说。学习AI最好的方式不是先研究各种框架。而是先做出一个真正能运行的AI应用。而AI应用里最简单的是什么答案就是聊天机器人。这一篇文章。我就分享一下当时是如何用SpringBoot在30分钟内实现自己的第一个AI聊天机器人的。AI聊天机器人的本质是什么很多人第一次接触AI的时候。会觉得ChatGPT太神奇了其实从开发角度看。一个聊天机器人本质上只有三部分用户问题 ↓ Prompt ↓ 大模型 ↓ 返回答案说白了。就是一次HTTP请求。所以不要被AI吓到。先把它当成一个普通接口服务。很多东西反而更容易理解。为什么不直接用网页版DeepSeek很多人可能会问既然网页版已经能聊天。为什么还要调用API原因很简单。网页版是给人使用的。API是给程序使用的。只有通过API。才能集成到自己的系统开发AI助手实现RAG知识库实现Agent实现Workflow后面所有AI应用开发能力。几乎都是建立在API调用之上的。所以学会调用API。就是传统开发者进入AI开发的第一步。准备工作获取你的第一个大模型API在开始写代码之前。首先需要一个能够调用的大模型。目前国内外主流平台都提供开放API例如DeepSeek阿里百炼OpenAI智谱AI这里我使用的是 DeepSeek。原因很简单便宜。对于学习阶段来说完全够用。注册地址链接注册完成后1、充值10元足够练习很久2、创建API Key3、保存生成的sk开头密钥这里要特别注意API Key相当于银行卡密码。千万不要提交到GitHub或者上传到公开仓库。否则别人调用消耗的是你的余额。创建完成后。就可以开始编写代码了。创建过程如下这里要特别注意API Key 相当于银行卡密码不要上传到 GitHub 或公开仓库。最后附上DeepSeek的接口文档地址链接)代码实现请求流程其实整个AI聊天机器人本质上就是一次HTTP调用。理解了这一点。后面学习Spring AI、Agent、RAG都会轻松很多。前端页面 ↓ Controller ↓ ChatService ↓ DeepSeek API ↓ 返回结果业务代码项目中调用这里以Java为例Python等其他语言同理。这里先用Http RestTemplate方式调用。是不是很熟悉呢。完整代码我会同步上传到 GitHub。 后续 Spring AI、RAG、Agent 相关代码也会持续更新。GitHub地址 仓库地址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 ConcurrentHashMapString, ListChatMessage 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 可忽略 ListChatMessage history conversations.computeIfAbsent(convId, id - { ListChatMessage 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); HttpEntityDeepSeekChatRequest 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 AILangChain4jAgentRAG本质上都建立在这个流程之上。运行结果启动项目后。发送请求返回因为我增加了会话ID的设置系统保存了历史消息。所以第二次提问模型依然能够结合上下文回答。这也是最简单的会话记忆实现方式这一步也可以忽略后面会详细讲大模型记忆机制。第一个版本为什么不用Spring AI很多人看到这里可能会问为什么不用Spring AI原因很简单。学习任何新技术。第一步都应该先理解底层原理。如果一上来就使用框架chatClient.prompt() .user(question) .call()虽然很方便。但很难理解Message是什么Prompt是什么Token是什么请求到底发给了谁所以我的第一版故意选择RestTemplate HTTP直接调用模型接口。先把整个流程跑通。之后再引入Spring AI。这样学习效率反而更高。写在最后做到这里。其实你已经完成了自己的第一个AI应用。虽然它还很简单。但已经具备了会话能力Prompt能力大模型调用能力而这也是后面所有AI项目的基础。很多人做到这里会产生一个错觉AI开发好像也没那么难事实上。你只是刚刚完成了AI开发 Hello World接下来真正的学习路线通常是聊天机器人 ↓ Spring AI ↓ 流式输出SSE ↓ 会话记忆 ↓ Function Calling ↓ RAG知识库 ↓ Agent ↓ Workflow ↓ 企业级AI应用而我接下来也会按照自己的学习路径。把这些内容一步步记录下来。