国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Spring AI 入門與DeepSeek API融合實戰

人工智能
Spring AI 使用Deepseek大模型對話的簡單示例就完成了,如果使用了Ollama私有化部署了大模型也可以使用上面的流程,或者是引入Ollama的依賴。

Spring AI 作為統一的大模型接入框架,其Model API為開發者提供了多模型適配能力。無論是OpenAI、DeepSeek、Moonshot AI(月之暗面)、Perplexity AI、Google VertexAI Gemini 等若干主流云服務商模型,還是支持Ollama私有化部署的本地模型,均可通過標準化接口實現無縫集成。

本文將介紹基于Spring AI框架,分別調用云端DeepSeek API的完整對話實現方式,話不多說,搞起來。

引入依賴

第一步,先引入依賴:Springboot 3.4.5 、 Spring AI 1.0.0-M7 。因為deepseek支持open ai的標準接口,所以這里引入 open ai的依賴即可。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.5</version>
        <relativePath/>
    </parent>
    <groupId>site.qxkd</groupId>
    <artifactId>chat-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>chat-client</name>
    <description>chat-client</description>
    <properties>
        <java.version>17</java.version>
        <spring-ai.version>1.0.0-M7</spring-ai.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-openai</artifactId>
        </dependency>

    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

配置文件

這只是列舉一些簡單配置文件,實際上配置還是挺多的,感興趣可以去官網看一下

spring.application.name=chat-client

# 大模型相關依賴
spring.ai.openai.base-url=https://api.siliconflow.cn
spring.ai.openai.api-key=sk-你的秘鑰
#spring.ai.openai.chat.options.model=deepseek-ai/DeepSeek-V3
spring.ai.openai.chat.options.model=deepseek-ai/DeepSeek-R1

測試

上面一切準備好之后,寫兩個接口測試一下,一個是一次性輸出結果的接口,一個是流式輸出的接口。

RestController
@RequestMapping("/deepseek")
publicclass DeepseekController {

    @Autowired
    private OpenAiChatModel chatModel;

    @GetMapping("/ai/generate")
    public Map<String , String> generate(@RequestParam(value = "message") String message) {
        String content = chatModel.call(message);
        return Map.of("generation", content);
    }

    /**
     * 生成流式結果
     * @param message
     * @return
     */
    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        returnthis.chatModel.stream(prompt);
    }
}

先測試一次性輸出結果的接口,瀏覽器訪問http://localhost:8080/deepseek/ai/generate?message=你是誰 ,會輸出如下結果:

圖片圖片

下面再來測試一下流式輸出到接口,為了實現流式輸出的效果,我讓deepseek給我寫了一個網頁,簡單修改了一下,達到了如下圖中的效果。

圖片圖片

流式輸出返回的一段JSON是這樣的。

{
 "result": {
"metadata": {
   "finishReason": "",
   "contentFilters": [],
   "empty": true
  },
"output": {
   "messageType": "ASSISTANT",
   "metadata": {
    "refusal": "",
    "finishReason": "",
    "index": 0,
    "id": "019684b265266dbe29ab56f75eaa75cd",
    "role": "ASSISTANT",
    "messageType": "ASSISTANT"
   },
   "toolCalls": [],
   "media": [],
   "text": "DeepSeek)公司開發的智能助手"
  }
 },
"metadata": {
"id": "019684b265266dbe29ab56f75eaa75cd",
"model": "deepseek-ai/DeepSeek-R1",
"rateLimit": {
   "requestsRemaining": 0,
   "requestsLimit": 0,
   "tokensRemaining": 0,
   "tokensReset": "PT0S",
   "requestsReset": "PT0S",
   "tokensLimit": 0
  },
"usage": {
   "promptTokens": 6,
   "completionTokens": 64,
   "totalTokens": 70,
   "nativeUsage": {
    "completion_tokens": 64,
    "prompt_tokens": 6,
    "total_tokens": 70,
    "completion_tokens_details": {
     "reasoning_tokens": 38
    }
   }
  },
"promptMetadata": [],
"empty": false
 },
"results": [{
"metadata": {
   "finishReason": "",
   "contentFilters": [],
   "empty": true
  },
"output": {
   "messageType": "ASSISTANT",
   "metadata": {
    "refusal": "",
    "finishReason": "",
    "index": 0,
    "id": "019684b265266dbe29ab56f75eaa75cd",
    "role": "ASSISTANT",
    "messageType": "ASSISTANT"
   },
   "toolCalls": [],
   "media": [],
   "text": "DeepSeek)公司開發的智能助手"
  }
 }]
}

至此,一個簡單的Spring AI對話就完成了。細心的同學可能會發現,這也就只能單輪對話,沒什么用呀,要連續對話才行。別急,下面就演示一下連續對話的demo。

連續對話

想要連續對話需要3個相關接口和API:

  • ChatMemory : 大模型(LLM)是無狀態的,這意味著它們不會保留有關以前交互的信息。在多個交互中維護上下文或狀態時,這就變成了一種限制。為了解決這個問題,Spring AI 提供了一個存儲和檢索與大模型多次對話信息的接口 ChatMemory
  • ChatClient : ChatClient提供了一個流式API(fluent API),用于與AI模型進行通信,它同時支持同步和流式兩種編程模型。該流式API提供了一系列方法,用于逐步構建**提示詞(Prompt)**的各個組成部分,這些提示詞將作為輸入傳遞給AI模型。
  • Advisors APIAdvisors API為開發者提供了一種靈活而強大的方式,用于在 Spring 應用程序中攔截、修改和增強 AI 驅動的交互。它的核心優勢包括:封裝常見的生成式 AI 模式,轉換發送給大語言模型(LLMs)的數據及處理其返回結果,以及實現跨不同模型和用例的可移植性。

話不多說,上代碼。

  • 先注入 ChatClient 和 ChatMemory 對象 本文使用InMemoryChatMemory將對話記錄存放在內存中,如果想實現將對話記錄存放在數據庫可以考慮實現ChatMemory
@Configuration
publicclass ChatConfig {

    @Bean
    public ChatClient chatClient(OpenAiChatModel openAiChatModel) {
        ChatClient chatClient = ChatClient.builder(openAiChatModel)
                .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory()))  //  設置默認的MemoryAdvisor ,將對話記錄存放在內存中
                .build();
        return chatClient;
    }


    @Bean
    public ChatMemory chatMemory(){
        returnnew InMemoryChatMemory();
    }
}
  • 測試 測試使用流式輸出,調用接口時需要傳一個chatId ,這樣才能根據chatId到內存中查詢相關對話信息。
@Autowired
private ChatClient chatClient;

@GetMapping("/ai/chatContext")
public Flux<ChatResponse> chatContext(@RequestParam(value = "message") String message , String chatId) {

    Flux<ChatResponse> chatResponseFlux = chatClient.prompt()
            //連續對話的key
            .advisors(advisor -> advisor.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
                    .param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
            .user(message).stream().chatResponse();

    return chatResponseFlux;
}

修改一下之前的聊天界面代碼進行測試:

圖片圖片

至此,Spring AI 使用Deepseek大模型對話的簡單示例就完成了,如果使用了Ollama私有化部署了大模型也可以使用上面的流程,或者是引入Ollama的依賴。

責任編輯:武曉燕 來源: 索碼理
相關推薦

2025-01-06 09:43:36

SpringAI?模型

2025-03-27 09:34:42

2025-11-03 07:47:12

2025-05-16 07:50:58

Spring AIMCPSSE

2025-02-19 12:00:00

SpringBootDeepSeekAI

2025-03-06 07:48:02

2021-02-09 20:45:16

AIOOPO

2021-11-04 17:23:25

AI人工智能IOT

2021-10-14 13:57:58

物聯網人工智能數據

2024-05-31 08:12:19

2025-04-16 01:00:00

API工具AI

2024-03-01 14:34:19

5G人工智能AI

2025-02-10 00:00:00

DeepSeek技術人工智能

2025-01-02 14:10:41

2025-02-17 00:25:00

SpringAIOpenAI

2025-02-19 16:00:00

SpringBootDeepSeek智能

2025-02-24 10:07:10

2025-02-12 16:13:34

點贊
收藏

51CTO技術棧公眾號

亚洲www在线| 四虎影院在线播放| 成人免费直播live| www.亚洲成人| 欧美韩国一区二区| 国产蜜臀av在线一区二区三区| 欧美无砖砖区免费| 99久久免费精品| 电影k8一区二区三区久久| 毛葺葺老太做受视频| 国产乱码精品一区二区三区卡| 国产精品成久久久久三级| 国产精品普通话| 欧美国产一区二区在线| 日韩av电影在线观看| 路边理发店露脸熟妇泻火| 青青青在线播放| 欧美伦理影视网| 欧美一区二区视频| 精品国产免费人成网站| 国产精品无码久久久久| 成人97精品毛片免费看| 自拍偷拍欧美激情| 制服丝袜亚洲色图| 视频一区二区三区国产| 久久se这里有精品| 久久香蕉综合色| 中文字幕视频精品一区二区三区| 欧美精品在欧美一区二区少妇| 热99在线观看| 成人免费黄色大片| 日韩精品久久久毛片一区二区| 欧美一区1区三区3区公司| 亚洲精品网址| 欧美国产视频一区| baoyu777.永久免费视频| 青青草国产免费一区二区下载| 国产综合在线观看视频| 亚洲第一精品久久忘忧草社区| 亚洲区中文字幕| 97色在线视频| 成年人黄视频网站| 波多一区二区| 国产精品大片免费观看| 欧美视频在线免费| 久久久久久久久久久久av| 三年中文高清在线观看第6集 | 欧美激情免费看| 欧美一区少妇| 1024国产在线| 国色天香一区二区| 午夜精品福利在线| 国产日本欧美在线观看| 狠狠干五月天| 理论片午夜视频在线观看| 在线观看日韩av电影| 91精品国产美女浴室洗澡无遮挡| 国产成人一区二区三区电影| 热国产热中文视频二区| 日韩系列在线| 欧美精品一二三区| 北条麻妃在线视频观看| 色乱码一区二区三区网站| 色老综合老女人久久久| 国产高清在线一区| a视频在线免费看| 欧美日韩美少妇| 欧美色资源站| 亚洲天堂免费在线| 日本天堂免费a| **爰片久久毛片| 在线精品国精品国产尤物884a| 免费看成人片| 91国内在线| 97久久人人超碰| 成人激情视频在线观看| 你懂的视频在线| 国产黄人亚洲片| 91精品国产99久久久久久| 激情综合自拍| 日日噜噜噜夜夜爽亚洲精品| 精品一区三区| 96av麻豆蜜桃一区二区| 青青草一区二区| 久久一二三四| 中文字幕在线中文| 久久亚洲精精品中文字幕早川悠里| 亚洲美女电影在线| 欧美一区二区女人| 中文一区一区三区免费| 一区二区三区高清| 92久久精品| 欧美亚洲成人网| 毛片av一区二区| 18av.com视频| 日韩美女在线视频| 中文字幕一区二区三区中文字幕| 亚洲在线观看视频| 久久精品亚洲乱码伦伦中文| 网友自拍视频在线| 欧美夫妻性视频| 久久成人av少妇免费| 性视频在线播放| 欧美xxxxx牲另类人与| 三级电影一区| 亚洲精品蜜桃久久久久久| 亚洲精品免费看| 2020国产精品小视频| 岛国视频一区| 久久色.com| 神马久久午夜| 国产精品亚洲美女av网站| 激情综合色综合久久| 九色视频在线播放| 欧美成人免费大片| 欧美三级乱码| 九色在线网站| 久久视频中文字幕| 蜜桃视频一区二区三区在线观看| 精品亚洲综合| 97成人精品视频在线观看| 国产一区二区日韩精品| 男人天堂亚洲天堂 | 在线天堂日本| 日韩视频一区在线| 久久福利资源站| 999国产在线视频| 999在线免费观看视频| 中文字幕视频一区二区三区久| 欧美日韩免费看片| 国产对白在线播放| 日韩精品自拍偷拍| 欧美在线免费| 1769在线观看| 成人网在线免费观看| 久久久久久电影| 国精产品一区一区三区四川| 亚洲精品国产精品国自产| 欧美不卡一区二区三区| 国产精品v一区二区三区| 二区中文字幕| 国产主播欧美精品| 亚洲一本大道在线| 蜜桃精品wwwmitaows| 神马电影在线观看| 国产精品精品国产| 日韩综合av| 国产精品亚洲a| 国产一区av在线| 久久99热狠狠色一区二区| 成人免费网站www网站高清| 一本久道久久综合狠狠爱亚洲精品| 日本久久一区二区三区| 国产美女一区| av香蕉成人| 98视频精品全部国产| 99草草国产熟女视频在线| 欧美精品亚州精品| 日韩欧美aaa| 日韩国产欧美三级| 最近免费中文字幕中文高清百度| 极品白浆推特女神在线观看| 黄在线观看免费网站ktv| 在线看黄的网站| 亚洲成人动漫在线| 欧美成人精品xxx| 精品日韩在线一区| 国产精品99久久久久久人 | 成人毛片免费看| 黄色网址免费在线观看| 男人用嘴添女人下身免费视频| 久热精品视频在线观看一区| 日韩一区二区在线看| 亚洲v中文字幕| 国产亚洲制服色| 午夜亚洲性色福利视频| 亚洲黄页在线观看| 蜜桃av在线播放| 日韩伦理在线观看| 欧洲成人一区| 日韩精品影片| 国产原创精品视频| 高清全集视频免费在线| 美女视频免费观看网站在线| 欧美午夜性生活| 嫩草影院国产精品| 欧美一级免费播放| 国产主播喷水一区二区| 91精品久久久久久久久| 国产99久久久欧美黑人| 国产精品一区二区久久久| 91麻豆精品国产91久久久资源速度| 国产精品国产三级国产aⅴ无密码| 国产91丝袜在线观看| 国产经典欧美精品| 欧美久久高跟鞋激| 欧美一区二区三区婷婷月色| 亚洲欧美视频在线| 久久久久99| 高清久久久久久|