JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型

本文涉及的产品
图像搜索,任选一个服务类型 1个月
简介: 随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。

前言

随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。

概念原理:

DeepSeek大模型是由深度求索(DeepSeek)公司开发的一种生成式人工智能模型,其核心目标是结合大规模语言模型与深度搜索技术,提供更精准、全面的信息服务和交互体验。以下从技术定位、核心功能及底层原理三个层面展开说明:

1. DeepSeek大模型的定位

DeepSeek旨在成为“搜索增强型大语言模型”,与传统搜索引擎或纯生成式AI(如ChatGPT)不同,它通过以下方式融合两者优势:

  • 搜索增强生成:将网络检索结果作为输入的一部分,辅助模型生成更实时、可信的内容。
  • 多模态交互:支持文本、图像、语音等多模态输入,扩展应用场景。
  • 长文本处理:优化上下文记忆能力,支持复杂任务的多轮对话。

2. 深度搜索(DeepSeek)的核心功能

深度搜索技术主要解决传统搜索的三大痛点:

  • 语义鸿沟:通过深度理解用户意图(而非关键词匹配),精准定位信息。例如,将“如何修复电脑蓝屏”转化为技术文档、论坛讨论和教程视频的关联。
  • 信息过时:实时抓取最新数据(如新闻、学术文献),动态更新知识库。
  • 长尾查询:通过生成能力补全冷门问题的信息缺失,如专业领域的细分问题。

具体技术手段包括:

  • 混合检索架构:结合向量数据库(语义搜索)与图数据库(知识关联),提升召回率。
  • 生成式补全:对检索结果不足的部分,用大模型生成补充内容,并标注来源可信度。
  • 多模态索引:对图像、表格等非文本数据建立嵌入表示(Embedding),实现跨模态检索。

3. 底层技术原理

DeepSeek的技术栈可分为四层架构:

(1)基础模型层

  • Transformer架构:采用解码器-only结构(类似GPT),通过自注意力机制捕捉长距离依赖。
  • 参数规模:推测为百亿级参数(具体未公开),支持复杂推理和生成任务。
  • 优化策略:可能引入混合专家系统(MoE)降低计算成本,或采用量化技术加速推理。

(2)预训练与微调

  • 多任务预训练
  • 语言建模:掩码语言模型(MLM)学习文本表征。
  • 知识注入:通过检索增强预训练(REALM等范式),将外部知识融入模型。
  • 对话建模:基于指令微调(Instruction Tuning)提升任务完成能力。
  • 持续学习:通过增量预训练吸收新数据,避免知识过时。

(3)搜索融合层

  • 动态检索:在用户输入时实时触发搜索,将结果编码为模型可读的向量。
  • 上下文融合:将检索内容与用户历史对话拼接,作为生成输入的上下文。
  • 可控生成:通过强化学习(RLHF)优化生成方向,确保答案符合搜索目标。

(4)系统优化层

  • 异构硬件适配:针对CPU/GPU/NPU优化推理速度,支持高并发场景。
  • 延迟-质量平衡:根据场景动态调整搜索深度和生成长度,例如简单问题直接检索,复杂问题启动生成。

JAVA实战

第一步:依赖的配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>spring.ai.text</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <java.version>17</java.version>
        <spring-ai.version>0.8.1</spring-ai.version>
    </properties>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
            <version>${spring-ai.version}</version>
        </dependency>
        <!-- 使用DashScope SDK -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dashscope-sdk-java</artifactId>
            <version>2.5.0</version> <!-- 使用最新版本 -->
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

第二步:接口的开发

package org.example;
import com.alibaba.dashscope.base.HalfDuplexServiceParam;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import java.lang.System;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QwenController {
    private static StringBuilder reasoningContent = new StringBuilder();
    private static StringBuilder finalContent = new StringBuilder();
    private static boolean isFirstPrint = true;
    @GetMapping("/qwen")
    public String askQuestion(String question) throws NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        HalfDuplexServiceParam generationParam = buildGenerationParam(question);
        Flowable<GenerationResult> result = gen.streamCall(generationParam);
        result.blockingForEach(message -> handleGenerationResult(message));
        return reasoningContent.toString();
    }
    @GetMapping("/deepseek")
    public String askDeepSeekQuestion(String question) throws NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        HalfDuplexServiceParam generationParam = buildDeepSeekGenerationParam(question);
        Flowable<GenerationResult> result = gen.streamCall(generationParam);
        result.blockingForEach(message -> handleGenerationResult(message));
        return reasoningContent.toString();
    }
    private static HalfDuplexServiceParam buildDeepSeekGenerationParam(String Msg) {
        return GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey("")
                // 此处以 qwq-32b 为例,可按需更换模型名称
                .model("deepseek-r1")
                .prompt(Msg)
                .build();
    }
    private static HalfDuplexServiceParam buildGenerationParam(String Msg) {
        return GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey("")
                // 此处以 qwq-32b 为例,可按需更换模型名称
                .model("qwq-32b")
                .prompt(Msg)
                .build();
    }
    private static void handleGenerationResult(GenerationResult message) {
        String reasoning = message.getOutput().getChoices().get(0).getMessage().getContent();
        String content = message.getOutput().getChoices().get(0).getMessage().getContent();
        if (!reasoning.isEmpty()) {
            reasoningContent.append(reasoning);
            if (isFirstPrint) {
                System.out.println("====================思考过程====================");
                isFirstPrint = false;
            }
            System.out.print(reasoning);
        }
        if (!content.isEmpty()) {
            finalContent.append(content);
            if (!isFirstPrint) {
                System.out.println("\n====================完整回复====================");
                isFirstPrint = true;
            }
            System.out.print(content);
        }
    }
}

代码中的模型选择,可以选择目前百炼支持的模型,比如说阿里云的模型,比如说deepseek的模型,一般有deepseek-v1、deepseek-v2、deepseek-v3以及deepseek-r1等,每种不同的模型具备不同的推理能力不一样。具体的会在接口调用的时候进行介绍。

第三步:运行效果

3.1deepseek-r1的调用情况

3.2qwq-32b的调用情况

总结:

从运行的效果来看,整个的思考过程以及生成的结果来看,两个模型的思考几乎是差不多的,现在随着国内的大模型逐步开源,并且相互之间进行模型之间的学习以及蒸馏,这样的话,整个国内的AI大模型就会达到良性的发展,随着使用的人数越来越多,也能反向的促进人工智能的发展与进步。

相关文章
|
1月前
|
机器学习/深度学习 人工智能 测试技术
【自定义插件系列】0基础在阿里云百炼上玩转大模型自定义插件
本文介绍了如何在阿里云百炼平台上创建大模型自定义插件,以增强AI模型功能或适配特定需求。通过编程接口(API)或框架设计外部扩展模块,开发者可在不修改底层参数的情况下扩展模型能力。文章以万相文生图V2版模型为例,详细说明了创建自定义插件的五个步骤:新建插件、创建工具、测试工具、复制第二个工具及最终测试发布。同时,提供了官方文档参考链接和具体参数设置指导,帮助用户轻松实现插件开发与应用,推动AI技术在各行业的广泛应用。
|
22天前
|
存储 人工智能 自然语言处理
方案介绍|基于百炼生成向量数据并使用阿里云Milvus存储和检索
阿⾥云Milvus是⼀款云上全托管服务,提供⼤规模向量数据的相似性检索服务。100%兼容开源Milvus,在开源版本的基础上增强了可扩展性,具备易⽤性、可⽤性、安全性、低成本与⽣态优势。阿⾥云Milvus可以⽀持⼏乎所有涉及到向量搜索的场景。例如检索增强⽣成RAG,以及经典的搜索推荐、多模态检索等。阿里云Milvus可存储百炼产生的向量数据,并进行大规模向量数据的检索。本文将重点介绍这一过程的方案。
|
19天前
|
人工智能 JavaScript 前端开发
一个支持阿里云百炼平台DeepSeek R1大模型(智能体)的Wordpress插件,AI Agent or Chatbot.
这是一个将阿里云DeepSeek AI服务集成到WordPress的聊天机器人插件,支持多轮对话、上下文记忆和自定义界面等功能。用户可通过短代码轻松添加到页面,并支持多种配置选项以满足不同需求。项目采用MIT协议授权,代码仓位于GitHub与Gitee。开发者Chi Leung为长期境外工作,代码注释以英文为主。适合需要在WordPress网站中快速部署AI助手的用户使用。
|
2天前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
26 5
|
18天前
|
人工智能 Java 物联网
没有好的学历,Java开发未来的路应该怎么走?
在数字化时代,Java开发者即使没有高学历,也能通过拥抱新兴技术(如大模型应用与鸿蒙系统开发)、积累实战经验、持续学习新技能等途径实现职业突破。从参与开源项目到关注行业动态,再到规划技术专家或管理路线,建立人脉网络并利用教育平台提升能力,开发者可拓宽技术边界,适应日新月异的技术需求,在未来发展中占据一席之地。
|
9天前
|
Java 编译器 API
Java Lambda 表达式:以 Foo 接口为例深入解析
本文深入解析了 Java 8 中 Lambda 表达式的用法及其背后的函数式接口原理,以 `Foo` 接口为例,展示了如何通过简洁的 Lambda 表达式替代传统匿名类实现。文章从 Lambda 基本语法、函数式接口定义到实际应用层层递进,并探讨默认方法与静态方法的扩展性,最后总结常见误区与关键点,助你高效优化代码!
29 0
|
9天前
|
Java
java中一个接口A,以及一个实现它的类B,一个A类型的引用对象作为一个方法的参数,这个参数的类型可以是B的类型吗?
本文探讨了面向对象编程中接口与实现类的关系,以及里氏替换原则(LSP)的应用。通过示例代码展示了如何利用多态性将实现类的对象传递给接口类型的参数,满足LSP的要求。LSP确保子类能无缝替换父类或接口,不改变程序行为。接口定义了行为规范,实现类遵循此规范,从而保证了多态性和代码的可维护性。总结来说,接口与实现类的关系天然符合LSP,体现了多态性的核心思想。
19 0
|
Java
Java接口和抽象类
Java接口和抽象类
122 0
|
8月前
|
设计模式 Java
【惊天揭秘】Java编程绝技大曝光:接口、抽象类、静态类与非静态类的神秘面纱终被揭开!
【8月更文挑战第22天】Java支持面向对象编程,通过接口、抽象类、静态类(如枚举与工具类)及普通类实现设计原则。接口定义行为规范,允许多重继承;抽象类含未实现的抽象方法,需子类完成;静态类常为工具类,提供静态方法;普通类则实例化对象。恰当运用这些结构能提升程序质量。
70 2
|
11月前
|
设计模式 搜索推荐 Java
java接口和抽象类的区别,以及使用选择
java接口和抽象类的区别,以及使用选择
103 0

热门文章

最新文章