POST /aigc/chat/completions
│
▼
ChatEndpoint → ChatServiceImpl
├─ handleAppInfo() ← 从 App 配置加载 knowledgeIds
└─ LcChatServiceImpl.streamingChat()
│
├─ ChatModelFactory → StreamingChatModel
│
└─ AiServiceBuilder.build()
│
├─ ChatMemory → Redis 支持的消息窗口
├─ SystemMessage → PromptProcessor 处理
├─ Tools → DynamicToolFactory(插件 + MCP)
│
└─ RAG(DefaultRetrievalAugmentor)
│
├─ QueryRouter(DefaultQueryRouter)
│ 将查询路由到所有注册的检索器
│
├─ KnowledgeRetrieverBuilder ─────────────────┐
│ per 知识库: │
│ ├─ EmbeddingModel + EmbeddingStore │
│ ├─ 查询已启用段落 → hashIds │
│ ├─ adjustMinScoreForHybrid() │
│ └─ EmbeddingStoreContentRetriever │
│ (dynamicFilter, maxResults, minScore)│
│ │
├─ GraphRetrieverBuilder ──────────────────────┤
│ per 知识库(需启用知识图谱 + Neo4j): │
│ └─ GraphContentRetriever ├→ 合并
│ (Cypher 查询, maxHops=3) │
│ │
├─ SqlRetrieverBuilder ────────────────────────┤
│ per 数据源: │
│ └─ Text2SQL 检索器 │
│ │
└─ ContentAggregator ─────────────────────────┘
├─ 无 Rerank → 默认按分数排序
└─ 有 Rerank → ReRankingContentAggregator
└─ ScoringModel(RerankModelFactory)