feat: Phase 6.1 收尾 — 目的路由接入所有AI组件

- Orchestrator 现在接受独立的 chatAdapter 和 intentAdapter
- BackgroundThinker 使用 deep_thinking purpose 适配器
- MemoryExtractor 使用 memory_extraction purpose 适配器
- Synthesizer 使用 chat purpose 适配器
- .env 回退时所有适配器共享同一 provider,完全向后兼容

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 22:19:57 +08:00
parent b1e89c606e
commit 313f41633a
2 changed files with 30 additions and 17 deletions
+23 -12
View File
@@ -70,11 +70,22 @@ func main() {
// 创建 ModelSelector (优先使用 models.json,回退到 .env)
modelSelector := llm.NewModelSelector(configLoader, envFallback)
llmAdapter := modelSelector.DefaultAdapter()
// 为不同用途创建独立的适配器,支持目的路由
// 在 .env 回退模式下,所有适配器共享同一 provider
chatAdapter := modelSelector.DefaultAdapter()
provider, _ := modelSelector.Select(context.Background(), llm.PurposeIntentAnalysis)
intentAdapter := llm.NewAdapter(provider)
provider, _ = modelSelector.Select(context.Background(), llm.PurposeDeepThinking)
thinkerAdapter := llm.NewAdapter(provider)
provider, _ = modelSelector.Select(context.Background(), llm.PurposeMemoryExtraction)
memoryAdapter := llm.NewAdapter(provider)
if configLoader != nil && configLoader.HasConfig() {
log.Printf("LLM适配器已就绪: models.json 驱动")
log.Printf("LLM适配器已就绪: models.json 驱动 (chat=%s, intent=%s, think=%s, memory=%s)",
chatAdapter.ModelName(), intentAdapter.ModelName(), thinkerAdapter.ModelName(), memoryAdapter.ModelName())
} else {
log.Printf("LLM适配器已就绪: .env 驱动 (模型=%s)", llmAdapter.ModelName())
log.Printf("LLM适配器已就绪: .env 驱动 (模型=%s)", chatAdapter.ModelName())
}
// 初始化记忆系统
@@ -88,9 +99,9 @@ func main() {
memRetriever = memory.NewRetriever(memStore, nil)
// 记忆提取器使用LLM
// 记忆提取器使用 memory purpose 适配器
memExtractor = memory.NewExtractor(memStore, func(ctx context.Context, messages []model.LLMMessage) (*model.LLMResponse, error) {
return llmAdapter.Chat(ctx, messages)
return memoryAdapter.Chat(ctx, messages)
})
log.Println("记忆提取器已就绪")
}
@@ -150,7 +161,7 @@ func main() {
thinkerCfg,
personaLoader,
memRetriever,
llmAdapter,
thinkerAdapter,
iotClient,
memStore,
toolRegistry,
@@ -197,7 +208,7 @@ func main() {
mux := http.NewServeMux()
// 初始化子会话管理器
subManager := subsession.NewManager(llmAdapter)
subManager := subsession.NewManager(chatAdapter)
// 注册子会话提供者
subManager.Register(subsession.NewGeneralProvider(personaLoader))
@@ -210,11 +221,12 @@ func main() {
subManager.Register(subsession.NewReviewProvider())
log.Printf("子会话管理器已就绪: %d 个提供者 (%v)", len(subManager.ListProviders()), subManager.ListProviders())
// 构建新的 Orchestrator (v2.0)
// 构建新的 Orchestrator (v2.0) — 传入 purpose 专用适配器
orch := orchestrator.NewOrchestrator(
personaLoader,
ctxBuilder,
llmAdapter,
chatAdapter,
intentAdapter,
subManager,
memRetriever,
memExtractor,
@@ -224,7 +236,7 @@ func main() {
// 注册对话API端点
mux.HandleFunc("/api/v1/chat", func(w http.ResponseWriter, r *http.Request) {
handleChat(w, r, orch, ctxBuilder, llmAdapter, personaLoader, memRetriever, memExtractor, iotClient, thinker, toolRegistry)
handleChat(w, r, orch, ctxBuilder, personaLoader, memRetriever, memExtractor, iotClient, thinker, toolRegistry)
})
// 注册记忆API端点
@@ -262,7 +274,7 @@ func main() {
mux.HandleFunc("/api/v1/health", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"status":"ok","service":"ai-core","model":"` + llmAdapter.ModelName() + `"}`))
w.Write([]byte(`{"status":"ok","service":"ai-core","model":"` + chatAdapter.ModelName() + `"}`))
})
// 启动HTTP服务
@@ -391,7 +403,6 @@ func handleChat(
r *http.Request,
orch *orchestrator.Orchestrator,
ctxBuilder *ctxbuild.Builder,
_ *llm.Adapter,
_ *persona.Loader,
_ *memory.Retriever,
_ *memory.Extractor,
@@ -70,11 +70,13 @@ func (o *Orchestrator) getBus() bus.Bus {
return o.eventBus
}
// NewOrchestrator 创建编排器
// NewOrchestrator 创建编排器
// chatAdapter 用于对话生成 (PurposeChat)intentAdapter 用于意图分析 (PurposeIntentAnalysis)。
func NewOrchestrator(
personaLoader *persona.Loader,
contextBuilder *ctxbuild.Builder,
llmAdapter *llm.Adapter,
chatAdapter *llm.Adapter,
intentAdapter *llm.Adapter,
subManager *subsession.Manager,
memoryRetriever *memory.Retriever,
memoryExtractor *memory.Extractor,
@@ -82,10 +84,10 @@ func NewOrchestrator(
return &Orchestrator{
personaLoader: personaLoader,
contextBuilder: contextBuilder,
llmAdapter: llmAdapter,
llmAdapter: chatAdapter,
subManager: subManager,
intentAnalyzer: NewIntentAnalyzer(llmAdapter),
synthesizer: NewSynthesizer(llmAdapter),
intentAnalyzer: NewIntentAnalyzer(intentAdapter),
synthesizer: NewSynthesizer(chatAdapter),
memoryRetriever: memoryRetriever,
memoryExtractor: memoryExtractor,
}