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:
+23
-12
@@ -70,11 +70,22 @@ func main() {
|
|||||||
|
|
||||||
// 创建 ModelSelector (优先使用 models.json,回退到 .env)
|
// 创建 ModelSelector (优先使用 models.json,回退到 .env)
|
||||||
modelSelector := llm.NewModelSelector(configLoader, envFallback)
|
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() {
|
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 {
|
} 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)
|
memRetriever = memory.NewRetriever(memStore, nil)
|
||||||
|
|
||||||
// 记忆提取器使用LLM
|
// 记忆提取器使用 memory purpose 适配器
|
||||||
memExtractor = memory.NewExtractor(memStore, func(ctx context.Context, messages []model.LLMMessage) (*model.LLMResponse, error) {
|
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("记忆提取器已就绪")
|
log.Println("记忆提取器已就绪")
|
||||||
}
|
}
|
||||||
@@ -150,7 +161,7 @@ func main() {
|
|||||||
thinkerCfg,
|
thinkerCfg,
|
||||||
personaLoader,
|
personaLoader,
|
||||||
memRetriever,
|
memRetriever,
|
||||||
llmAdapter,
|
thinkerAdapter,
|
||||||
iotClient,
|
iotClient,
|
||||||
memStore,
|
memStore,
|
||||||
toolRegistry,
|
toolRegistry,
|
||||||
@@ -197,7 +208,7 @@ func main() {
|
|||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
|
|
||||||
// 初始化子会话管理器
|
// 初始化子会话管理器
|
||||||
subManager := subsession.NewManager(llmAdapter)
|
subManager := subsession.NewManager(chatAdapter)
|
||||||
|
|
||||||
// 注册子会话提供者
|
// 注册子会话提供者
|
||||||
subManager.Register(subsession.NewGeneralProvider(personaLoader))
|
subManager.Register(subsession.NewGeneralProvider(personaLoader))
|
||||||
@@ -210,11 +221,12 @@ func main() {
|
|||||||
subManager.Register(subsession.NewReviewProvider())
|
subManager.Register(subsession.NewReviewProvider())
|
||||||
log.Printf("子会话管理器已就绪: %d 个提供者 (%v)", len(subManager.ListProviders()), subManager.ListProviders())
|
log.Printf("子会话管理器已就绪: %d 个提供者 (%v)", len(subManager.ListProviders()), subManager.ListProviders())
|
||||||
|
|
||||||
// 构建新的 Orchestrator (v2.0)
|
// 构建新的 Orchestrator (v2.0) — 传入 purpose 专用适配器
|
||||||
orch := orchestrator.NewOrchestrator(
|
orch := orchestrator.NewOrchestrator(
|
||||||
personaLoader,
|
personaLoader,
|
||||||
ctxBuilder,
|
ctxBuilder,
|
||||||
llmAdapter,
|
chatAdapter,
|
||||||
|
intentAdapter,
|
||||||
subManager,
|
subManager,
|
||||||
memRetriever,
|
memRetriever,
|
||||||
memExtractor,
|
memExtractor,
|
||||||
@@ -224,7 +236,7 @@ func main() {
|
|||||||
|
|
||||||
// 注册对话API端点
|
// 注册对话API端点
|
||||||
mux.HandleFunc("/api/v1/chat", func(w http.ResponseWriter, r *http.Request) {
|
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端点
|
// 注册记忆API端点
|
||||||
@@ -262,7 +274,7 @@ func main() {
|
|||||||
|
|
||||||
mux.HandleFunc("/api/v1/health", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("/api/v1/health", func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
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服务
|
// 启动HTTP服务
|
||||||
@@ -391,7 +403,6 @@ func handleChat(
|
|||||||
r *http.Request,
|
r *http.Request,
|
||||||
orch *orchestrator.Orchestrator,
|
orch *orchestrator.Orchestrator,
|
||||||
ctxBuilder *ctxbuild.Builder,
|
ctxBuilder *ctxbuild.Builder,
|
||||||
_ *llm.Adapter,
|
|
||||||
_ *persona.Loader,
|
_ *persona.Loader,
|
||||||
_ *memory.Retriever,
|
_ *memory.Retriever,
|
||||||
_ *memory.Extractor,
|
_ *memory.Extractor,
|
||||||
|
|||||||
@@ -70,11 +70,13 @@ func (o *Orchestrator) getBus() bus.Bus {
|
|||||||
return o.eventBus
|
return o.eventBus
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewOrchestrator 创建编排器
|
// NewOrchestrator 创建编排器。
|
||||||
|
// chatAdapter 用于对话生成 (PurposeChat),intentAdapter 用于意图分析 (PurposeIntentAnalysis)。
|
||||||
func NewOrchestrator(
|
func NewOrchestrator(
|
||||||
personaLoader *persona.Loader,
|
personaLoader *persona.Loader,
|
||||||
contextBuilder *ctxbuild.Builder,
|
contextBuilder *ctxbuild.Builder,
|
||||||
llmAdapter *llm.Adapter,
|
chatAdapter *llm.Adapter,
|
||||||
|
intentAdapter *llm.Adapter,
|
||||||
subManager *subsession.Manager,
|
subManager *subsession.Manager,
|
||||||
memoryRetriever *memory.Retriever,
|
memoryRetriever *memory.Retriever,
|
||||||
memoryExtractor *memory.Extractor,
|
memoryExtractor *memory.Extractor,
|
||||||
@@ -82,10 +84,10 @@ func NewOrchestrator(
|
|||||||
return &Orchestrator{
|
return &Orchestrator{
|
||||||
personaLoader: personaLoader,
|
personaLoader: personaLoader,
|
||||||
contextBuilder: contextBuilder,
|
contextBuilder: contextBuilder,
|
||||||
llmAdapter: llmAdapter,
|
llmAdapter: chatAdapter,
|
||||||
subManager: subManager,
|
subManager: subManager,
|
||||||
intentAnalyzer: NewIntentAnalyzer(llmAdapter),
|
intentAnalyzer: NewIntentAnalyzer(intentAdapter),
|
||||||
synthesizer: NewSynthesizer(llmAdapter),
|
synthesizer: NewSynthesizer(chatAdapter),
|
||||||
memoryRetriever: memoryRetriever,
|
memoryRetriever: memoryRetriever,
|
||||||
memoryExtractor: memoryExtractor,
|
memoryExtractor: memoryExtractor,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user