前面有讲到Python对接DeepSeek实现对话,但基于现状,从事后端开发,侧重于Java,此次演示以SpringAI技术实现。一定要引入SpringAI的管理依赖,可以方便的使用其他模型及Client!<dependencyManagement> <dependencies> <!-- Spring AI的管理依赖 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>${spring-ai.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement><dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>${spring-ai.version}</version></dependency>此次基于SpringBoot工程演示,没有用到框架,一键启动,真方便。<properties> <java.version>17</java.version> <spring-ai.version>1.0.0-M5</spring-ai.version></properties>
server: port: 8080spring: application: name: ai-demo ai: openai: base-url: https://api.deepseek.com api-key: 个人key chat: options: model: deepseek-chat temperature: 0.7
API接口文档:https://api-docs.deepseek.com/zh-cn/由于需要使用SpringAI自带的ChatClient,如果没有添加配置或用构造方法初始化,会报以下错误。@Componentpublic class ChatConfig { /** * 默认形式 * @param model * @return */ @Bean public ChatClient chatClient(OpenAiChatModel model) { return ChatClient.builder(model).build(); }}
@RequiredArgsConstructor@RestController@RequestMapping("/ai")@Slf4jpublic class ChatController { private final ChatClient chatClient;
/** * 聊天对话-阻塞式 * @param message * @return */ @RequestMapping("/chat") public String chat(@RequestParam("message") String message) { return chatClient.prompt() .user(message) .call() .content();
}}
/** * 聊天对话-流式 * * @param message * @return */ @RequestMapping(value = "/stream",produces = "text/html;charset=utf-8") public Flux<String> chatStream(@RequestParam("message") String message) { log.info("流式测试..."); return chatClient.prompt() .user(message) .stream() .content();
}
/** * 添加提示词 已通过 * @param model * @return */ @Bean public ChatClient chatClient(OpenAiChatModel model) { return ChatClient .builder(model) .defaultSystem("你的名字是小明,身份为学生,请以学生的语气回答问题.") .build(); } /** * 会话日志 * @param model * @return */ @Bean public ChatClient chatClient(OpenAiChatModel model, ChatMemory chatMemory) { return ChatClient .builder(model) .defaultSystem("你的名字是小明,身份为学生,请以学生的语气回答问题.") .defaultAdvisors( new SimpleLoggerAdvisor(), new MessageChatMemoryAdvisor(chatMemory) ) .build(); }
/** * 会话记忆 基于内存-缓存 * @return */ @Bean public ChatMemory chatMemory() { return new InMemoryChatMemory(); }
/** * 会话记忆 已通过 * @param message * @param chatId * @return */ @RequestMapping(value = "/memoryChat",produces = "text/html;charset=utf-8") public Flux<String> memoryChat(@RequestParam("message") String message, String chatId) { log.info("流式测试..."); return chatClient.prompt() .user(message) .advisors(a-> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)) .stream() .content();
}
此次新增chatId字段,目的是为一次会话添加唯一标识,基于该标识存储会话记忆,目前使用的内存记忆功能,可以尝试使用向量数据库,永久有效。至此,java对接SpringAI的基本功能已实现。
立即咨询 JOTO
JOTO 提供覆盖企业智能体规划与搭建、AI 平台私有化部署、RAG 知识工程、AI 安全治理、FDE 驻场共创及持续运营优化的全周期 AI 落地服务,帮助企业把验证中的 AI 能力转化为安全、可控、可持续迭代的生产力。 联系 JOTO 获取 AI 落地咨询