前面有讲到Python对接DeepSeek实现对话,但基于现状,从事后端开发,侧重于Java,此次演示以SpringAI技术实现。
一定要引入SpringAI的管理依赖,可以方便的使用其他模型及Client!
<dependencyManagement>        <dependencies>                        <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的基本功能已实现。
本人正在打造技术交流群,欢迎志同道合的朋友一起探讨,一起努力,通过自己的努力,在技术岗位这条道路上走得更远。QQ群号:914683950 备注:技术交流 即可通过!
dify的聊天助手API(实战篇)" data-itemshowtype="0" target="_blank" linktype="text" data-linktype="2">上一篇:java对接Dify的聊天助手API(实战篇)