DAY 4
时间(3h) ✅ 今天做了:继续学习AI超级智能题实战项目(part3) ⏰ 明天计划:继续学习AI超级智能题实战项目(part3) 📚 今日感悟:今天开始实战,因为spring ai版本的更迭,视频里面的代码只能提供思路支持,需要自己去看官方文档去书写,,所以说进度很慢。 1.InMemoryChatMemory 找不到 这一行: ChatMemory chatMemory = new InMemoryChatMemory(); 会直接报“找不到符号 InMemoryChatMemory”。 原因是现在我在spring ai里找到的是: InMemoryChatMemoryRepository MessageWindowChatMemory这两个用法 没有这句直接 new InMemoryChatMemory() 的用法。 也就是说: 在要写成这样: ChatMemory chatMemory = MessageWindowChatMemory.builder() .chatMemoryRepository(new InMemoryChatMemoryRepository()) .maxMessages(10) .build(); 2.ChatClient = ... 左值不合法 / 不是字段赋值 类里声明的是: private final ChatClient chatClient; 但构造器里写成了: ChatClient = ChatClient.builder(...) 左边这个 ChatClient 是类名,不是字段名。 真正应该赋值的是字段 chatClient。 正确写法: this.chatClient = ChatClient.builder(...) 为什么这会引发很多报错: 这一行本身就不合法 因为真正的 chatClient 没被赋值 而它又是 final 所以编译器还会继续报“final 字段 chatClient 未初始化” 所以一处写错,后面会连带出第二个错。
3.final 字段 chatClient 未初始化 这一行: new MessageChatMemoryAdvisor(chatMemory) 在当前 Spring AI 版本里,MessageChatMemoryAdvisor 不能直接 new 的。 MessageChatMemoryAdvisor.builder(chatMemory)不是公开构造器。 所以这句会报错:构造器不可访问 MessageChatMemoryAdvisor(...) 是 private 正确写法应当是: MessageChatMemoryAdvisor.builder(chatMemory) .conversationId("default") .build() 4.MessageChatMemoryAdvisor(chatMemory) 构造器不可访问 现在这个构造器的目标是初始化字段: private final ChatClient chatClient; 所以必须保证构造器结束前,这个字段已经被明确赋值。 如果写成局部变量,比如: ChatClient chatClient = ChatClient.builder(...) 那也不对,因为这只是新建了一个局部变量,类里的字段还是没赋值。 this.chatClient = ... 不是同名局部变量,不是类名。
