精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

韩剧1988免费观看全集| 7777女厕盗摄久久久| 蜜桃传媒视频麻豆第一区免费观看 | 久久艹中文字幕| 亚洲欧美日韩激情| 全球成人免费直播| 日韩欧美一级二级三级久久久 | 日韩精品乱码免费| 久久这里有精品| 国产激情视频网站| 国产一区精品福利| 亚洲成人资源在线| 亚洲成人第一| 人妻无码中文字幕免费视频蜜桃| 欧美中文日韩| 欧美大成色www永久网站婷| 黄色性生活一级片| 国产剧情一区二区在线观看| 欧美日韩性视频在线| 国产高清免费在线| 日夜干在线视频| 精品一区二区三区久久| 韩国福利视频一区| 搜索黄色一级片| 天堂一区二区三区四区| 欧美一级免费观看| 天堂av在线网站| 国产色播av在线| 亚洲欧美日韩一区二区三区在线观看| 欧美日韩国产免费一区二区三区| 国产ts人妖调教重口男| 日本女优在线视频一区二区| 久久久中精品2020中文| 麻豆明星ai换脸视频| 精品国产精品| 亚洲美女精品成人在线视频| 国产亚洲精品成人a| 欧美一区=区三区| 91国产福利在线| 麻豆tv在线播放| 在线观看a级片| 国产精品久久久久久一区二区三区 | 国产亚洲一区精品| 久久久午夜精品福利内容| 久久久久久亚洲精品美女| 欧美亚洲国产一卡| 狠狠操精品视频| 不卡一二三区| 欧美日韩性视频在线| 国内精品视频一区二区三区| 午夜激情在线| 一区二区在线观看免费| 日本xxx免费| 国产黄网站在线观看| 国产精品久久久久久亚洲伦| 翔田千里亚洲一二三区| 国产69久久| 久久久综合精品| 精品欧美一区二区三区久久久| 亚洲精品国产精品乱码不卡| 国产成人精品三级麻豆| 91免费在线观看网站| a网站在线观看| 国产精品综合在线视频| 97av影视网在线观看| 亚洲AV无码精品国产| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美一区二区三区电影| 黑人性生活视频| 一区二区精彩视频| 亚洲成av人片在线观看香蕉| 在线观看免费视频黄| 欧美亚洲色图校园春色| 日韩hd视频在线观看| 90岁老太婆乱淫| 成人羞羞网站| 久久手机精品视频| 黄色一级片在线| 99av国产精品欲麻豆| 欧美最猛性xxxxx免费| 国产精品免费无遮挡无码永久视频| 日韩电影一区二区三区| 国产在线高清精品| 亚洲av永久纯肉无码精品动漫| 成人在线视频一区| 欧美精品欧美精品| 日本福利在线| 亚洲精品免费看| 极品美女扒开粉嫩小泬| 日韩av首页| 欧美一区二区三区免费在线看| 日韩女优在线视频| 国产传媒欧美日韩成人精品大片| 日韩性生活视频| 免费在线观看日韩| 爽好久久久欧美精品| 成人a级免费视频| 好男人www在线视频| 国产成人精品三级| 欧美在线播放一区二区| av在线免费网址| 红桃视频成人在线观看| 日本激情视频在线播放| 中文一区二区三区四区| 日韩精品在线观看一区二区| 色偷偷www8888| 国产欧美日韩一区二区三区在线| 国产精品露脸av在线| 亚洲精品中文字幕成人片| 久久九九全国免费| 国产欧美精品aaaaaa片| 在线成人视屏| 亚洲二区中文字幕| 中国特黄一级片| 亚洲毛片视频| 91性高湖久久久久久久久_久久99| 午夜在线观看视频18| 自拍偷拍亚洲激情| 成人精品视频一区二区| y111111国产精品久久久| 一区二区三区视频在线| 一级片中文字幕| 国产精品77777| 亚洲v国产v| 亚洲欧洲美洲av| 精品少妇一区二区三区视频免付费| 国产美女免费网站| 亚洲作爱视频| 成人久久18免费网站漫画| 最新97超碰在线| 欧美性猛交xxxx乱大交3| 国产大学生av| 国产精品国产一区| 国产精品久久久久久久9999| 日本激情一区二区| 一区二区三区精品视频在线| 国产精品区在线| 国产免费久久| 国产成人精品亚洲精品| 色视频在线观看免费| 亚洲午夜精品网| 精品国产午夜福利在线观看| 国产精品毛片一区二区在线看| 国产成人一区二区三区电影| 水莓100在线视频| 亚洲成人你懂的| 91人人澡人人爽| 欧美大片一区| 亚洲影院污污.| 18网站在线观看| 欧美一区二区在线不卡| 久久人妻无码aⅴ毛片a片app| 热久久久久久久| 天天综合色天天综合色hd| 在线一区av| 亚洲欧美日韩第一区| 狠狠人妻久久久久久综合| 91在线看国产| 成人一级片网站| 久久成人av| 国产精品吊钟奶在线| 成人在线免费电影| 欧美色大人视频| 激情高潮到大叫狂喷水| 九色综合狠狠综合久久| 一区二区三区偷拍| 成人豆花视频| 欧美疯狂性受xxxxx另类| 丰满人妻av一区二区三区| 亚洲一区二区三区在线播放| 95视频在线观看| 国产精品久久国产愉拍| 任我爽在线视频精品一| 欧洲午夜精品| 免费av在线一区| 日本免费不卡视频| av一区二区在线播放| 亚洲成av人片在线观看香蕉| 欧美日韩综合在线观看| 久久久精品一品道一区| 亚洲一区二区三区四区五区| 欧美黄色一区| 欧美大陆一区二区| 国产精品天堂蜜av在线播放| 欧美成人免费网| 午夜福利理论片在线观看| 91国产视频在线观看| 日本一二三区在线观看| 播五月开心婷婷综合| 青青草av网站| 欧美一区国产在线| 欧洲精品久久| 国产精品一区免费在线| 午夜精品一区二区三区av| 欧美日韩国产综合视频| 欧美日韩在线观看一区二区| 麻豆国产尤物av尤物在线观看| 91影院在线免费观看| 午夜剧场在线免费观看| 亚洲理伦在线| 少妇熟女一区二区| 亚洲成aⅴ人片久久青草影院| 国产精品最新在线观看| 97久久人人超碰caoprom| 中文字幕亚洲色图| 人妻精品无码一区二区| 欧美丝袜第三区| 在线看成人av| 动漫一区二区三区| 日日狠狠久久偷偷四色综合免费| 老司机午夜福利视频| 欧美日韩亚洲综合一区二区三区| 日本在线免费观看| 亚洲色图另类专区| 国产色视频一区二区三区qq号| 国产成都精品91一区二区三| 国产又猛又黄的视频| 99伊人成综合| 今天免费高清在线观看国语| 国产欧美日韩精品一区二区免费| 国产精品sss| 国产精品亚洲综合在线观看 | 日韩欧美在线综合网| 国产精品久久久久久久久夜色| 亚洲永久精品国产| 在线日韩国产网站| 亚洲国产精品传媒在线观看| 午夜一区二区三区免费| 国产成人综合亚洲网站| 中文字幕中文在线| 日本vs亚洲vs韩国一区三区二区| 日韩小视频在线播放| 欧美激情视频一区二区三区在线播放| 亚洲国产一区在线| 视频一区在线观看| 久久精品日产第一区二区三区| jazzjazz国产精品麻豆| 91精品国自产在线观看| 伊人久久一区| 国产玖玖精品视频| 99久久er| 国产精品久久久久一区二区| 欧美男男tv网站在线播放| 久久人人爽人人爽人人片av高请 | 91精品国产乱码久久久久久久久| 91亚洲天堂| 久久综合国产精品台湾中文娱乐网| 91欧美在线视频| 这里只有视频精品| 91精彩在线视频| 搡老女人一区二区三区视频tv| 国产乱理伦片a级在线观看| 亚洲免费高清视频| 男人av在线| 国产亚洲精品美女久久久久| 男人天堂资源在线| 在线丨暗呦小u女国产精品| а√天堂中文在线资源bt在线| 亚洲欧美激情精品一区二区| 国产在线超碰| 中文字幕精品久久| 麻豆免费在线视频| 欧美成年人视频网站欧美| 亚洲精品一线| 亚洲91精品在线| 欧美成人h版| 国产精品丝袜高跟| 香蕉成人在线| 97中文在线观看| 精品中国亚洲| 日韩videos| 欧美oldwomenvideos| 喜爱夜蒲2在线| 一本色道久久| 超碰在线97免费| 国产麻豆一精品一av一免费| caopor在线| 久久久.com| 91久久久久久久久久久久久久| 亚洲免费观看高清| 日韩美女视频网站| 欧美中文字幕亚洲一区二区va在线| 亚洲无码精品在线播放| 日韩免费看网站| 欧洲天堂在线观看| 精品久久久999| 爱啪啪综合导航| 国产精品丝袜久久久久久不卡| 国产精品久久久久久久久久久久久久久| 电影午夜精品一区二区三区| 蜜桃视频欧美| 一本二本三本亚洲码| 日韩午夜av在线| 国产原创精品在线| 大白屁股一区二区视频| 一道本在线观看| 亚洲黄色免费电影| 国产一区二区视频网站| 欧美一级黄色录像| 国产免费永久在线观看| 欧美激情精品久久久久| 婷婷六月国产精品久久不卡| 91视频最新| 成人影院在线| 人人干视频在线| 久久69国产一区二区蜜臀| 你懂的在线观看网站| 自拍偷拍国产精品| 区一区二在线观看| 欧美videos中文字幕| 1024视频在线| 欧美一区在线直播| 九九99久久精品在免费线bt| 欧美日韩一区在线视频| 欧美欧美全黄| 91亚洲精品久久久蜜桃借种| 91免费视频观看| 国产一级免费av| 欧美精品tushy高清| 韩日视频在线| 国内免费久久久久久久久久久| 久久精品黄色| 欧美日韩精品综合| 亚洲精品影视| 亚洲成人福利视频| 综合在线观看色| 中文字幕免费高清网站| 日韩av网站在线| 国产嫩草在线视频| 91黄色精品| 天天揉久久久久亚洲精品| 日本999视频| 91麻豆精品一区二区三区| 国产在线欧美在线| 欧美xingq一区二区| 国产写真视频在线观看| 国产精品一区二区三区成人| 一区二区三区四区在线看| 国产精品自拍片| 播五月开心婷婷综合| 国产在线欧美在线| 欧美tickling网站挠脚心| av毛片在线看| 91中文字精品一区二区| 欧美aa国产视频| 久久久久亚洲av片无码v| 国产精品麻豆网站| 在线观看免费高清视频| 日韩在线视频免费观看| 九九九精品视频| 伊人婷婷久久| 国产乱码精品一区二区三区av| 永久免费看片直接| 欧美一区日本一区韩国一区| av片在线观看| 电影午夜精品一区二区三区| 亚洲精品1区2区| 色呦呦一区二区| 一本久久精品一区二区| 国产日本在线视频| 国产欧美婷婷中文| 中文字幕一区二区av| 日本成人在线免费| 五月婷婷久久丁香| 女人天堂在线| 国产精品日韩在线| 亚洲国产老妈| 熟女人妻一区二区三区免费看| 亚洲国产视频一区| 亚洲三级黄色片| 国产精品久久久久av免费| 久久中文字幕av一区二区不卡| 182午夜视频| 亚洲综合激情网| 视频国产一区二区三区| 国产精品久久97| 中文字幕免费一区二区三区| 亚洲成年人av| 日本黄色一区二区| 麻豆影院在线观看| 国产日韩欧美综合精品| 石原莉奈在线亚洲二区| 天海翼在线视频| 亚洲精品在线电影| 经典三级一区二区| 蜜臀av.com| 久久中文字幕电影| 国产精品久久综合青草亚洲AV| 欧美极度另类性三渗透| 亚洲桃色综合影院| 91视频福利网| 欧美日韩精品二区| 免费看a在线观看| 精品欧美一区二区三区久久久| 另类欧美日韩国产在线| 国产亚洲成人精品| 中文字幕日韩高清| 成午夜精品一区二区三区软件| 成人一区二区三| 午夜精品免费在线观看|