我们都前面知道了简单的机器人有两种方式流式调用和同步调用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.chatClientchatClient;}/** * 同步调用获取完整回复 */GetMapping(/chat)publicStringchat(RequestParam(valuemessage,defaultValue你好)Stringmessage){returnchatClient.prompt().user(message).call().content();}/** * 流式调用实时返回生成内容适合前端打字机效果 */GetMapping(/chat/stream)publicFluxStringchatStream(RequestParam(valuemessage,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 HistoryChatClient 本身是无状态的。如果需要实现多轮对话记忆需要手动维护 Message 列表或使用 Spring AI 提供的 ChatMemory 机制。C. 异常处理与超时在生产环境中建议为 ChatClient 配置重试机制或超时控制可以通过底层的 RestTemplate 或 WebClient 配置来实现或者在 Service 层包裹调用逻辑。总结ChatClientConfig 是一个标准且简洁的 Spring AI 配置方式。它利用了 Spring 的依赖注入和 Spring AI 的构建者模式将模型细节与业务逻辑解耦。只需确保 Ollama 服务正常运行且依赖配置正确即可快速构建基于本地大模型的 AI 应用。