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

又一個項目完結(jié):基于SpringAI Alibaba開發(fā)大模型智能體,支持基礎(chǔ)版和多模式

人工智能
今天,帶著大家使用SpringAI ?Alibaba框架,從零開始構(gòu)建一個功能完善的智能對話助手。無論你是剛?cè)腴T的新手還是有一定經(jīng)驗的開發(fā)者,都能通過本教程快速掌握大模型應(yīng)用開發(fā)的核心技能。

在人工智能技術(shù)飛速發(fā)展的今天,大模型應(yīng)用開發(fā)已不再是高不可攀的技術(shù)領(lǐng)域。今天,帶著大家使用SpringAI  Alibaba框架,從零開始構(gòu)建一個功能完善的智能對話助手。無論你是剛?cè)腴T的新手還是有一定經(jīng)驗的開發(fā)者,都能通過本教程快速掌握大模型應(yīng)用開發(fā)的核心技能。

一、項目概述

隨著人工智能技術(shù)的發(fā)展,智能對話系統(tǒng)在各個行業(yè)中的應(yīng)用越來越廣泛。本項目旨在基于SpringAI Alibaba快速構(gòu)建一個基于大模型的智能對話助手,通過提供多種工作模式,滿足用戶在不同場景下的需求,例如通俗解釋、要點總結(jié)、風(fēng)險分析等。

我們將分兩個階段完成這個項目:

  1. 基礎(chǔ)版本:構(gòu)建具備專業(yè)領(lǐng)域知識的固定角色智能體
  2. 進(jìn)階版本:實現(xiàn)多模式切換的智能對話系統(tǒng)

接下來,我們一起完成這個SpringAI Alibaba項目。

二、項目初始化與環(huán)境搭建

2.1 創(chuàng)建SpringBoot項目

首先,我們需要搭建項目基礎(chǔ)框架。推薦使用IntelliJ IDEA進(jìn)行開發(fā):

  1. 打開IDEA,選擇 File → New → Project
  2. 在左側(cè)菜單中選擇 Spring Initializr
  3. 配置項目基本信息:
  • Project SDK:選擇JDK 17或更高版本
  • Groupio.binghe.framework(可根據(jù)實際情況修改)
  • Artifactspring-ai-alibaba-case-01
  • Package nameio.binghe.framework.ai
  1. 在Dependencies中添加:
  • Spring Web:用于構(gòu)建Web接口
  • Lombok:簡化代碼編寫

點擊創(chuàng)建,等待項目初始化完成。

2.2 配置項目依賴

打開 pom.xml 文件,添加SpringAI Alibaba相關(guān)依賴:

<?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>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/>
    </parent>
    
    <groupId>com.tech-explorer</groupId>
    <artifactId>ai-agent-demo</artifactId>
    <version>1.0.0</version>
    <name>AI Agent Demo</name>
    <description>基于SpringAI Alibaba的智能助手Demo</description>
    
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <!-- SpringAI Alibaba 依賴管理 -->
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-bom</artifactId>
                <version>1.0.0.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <!-- Spring Boot 基礎(chǔ)依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- SpringAI Alibaba 核心依賴 -->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        </dependency>
        
        <!-- 工具類依賴 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!-- 測試依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.3 應(yīng)用配置

在 src/main/resources 目錄下創(chuàng)建 application.yml 配置文件:

# 服務(wù)器配置
server:
port:18080
servlet:
    context-path:/api

# Spring AI Alibaba 配置
spring:
ai:
    dashscope:
      # 從環(huán)境變量或配置文件中讀取API密鑰,確保安全
      api-key:${DASHSCOPE_API_KEY:sk-your-api-key-here}
      chat:
        options:
          # 使用通義千問Plus模型,可根據(jù)需要調(diào)整
          model:qwen-plus
          # 溫度參數(shù),控制生成文本的隨機性(0-1)
          temperature:0.7

# 應(yīng)用信息
app:
name:AI智能助手
version:1.0.0
description:基于SpringAIAlibaba構(gòu)建的智能對話系統(tǒng)

2.4 項目結(jié)構(gòu)說明

創(chuàng)建完整的項目包結(jié)構(gòu):

src/main/java/io/binghe/framework/ai
├── AiAgentApplication.java          # 應(yīng)用啟動類
├── config/                          # 配置類目錄
├── controller/                      # 控制器目錄
├── service/                         # 服務(wù)層目錄
├── model/                           # 數(shù)據(jù)模型目錄
└── util/                            # 工具類目錄

三、構(gòu)建基礎(chǔ)版智能助手

3.1 創(chuàng)建應(yīng)用啟動類

源碼詳見:io.binghe.framework.ai.AiAgentApplication。

@SpringBootApplication
public class AiAgentApplication {
    public static void main(String[] args) {
        SpringApplication.run(AiAgentApplication.class, args);
    }
}

3.2 定義響應(yīng)數(shù)據(jù)模型

創(chuàng)建統(tǒng)一響應(yīng)格式。

源碼詳見:io.binghe.framework.ai.model.ApiResponse。

@Data
@NoArgsConstructor
@AllArgsConstructor
publicclass ApiResponse<T> {
    privateboolean success;
    private String message;
    private T data;
    private LocalDateTime timestamp;
    private String requestId;
    
    // 成功響應(yīng)靜態(tài)方法
    publicstatic <T> ApiResponse<T> success(T data) {
        returnnew ApiResponse<>(true, "操作成功", data, LocalDateTime.now(), generateRequestId());
    }
    
    publicstatic <T> ApiResponse<T> success(String message, T data) {
        returnnew ApiResponse<>(true, message, data, LocalDateTime.now(), generateRequestId());
    }
    
    // 失敗響應(yīng)靜態(tài)方法
    publicstatic <T> ApiResponse<T> error(String message) {
        returnnew ApiResponse<>(false, message, null, LocalDateTime.now(), generateRequestId());
    }
    
    private static String generateRequestId() {
        return java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 16);
    }
}

3.3 創(chuàng)建智能助手控制器

源碼詳見:io.binghe.framework.ai.controller.IntelligentAssistantController。

@Slf4j
@RestController
@RequestMapping("/v1/assistant")
@CrossOrigin(origins = "*")  // 允許跨域訪問,生產(chǎn)環(huán)境應(yīng)配置具體域名
publicclass IntelligentAssistantController {
    
    privatefinal ChatClient dashScopeChatClient;
    
    // 金融擔(dān)保專家角色設(shè)定
    privatestaticfinal String FINANCIAL_EXPERT_PROMPT = """
        你是一位專業(yè)的金融擔(dān)保業(yè)務(wù)專家,擁有10年以上的行業(yè)經(jīng)驗。
        請嚴(yán)格按照以下要求回答問題:
        
        1. 用通俗易懂的中文解釋專業(yè)術(shù)語
        2. 回答要結(jié)構(gòu)清晰,重點突出
        3. 涉及風(fēng)險的內(nèi)容要明確提示
        4. 對于不確定的信息要明確說明
        5. 保持專業(yè)、客觀、中立的態(tài)度
        
        如果用戶的問題超出金融擔(dān)保業(yè)務(wù)范圍,請先說明你的專業(yè)領(lǐng)域,
        然后盡可能提供有幫助的通用建議。
        """;
    
    public IntelligentAssistantController(ChatClient.Builder chatClientBuilder) {
        this.dashScopeChatClient = chatClientBuilder
            .defaultSystem(FINANCIAL_EXPERT_PROMPT)
            .build();
        log.info("智能助手控制器初始化完成");
    }
    
    @GetMapping("/chat")
    public ApiResponse<String> chat(@RequestParam("query") String query) {
        try {
            log.info("收到用戶查詢: {}", query);
            
            if (query == null || query.trim().isEmpty()) {
                return ApiResponse.error("查詢內(nèi)容不能為空");
            }
            
            if (query.length() > 1000) {
                return ApiResponse.error("查詢內(nèi)容過長,請控制在1000字符以內(nèi)");
            }
            
            String response = this.dashScopeChatClient
                .prompt()
                .user(query)
                .call()
                .content();
                
            log.info("AI回復(fù)生成成功,字符數(shù): {}", response.length());
            return ApiResponse.success("回復(fù)生成成功", response);
            
        } catch (Exception e) {
            log.error("處理用戶查詢時發(fā)生錯誤: {}", e.getMessage(), e);
            return ApiResponse.error("系統(tǒng)繁忙,請稍后重試");
        }
    }
    
    @GetMapping("/health")
    public ApiResponse<String> healthCheck() {
        return ApiResponse.success("智能助手服務(wù)運行正常");
    }
}

3.4 添加全局異常處理

源碼詳見:io.binghe.framework.ai.exception.GlobalExceptionHandler。

@Slf4j
@RestControllerAdvice
publicclass GlobalExceptionHandler {
    
    @ExceptionHandler(Exception.class)
    public ApiResponse<String> handleException(Exception e) {
        log.error("系統(tǒng)異常: {}", e.getMessage(), e);
        return ApiResponse.error("系統(tǒng)內(nèi)部錯誤,請稍后重試");
    }
    
    @ExceptionHandler(MissingServletRequestParameterException.class)
    public ApiResponse<String> handleMissingParams(MissingServletRequestParameterException e) {
        return ApiResponse.error("缺少必要參數(shù): " + e.getParameterName());
    }
    
    @ExceptionHandler(NoHandlerFoundException.class)
    public ApiResponse<String> handleNotFound(NoHandlerFoundException e) {
        return ApiResponse.error("請求接口不存在");
    }
}

3.5 測試基礎(chǔ)版本

啟動應(yīng)用,訪問以下接口進(jìn)行測試。

源碼詳見:src/main/resources/shell/test.sh。

# 健康檢查
curl "http://localhost:18080/api/v1/assistant/health"

# 基礎(chǔ)對話測試
curl "http://localhost:18080/api/v1/assistant/chat?query=請解釋什么是連帶責(zé)任保證"

四、構(gòu)建進(jìn)階版多模式智能助手

4.1 擴(kuò)展控制器支持多模式

源碼詳見:io.binghe.framework.ai.controller.MultiModeAssistantController。

@Slf4j
@RestController
@RequestMapping("/v1/assistant")
@CrossOrigin(origins = "*")
publicclass MultiModeAssistantController {

    privatefinal AIChatService aiChatService;

    public MultiModeAssistantController(AIChatService aiChatService) {
        this.aiChatService = aiChatService;
        log.info("多模式智能助手控制器初始化完成");
    }

    /**
     * 多模式聊天接口
     */
    @GetMapping("/chat")
    public ApiResponse<Map<String, Object>> chat(
            @RequestParam("query") String query,
            @RequestParam(value = "mode", defaultValue = "explain") String modeCode) {

        try {
            log.info("收到用戶查詢: {}, 模式: {}", query, modeCode);

            // 參數(shù)驗證
            if (query == null || query.trim().isEmpty()) {
                return ApiResponse.error("查詢內(nèi)容不能為空");
            }

            if (query.length() > 2000) {
                return ApiResponse.error("查詢內(nèi)容過長,請控制在2000字符以內(nèi)");
            }

            // 使用AIChatService處理請求
            Map<String, Object> responseData = aiChatService.processChatWithMode(query, modeCode);

            return ApiResponse.success(responseData.get("mode") + "模式回復(fù)生成成功", responseData);

        } catch (Exception e) {
            log.error("處理用戶查詢時發(fā)生錯誤: {}", e.getMessage(), e);
            return ApiResponse.error("系統(tǒng)繁忙,請稍后重試");
        }
    }

    /**
     * 基礎(chǔ)聊天接口(無模式參數(shù))
     */
    @GetMapping("/basic/chat")
    public ApiResponse<String> basicChat(@RequestParam("query") String query) {
        try {
            if (query == null || query.trim().isEmpty()) {
                return ApiResponse.error("查詢內(nèi)容不能為空");
            }

            String response = aiChatService.processBasicChat(query);
            return ApiResponse.success("回復(fù)生成成功", response);

        } catch (Exception e) {
            log.error("處理基礎(chǔ)聊天時發(fā)生錯誤: {}", e.getMessage(), e);
            return ApiResponse.error("系統(tǒng)繁忙,請稍后重試");
        }
    }

    /**
     * 獲取可用工作模式
     */
    @GetMapping("/modes")
    public ApiResponse<Map<String, Object>> getAvailableModes() {
        Map<String, Object> modesInfo = new HashMap<>();
        Map<String, String> modes = aiChatService.getAvailableModes();

        modesInfo.put("modes", modes);
        modesInfo.put("total", modes.size());
        modesInfo.put("defaultMode", "explain");

        return ApiResponse.success("可用工作模式列表", modesInfo);
    }

    /**
     * 健康檢查
     */
    @GetMapping("/health")
    public ApiResponse<String> healthCheck() {
        return ApiResponse.success("智能助手服務(wù)運行正常");
    }

    /**
     * 獲取使用統(tǒng)計
     */
    @GetMapping("/stats")
    public ApiResponse<Map<String, Object>> getUsageStats() {
        Map<String, Object> stats = new HashMap<>();
        stats.put("usageStatistics", aiChatService.getUsageStatistics());
        stats.put("timestamp", java.time.LocalDateTime.now());

        return ApiResponse.success("使用統(tǒng)計信息", stats);
    }

    /**
     * 清空統(tǒng)計
     */
    @PostMapping("/stats/reset")
    public ApiResponse<String> resetStats() {
        aiChatService.clearStatistics();
        return ApiResponse.success("統(tǒng)計信息已清空");
    }
}

4.2 創(chuàng)建服務(wù)層封裝業(yè)務(wù)邏輯

源碼詳見:io.binghe.framework.ai.service.AIChatService。

@Slf4j
@Service
publicclass AIChatService {

    privatefinal ChatClient chatClient;
    privatefinal Map<String, Integer> usageStats = new ConcurrentHashMap<>();

    // 工作模式定義
    publicenum WorkMode {
        EXPLAIN("explain", "通俗解釋", """
            請用通俗易懂的語言解釋以下內(nèi)容,避免使用專業(yè)術(shù)語。
            如果必須使用專業(yè)術(shù)語,請用簡單的語言進(jìn)行說明。
            目標(biāo)受眾是非專業(yè)人士,請確保他們能夠完全理解。
            """),

        SUMMARIZE("summarize", "要點總結(jié)", """
            請總結(jié)以下內(nèi)容的關(guān)鍵要點,要求:
            1. 用條目式列出主要觀點
            2. 每個要點要簡潔明了
            3. 突出最重要的信息
            4. 保持邏輯清晰
            """),

        RISK_ANALYSIS("risk", "風(fēng)險分析", """
            請從專業(yè)角度分析以下內(nèi)容可能存在的風(fēng)險,包括:
            1. 主要風(fēng)險點識別
            2. 風(fēng)險發(fā)生概率評估
            3. 風(fēng)險影響程度分析
            4. 風(fēng)險防范建議
            請用嚴(yán)謹(jǐn)?shù)膽B(tài)度進(jìn)行分析。
            """),

        LEGAL_REVIEW("legal", "法律審查", """
            請從法律專業(yè)角度審查以下內(nèi)容:
            1. 法律合規(guī)性分析
            2. 潛在法律風(fēng)險提示
            3. 條款明確性評估
            4. 改進(jìn)建議
            注意:本分析僅供參考,不構(gòu)成正式法律意見。
            """),

        COMPARE("compare", "對比分析", """
            請對以下內(nèi)容進(jìn)行對比分析:
            1. 明確比較的維度
            2. 各自的優(yōu)缺點
            3. 適用場景說明
            4. 選擇建議
            保持客觀公正的態(tài)度。
            """);

        privatefinal String code;
        privatefinal String name;
        privatefinal String instruction;

        WorkMode(String code, String name, String instruction) {
            this.code = code;
            this.name = name;
            this.instruction = instruction;
        }

        public static WorkMode fromCode(String code) {
            for (WorkMode mode : values()) {
                if (mode.code.equals(code)) {
                    return mode;
                }
            }
            return EXPLAIN; // 默認(rèn)模式
        }

        public String getCode() { return code; }
        public String getName() { return name; }
        public String getInstruction() { return instruction; }
    }

    public AIChatService(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
        log.info("AI聊天服務(wù)初始化完成");
    }

    /**
     * 處理帶模式的聊天請求
     */
    public Map<String, Object> processChatWithMode(String userQuery, String modeCode) {
        // 獲取工作模式
        WorkMode workMode = WorkMode.fromCode(modeCode);

        // 構(gòu)建最終提示詞
        String finalPrompt = workMode.getInstruction() + "\n\n用戶問題:\n" + userQuery;

        // 調(diào)用AI服務(wù)
        String response = this.chatClient
                .prompt()
                .user(finalPrompt)
                .call()
                .content();

        // 記錄使用統(tǒng)計
        usageStats.merge(modeCode, 1, Integer::sum);

        // 構(gòu)建響應(yīng)數(shù)據(jù)
        Map<String, Object> responseData = new ConcurrentHashMap<>();
        responseData.put("answer", response);
        responseData.put("mode", workMode.getName());
        responseData.put("modeCode", workMode.getCode());
        responseData.put("queryLength", userQuery.length());
        responseData.put("responseLength", response.length());

        log.info("{}模式回復(fù)生成成功,字符數(shù): {}", workMode.getName(), response.length());
        return responseData;
    }

    /**
     * 處理基礎(chǔ)聊天請求(無模式)
     */
    public String processBasicChat(String userQuery) {
        String response = this.chatClient
                .prompt()
                .user(userQuery)
                .call()
                .content();

        usageStats.merge("basic", 1, Integer::sum);
        return response;
    }

    /**
     * 獲取使用統(tǒng)計
     */
    public Map<String, Integer> getUsageStatistics() {
        returnnew ConcurrentHashMap<>(usageStats);
    }

    /**
     * 清空統(tǒng)計
     */
    public void clearStatistics() {
        usageStats.clear();
        log.info("使用統(tǒng)計已清空");
    }

    /**
     * 獲取所有可用模式
     */
    public Map<String, String> getAvailableModes() {
        Map<String, String> modes = new ConcurrentHashMap<>();
        for (WorkMode mode : WorkMode.values()) {
            modes.put(mode.getCode(), mode.getName());
        }
        return modes;
    }
}

4.3 添加配置類

源碼詳見:io.binghe.framework.ai.config.WebConfig。

@Configuration
publicclass WebConfig implements WebMvcConfigurer {
    
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .maxAge(3600);
    }
    
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        returnnew WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("*");
            }
        };
    }
}

五、測試與驗證

5.1 創(chuàng)建測試用例

源碼詳見:io.binghe.framework.ai.test.IntelligentAssistantControllerTest。

@SpringBootTest
@AutoConfigureMockMvc
class IntelligentAssistantControllerTest {
    
    @Autowired
    private MockMvc mockMvc;
    
    @Test
    void testHealthCheck() throws Exception {
        mockMvc.perform(get("/api/v1/assistant/health"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").value(true))
                .andExpect(jsonPath("$.message").exists());
    }
    
    @Test
    void testGetAvailableModes() throws Exception {
        mockMvc.perform(get("/api/v1/assistant/modes"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").value(true))
                .andExpect(jsonPath("$.data.modes").exists());
    }
}

5.2 完整的API測試腳本

創(chuàng)建 test-api.sh 測試腳本:

源碼詳見:bin/test-api.sh。

#!/bin/bash

BASE_URL="http://localhost:18080/api/v1/assistant"

echo "=== 智能助手API測試 ==="

# 測試健康檢查
echo "1. 測試健康檢查..."
curl -s "${BASE_URL}/health" | jq .

# 測試獲取可用模式
echo -e "\n2. 測試獲取可用模式..."
curl -s "${BASE_URL}/modes" | jq .

# 測試不同模式
echo -e "\n3. 測試通俗解釋模式..."
curl -s "${BASE_URL}/chat?query=請解釋抵押和質(zhì)押的區(qū)別&mode=explain" | jq .

echo -e "\n4. 測試要點總結(jié)模式..."
curl -s "${BASE_URL}/chat?query=總結(jié)擔(dān)保合同的主要注意事項&mode=summarize" | jq .

echo -e "\n5. 測試風(fēng)險分析模式..."
curl -s "${BASE_URL}/chat?query=分析小微企業(yè)擔(dān)保貸款的風(fēng)險&mode=risk" | jq .

echo -e "\n測試完成!"

六、部署與運行

6.1 創(chuàng)建啟動腳本

startup.sh:

源碼詳見:bin/startup.sh。

#!/bin/bash

# 設(shè)置環(huán)境變量
export DASHSCOPE_API_KEY="your-actual-api-key"
export JAVA_OPTS="-Xms512m -Xmx1024m"

echo "啟動AI智能助手服務(wù)..."
java $JAVA_OPTS -jar ai-agent-demo-1.0.0.jar

echo "服務(wù)已啟動,訪問地址: http://localhost:18080/api/v1/assistant/health"

5.2 創(chuàng)建Docker部署文件

Dockerfile:

源碼詳見:docker/Dockerfile。

FROM openjdk:17-jdk-slim

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制JAR文件
COPY target/ai-agent-demo-1.0.0.jar app.jar

# 創(chuàng)建非root用戶
RUN groupadd -r spring && useradd -r -g spring spring
USER spring

# 暴露端口
EXPOSE18080

# 啟動應(yīng)用
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

docker-compose.yml:

源碼詳見:docker/docker-compose.yml。

version: '3.8'

services:
ai-assistant:
    build:.
    ports:
      -"18080:18080"
    environment:
      -DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}
    restart:unless-stopped
    healthcheck:
      test:["CMD","curl","-f","http://localhost:18080/api/v1/assistant/health"]
      interval:30s
      timeout:10s
      retries:3

七、項目總結(jié)

截止到目前,我們成功構(gòu)建了一個功能完善的智能對話助手系統(tǒng),具備以下特點:

7.1 核心功能

  • 多模式對話:支持5種不同的工作模式
  • 專業(yè)領(lǐng)域知識:專注于金融擔(dān)保業(yè)務(wù)
  • 統(tǒng)一接口規(guī)范:標(biāo)準(zhǔn)的RESTful API設(shè)計
  • 完善的錯誤處理:全局異常處理機制
  • 使用統(tǒng)計:基礎(chǔ)的使用情況統(tǒng)計功能

7.2 技術(shù)亮點

  • 采用SpringAI Alibaba框架,簡化大模型集成
  • 模塊化設(shè)計,易于擴(kuò)展和維護(hù)
  • 完整的配置管理和環(huán)境隔離
  • 容器化部署支持
  • 全面的測試覆蓋

7.3 擴(kuò)展建議

項目后續(xù)可以進(jìn)一步擴(kuò)展:

  1. 對話歷史管理:添加用戶會話歷史記錄
  2. 流式響應(yīng):支持SSE流式輸出
  3. 權(quán)限控制:添加API密鑰認(rèn)證
  4. 性能監(jiān)控:集成監(jiān)控和告警系統(tǒng)
  5. 多模型支持:支持切換不同的大模型

這個項目提供一個大模型應(yīng)用開發(fā)基礎(chǔ),大家可以基于此框架快速開發(fā)各種行業(yè)專用的智能助手應(yīng)用。

責(zé)任編輯:武曉燕 來源: 冰河技術(shù)
相關(guān)推薦

2025-11-14 03:00:00

2022-02-06 20:55:39

jsEsbuild項目

2023-11-13 08:11:30

Golang測試驅(qū)動開發(fā)

2023-05-14 23:38:43

Glarity用戶視頻

2020-02-18 20:28:23

AI人工智能

2025-11-10 07:47:53

2012-04-12 09:53:02

2025-11-06 01:44:00

2021-01-29 09:07:39

數(shù)據(jù)保護(hù)信息安全數(shù)據(jù)隱私

2019-05-29 10:55:01

開源Linux發(fā)行版

2022-11-30 10:59:20

2014-10-11 09:15:36

2009-04-22 15:16:30

2023-10-21 12:42:19

模型訓(xùn)練

2023-08-28 06:52:29

2014-12-01 12:57:46

亞馬遜天貓海淘

2017-08-31 10:32:35

交付技術(shù)

2021-12-29 18:18:59

開源MedusaShopify

2012-06-25 10:20:22

敏捷開發(fā)

2025-10-20 07:49:26

穿透雪崩Redis
點贊
收藏

51CTO技術(shù)棧公眾號

久久综合亚洲精品| 啪一啪鲁一鲁2019在线视频| 无套内谢丰满少妇中文字幕| 成人av影院在线观看| 91日韩一区二区三区| 国产精品嫩草影院一区二区| 永久免费看片视频教学| 波多野结衣欧美| 在线观看成人小视频| 成人手机在线播放| 日色在线视频| 国产一区二区三区日韩| 97成人超碰免| 天堂网avav| 国产一区二区三区天码| 欧美一级免费大片| 中文字幕在线观看第三页| 黄网站在线免费| 久久综合国产精品| 亚洲一区二区三区成人在线视频精品| 中文字幕亚洲精品在线| 91欧美大片| 日韩精品在线视频| 人妻精品久久久久中文字幕69| 中文av在线全新| 一区二区在线看| 亚洲精品一区二区毛豆| 少妇人妻偷人精品一区二区| 国内精品久久久久影院一蜜桃| 2019中文字幕在线观看| 久久亚洲成人av| 国产高清欧美| 日韩在线视频二区| 男人天堂av电影| 日韩电影不卡一区| 精品久久久久久久久久久久包黑料 | 秋霞网一区二区| 精品亚洲国内自在自线福利| 国产99久久精品一区二区永久免费| 久热精品在线观看| 66视频精品| 色吧影院999| 超薄肉色丝袜一二三| 偷拍亚洲色图| 日韩电影中文 亚洲精品乱码| 四虎国产精品免费| 视频一区日韩| 日韩三级视频在线看| 超碰91在线播放| 韩国三级成人在线| 91精品国产色综合久久ai换脸| 亚欧美在线观看| a屁视频一区二区三区四区| 日本精品一级二级| 美女黄色片视频| 欧美在线va视频| 欧美中文字幕一区| 中文av一区二区三区| 久久人体av| 欧美一区二区高清| 天堂va欧美va亚洲va老司机| jizz18欧美18| 日韩高清免费在线| 久久精品无码一区| 日本欧美肥老太交大片| 色先锋资源久久综合5566| 成年人看的免费视频| 91精品一区国产高清在线gif| 久久精品国产96久久久香蕉| 麻豆精品一区二区三区视频| 欧美成人日本| 97视频免费看| www.久久久久久久| 免费成人在线视频观看| 国产日韩中文在线| 性一交一乱一乱一视频| a亚洲天堂av| 日韩国产高清一区| 黄网址在线观看| 婷婷综合久久一区二区三区| 日本三区在线观看| 国产精品久久久久久久久久久久久久久| 欧美日韩国产a| xxxxwww一片| 免费精品国产| 久久精品电影一区二区| 国产精品6666| 奇米888四色在线精品| 亚洲自拍偷拍区| 日本精品专区| 亚洲色图在线看| 一区二区传媒有限公司| 久久久成人av毛片免费观看| 欧美一级艳片视频免费观看| jizz日本免费| 色综合天天爱| 91av在线看| 亚洲一区在线观| 成人91在线观看| 亚洲欧美日韩另类精品一区二区三区| 日日夜夜天天综合入口| 91国在线观看| 香蕉视频1024| 久久精品不卡| 91av在线网站| 国产男女裸体做爰爽爽| 久久青草国产手机看片福利盒子| 亚洲成年人专区| xx欧美xxx| 欧美成人vr18sexvr| 国产亚洲精品熟女国产成人| 国语对白精品一区二区| 国产精品主播视频| 午夜国产在线观看| 一区二区激情视频| 一区二区三区欧美精品| 伊人久久大香线蕉| 久久久久久久久久久成人| 夜夜躁狠狠躁日日躁av| 久久久久久久久久久久久夜| 精品国产一区二区三区无码| 日韩欧美三区| 亚洲视屏在线播放| 久草视频在线观| 成人高清av在线| 麻豆一区二区三区在线观看| 成人看片网页| 亚洲天堂色网站| 91视频免费网址| 成人夜色视频网站在线观看| 黄色网址在线免费看| 成人a在线观看高清电影| 亚洲精品一区二区在线| 久草国产精品视频| 成人网页在线观看| 日韩一级特黄毛片| 日韩成人视屏| 免费99精品国产自在在线| 中文字幕视频免费观看| 国产欧美一区视频| 免费观看成人在线视频| 亚洲小说图片| 91av视频在线观看| 免费在线超碰| 一本一道久久a久久精品| 国产网站无遮挡| 宅男噜噜噜66国产日韩在线观看| 国产精品国产精品国产专区不卡| 亚洲欧美成人影院| 精品久久久久av影院| 久久久久久久9999| 成人免费视频国产在线观看| 国产高清www| 久久男人av| 欧美制服第一页| 免费a在线观看| 在线视频你懂得一区| a级片在线观看| 日本不卡视频在线| 色中文字幕在线观看| 亚洲图片小说区| 美女精品久久久| 丰满人妻妇伦又伦精品国产| 亚洲一二三级电影| 中文字幕一区二区久久人妻网站| 久久国产精品99国产| 日韩精品在在线一区二区中文| 欧美性片在线观看| 久久影院模特热| 亚洲av无码片一区二区三区| 精品久久久在线观看| 欧美 日韩 成人| 国产一区日韩二区欧美三区| 成年人深夜视频| 欧美aaaaa级| 国产精品成人aaaaa网站| 在线日本中文字幕| 91精品国产色综合久久不卡蜜臀 | 福利视频导航一区| 摸摸摸bbb毛毛毛片| 加勒比av一区二区| 国产精品久久久久9999爆乳| 亚洲精品小区久久久久久| 国产精品免费视频xxxx| 91小视频xxxx网站在线| 日韩高清有码在线| 美女黄页在线观看| 一区二区三区四区在线| 亚洲精品理论片| 精品一区二区国语对白| 男女超爽视频免费播放| 日韩一区二区三区免费播放| 成人91视频| www.成人在线视频| 久久久久中文字幕2018| 国产在线资源| 精品1区2区在线观看| 亚洲精品91天天久久人人| 一区二区三区四区中文字幕| 无码 人妻 在线 视频| 国产精品羞羞答答xxdd| 国产福利视频在线播放| 亚洲精品91| 日本不卡一区| 国产成人aa在线观看网站站| 国产精品专区h在线观看| 欧产日产国产精品视频| 久久躁狠狠躁夜夜爽| 国产中文在线视频| 亚洲第一av网站| 国产视频在线观看视频| 91福利视频网站| 欧美亚韩一区二区三区| 亚洲男人的天堂网| 国产精品www爽爽爽| 99re成人精品视频| jjzz黄色片| 国内国产精品久久| 在线观看av网页| 国产九九精品| 欧美又粗又长又爽做受| 天天色天天射综合网| 日日夜夜精品网站| 亚洲三级性片| 久久青青草原一区二区| 91精品丝袜国产高跟在线| 成人黄色片在线| www.久久.com| 国产精品成人在线| 人人草在线视频| 国内精品中文字幕| 久操av在线| 欧美高清视频在线| 69xxx在线| 久久精品亚洲一区| 欧美r级在线| 久久精品国产亚洲精品2020| 午夜在线免费观看视频| 亚洲欧美中文日韩在线v日本| 天天干天天做天天操| 精品999在线播放| 国产成人手机在线| 亚洲国产91精品在线观看| 亚洲AV无码乱码国产精品牛牛| 欧美一级黄色大片| 国产白浆在线观看| 日韩欧美在线1卡| 性中国xxx极品hd| 欧美大片日本大片免费观看| 国产福利视频导航| 精品噜噜噜噜久久久久久久久试看 | 国产97免费视频| 亚洲精品日日夜夜| 精品视频久久久久| 精品国产乱码久久久久久天美| 日韩少妇高潮抽搐| 色综合久久99| 在线观看中文字幕网站| 91.com在线观看| 国内精品国产成人国产三级| 精品久久久久av影院| 亚洲 美腿 欧美 偷拍| 亚洲欧美日韩久久久久久 | 久久悠悠精品综合网| 久久精品日产第一区二区三区| 亚洲人成精品久久久 | 欧美日韩1区| 国产原创中文在线观看| 亚洲欧美久久久| 污片在线免费看| 国产成a人亚洲精| 在线观看国产网站| 国产精品丝袜一区| 欧美黑人一级片| 天天综合色天天综合色h| 日日夜夜操视频| 337p亚洲精品色噜噜噜| 少妇喷水在线观看| 欲色天天网综合久久| bt在线麻豆视频| 51精品在线观看| 亚洲精品aa| 精品欧美一区二区三区久久久| 国产日产精品一区二区三区四区的观看方式| 亚洲欧美一区二区原创| 亚洲天堂男人| 色综合天天色综合| 从欧美一区二区三区| 一级片久久久久| 亚洲午夜在线观看视频在线| 无码视频在线观看| 精品国精品自拍自在线| 北岛玲日韩精品一区二区三区| 欧美成人性色生活仑片| 成人影院入口| 亚洲xxxx做受欧美| 精品精品久久| 9色porny| 九九视频精品免费| 国产肉体xxxx裸体784大胆| 亚洲视频一区二区在线| 久久精品视频5| 精品免费国产一区二区三区四区| yiren22亚洲综合伊人22| 久久久免费av| 白嫩亚洲一区二区三区| 欧美中文娱乐网| 在线欧美亚洲| 亚洲激情在线看| 久久久www成人免费毛片麻豆| 久操视频免费在线观看| 欧美日韩国产首页| 精品视频三区| 91精品国产91久久久久| 精品视频在线一区| 亚洲图片都市激情| 欧美亚洲三区| 污污内射在线观看一区二区少妇| 一区精品在线播放| 姑娘第5集在线观看免费好剧| 日韩精品电影网| 国产丝袜在线观看视频| 亚洲一区中文字幕在线观看| 色777狠狠狠综合伊人| 丁香啪啪综合成人亚洲| 99re视频精品| 欧美激情亚洲综合| 精品调教chinesegay| 爱搞国产精品| 国产精品永久入口久久久| 欧美黄色精品| 色哟哟免费视频| 亚洲欧美一区二区三区国产精品 | 欧美不卡一区二区三区四区| 麻豆传媒在线观看| 91精品久久久久久久久青青| 日韩精品一区二区三区免费观看| 免费av网址在线| 久久亚洲欧美国产精品乐播| 天天插天天操天天干| 日韩成人xxxx| gay欧美网站| 日本在线高清视频一区| 天堂成人免费av电影一区| 国产激情在线免费观看| 91成人免费在线| 97视频精彩视频在线观看| 国产精品久久久久久久久借妻| 欧美日韩精品在线一区| 中文字幕第88页| 中文字幕一区二区三区在线观看 | 久久久精品国产sm调教| 日韩精品一区二区三区三区免费| 中文字幕免费高清电视剧网站在线观看| 成人网在线免费看| 欧美精品不卡| 毛茸茸free性熟hd| 欧美日韩亚洲91| 日本天堂影院在线视频| 国产成人精品在线观看| 久久精品国产www456c0m| av在线网站免费观看| 亚洲观看高清完整版在线观看| 日韩电影在线观看完整版| 国产mv免费观看入口亚洲| 色综合咪咪久久网| 手机看片国产精品| 午夜精品在线视频一区| 巨骚激情综合| 成人信息集中地欧美| 影音先锋亚洲电影| 成人黄色免费网址| 欧美一卡2卡三卡4卡5免费| 福利在线免费视频| 四虎永久国产精品| 国产河南妇女毛片精品久久久| 日本中文字幕在线免费观看| 一区二区欧美日韩视频| 影音先锋欧美激情| 37pao成人国产永久免费视频| 国产精品美女久久久久久久久久久| a在线观看免费| 欧美综合一区第一页| 午夜国产一区二区| 性色av蜜臀av浪潮av老女人| 日本精品免费观看高清观看| 国产人成网在线播放va免费| 黑人巨大精品欧美一区二区小视频| 日韩中文字幕91| 青草草在线视频| 亚洲色图第一页| 亚洲乱码一区| 国产高潮免费视频| 一级特黄大欧美久久久| 懂色av中文在线| 福利视频一区二区三区| 日韩成人午夜精品| 国产精品99无码一区二区| 中文字幕日韩免费视频| 欧美日韩一区二区三区在线电影 |