当前位置: 首页 > news >正文

Java 接入deepseek(非流式)

一、官方文档

首次调用 API | DeepSeek API Docs

二、获取密钥

DeepSeek

三、配置

1、yaml

openai:config:deepseekApiurl: https://api.deepseek.com/v1/chat/completionsdeepseekApikey: yourscrect

2、获取配置

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@Data
@ConfigurationProperties(prefix = "openai.config")
public class OpenaiUrlAndSecert {private String deepseekApiurl;private String deepseekApikey;
}

四、工具类

1、消息发送实体

import lombok.Builder;
import lombok.Data;import java.util.List;@Data
@Builder
public class DeepSeekRequestModel {/*** 所用DeepSeek模型*/private String model;private List<Message> messages;/*** 消息体*/@Data@Builderpublic static class Message {private String role;private String content;}
}

2、发送消息方法

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import okhttp3.*;import java.io.IOException;
import java.util.Collections;
import java.util.concurrent.TimeUnit;public class DeepSeekSendMessage {private final OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(15, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).build();public String getResponse(String apiurl, String apikey, String prompt) throws IOException {// 构建请求体DeepSeekRequestModel.Message message = DeepSeekRequestModel.Message.builder().role("user").content(prompt).build();DeepSeekRequestModel requestBody = DeepSeekRequestModel.builder().model("deepseek-chat").messages(Collections.singletonList(message)).build();//构建请求体json:{"messages":[{"content":"你好,DeepSeek!","role":"user"}],"model":"deepseek-chat"}String jsonBody = JSON.toJSONString(requestBody);// 创建HTTP请求Request request = new Request.Builder().url(apiurl).post(RequestBody.create(jsonBody, MediaType.get("application/json"))).addHeader("Authorization", "Bearer " + apikey).build();// 发送请求并处理响应try (Response response = client.newCall(request).execute()) {//如果响应成功,并且返回体有内容,就输出内容,否则表示响应失败if (response.isSuccessful() && response.body() != null) {String responseBody = response.body().string();JSONObject jsonResponse = JSON.parseObject(responseBody);JSONArray choices = jsonResponse.getJSONArray("choices");if (choices != null && !choices.isEmpty()) {JSONObject firstChoice = choices.getJSONObject(0);JSONObject messageResult = firstChoice.getJSONObject("message");return messageResult.getString("content");}}return response.body().string();}}}

五、调用方法

1、controller

    @GetMapping("/deepseek")@Operation(summary = "deepseek")@Parameter(name = "message", description = "内容", required = true)public CommonResult<String> deepseek(@RequestParam("message") String message) throws IOException {return success(testService.deepseek(message));}

2、service

    /*** 获取deepseek生成* @param message* @return*/String deepseek(String message) throws IOException;

3、impl

    @Resourceprivate OpenaiUrlAndSecert openaiUrlAndSecert;    @Overridepublic String deepseek(String message) throws IOException {return new DeepSeekSendMessage().getResponse(openaiUrlAndSecert.getDeepseekApiurl(),openaiUrlAndSecert.getDeepseekApikey(),message);}

六、注意

此调用方法为非流式调用,所以针对返回内容较多的,可能返回时间长达几十秒,所以在工具类(DeepSeekSendMessage)中设置了调用的超时时间为1分钟,不然拿不到返回值。

http://www.xdnf.cn/news/21943.html

相关文章:

  • 数据资产登记导则详解 | 企业如何规范化登记与管理数据资产?
  • 机械臂速成小指南(二十五):机械臂与人工智能的有机结合
  • 基于 S2SH 架构的企业车辆管理系统:设计、实现与应用
  • OOM 未触发 JVM 崩溃的可能原因
  • 椰汁椰肉生产车间设计
  • 怎么隐藏QTabWidget内的页面
  • Git 解决“Filename too long”问题
  • 企业应用大模型报告:如何应对变革,构建专属“我的AI”
  • 生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗
  • vue3+vite 实现.env全局配置
  • 大模型时代:AI应用的变革与挑战
  • 冰箱在储存各种疫苗时要经过多少道程序又会面临哪些风险?
  • linux获取cpu使用率(sy%+us%)
  • 文件二进制读写和文本读写以及编码解码
  • Android 12系统静态壁纸深度定制指南
  • day2-小白学习JAVA---java第一个程序
  • 电力资源配置逐步从计划模式转向市场驱动
  • 内存函数和动态内存管理
  • leetcode刷题日记——同构字符串
  • 北京SMT贴片厂精密制造关键工艺
  • MySQL触发器和函数的详细示例
  • FairMOT算法详解
  • 【AI学习】OpenAI:《A practical guide to building agents》(中文介绍与原文)
  • 关于嵌入式系统的知识课堂(二)
  • Unity粒子特效打包后不显示
  • 【天外之物】叉乘(向量积)的行列式表示方法
  • 前端如何构建跨平台可复用的业务逻辑层(Web、App、小程序)
  • LIMS引领综合质检中心数字化变革,赋能质量强国战略
  • 前端:uniapp框架中<scroll-view>如何控制元素进行局部滚动
  • 继承的了解与学习