掘金 人工智能 04月27日 12:43
Spring AI应用系列——基于DashScope平台的Chat应用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入分析了基于Spring AI框架的DashScope聊天客户端示例项目。该项目通过DashScopeChatClientController提供RESTful API接口,支持简单对话、流式响应和自定义Advisor功能。文章详细解读了核心类DashScopeChatClientController的初始化参数和接口功能,包括消息记忆、日志记录以及聊天模型选项的设置。同时,通过单元测试验证了各项功能的正确性,并对未来改进方向提出了建议,如性能优化、安全性增强和多语言支持。

🔑DashScopeChatClientController是核心控制器,通过ChatClient.builder初始化ChatClient实例,并设置MessageChatMemoryAdvisor(聊天记忆)、SimpleLoggerAdvisor(日志记录)和DashScopeChatOptions(模型选项)等参数,实现不同的功能。

💬项目提供三种接口:/simple/chat返回默认提示语的响应;/stream/chat返回流式响应,支持实时输出;/advisor/chat/{id}/{prompt}支持自定义Advisor,增强聊天功能,适用于多轮对话和个性化推荐等复杂场景。

✅单元测试验证了DashScopeChatClientController的功能,包括简单聊天、流式聊天和自定义Advisor聊天。测试结果表明服务能够正常返回内容、实时输出内容,并根据对话ID和提示语生成正确的响应。

1. 项目背景与架构

dashscope-chat-client 是一个基于 Spring AI 框架的聊天客户端示例项目,主要依赖于阿里巴巴云的 DashScope 聊天服务。项目的核心功能是通过 DashScopeChatClientController 提供 RESTful API 接口,支持简单的对话、流式响应以及自定义 Advisor 功能。

文件结构


2. 核心类分析:DashScopeChatClientController

2.1 类初始化与参数解析

DashScopeChatClientController 的构造函数中,通过 ChatClient.builder 初始化了一个 ChatClient 实例,并设置了多个参数:

this.dashScopeChatClient = ChatClient.builder(chatModel)    .defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))    .defaultAdvisors(new SimpleLoggerAdvisor())    .defaultOptions(DashScopeChatOptions.builder().withTopP(0.7).build())    .build();
参数详解:

    MessageChatMemoryAdvisor:

      作用: 实现聊天记忆功能,用于存储和检索对话历史。关键参数:
        CHAT_MEMORY_CONVERSATION_ID_KEY: 对话 ID,用于区分不同的会话。CHAT_MEMORY_RETRIEVE_SIZE_KEY: 检索大小,控制每次检索的历史消息数量。
      应用场景: 在多轮对话中,通过记忆功能确保上下文连贯性。例如,用户可以问“我叫什么名字”,系统能够根据历史记录回答。

    SimpleLoggerAdvisor:

      作用: 日志记录功能,用于调试和监控聊天过程。应用场景: 开发阶段或生产环境中,记录每次请求的输入输出,便于排查问题。

    DashScopeChatOptions:

      作用: 设置聊天模型的选项,如 topP 参数。关键参数:
        topP: 控制生成文本的多样性,值越小生成结果越集中。
      应用场景: 调整生成文本的质量和多样性,适用于不同场景的需求。

2.2 接口功能分析

2.2.1 简单调用接口 /simple/chat
@GetMapping("/simple/chat")public String simpleChat() {    return dashScopeChatClient.prompt(DEFAULT_PROMPT).call().content();}
2.2.2 流式调用接口 /stream/chat
@GetMapping("/stream/chat")public Flux<String> streamChat(HttpServletResponse response) {    response.setCharacterEncoding("UTF-8");    return dashScopeChatClient.prompt(DEFAULT_PROMPT).stream().content();}
2.2.3 自定义 Advisor 接口 /advisor/chat/{id}/{prompt}
@GetMapping("/advisor/chat/{id}/{prompt}")public Flux<String> advisorChat(HttpServletResponse response, @PathVariable String id, @PathVariable String prompt) {    response.setCharacterEncoding("UTF-8");    return this.dashScopeChatClient.prompt(prompt)            .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, id).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))            .stream().content();}

3. 单元测试分析

为了验证 DashScopeChatClientController 的功能,我们编写了以下单元测试:

@SpringBootTestpublic class DashScopeChatClientControllerTest {    @Autowired    private DashScopeChatClientController controller;    @Test    public void testSimpleChat() {        String response = controller.simpleChat();        assertNotNull(response);        assertTrue(response.contains("你好"));    }    @Test    public void testStreamChat() {        Flux<String> response = controller.streamChat(null);        StepVerifier.create(response)                .expectNextMatches(s -> s.contains("你好"))                .verifyComplete();    }    @Test    public void testAdvisorChat() {        Flux<String> response = controller.advisorChat("123", "你好,我叫牧生");        StepVerifier.create(response)                .expectNextMatches(s -> s.contains("牧生"))                .verifyComplete();    }}
测试结果分析:

    testSimpleChat:

      验证了默认提示语的响应是否正确。结果表明服务能够正常返回内容。

    testStreamChat:

      验证了流式响应的功能。结果表明服务能够实时输出内容。

    testAdvisorChat:

      验证了自定义 Advisor 的功能。结果表明服务能够根据对话 ID 和提示语生成正确的响应。

4. 总结与展望

通过对ChatClient的深入分析,我们可以通过合理配置参数和自定义 Advisor,可以根据具体需求实现各种聊天功能。

未来改进方向包括:

    性能优化: 提高流式响应的吞吐量。安全性增强: 加密敏感信息,防止数据泄露。多语言支持: 扩展对更多语言的支持。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

DashScope Spring AI 聊天客户端
相关文章