AI大模型实用(一)SpringAI接入deepseek示例

一、SpringAI接入deepseek所需环境

  • JDK17+(JDK8无法支持)
  • SpringBoot 3.x
  • maven 3.6+

官网地址

https://docs.spring.io/spring-ai/reference/api/chatclient.html

SpringAI接入deepseek方式有很多。 下面演示SpringAI原生方式接入deepseek.

注:Spring AI调用Ollama+DeepSeek

二、pom依赖

1、 SpringBoot修改版本

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.5</version> <relativePath/> <!-- lookup parent from repository --> </parent>

2、SpringAI通过deepseek提供的openapi接入deepseek

<!-- springAI提供的openapi--> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>1.0.0-M6</version> </dependency>

三、相关配置

spring.ai.openai.api-key=xxx(修改成自己的密匙) spring.ai.openai.base-url=https://api.deepseek.com spring.ai.openai.chat.options.model=deepseek-chat

四、代码

import org.springframework.ai.chat.client.ChatClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringAIConfig { @Bean public ChatClient chatClient(ChatClient.Builder builder) { return builder.defaultSystem("你是一名资深开发工程师,你的名称叫siri").build(); } }

示例1:定义controller

package com.ai.controller; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.model.Model; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/ChatController") public class ChatController { private final ChatClient chatClient; ChatController(ChatClient.Builder chatClientBuilder) { this.chatClient = chatClientBuilder.build(); } @GetMapping("/ai") String generation(String question) { return this.chatClient.prompt() .user(question) .call() .content(); } } 

访问: http://127.0.0.1:8886/ChatController/ai?question=%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B%E4%BD%A0%E8%87%AA%E5%B7%B1

运行结果:

访问:

运行结果:http://127.0.0.1:8886/ChatController/chattest?question=%E4%BD%A0%E6%98%AF%E8%B0%81

示例2:定义controller(流式输出)

package com.ai.controller; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.Generation; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.chat.prompt.SystemPromptTemplate; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RestController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RestController @RequestMapping(value = "/SpringAIController") public class SpringAIController { @Autowired private ChatClient chatClient; // private final ChatClient chatClient; //ChatClient底层是使用ChatModel作为属性的,在初始化ChatClient的时候可以指定ChatModel @Autowired private ChatModel chatModel; public SpringAIController(ChatClient.Builder chatClientBuilder) { this.chatClient = chatClientBuilder.defaultSystem("你是一个AI智能应用").build(); } @GetMapping("/chat") public String chat(@RequestParam(value = "msg",defaultValue = "介绍一下杜甫") String message) { //prompt:提示词 return this.chatClient.prompt() //用户输入的信息 .user(message) //请求大模型 .call() //返回文本 .content(); } //流式响应 @GetMapping(value = "/chatstream",produces="text/html;charset=UTF-8") public Flux<String> chatStream(@RequestParam(value = "message") String message) { return chatClient.prompt().user(message).stream().content(); } }

访问:

http://127.0.0.1:8886/SpringAIController/chatstream?message=%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B%E4%BD%A0%E8%87%AA%E5%B7%B1

注意: 不使用流式输出时,访问http://127.0.0.1:8886/SpringAIController/chat?question=%E4%BD%A0%E6%98%AF%E8%B0%81

结果出现超时: TimeoutException: Total timeout 10000 ms elapsed

Read more

企业级在线文档:ONLYOFFICE 核心优势深度解读与测评体验

企业级在线文档:ONLYOFFICE 核心优势深度解读与测评体验

在当今数字化转型的浪潮中,企业的办公模式正在经历从“单机作业”到“云端协同”的深刻变革。尤其是在混合办公、跨地域协作日益普遍的今天,寻找一款既能打破信息孤岛、提高团队协作效率,又能严格保障企业核心商业数据安全的文档处理引擎,成为了每一个 IT 架构师和企业决策者的核心诉求。 我们在评估过市面上众多协作工具后,最终将目光锁定在了 ONLYOFFICE 上。作为一款开源且功能强大的企业级在线文档套件,ONLYOFFICE 在实际业务场景中展现出了令人惊艳的稳定性和功能深度。今天,我就根据自己在企业内部署和试用 ONLYOFFICE 的第一手经验,从实时协作、数据安全、多设备支持等维度,深度解读它的核心优势,看看它是如何真正为企业降本增效的。 🚀 协同即生产力:极简且强大的实时协作体验 在企业日常运营中,最耗费精力的事情莫过于多部门共同编写同一份项目企划书或合并多张财务报表。传统模式下,文件需要在微信、邮件里丢来丢去,不仅版本极其容易混乱,沟通成本也高得惊人。而 ONLYOFFICE 作为一款企业级在线文档工具,完美地解决了这个痛点。 ONLYOFFICE 提供了两种非常贴合企业

By Ne0inhk
基于 DeepSeek V3.2 与 Go 语言构建智能日志分析系统实战深度解析

基于 DeepSeek V3.2 与 Go 语言构建智能日志分析系统实战深度解析

前言 在现代运维与软件开发体系中,日志数据是洞察系统健康状态的核心资产。面对海量且非结构化的日志信息,传统的基于规则(Rule-based)或关键词匹配的分析手段往往难以应对复杂的故障模式。随着大语言模型(LLM)能力的飞跃,利用生成式 AI 进行语义级日志分析已成为提升运维效率的关键路径。本文将深入剖析如何基于 Ubuntu 环境,利用 Go 语言的高并发与强类型特性,结合 DeepSeek V3.2 模型的推理能力,从零构建一个流式智能日志分析器。文章将涵盖环境部署、运行时配置、API 交互协议设计、流式数据处理及最终的实战验证。 第一章:Linux 基础环境初始化与依赖管理 构建稳健的应用始于可靠的底层环境。在 Ubuntu 20.04/22.04/24.04 LTS 系统中,保持软件包的最新状态是确保依赖兼容性与系统安全性的首要步骤。 1.1 系统源更新与升级 在执行任何安装操作前,必须同步包管理器的索引文件,

By Ne0inhk
【JAVA进阶】鸿蒙开发与SpringBoot深度融合:从接口设计到服务部署全解析

【JAVA进阶】鸿蒙开发与SpringBoot深度融合:从接口设计到服务部署全解析

文章目录 * 前言 * 第一章 鸿蒙与SpringBoot融合的技术基石 * 1.1 鸿蒙开发的核心需求与技术痛点 * 1.1.1 鸿蒙分布式应用的架构特点 * 1.1.2 鸿蒙后端服务的核心诉求 * 1.2 SpringBoot适配鸿蒙的技术优势 * 1.2.1 快速开发与部署能力 * 1.2.2 丰富的生态组件支撑 * 1.2.3 高并发与高可用特性 * 第二章 SpringBoot RESTful接口开发:鸿蒙应用的通信桥梁 * 2.1 RESTful接口设计规范与鸿蒙适配 * 2.1.1 RESTful核心设计原则 * 2.1.2 统一响应格式设计 * 2.2 SpringBoot接口开发实战:用户管理模块 * 2.

By Ne0inhk

Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 分布式开发、金融交易或具有严格时效性的业务(如:秒杀倒计时、双因素认证 OTP)时,开发者不能完全信任设备本地的系统时间。用户可能为了某种目的手动篡改时间,或者由于网络同步问题导致时间存在偏差。 ntp 软件包提供了一种直接与互联网授时中心(NTP 服务器)通信的能力。它能绕过本地系统时钟,获取绝对精准的 UTC 时间,并计算出本地时间与真实时间的“偏移量(Offset)”。 一、核心授时原理 ntp 通过测量往返网络延迟来消除误差。 发送 NTP 请求 (UDP) 返回高精度时间戳 鸿蒙 App 全球授时中枢 (pool.ntp.org) 计算网络往返耗时 (RTT) 得出绝对时间偏移量 生成鸿蒙业务专用准时 二、

By Ne0inhk