feat(ai): 知识库 V2 集成 — 多知识源路由 + AI 分析自动注入

- KnowledgeV2Source: 实现 KnowledgeSource trait,自动搜索所有启用的知识库
- AnalysisService.knowledge_sources: 改 Option → Vec 支持多知识源
- 最佳匹配策略:遍历所有知识源取最高 confidence 的上下文注入 system prompt
- main.rs 共享 EmbeddingService + KnowledgeV2Service 实例

Phase 2 Task 12-15
This commit is contained in:
iven
2026-05-27 00:30:49 +08:00
parent 7d1b1f9c7c
commit 823d69a3c3
4 changed files with 217 additions and 38 deletions

View File

@@ -568,12 +568,26 @@ async fn main() -> anyhow::Result<()> {
}
}
let embedding_svc = std::sync::Arc::new(
erp_ai::service::embedding::EmbeddingService::from_settings(&db).await,
);
let knowledge_v2_svc = std::sync::Arc::new(
erp_ai::service::knowledge_v2::KnowledgeV2Service::new(db.clone()),
);
let analysis_svc =
erp_ai::service::analysis::AnalysisService::new(registry.clone(), db.clone())
.with_knowledge_source(std::sync::Arc::new(
erp_ai::knowledge::structured_source::StructuredKnowledgeSource::new(
db.clone(),
),
))
.with_knowledge_source(std::sync::Arc::new(
erp_ai::knowledge::v2_source::KnowledgeV2Source::new(
db.clone(),
knowledge_v2_svc.clone(),
embedding_svc.clone(),
),
));
let analysis = std::sync::Arc::new(analysis_svc);
let prompt = std::sync::Arc::new(erp_ai::service::prompt::PromptService::new(db.clone()));
@@ -594,13 +608,6 @@ async fn main() -> anyhow::Result<()> {
cache_ttl,
));
let embedding_svc = std::sync::Arc::new(
erp_ai::service::embedding::EmbeddingService::from_settings(&db).await,
);
let knowledge_v2_svc = std::sync::Arc::new(
erp_ai::service::knowledge_v2::KnowledgeV2Service::new(db.clone()),
);
erp_ai::AiState {
db: db.clone(),
event_bus: event_bus.clone(),