42 lines
2.0 KiB
Markdown
42 lines
2.0 KiB
Markdown
# ChatModel Abstraction Decisions
|
||
|
||
## Question Pool
|
||
|
||
| # | 维度 | 问题 | 模式 | 状态 |
|
||
|---|---|---|---|---|
|
||
| Q1 | 术语 | ChatModel 注入方式:Spring Boot 自动注入 vs 手动工厂创建 | evidence-driven | 已解决 |
|
||
| Q2 | 边界 | RagService 流式对话:Spring AI ChatModel.stream() 替代 DashScope Generation | evidence-driven | 已解决 |
|
||
| Q3 | 验收 | VECTOR_DIM 是否需要动态化 | user-interview | 已解决 |
|
||
| Q4 | 边界 | VectorEmbeddingService 批量向量化:EmbeddingModel 支持批量调用 | evidence-driven | 已解决 |
|
||
|
||
## Evidence-driven
|
||
|
||
| 结论 | 证据来源 | 是否已汇报用户 |
|
||
|---|---|---|
|
||
| ReactAgent.builder().model() 接受 ChatModel 接口 | javap 反编译 | 已汇报 |
|
||
| ChatModel 应通过 Spring Boot 自动注入 | DashScope starter 自动注册 ChatModel Bean | 已汇报 |
|
||
| RagService 可用 ChatModel.stream() 替代 Generation | Spring AI 接口有 stream(Prompt) 返回 Flux | 已汇报 |
|
||
| EmbeddingModel 支持批量调用 | EmbeddingModel.call(EmbeddingRequest) 接受多条文本 | 已汇报 |
|
||
|
||
## User-interview
|
||
|
||
| 问题原文 | 用户原话 | 确认状态 | OpenSpec 回写 |
|
||
|---|---|---|---|
|
||
| VECTOR_DIM 怎么处理? | "配置文件动态化" | 已确认 | 已回写 proposal |
|
||
|
||
## 关键取舍
|
||
|
||
- 决策:本次只解耦不替换实现
|
||
- 原因:先验证抽象层正确再换模型
|
||
- 影响:代码改动不改变运行行为
|
||
- 风险接受:用户同意先只做解耦
|
||
- 决策:VECTOR_DIM 从配置文件读取
|
||
- 原因:换模型时改 yml 即可
|
||
- 影响:MilvusConstants.VECTOR_DIM 改为从 MilvusProperties 读取
|
||
|
||
## 架构审计
|
||
|
||
- 风险1:RagService 流式适配 — DashScope Generation 和 Spring AI ChatModel.stream() 返回结构不同,需验证 thinking/content 分离逻辑
|
||
- 风险2:DashScopeConfig 通用性 — 硬编码 dashscope 配置键,换模型后需改为通用键
|
||
- 风险3:ChatModel Bean 冲突 — 多 starter 并存时需 @Primary 或条件注解
|
||
- 低风险/无风险:VectorEmbeddingService、MilvusClientFactory 直接替换无问题 |