【SpringAI 12】对话机器人进阶
2026/7/15 4:11:50 网站建设 项目流程

我们都前面知道了,简单的机器人有两种方式:流式调用和同步调用

importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importreactor.core.publisher.Flux;@RestControllerpublicclassChatController{privatefinalChatClientchatClient;// 注入配置好的 ChatClientpublicChatController(ChatClientchatClient){this.chatClient=chatClient;}/** * 同步调用:获取完整回复 */@GetMapping("/chat")publicStringchat(@RequestParam(value="message",defaultValue="你好!")Stringmessage){returnchatClient.prompt().user(message).call().content();}/** * 流式调用:实时返回生成内容(适合前端打字机效果) */@GetMapping("/chat/stream")publicFlux<String>chatStream(@RequestParam(value="message",defaultValue="你好!")Stringmessage){returnchatClient.prompt().user(message).stream().content();}}

我们这里讲一点就是上一篇.defaultSystem(“…”)‌: 设置全局默认的系统提示词。这意味着每次使用该 ChatClient 发起对话时,都会隐含地带上这条指令,让模型扮演“可爱的助手毛毛虫”。

packagecom.example.chatai.config;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.ollama.OllamaChatModel;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassChatClientConfig{@BeanpublicChatClientchatClient(OllamaChatModelmodel){returnChatClient.builder(model).defaultSystem("你是可爱的助手,名字叫毛毛虫").build();}}

但是有个点要注意

A. 动态覆盖系统提示词

虽然配置中设置了默认 System Prompt,但在某些场景下可能需要临时修改。可以在调用时动态指定:

chatClient.prompt().system("你现在是一个专业的Java工程师")// 覆盖默认的“毛毛虫”设定.user("如何优化 Netty 的性能?").call().content();

B. 添加记忆功能(Message History)

ChatClient 本身是无状态的。如果需要实现多轮对话记忆,需要手动维护 Message 列表或使用 Spring AI 提供的 ChatMemory 机制。

C. 异常处理与超时

在生产环境中,建议为 ChatClient 配置重试机制或超时控制,可以通过底层的 RestTemplate 或 WebClient 配置来实现,或者在 Service 层包裹调用逻辑。

总结

ChatClientConfig 是一个标准且简洁的 Spring AI 配置方式。它利用了 Spring 的依赖注入和 Spring AI 的构建者模式,将模型细节与业务逻辑解耦。只需确保 Ollama 服务正常运行且依赖配置正确,即可快速构建基于本地大模型的 AI 应用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询