Files
weiyu/modules/ai/bin/SpringAI_RAG_Refactor.md
2025-06-08 13:55:56 +08:00

1.9 KiB
Raw Blame History

SpringAI RAG Controller 重构说明

问题描述

原有的 SpringAIRagController 使用了特定的 OllamaChatModel,当 Ollama 没有启用时会导致以下错误:

Parameter 2 of constructor in com.bytedesk.ai.springai.rag.SpringAIRagController required a bean of type 'org.springframework.ai.ollama.OllamaChatModel' that could not be found.

解决方案

将特定的 OllamaChatModel 替换为通用的 ChatModel 接口,使控制器能够适配任何 ChatModel 实现。

主要更改

1. SpringAIRagController.java

  • 字段更改: 将 private final OllamaChatModel bytedeskOllamaChatModel 改为 private final ChatModel chatModel
  • 导入更改: 移除 OllamaChatModel 导入,添加 ChatModel 导入
  • 注解更改: 添加 @ConditionalOnBean(ChatModel.class) 确保只有在有 ChatModel 可用时才创建控制器
  • 方法更新: 所有使用 bytedeskOllamaChatModel 的地方都替换为 chatModel

2. 新增配置类

ChatModelConfig.java

  • 提供备用的 ChatModel 配置
  • 只有在没有其他 ChatModel 实现时才创建 FallbackChatModel
  • bytedesk.features.java-ai=true 配置控制

FallbackChatModel.java

  • 简单的 ChatModel 实现作为备用
  • 当没有其他 ChatModel 可用时返回友好的错误消息
  • 提醒用户配置正确的 ChatModel 实现

兼容性

此更改向后兼容:

  • 当 Ollama 启用时,会优先使用 OllamaChatModel
  • 当其他 ChatModel 实现(如 OpenAI可用时会使用相应的实现
  • 当没有任何 ChatModel 可用时,会使用 FallbackChatModel 避免启动错误

配置要求

确保在 application.properties 中设置:

bytedesk.features.java-ai=true

测试建议

  1. 测试 Ollama 启用的情况
  2. 测试 Ollama 禁用但有其他 ChatModel 的情况
  3. 测试完全没有 ChatModel 的情况(应该使用 FallbackChatModel