# Evidence ## Evidence-driven 结论 | 结论 | 证据来源 | 验证方式 | |---|---|---| | `ReactAgent.builder().model()` 接受 `ChatModel` 接口 | javap 反编译 Agent Framework | 静态验证 | | `ChatModel` 应通过 Spring Boot 自动注入 | DashScope/DeepSeek/OpenAI starter 均自动注册 Bean | 脚本验证:`ChatAndEmbeddingSmokeTest` | | `RagService` 可用 `ChatModel.stream()` 替代 `Generation` | Spring AI `stream(Prompt)` 返回 `Flux` | 代码审查 | | `EmbeddingModel` 支持批量调用 | `EmbeddingModel.embed(List)` 返回 `List` | 脚本验证:`FullPipelineSmokeTest#embeddingBatchWorks` | | `DeepSeekChatModel` 兼容 DeepSeek V4 Flash | Spring AI 1.1.7 原生 `spring-ai-starter-model-deepseek` | 脚本验证:`FullPipelineSmokeTest#chatDeepSeekWorks` | | BGE-M3 via SiliconFlow 返回 1024 维向量 | `OpenAiEmbeddingModel.embed()` → 1024-dim `float[]` | 脚本验证:`FullPipelineSmokeTest#embeddingBgeM3Works` | | `OpenAiChatModel` 不兼容 DeepSeek V4 | curl 200, Spring AI 400 `Model does not exist` | 实验对比:curl vs Java, 3 次重试均失败 | ## 技术决策依据 - **用原生 DeepSeek starter 而非 OpenAI 兼容模式**:Spring AI 1.1.0 `OpenAiChatModel` 的请求体含 DeepSeek V4 不识别的字段,原生 `DeepSeekChatModel` 直接适配 - **SiliconFlow Embedding 独立配置**:Chat 和 Embedding 不同厂商、不同 base-url,Spring AI auto-config 不支持单前缀拆两地址,需手动 `OpenAiApi` - **yml 驱动路由**:`model-routing.chat/embedding` 关键字 → Bean 名/类名匹配 → @Primary,比硬编码 @Qualifier 更灵活