精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JDK1.8也可以對接DeepSeek-R1,你知道嗎?

人工智能
AI4J 是一款 Java SDK,用于快速接入 AI 大模型應用。它能整合多平臺大模型,如 OpenAI、Ollama、智譜 Zhipu(ChatGLM)、深度求索 DeepSeek、月之暗面 Moonshot(Kimi)、騰訊混元 Hunyuan、零一萬物(01)等,為用戶提供快速整合 AI 的能力。

什么是ai4j

首先,我們先了解一下什么是ai4j。

AI4J 是一款 Java SDK,用于快速接入 AI 大模型應用。它能整合多平臺大模型,如 OpenAI、Ollama、智譜 Zhipu(ChatGLM)、深度求索 DeepSeek、月之暗面 Moonshot(Kimi)、騰訊混元 Hunyuan、零一萬物(01)等,為用戶提供快速整合 AI 的能力。

其特點包括提供統(tǒng)一的輸入輸出(對齊 OpenAI)以消除差異化,優(yōu)化函數調用(Tool Call)和 RAG 調用,支持向量數據庫(如 Pinecone),并且支持 JDK1.8,能滿足很多仍在使用 JDK8 版本的應用需求。

敲重點:JDK1.8

看過上一篇使用SpringAI的都知道,SpringAI對JDK的要求非常高,那次了不起使用了JDK 17,但是Java發(fā)展了這么多年,很多項目都是基于JDK1.8來構建的,你讓他們現在去升級JDK,可能AI還沒接入,項目就先起不來了。

也因此誕生了ai4j,他支持 JDK1.8,能滿足很多仍在使用 JDK8 版本的應用需求,并且向量數據庫還能幫助很多項目做知識庫搜索。

進入正題

我們使用目前最新版本的ai4j。

<dependency>
      <groupId>io.github.lnyo-cly</groupId>
      <artifactId>ai4j</artifactId>
      <version>0.8.1</version>
  </dependency>

現在網上很多版本的ai4j都不支持ollama調用,所以直接使用最新版本的話,就沒有問題了。

我們依舊是寫兩個接口,一個直接返回,一個流式返回。

IChatService chatService = aiService.getChatService(PlatformType.OLLAMA);

通過getChatService的方式,選擇是用本地ollama還是其他平臺。

它一共支持以下平臺。

@AllArgsConstructor
@Getter
public enum PlatformType {
    OPENAI("openai"),
    ZHIPU("zhipu"),
    DEEPSEEK("deepseek"),
    MOONSHOT("moonshot"),
    HUNYUAN("hunyuan"),
    LINGYI("lingyi"),
    OLLAMA("ollama"),
    MINIMAX("minimax"),
    BAICHUAN("baichuan"),
    ;
   ....
}

由于我修改過ollama的端口,所以我沒辦法使用默認的端口,需要單獨設置調用的url。

spring.application.name=demo
server.port=8080
ai.ollama.api-host=http://localhost:8000

創(chuàng)建請求體:

// 創(chuàng)建請求參數
  ChatCompletion chatCompletion = ChatCompletion.builder()
         .model("deepseek-r1:7b")
         .message(ChatMessage.withUser(question))
         .build();

直接返回就調用chatCompletion方法:

// 發(fā)送chat請求
ChatCompletionResponse chatCompletionResponse = chatService.chatCompletion(chatCompletion);

流式放回就調用chatCompletionStream方法:

// 發(fā)送chat請求
chatService.chatCompletionStream(chatCompletion, sseListener);

流式的話他是以SSE端點的形式去獲取數據,所以需要你實現一個SSE監(jiān)聽器去打印和發(fā)送數據給前端。

以下是完整的后端接口:

@RestController
@CrossOrigin
public class OllamChatController {
    // 注入Ai服務
    @Autowired
    private AiService aiService;

    @GetMapping("/chat")
    public String getChatMessage(@RequestParam String question) throws Exception {
        // 獲取OLLAMA的聊天服務
        IChatService chatService = aiService.getChatService(PlatformType.OLLAMA);
        // 創(chuàng)建請求參數
        ChatCompletion chatCompletion = ChatCompletion.builder()
               .model("deepseek-r1:7b")
               .message(ChatMessage.withUser(question))
               .build();
        System.out.println(chatCompletion);
        // 發(fā)送chat請求
        ChatCompletionResponse chatCompletionResponse = chatService.chatCompletion(chatCompletion);
        // 獲取聊天內容和token消耗
        String content = chatCompletionResponse.getChoices().get(0).getMessage().getContent();
        long totalTokens = chatCompletionResponse.getUsage().getTotalTokens();
        System.out.println("總token消耗: " + totalTokens);
        return content;
    }

    @GetMapping(path = "/chat-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<ServerSentEvent<String>> chatStream(@RequestParam String question) {
        Logger logger = LoggerFactory.getLogger(getClass());
        return Flux.create(emitter -> {
            try {
                logger.info("開始進行Chat對話: {}", question);
                // 獲取chat服務實例
                IChatService chatService = aiService.getChatService(PlatformType.OLLAMA);
                logger.info("成功創(chuàng)建服務實例");
                // 構造請求參數
                ChatCompletion chatCompletion = ChatCompletion.builder()
                        .model("deepseek-r1:7b")
                        .messages(Arrays.asList(ChatMessage.withUser(question)))
                        .functions()
                        .build();
                logger.info("成功構建流式請求體");
                // 構造監(jiān)聽器
                SseListener sseListener = new SseListener() {
                    @Override
                    protected void send() {
                        try {
                            // 將消息發(fā)送到前端
                            String data = this.getCurrStr();
                            if (data != null && !data.isEmpty()) {
                                emitter.next(ServerSentEvent.<String>builder()
                                        .data(data)
                                        .build());
                            }
                        } catch (Exception e) {
                            logger.error("SSE端點報錯", e);
                            emitter.error(e);
                        }
                    }
                };
                // 顯示函數參數,默認不顯示
                sseListener.setShowToolArgs(true);
                // 發(fā)送SSE請求
                chatService.chatCompletionStream(chatCompletion, sseListener);
                logger.info("成功請求SSE端點");
            } catch (Exception e) {
                logger.error("流式輸出報錯", e);
                emitter.error(e);
            }
        });
    }


}

流式的話,我們再寫個前端來看看測試效果。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Chat Stream Frontend</title>
</head>

<body>
<input type="text" id="questionInput" placeholder="請輸入問題">
<button id="sendButton">發(fā)送</button>
<div id="responseContainer"></div>

<script>
    const questionInput = document.getElementById('questionInput');
    const sendButton = document.getElementById('sendButton');
    const responseContainer = document.getElementById('responseContainer');

    sendButton.addEventListener('click', () => {
        const question = questionInput.value;
        if (question.trim() === '') {
            alert('請輸入問題');
            return;
        }

        // 創(chuàng)建 EventSource 實例,連接到后端的 SSE 接口
        const eventSource = new EventSource(`http://localhost:8080/chat-stream?question=${encodeURIComponent(question)}`);

        // 監(jiān)聽 message 事件,當接收到服務器發(fā)送的消息時觸發(fā)
        eventSource.onmessage = (event) => {
            const data = event.data;
            // 將接收到的數據追加到響應容器中
            responseContainer.textContent += data;
        };

        // 監(jiān)聽 error 事件,當連接出現錯誤時觸發(fā)
        eventSource.onerror = (error) => {
            console.error('EventSource failed:', error);
            // 關閉連接
            eventSource.close();
        };
    });
</script>
</body>

</html>

運行服務,打開html,在輸入框輸入一個問題,點擊按鈕發(fā)送,在F12的接口請求里,你會在Response里看到服務不斷的推送文字給你。

圖片圖片

責任編輯:武曉燕 來源: Java面試教程
相關推薦

2025-02-19 08:00:00

2022-05-09 07:49:47

PulsarJava問題排查

2024-01-09 07:29:05

Argo代碼庫應用程序

2024-06-14 08:36:57

2022-12-12 08:17:29

2025-02-19 08:33:18

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2023-09-04 07:54:06

2023-04-26 10:21:04

2023-12-12 08:41:01

2024-04-30 09:02:48

2023-12-20 08:23:53

NIO組件非阻塞

2022-09-26 07:32:24

開發(fā)接口編程

2025-02-18 08:11:17

2022-11-04 14:16:05

2024-07-08 00:00:01

多線程ThreadC#
點贊
收藏

51CTO技術棧公眾號

欧美成人一区二区在线| 久久久在线视频| 超碰在线资源站| 欧美videossex| 99久久精品99国产精品| 国产精品福利无圣光在线一区| 久久久国产一级片| 亚洲一区二区三区中文字幕在线观看| 亚洲国产精品视频| 日韩亚洲不卡在线| 黄色aaa大片| 日韩国产精品久久久| 欧美成人中文字幕在线| 少妇大叫太粗太大爽一区二区| 国产91精品在线| 亚洲国产日韩精品| 亚洲一区美女| 少妇性bbb搡bbb爽爽爽欧美| 激情综合色播五月| 国产91在线高潮白浆在线观看| 日韩欧美综合视频| 国产一区二区观看| 欧美不卡一二三| 艹b视频在线观看| 波多野一区二区| 亚洲视频图片小说| 四虎影视永久免费在线观看一区二区三区| 国产三级午夜理伦三级| 三级欧美韩日大片在线看| 精品中文字幕在线2019| 国产农村妇女精品一区| 天海翼精品一区二区三区| 日韩一区二区精品| 久久国产激情视频| 国产精品极品美女在线观看| 亚洲国产一区二区三区青草影视| 亚洲视频欧美在线| 国产福利第一视频在线播放| 97久久久精品综合88久久| 51国偷自产一区二区三区的来源| 亚洲高清在线看| 99精品视频免费观看| 欧美激情视频播放| 日韩黄色免费观看| 在线电影一区二区| xxx欧美精品| 后入内射无码人妻一区| 国产精品三级| 亚洲另类激情图| 菠萝菠萝蜜网站| 老司机aⅴ在线精品导航| 欧美成人欧美edvon| 能看毛片的网站| 国产精品美女久久久久| 欧美精品一级二级三级| 一本色道久久亚洲综合精品蜜桃| 亚洲不卡系列| 欧美性淫爽ww久久久久无| 亚洲精品中文字幕无码蜜桃| 大胆人体一区二区| 日韩欧美在线第一页| av观看免费在线| 欧美日韩美女| 欧美影院一区二区| 亚洲免费av一区| 高清一区二区三区av| 91精品国产免费久久综合| 日韩不卡的av| gogo久久日韩裸体艺术| 亚洲国产精品电影| 中文字幕在线看高清电影| 欧洲杯半决赛直播| 久久亚洲精品一区二区| 久久久久久久久97| 亚洲一区二区伦理| 国产精品精品国产| 国产免费不卡视频| 岛国精品在线观看| 免费亚洲精品视频| 在线看黄色av| 一区二区三区国产豹纹内裤在线| 成人在线播放网址| 日韩成人动漫| 欧美日本韩国一区二区三区视频| 日本r级电影在线观看| 风间由美性色一区二区三区四区| 日韩麻豆第一页| 国产欧美小视频| 国产精品a级| 2019中文字幕免费视频| 亚洲手机在线观看| 成人爱爱电影网址| 亚洲精品视频一二三| 青青在线视频| 91国偷自产一区二区三区观看| 岛国av免费在线| 国产一区福利| xxx成人少妇69| 天天综合天天干| 精品一区二区三区久久| 黄色小网站91| 大片免费在线看视频| 精品久久久久国产| 99九九99九九九99九他书对| 午夜精品福利影院| 久久91精品国产91久久跳| 日本天堂网在线| 国产精品自拍毛片| 日本高清不卡三区| 丁香花在线观看完整版电影| 欧美色图一区二区三区| 国产网站无遮挡| 欧美精品黄色| 国产日韩欧美黄色| 男女视频在线观看| 一区二区在线电影| 亚洲高清免费在线观看| 婷婷精品在线| 欧美激情一区二区三区高清视频| 亚洲国产av一区二区三区| 国产**成人网毛片九色| 在线视频不卡一区二区| 欧美电影免费观看网站| 亚洲国产成人精品一区二区 | 国产二级片在线观看| 玖玖精品一区| 日韩中文字幕国产| 无码人妻aⅴ一区二区三区有奶水| 粉嫩13p一区二区三区| 制服诱惑一区| 黄色成人在线视频| 亚洲欧美精品suv| 欧美三级一区二区三区| 高清久久久久久| 佐佐木明希av| 日韩一区二区三免费高清在线观看| 亚洲欧美另类中文字幕| 日韩精品手机在线| 成人精品gif动图一区| 成人国产在线看| 国产精品国产三级在线观看| 久久影视电视剧免费网站| 一本色道久久综合无码人妻| 亚洲国产精华液网站w| 老司机午夜av| 免费久久久久久久久| 欧美在线www| 香蕉人妻av久久久久天天| 午夜亚洲国产au精品一区二区| 国产xxx在线观看| 欧美视频导航| 国产成人亚洲欧美| tube8在线hd| 亚洲大胆人体视频| 欧美bbbbbbbbbbbb精品| 91视频在线看| 国产成人无码一二三区视频| 自拍自偷一区二区三区| 国产a级全部精品| av中文资源在线| 欧美日韩免费视频| 亚洲综合视频网站| 国产成人在线视频网站| 日韩xxxx视频| 神马午夜久久| 国产精品久久久久久久7电影| 成人一区二区不卡免费| 欧美日韩精品一区二区三区蜜桃 | 久久久久久久久久av| 天天摸天天碰天天爽天天弄| 好吊成人免视频| 国产真人做爰视频免费| 久久精品国产一区二区三区免费看| 一本久道久久综合狠狠爱亚洲精品| 四虎精品一区二区免费| 欧美裸身视频免费观看| 少妇人妻偷人精品一区二区| 色婷婷av一区二区三区之一色屋| 神马久久久久久久久久久| 国产在线精品免费| 欧美成人免费在线观看视频| 国产亚洲一卡2卡3卡4卡新区| 国产欧洲精品视频| 色www永久免费视频首页在线| 日韩h在线观看| 中文字幕免费视频观看| 一区二区三区中文在线观看| 免费成人深夜夜行p站| 久久er精品视频| 久久久久久久久久久99| 色综合色综合| 国产伦精品一区二区三毛| 色综合天天色| 欧美激情网友自拍| 91在线视频| 亚洲国产三级网| 中文字幕在线网址| 午夜精品aaa| 中国特黄一级片| 不卡一区在线观看| 日韩高清第一页| 国产欧美91| av不卡在线免费观看| 天堂综合网久久| 亚洲在线观看视频网站| 网友自拍亚洲| 欧美精品videosex性欧美| 春暖花开成人亚洲区| 亚洲第一网中文字幕| 一级黄色免费看| 欧美网站在线观看| 欧美日韩激情在线观看| 国产精品久久久久影院色老大 | 丝袜亚洲另类欧美重口| 午夜视频1000| 日韩情涩欧美日韩视频| 在线观看免费中文字幕| 欧美视频在线观看 亚洲欧| 久久成人在线观看| 中文字幕一区在线| 中文字幕在线1| 菠萝蜜视频在线观看一区| 搡的我好爽在线观看免费视频| 日韩电影在线免费看| 日本成年人网址| 激情综合久久| 久久观看最新视频| 国产精品99一区二区三| 日韩精品久久一区| 免费一区二区| 久久精品国产第一区二区三区最新章节| www.久久爱.com| 国产欧美 在线欧美| 成人免费无遮挡| 2019中文在线观看| 亚洲精品中文字幕| 2019中文字幕免费视频| 偷拍自拍在线看| 2018中文字幕一区二区三区| 久久不射影院| 欧美激情va永久在线播放| 在线观看小视频| 不卡av日日日| 国产二区三区在线| 欧美超级乱淫片喷水| 国产网友自拍视频导航网站在线观看| 最近中文字幕2019免费| 91伦理视频在线观看| 日日骚av一区| 91精品国产高清久久久久久| 成人无码精品1区2区3区免费看| 久久久99精品免费观看| 网站免费在线观看| 99久久久精品免费观看国产蜜| 日韩高清一二三区| 岛国一区二区在线观看| 精品少妇人妻av一区二区三区| 成人听书哪个软件好| 中文在线观看免费视频| 99精品久久免费看蜜臀剧情介绍| 在线观看国产网站| 久久久精品免费观看| 精品欧美一区二区久久久| 欧美国产日本视频| 午夜精品一区二区三级视频| 一区二区三区自拍| 日韩久久精品视频| 色哟哟精品一区| 亚洲天堂avav| 日韩精品一区在线观看| 三级小视频在线观看| 亚洲欧美日韩视频一区| 中文字幕在线播放| 欧美巨乳在线观看| 涩涩涩视频在线观看| 国产高清在线不卡| 99久久这里有精品| 国产精品美女黄网| 国产成人精品三级高清久久91| 亚洲黄色成人久久久| 欧美精品福利| 哪个网站能看毛片| 经典一区二区三区| 中文在线观看免费视频| 中文字幕不卡在线观看| 国语对白在线播放| 欧美日韩在线另类| 97人妻精品一区二区三区动漫 | av观看免费在线| 日韩av一二三| 亚洲黄色小说在线观看| 国产午夜亚洲精品午夜鲁丝片| 久久精品一区二区三区四区五区| 亚洲国产精品一区二区www| 欧美男人天堂网| 精品国产精品一区二区夜夜嗨| 久久av少妇| 久久国产精品影视| 欧美freesex| 99久久无色码| 欧美一二区在线观看| 97在线国产视频| 男女视频一区二区| 最近中文字幕无免费| 中文字幕一区二区三区不卡在线 | 中文在线日韩| wwwxxx黄色片| 国产成人免费视频| 免费成人美女女在线观看| 欧美性极品xxxx做受| 精品国产av一区二区| 亚洲一级黄色av| √最新版天堂资源网在线| 91九色蝌蚪国产| 国产欧美日韩影院| 国产一区二区在线视频播放| 国产精品一区二区无线| 欧美精品日韩在线| 欧美视频在线视频| 日韩一区免费视频| 久久99亚洲热视| 伊人久久大香伊蕉在人线观看热v| 久久精品成人一区二区三区蜜臀 | 一级黄色片免费看| 亚洲片av在线| 小早川怜子影音先锋在线观看| 成人自拍爱视频| 亚洲精品网址| 亚洲a级黄色片| 中文字幕乱码亚洲精品一区 | 老司机在线视频二区| 国产成人精品久久| 亚欧日韩另类中文欧美| 日韩激情视频一区二区| 国产自产视频一区二区三区| 久久久精品成人| 在线观看日韩av先锋影音电影院| 午夜激情小视频| 2025国产精品视频| 小说区图片区色综合区| 九九九九免费视频| 26uuu国产在线精品一区二区| 国产精品视频久久久久久久| 日韩高清中文字幕| 筱崎爱全乳无删减在线观看| 欧美激情专区| 日韩精品一二三四| 精品无码国产污污污免费网站| 一本久久a久久精品亚洲| 日本天堂在线| 欧美亚洲成人精品| 国产不卡一二三区| 国产av人人夜夜澡人人爽| 国产视频一区在线播放| 国产女主播喷水视频在线观看| 亚洲欧美日韩直播| 日韩色淫视频| 一区二区在线观看网站| 激情综合网av| 国产一级片免费观看| 亚洲国产精品电影在线观看| 色戒汤唯在线| 日韩国产高清一区| 麻豆成人av在线| 538精品在线视频| 欧美videos中文字幕| 免费毛片b在线观看| 日本中文不卡| 狠狠色丁香九九婷婷综合五月| 国产大片免费看| 亚洲第一精品久久忘忧草社区| 中文字幕21页在线看| 亚洲精品乱码久久久久久蜜桃91| 精品一区二区三区在线观看| 久久久久无码国产精品| 精品亚洲一区二区三区在线观看| 亚洲成av在线| 男人的天堂视频在线| 99久久精品国产毛片| 中国a一片一级一片| 欧美日韩成人在线播放| 亚洲男人都懂第一日本| 亚洲怡红院在线| 亚洲成人免费视频| 国产精品一区二区三区四区色| 91久久国产精品91久久性色| 99综合在线| 日韩三级久久久| 亚洲精品一区二区三区在线观看| 欧美xx视频| 日本精品免费视频| 91亚洲精品久久久蜜桃| 伊人网视频在线| 午夜精品久久久99热福利| 成人毛片在线| 日本一区二区在线观看视频| 欧美在线啊v一区| 成人一级福利| 亚洲精品丝袜日韩| 一区二区三区在线观看免费视频|