本文主要介绍了如何在自己的Java程序中接入Deepseek,其中使用到的方法对于其他ai也适用,并不局限于Deepseek。

方法有两个:

  1. 远程调用Deepseek的api。
  2. 使用ollama本地部署ai并调用ollama接口。

先说第一个

调用官方的api需要在平台充值余额,首次调试api只充值少量即可。

总体流程:充值并获取key==>根据接口文档构建请求体和响应体è构建请求头==>拼接请求头和请求体==>发送请求并接收响应==>输出响应信息

一、调用DeepSeek官方API。

访问DeepSeek官网并进入开发者平台

DeepSeek 开放平台

  1. 充值余额并创建key

点击充值可以自定义金额,初次调试接口充值1元就够用了

充值完成后进入API Keys界面创建一个key。

注意:key只在创建时可见,所以创建时务必复制保存好,否则只能重新申请key

创建完成后点击左下角进入接口文档

  1. 参考接口文档在IDEA构建请求

一个完整的HTTP请求由请求头(header)、请求体(Body)、请求方式(Method)、请求链接(URL)组成,这些信息都可以在接口文档中获取到。

在接口文档中首页提到了首次调用API的最低要求:访问的URL以及自己申请到的key。页面下方是curlpythonnodejs调用的示例

为了方便构建请求可以往下找找JAVA调用的示例

在下方API文档==>对话==>对话补全 页面中可以找到请求所需要的全部信息。

现在得知了需要的信息后,可以在idea构建请求体和响应体了。

首先构建请求体,在文档中标明了required的属性为请求体的必须值,因为是简单使用,请求体只需要把必要的属性创建出来就行了。

观察其中的结构可以知道,请求体包含有两个属性

{

String model;  //字符串类型的model,标明使用哪个模型

List<Message> messages;  //集合类型的messages,储存了发送的信息

}

而message中主要包含两个属性(name属性为非必须,不讨论)

{

       String content; //发送给模型的消息

       String role; //发送这条消息的角色(个人调用的值应为user)

}

在idea创建相应的实体类,先从内层的Message开始创建:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Message{
    private String content;
    private String role;
}

再创建外层的Body,类的名字可以任意取,但是属性名一定要和文档相同:

@Data
public class DeepSeekRequest {
    private ArrayList<Message> messages;
    private String model;
}

这样请求体就创建好了,先放在一边。

页面往下滑继续创建响应体。

响应体就不需要关注右侧的required,因为我们作为接收方,响应体中的属性可以选择接收或者不接收。所以只需要关注自己需要的属性。

观察响应体要求可以得知,我们最终需要的信息在content里面,然而content是Message类中的一个属性,并且message是Choice类中的一个属性,choices还是响应体中的一个集合属性。注意大小写关系,首字母大写是类,小写是属性。

根据以上信息构建响应体:

最内层的Message直接沿用前面创建的即可

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Message{
    private String content;
    private String role;
}

Choice类包含一个Message属性:

@Data
public class Choice {
    private Message message;
}

主体Body类,和上面一样,类的名字随便取,属性名和文档一致:

@Data
public class DeepSeekResponse {
    private ArrayList<Choice> choices;
}

至此,响应体和请求体全部构建完毕!开始写业务接口

  1. 编写服务类

创建一个DeepseekService服务接口'

public interface DeepSeekService {
    public String call(String message);
}

创建一个DeepseekServiceImpl实现类

@Service
public class DeepSeekServiceImpl   {


}

现在已经有了请求体,还缺URL、Key、请求头。全部都在在这个业务类中定义。

先准备URL和key

private String url="https://api.deepseek.com/v1/chat/completions";
private String key="自己申请的key ";

这个url是从页面的JAVA示例中获取的

下一步写一个call函数方便调用并在里面构建请求头。

Call函数的作用是调用时传入要发给AI的消息,返回一个AI的回答。

public String call(String message){
    //构建请求头
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json");
    headers.add("Accept", "application/json");
    headers.add("Authorization", "Bearer "+key);

}

这需要用到一个HttpHeaders的类,这个类是专门用来处理请求头的。关于请求头的信息全部都是从示例中获取的。注意<TOKEN>换成自己的key。

下一步创建请求体并赋值

//构建请求体
DeepSeekRequest deepSeekRequest = new DeepSeekRequest();

//设置模型,值为deepseek-chat或者deepseek-reasoner 文档中有提到


deepSeekRequest.setModel("deepseek-chat");
Message msg = new Message();

//设置message
msg.setRole("user");
msg.setContent(message);
ArrayList<Message> messageArrayList = new ArrayList<>();
messageArrayList.add(msg);

//最终设置请求体
deepSeekRequest.setMessages(messageArrayList);

现在请求体和请求头都设置好了,下一步拼接请求头。

这里要用到一个HttpEntity类,用于拼接请求头和请求体,构成一个请求实体。创建时指定类型为请求体的类型,传入构建好的请求体请求头即可,如下

HttpEntity<DeepSeekRequest> httpEntity = new HttpEntity<>(deepSeekRequest,headers);

下一步发送请求,使用RestTemplate类。

RestTemplate restTemplate = new RestTemplate();

// ResponseEntity为响应体,用于接收该请求的响应

// exchange函数用于发起请求,参数格式如下
ResponseEntity<DeepSeekResponse> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, DeepSeekResponse.class);

最终AI返回的内容就装在response里面。

response里的body就是前面写的DeepSeekResponse类,按照前面配置的响应体类

获取里面所需要的消息还要经过层层调用,如下

return response.getBody().getChoices().get(0).getMessage().getContent();

response.getBody()获取到请求体,即前面构建的DeepSeekResponse。

还需要获取到最内层的content才是需要的内容。

最终测试:

完整代码如下:

@Service

public class DeepSeekServiceImpl   {



    private String url="https://api.deepseek.com/v1/chat/completions";
    private String key="自己的key";

    public String call(String message){
        //构建请求头
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        headers.add("Accept", "application/json");
        headers.add("Authorization", "Bearer "+key);
        //构建请求体
        DeepSeekRequest deepSeekRequest = new DeepSeekRequest();
        deepSeekRequest.setModel("deepseek-chat");
        Message msg = new Message();
        msg.setRole("user");
        msg.setContent(message);
        ArrayList<Message> messageArrayList = new ArrayList<>();
        messageArrayList.add(msg);
        deepSeekRequest.setMessages(messageArrayList);
        //拼接请求头和请求体
        HttpEntity<DeepSeekRequest> httpEntity = new HttpEntity<>(deepSeekRequest,headers);
        //发送请求接受响应
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<DeepSeekResponse> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, DeepSeekResponse.class);
        return response.getBody().getChoices().get(0).getMessage().getContent();
    }
}

二、Ollama本地部署AI并调用接口

使用Ollama部署建议显卡显存至少4G。

  1. 下载Ollama

官网:Ollama

下载建议去国内网站下载:Ollama中文官网 - Ollama国内加速下载

  1. 在Ollama官网查找需要的模型

官网找模型:Ollama

这里以Deepseek-v2为例

选择下载的模型参数,16B表示有160亿个参数。

下载16B的模型建议显存至少8G。

显存小的可以找小参数的模型,例如deepseek-r1

7B建议显存至少4G

根据自己电脑的显存大小选择不同的参数模型,本文以16B的

Deepseek-v2为例。

  1. 下载模型

直接复制指令在电脑的cmd命令行执行(前提是安装了Ollama)

复制执行后会自动下载模型,等待即可,超时失败就重试,下载完成后会自动运行。因为我已经下载了所以执行指令就直接运行了。

Ctrl+d退出模型,此时可以去idea调用Ollama API

首先声明:springboot3.2.0及以上的版本才支持AIAPI接口。

要升级springboot,mybatis也要同时升级,关于这个问题可自行百度。

  1. IDEA调用接口

引入依赖

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

这个依赖如果是使用阿里云镜像可能会找不到,需要自行更换源或者手动下载并安装依赖,关于依赖的手动安装本文不在赘述。

编写Service的实现类

@Service
public class LocalDeepSeekServiceImpl implements DeepSeekService {

}

注入Ollama的API

@Autowired
OllamaChatModel ollamaChatModel;

准备Ollama的专属URL,注意这个URL是固定写法,11434是Ollama的默认端口

String url ="http://localhost:11434/api/chat";



编写接口函数方便调用

@Override
public String call(String message) {
    return ollamaChatModel.call(message);
}

Ollama本地AI的部署到这就结束了,很简单。

最终测试:

完整代码:

@Controller
@RequestMapping("/ai")
public class AiController {

    @Autowired
    DeepSeekService deepSeekService;

    @PostMapping("/ollama")
    @ResponseBody String send(@RequestParam("message") String message){
        return deepSeekService.call(message);
    }

}

业务类:


@Service
public class LocalDeepSeekServiceImpl implements DeepSeekService {


    @Autowired
    OllamaChatModel ollamaChatModel;


    String url ="http://localhost:11434/api/chat";

    @Override
    public String call(String message) {


        return ollamaChatModel.call(message);
    }


}

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐